diff options
author | J. Bruce Fields <bfields@redhat.com> | 2013-10-30 10:33:09 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2013-10-30 10:35:59 -0400 |
commit | e50a26dc785f12a6df1f1ac16d62faf0342b72af (patch) | |
tree | 72b2520bd8e298cbd789522e370dea5d30a59180 /fs/nfsd | |
parent | e1a90ebd8b2349eb00ec22f0b8bf6ab8bbd06cc8 (diff) |
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>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4state.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 21eb6788cb33..e03e8efff53f 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -5124,7 +5124,6 @@ out_recovery: | |||
5124 | return ret; | 5124 | return ret; |
5125 | } | 5125 | } |
5126 | 5126 | ||
5127 | /* should be called with the state lock held */ | ||
5128 | void | 5127 | void |
5129 | nfs4_state_shutdown_net(struct net *net) | 5128 | nfs4_state_shutdown_net(struct net *net) |
5130 | { | 5129 | { |
@@ -5135,6 +5134,7 @@ nfs4_state_shutdown_net(struct net *net) | |||
5135 | cancel_delayed_work_sync(&nn->laundromat_work); | 5134 | cancel_delayed_work_sync(&nn->laundromat_work); |
5136 | locks_end_grace(&nn->nfsd4_manager); | 5135 | locks_end_grace(&nn->nfsd4_manager); |
5137 | 5136 | ||
5137 | nfs4_lock_state(); | ||
5138 | INIT_LIST_HEAD(&reaplist); | 5138 | INIT_LIST_HEAD(&reaplist); |
5139 | spin_lock(&recall_lock); | 5139 | spin_lock(&recall_lock); |
5140 | list_for_each_safe(pos, next, &nn->del_recall_lru) { | 5140 | list_for_each_safe(pos, next, &nn->del_recall_lru) { |
@@ -5149,6 +5149,7 @@ nfs4_state_shutdown_net(struct net *net) | |||
5149 | 5149 | ||
5150 | nfsd4_client_tracking_exit(net); | 5150 | nfsd4_client_tracking_exit(net); |
5151 | nfs4_state_destroy_net(net); | 5151 | nfs4_state_destroy_net(net); |
5152 | nfs4_unlock_state(); | ||
5152 | } | 5153 | } |
5153 | 5154 | ||
5154 | void | 5155 | void |