summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2022-12-06 18:42:59 +0100
committerTrond Myklebust <trond.myklebust@hammerspace.com>2022-12-06 19:03:46 +0100
commitb4e4f66901658fae0614dea5bf91062a5387eda7 (patch)
treeb562c88b1a6be4cadc87d233c48a4af2274128ae /fs
parentfs: nfs: sysfs: use sysfs_emit() to instead of scnprintf() (diff)
downloadlinux-b4e4f66901658fae0614dea5bf91062a5387eda7.tar.xz
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')
-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);