nfsd4: remove state lock from nfsd4_load_reboot_recovery_data
That function is only called under nfsd_mutex: we know that because the
only caller is nfsd_svc, via
nfsd_svc
nfsd_startup
nfs4_state_start
nfsd4_client_tracking_init
client_tracking_ops->init == nfsd4_load_reboot_recovery_data
The shared state accessed here includes:
- user_recovery_dirname: used here, modified only by
nfs4_reset_recoverydir, which can be verified to only be
called under nfsd_mutex.
- filesystem state, protected by i_mutex (handwaving slightly
here)
- rec_file, reclaim_str_hashtbl, reclaim_str_hashtbl_size: other
than here, used only from code called from nfsd or laundromat
threads, both of which should be started only after this runs
(see nfsd_svc) and stopped before this could run again (see
nfsd_shutdown, called from nfsd_last_thread).
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
@@ -509,11 +509,9 @@ nfsd4_load_reboot_recovery_data(struct net *net)
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
nfs4_lock_state();
|
|
||||||
status = nfsd4_init_recdir();
|
status = nfsd4_init_recdir();
|
||||||
if (!status)
|
if (!status)
|
||||||
status = nfsd4_recdir_load(net);
|
status = nfsd4_recdir_load(net);
|
||||||
nfs4_unlock_state();
|
|
||||||
if (status)
|
if (status)
|
||||||
printk(KERN_ERR "NFSD: Failure reading reboot recovery data\n");
|
printk(KERN_ERR "NFSD: Failure reading reboot recovery data\n");
|
||||||
return status;
|
return status;
|
||||||
|
|||||||
Reference in New Issue
Block a user