Skip to content

Commit 7c24fa2

Browse files
daimngochucklever
authored andcommitted
NFSD: replace delayed_work with work_struct for nfsd_client_shrinker
Since nfsd4_state_shrinker_count always calls mod_delayed_work with 0 delay, we can replace delayed_work with work_struct to save some space and overhead. Also add the call to cancel_work after unregister the shrinker in nfs4_state_shutdown_net. Signed-off-by: Dai Ngo <[email protected]> Reviewed-by: Jeff Layton <[email protected]> Signed-off-by: Chuck Lever <[email protected]>
1 parent f385f7d commit 7c24fa2

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

fs/nfsd/netns.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ struct nfsd_net {
195195

196196
atomic_t nfsd_courtesy_clients;
197197
struct shrinker nfsd_client_shrinker;
198-
struct delayed_work nfsd_shrinker_work;
198+
struct work_struct nfsd_shrinker_work;
199199
};
200200

201201
/* Simple check to find out if a given net was properly initialized */

fs/nfsd/nfs4state.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4411,7 +4411,7 @@ nfsd4_state_shrinker_count(struct shrinker *shrink, struct shrink_control *sc)
44114411
if (!count)
44124412
count = atomic_long_read(&num_delegations);
44134413
if (count)
4414-
mod_delayed_work(laundry_wq, &nn->nfsd_shrinker_work, 0);
4414+
queue_work(laundry_wq, &nn->nfsd_shrinker_work);
44154415
return (unsigned long)count;
44164416
}
44174417

@@ -6225,8 +6225,7 @@ deleg_reaper(struct nfsd_net *nn)
62256225
static void
62266226
nfsd4_state_shrinker_worker(struct work_struct *work)
62276227
{
6228-
struct delayed_work *dwork = to_delayed_work(work);
6229-
struct nfsd_net *nn = container_of(dwork, struct nfsd_net,
6228+
struct nfsd_net *nn = container_of(work, struct nfsd_net,
62306229
nfsd_shrinker_work);
62316230

62326231
courtesy_client_reaper(nn);
@@ -8056,7 +8055,7 @@ static int nfs4_state_create_net(struct net *net)
80568055
INIT_LIST_HEAD(&nn->blocked_locks_lru);
80578056

80588057
INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main);
8059-
INIT_DELAYED_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker);
8058+
INIT_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker);
80608059
get_net(net);
80618060

80628061
nn->nfsd_client_shrinker.scan_objects = nfsd4_state_shrinker_scan;
@@ -8163,6 +8162,7 @@ nfs4_state_shutdown_net(struct net *net)
81638162
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
81648163

81658164
unregister_shrinker(&nn->nfsd_client_shrinker);
8165+
cancel_work(&nn->nfsd_shrinker_work);
81668166
cancel_delayed_work_sync(&nn->laundromat_work);
81678167
locks_end_grace(&nn->nfsd4_manager);
81688168

0 commit comments

Comments
 (0)