summaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2022-12-06 12:42:59 -0500
committerTrond Myklebust <trond.myklebust@hammerspace.com>2022-12-06 13:03:46 -0500
commitb4e4f66901658fae0614dea5bf91062a5387eda7 (patch)
treeb562c88b1a6be4cadc87d233c48a4af2274128ae /fs/nfs
parent19cdc8fa5b9b768f5753eefe3da32fcbafcb0d18 (diff)
downloadlinux-b4e4f66901658fae0614dea5bf91062a5387eda7.tar.gz
linux-b4e4f66901658fae0614dea5bf91062a5387eda7.tar.bz2
linux-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.c2
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);