This patch series implements the memory shrinker for NFSv4 clients to react to system low memory condition. The first patch adds a counter to keep track of the number of courtesy clients in the system. The second patch implements the courtesy_client_reaper used to expiring the courtesy clients. By destroying the courtesy clients, all states associated with these clients are also released. v2: . fix kernel test robot errors in nfsd.h when CONFIG_NFSD_V4 not defined. v3: . add mod_delayed_work in nfsd_courtesy_client_scan to kick start the laundromat. v4: . replace the use of xchg() with vanilla '=' in patch 1. v5: . rename nfsd_courtesy_client_count to nfsd_courtesy_clients . add helper nfsd4_update_courtesy_client_count . move nfsd_register_client_shrinker into nfsd4_init_leases_net . move nfsd4_leases_net_shutdown from nfsd.h to nfs4state.c . do away with shrinker 'scan' callback, just return SHRINK_STOP . remove unused nfsd_client_shrinker_reapcount v6: . create courtesy_client_reaper and a separate delayed_work for it using the laundromat_wq. I tried merging nfs4_get_courtesy_client_reaplist and nfs4_get_client_reaplist but it make the code looks ugly and hard to read so I leave them separate for now. --- Dai Ngo (2): NFSD: keep track of the number of courtesy clients in the system NFSD: add shrinker to reap courtesy clients on low memory condition fs/nfsd/netns.h | 5 ++ fs/nfsd/nfs4state.c | 119 +++++++++++++++++++++++++++++++++++++++++++---- fs/nfsd/nfsctl.c | 6 ++- fs/nfsd/nfsd.h | 7 ++- 4 files changed, 124 insertions(+), 13 deletions(-)