Re: [PATCH 1/4] SUNRPC: Clean up the AUTH cache code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2018-10-23 12:34:01, Trond Myklebust wrote:
> @@ -456,32 +495,24 @@ rpcauth_prune_expired(struct list_head *free, int nr_to_scan)
>  
>  		if (nr_to_scan-- == 0)
>  			break;
> +		if (atomic_read(&cred->cr_count) > 1) {
> +			rpcauth_lru_remove_locked(cred);
> +			continue;
> +		}
>  		/*
>  		 * Enforce a 60 second garbage collection moratorium
>  		 * Note that the cred_unused list must be time-ordered.
>  		 */
> -		if (time_in_range(cred->cr_expire, expired, jiffies) &&
> -		    test_bit(RPCAUTH_CRED_HASHED, &cred->cr_flags) != 0) {
> -			freed = SHRINK_STOP;
> -			break;
> -		}
> -
> -		list_del_init(&cred->cr_lru);
> -		number_cred_unused--;
> -		freed++;
> -		if (atomic_read(&cred->cr_count) != 0)
> +		if (!time_in_range(cred->cr_expire, expired, jiffies))
> +			continue;
> +		if (!rpcauth_unhash_cred(cred))
>  			continue;

With `!` flipping the `time_in_range(...)` condition in this past
change, looks like we are skipping the head of the LRU which should be
pruned, so actual expiry does not happen at all in case there are more
than about 100 old items in the LRU.

Reverting this, I saw the correct behavior taking place.


-- >8 --
Subject: [PATCH] sunrpc: fix expiry of auth creds

Due to an inverted condition, instead of pruning the head of the LRU,
the loop stopped short at the beginning.

Fixes: 95cd623250ad ('SUNRPC: Clean up the AUTH cache code')
Signed-off-by: Dan Aloni <dan.aloni@xxxxxxxxxxxx>
---
 net/sunrpc/auth.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c
index 682fcd24bf43..2324d1e58f21 100644
--- a/net/sunrpc/auth.c
+++ b/net/sunrpc/auth.c
@@ -445,7 +445,7 @@ rpcauth_prune_expired(struct list_head *free, int nr_to_scan)
 		 * Enforce a 60 second garbage collection moratorium
 		 * Note that the cred_unused list must be time-ordered.
 		 */
-		if (!time_in_range(cred->cr_expire, expired, jiffies))
+		if (time_in_range(cred->cr_expire, expired, jiffies))
 			continue;
 		if (!rpcauth_unhash_cred(cred))
 			continue;
-- 
2.23.0

-- 
Dan Aloni



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux