Re: [PATCH 0/7] nfsd: filecache: change garbage collection lists

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

 



Hi Chuck,
 what are you current thoughts on merging this series?

 One of my thoughts is that I now realise that

Commit 0758a7212628 ("nfsd: drop the lock during filecache LRU scans")

in nfsd-next is bad.  If there are multiple nodes (and so multiple
sublits in the list_lru) and if there are more than a few dozen files in
the lru, then that patch results in the first sublist being completely
freed before anything is done to the next.
I think the best fix for backporting to -stable is to wrap a
for_each_node_state((nid) around the while loop and using
list_lru_count_node() and list_lru_walk_node().

I could send a SQUASH patch for that and rebase this series on it.

Thanks,
NeilBrown


On Mon, 27 Jan 2025, NeilBrown wrote:
> [
> davec added to cc incase I've said something incorrect about list_lru
> 
> Changes in this version:
>   - no _bh locking
>   - add name for a magic constant
>   - remove unnecessary race-handling code
>   - give a more meaningfule name for a lock for /proc/lock_stat
>   - minor cleanups suggested by Jeff
> 
> ]
> 
> The nfsd filecache currently uses  list_lru for tracking files recently
> used in NFSv3 requests which need to be "garbage collected" when they
> have becoming idle - unused for 2-4 seconds.
> 
> I do not believe list_lru is a good tool for this.  It does not allow
> the timeout which filecache requires so we have to add a timeout
> mechanism which holds the list_lru lock while the whole list is scanned
> looking for entries that haven't been recently accessed.  When the list
> is largish (even a few hundred) this can block new requests noticably
> which need the lock to remove a file to access it.
> 
> This patch removes the list_lru and instead uses 2 simple linked lists.
> When a file is accessed it is removed from whichever list it is on,
> then added to the tail of the first list.  Every 2 seconds the second
> list is moved to the "freeme" list and the first list is moved to the
> second list.  This avoids any need to walk a list to find old entries.
> 
> These lists are per-netns rather than global as the freeme list is
> per-netns as the actual freeing is done in nfsd threads which are
> per-netns.
> 
> Thanks,
> NeilBrown
> 
>  [PATCH 1/7] nfsd: filecache: remove race handling.
>  [PATCH 2/7] nfsd: filecache: use nfsd_file_dispose_list() in
>  [PATCH 3/7] nfsd: filecache: move globals nfsd_file_lru and
>  [PATCH 4/7] nfsd: filecache: change garbage collection list
>  [PATCH 5/7] nfsd: filecache: document the arbitrary limit on
>  [PATCH 6/7] nfsd: filecache: change garbage collection to a timer.
>  [PATCH 7/7] nfsd: filecache: give disposal lock a unique class name.
> 
> 
> 





[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