Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 908329f2 authored by NeilBrown's avatar NeilBrown Committed by J. Bruce Fields
Browse files

sunrpc/cache: simplify cache_fresh_locked and cache_fresh_unlocked.



The extra call to cache_revisit_request in cache_fresh_unlocked is not
needed, as should have been fairly clear at the time of
   commit 4013edea

If there are requests to be revisited, then we can be sure that
CACHE_PENDING is set, so the second call is sufficient.

So remove the first call.
Then remove the 'new' parameter,
then remove the return value for cache_fresh_locked which is only used
to provide the value for 'new'.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 9e4c6379
Loading
Loading
Loading
Loading
+10 −13
Original line number Original line Diff line number Diff line
@@ -105,18 +105,16 @@ EXPORT_SYMBOL_GPL(sunrpc_cache_lookup);


static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch);
static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch);


static int cache_fresh_locked(struct cache_head *head, time_t expiry)
static void cache_fresh_locked(struct cache_head *head, time_t expiry)
{
{
	head->expiry_time = expiry;
	head->expiry_time = expiry;
	head->last_refresh = get_seconds();
	head->last_refresh = get_seconds();
	return !test_and_set_bit(CACHE_VALID, &head->flags);
	set_bit(CACHE_VALID, &head->flags);
}
}


static void cache_fresh_unlocked(struct cache_head *head,
static void cache_fresh_unlocked(struct cache_head *head,
			struct cache_detail *detail, int new)
				 struct cache_detail *detail)
{
{
	if (new)
		cache_revisit_request(head);
	if (test_and_clear_bit(CACHE_PENDING, &head->flags)) {
	if (test_and_clear_bit(CACHE_PENDING, &head->flags)) {
		cache_revisit_request(head);
		cache_revisit_request(head);
		cache_dequeue(detail, head);
		cache_dequeue(detail, head);
@@ -132,7 +130,6 @@ struct cache_head *sunrpc_cache_update(struct cache_detail *detail,
	 */
	 */
	struct cache_head **head;
	struct cache_head **head;
	struct cache_head *tmp;
	struct cache_head *tmp;
	int is_new;


	if (!test_bit(CACHE_VALID, &old->flags)) {
	if (!test_bit(CACHE_VALID, &old->flags)) {
		write_lock(&detail->hash_lock);
		write_lock(&detail->hash_lock);
@@ -141,9 +138,9 @@ struct cache_head *sunrpc_cache_update(struct cache_detail *detail,
				set_bit(CACHE_NEGATIVE, &old->flags);
				set_bit(CACHE_NEGATIVE, &old->flags);
			else
			else
				detail->update(old, new);
				detail->update(old, new);
			is_new = cache_fresh_locked(old, new->expiry_time);
			cache_fresh_locked(old, new->expiry_time);
			write_unlock(&detail->hash_lock);
			write_unlock(&detail->hash_lock);
			cache_fresh_unlocked(old, detail, is_new);
			cache_fresh_unlocked(old, detail);
			return old;
			return old;
		}
		}
		write_unlock(&detail->hash_lock);
		write_unlock(&detail->hash_lock);
@@ -167,11 +164,11 @@ struct cache_head *sunrpc_cache_update(struct cache_detail *detail,
	*head = tmp;
	*head = tmp;
	detail->entries++;
	detail->entries++;
	cache_get(tmp);
	cache_get(tmp);
	is_new = cache_fresh_locked(tmp, new->expiry_time);
	cache_fresh_locked(tmp, new->expiry_time);
	cache_fresh_locked(old, 0);
	cache_fresh_locked(old, 0);
	write_unlock(&detail->hash_lock);
	write_unlock(&detail->hash_lock);
	cache_fresh_unlocked(tmp, detail, is_new);
	cache_fresh_unlocked(tmp, detail);
	cache_fresh_unlocked(old, detail, 0);
	cache_fresh_unlocked(old, detail);
	cache_put(old, detail);
	cache_put(old, detail);
	return tmp;
	return tmp;
}
}
@@ -240,8 +237,8 @@ int cache_check(struct cache_detail *detail,
				cache_revisit_request(h);
				cache_revisit_request(h);
				if (rv == -EAGAIN) {
				if (rv == -EAGAIN) {
					set_bit(CACHE_NEGATIVE, &h->flags);
					set_bit(CACHE_NEGATIVE, &h->flags);
					cache_fresh_unlocked(h, detail,
					cache_fresh_locked(h, get_seconds()+CACHE_NEW_EXPIRY);
					     cache_fresh_locked(h, get_seconds()+CACHE_NEW_EXPIRY));
					cache_fresh_unlocked(h, detail);
					rv = -ENOENT;
					rv = -ENOENT;
				}
				}
				break;
				break;