diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2022-12-06 12:42:59 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2022-12-06 13:03:46 -0500 |
commit | b4e4f66901658fae0614dea5bf91062a5387eda7 (patch) | |
tree | b562c88b1a6be4cadc87d233c48a4af2274128ae /fs/nfs | |
parent | 19cdc8fa5b9b768f5753eefe3da32fcbafcb0d18 (diff) | |
download | linux-stable-b4e4f66901658fae0614dea5bf91062a5387eda7.tar.gz linux-stable-b4e4f66901658fae0614dea5bf91062a5387eda7.tar.bz2 linux-stable-b4e4f66901658fae0614dea5bf91062a5387eda7.zip |
NFSv4.x: Fail client initialisation if state manager thread can't run
If the state manager thread fails to start, then we should just mark the
client initialisation as failed so that other processes or threads don't
get stuck in nfs_wait_client_init_complete().
Reported-by: ChenXiaoSong <chenxiaosong2@huawei.com>
Fixes: 4697bd5e9419 ("NFSv4: Fix a race in the net namespace mount notification")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/nfs4state.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 7c1f43507813..5720196141e1 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -1230,6 +1230,8 @@ void nfs4_schedule_state_manager(struct nfs_client *clp) if (IS_ERR(task)) { printk(KERN_ERR "%s: kthread_run: %ld\n", __func__, PTR_ERR(task)); + if (!nfs_client_init_is_complete(clp)) + nfs_mark_client_ready(clp, PTR_ERR(task)); nfs4_clear_state_manager_bit(clp); clear_bit(NFS4CLNT_MANAGER_AVAILABLE, &clp->cl_state); nfs_put_client(clp); |