@@ -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
@@ -4421,7 +4421,7 @@ nfsd4_state_shrinker_scan(struct shrinker *shrink, struct shrink_control *sc)
44214421 return SHRINK_STOP ;
44224422}
44234423
4424- int
4424+ void
44254425nfsd4_init_leases_net (struct nfsd_net * nn )
44264426{
44274427 struct sysinfo si ;
@@ -4443,16 +4443,6 @@ nfsd4_init_leases_net(struct nfsd_net *nn)
44434443 nn -> nfs4_max_clients = max_t (int , max_clients , NFS4_CLIENTS_PER_GB );
44444444
44454445 atomic_set (& nn -> nfsd_courtesy_clients , 0 );
4446- nn -> nfsd_client_shrinker .scan_objects = nfsd4_state_shrinker_scan ;
4447- nn -> nfsd_client_shrinker .count_objects = nfsd4_state_shrinker_count ;
4448- nn -> nfsd_client_shrinker .seeks = DEFAULT_SEEKS ;
4449- return register_shrinker (& nn -> nfsd_client_shrinker , "nfsd-client" );
4450- }
4451-
4452- void
4453- nfsd4_leases_net_shutdown (struct nfsd_net * nn )
4454- {
4455- unregister_shrinker (& nn -> nfsd_client_shrinker );
44564446}
44574447
44584448static void init_nfs4_replay (struct nfs4_replay * rp )
@@ -6235,8 +6225,7 @@ deleg_reaper(struct nfsd_net *nn)
62356225static void
62366226nfsd4_state_shrinker_worker (struct work_struct * work )
62376227{
6238- struct delayed_work * dwork = to_delayed_work (work );
6239- struct nfsd_net * nn = container_of (dwork , struct nfsd_net ,
6228+ struct nfsd_net * nn = container_of (work , struct nfsd_net ,
62406229 nfsd_shrinker_work );
62416230
62426231 courtesy_client_reaper (nn );
@@ -8066,11 +8055,20 @@ static int nfs4_state_create_net(struct net *net)
80668055 INIT_LIST_HEAD (& nn -> blocked_locks_lru );
80678056
80688057 INIT_DELAYED_WORK (& nn -> laundromat_work , laundromat_main );
8069- INIT_DELAYED_WORK (& nn -> nfsd_shrinker_work , nfsd4_state_shrinker_worker );
8058+ INIT_WORK (& nn -> nfsd_shrinker_work , nfsd4_state_shrinker_worker );
80708059 get_net (net );
80718060
8061+ nn -> nfsd_client_shrinker .scan_objects = nfsd4_state_shrinker_scan ;
8062+ nn -> nfsd_client_shrinker .count_objects = nfsd4_state_shrinker_count ;
8063+ nn -> nfsd_client_shrinker .seeks = DEFAULT_SEEKS ;
8064+
8065+ if (register_shrinker (& nn -> nfsd_client_shrinker , "nfsd-client" ))
8066+ goto err_shrinker ;
80728067 return 0 ;
80738068
8069+ err_shrinker :
8070+ put_net (net );
8071+ kfree (nn -> sessionid_hashtbl );
80748072err_sessionid :
80758073 kfree (nn -> unconf_id_hashtbl );
80768074err_unconf_id :
@@ -8163,6 +8161,8 @@ nfs4_state_shutdown_net(struct net *net)
81638161 struct list_head * pos , * next , reaplist ;
81648162 struct nfsd_net * nn = net_generic (net , nfsd_net_id );
81658163
8164+ 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