Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231155
b: refs/heads/master
c: 6bab93f
h: refs/heads/master
i:
  231153: 2bccc48
  231151: 10d3547
v: v3
  • Loading branch information
J. Bruce Fields committed Jan 4, 2011
1 parent 461289a commit fec760c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: da165dd60e136d0609e0a2c0c2a9b9a5372200d6
refs/heads/master: 6bab93f87ec703bf6650875881b11f9f27d7da56
25 changes: 18 additions & 7 deletions trunk/net/sunrpc/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,23 @@ static inline int cache_is_valid(struct cache_detail *detail, struct cache_head
}
}

static int try_to_negate_entry(struct cache_detail *detail, struct cache_head *h)
{
int rv;

write_lock(&detail->hash_lock);
rv = cache_is_valid(detail, h);
if (rv != -EAGAIN) {
write_unlock(&detail->hash_lock);
return rv;
}
set_bit(CACHE_NEGATIVE, &h->flags);
cache_fresh_locked(h, seconds_since_boot()+CACHE_NEW_EXPIRY);
write_unlock(&detail->hash_lock);
cache_fresh_unlocked(h, detail);
return -ENOENT;
}

/*
* This is the generic cache management routine for all
* the authentication caches.
Expand Down Expand Up @@ -251,14 +268,8 @@ int cache_check(struct cache_detail *detail,
case -EINVAL:
clear_bit(CACHE_PENDING, &h->flags);
cache_revisit_request(h);
if (rv == -EAGAIN) {
set_bit(CACHE_NEGATIVE, &h->flags);
cache_fresh_locked(h, seconds_since_boot()+CACHE_NEW_EXPIRY);
cache_fresh_unlocked(h, detail);
rv = -ENOENT;
}
rv = try_to_negate_entry(detail, h);
break;

case -EAGAIN:
clear_bit(CACHE_PENDING, &h->flags);
cache_revisit_request(h);
Expand Down

0 comments on commit fec760c

Please sign in to comment.