nfsd4: nfsd_shutdown_net needs state lock
A comment claims the caller should take it, but that's not being done. Note we don't want it around the cancel_delayed_work_sync since that may wait on work which holds the client lock. Reported-by: Benny Halevy <bhalevy@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
e1a90ebd8b
commit
e50a26dc78
@ -5124,7 +5124,6 @@ out_recovery:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* should be called with the state lock held */
|
|
||||||
void
|
void
|
||||||
nfs4_state_shutdown_net(struct net *net)
|
nfs4_state_shutdown_net(struct net *net)
|
||||||
{
|
{
|
||||||
@ -5135,6 +5134,7 @@ nfs4_state_shutdown_net(struct net *net)
|
|||||||
cancel_delayed_work_sync(&nn->laundromat_work);
|
cancel_delayed_work_sync(&nn->laundromat_work);
|
||||||
locks_end_grace(&nn->nfsd4_manager);
|
locks_end_grace(&nn->nfsd4_manager);
|
||||||
|
|
||||||
|
nfs4_lock_state();
|
||||||
INIT_LIST_HEAD(&reaplist);
|
INIT_LIST_HEAD(&reaplist);
|
||||||
spin_lock(&recall_lock);
|
spin_lock(&recall_lock);
|
||||||
list_for_each_safe(pos, next, &nn->del_recall_lru) {
|
list_for_each_safe(pos, next, &nn->del_recall_lru) {
|
||||||
@ -5149,6 +5149,7 @@ nfs4_state_shutdown_net(struct net *net)
|
|||||||
|
|
||||||
nfsd4_client_tracking_exit(net);
|
nfsd4_client_tracking_exit(net);
|
||||||
nfs4_state_destroy_net(net);
|
nfs4_state_destroy_net(net);
|
||||||
|
nfs4_unlock_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user