In error path, call drop_client() to drop the reference obtained by get_nfsdfs_clp().
Fixes: a204f25e372d ("nfsd: create get_nfsdfs_clp helper") Cc: stable@vger.kernel.org Signed-off-by: Haoxiang Li lihaoxiang@isrc.iscas.ac.cn --- fs/nfsd/nfs4state.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 8a6960500217..caa0756b6914 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3097,8 +3097,10 @@ static int client_states_open(struct inode *inode, struct file *file) return -ENXIO;
ret = seq_open(file, &states_seq_ops); - if (ret) + if (ret) { + drop_client(clp); return ret; + } s = file->private_data; s->private = clp; return 0;
On Sat, Dec 6, 2025, at 2:38 AM, Haoxiang Li wrote:
In error path, call drop_client() to drop the reference obtained by get_nfsdfs_clp().
Fixes: a204f25e372d ("nfsd: create get_nfsdfs_clp helper")
An argument could be made that 78599c42ae3c ("nfsd4: add file to display list of client's opens") is where the reference counting was first broken. Would you mind if I updated the Fixes: tag when I apply this?
Cc: stable@vger.kernel.org Signed-off-by: Haoxiang Li lihaoxiang@isrc.iscas.ac.cn
fs/nfsd/nfs4state.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 8a6960500217..caa0756b6914 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3097,8 +3097,10 @@ static int client_states_open(struct inode *inode, struct file *file) return -ENXIO;
ret = seq_open(file, &states_seq_ops);
- if (ret)
- if (ret) {
return ret;drop_client(clp);- } s = file->private_data; s->private = clp; return 0;
-- 2.25.1
On Sat, 2025-12-06 at 15:38 +0800, Haoxiang Li wrote:
In error path, call drop_client() to drop the reference obtained by get_nfsdfs_clp().
Fixes: a204f25e372d ("nfsd: create get_nfsdfs_clp helper") Cc: stable@vger.kernel.org Signed-off-by: Haoxiang Li lihaoxiang@isrc.iscas.ac.cn
fs/nfsd/nfs4state.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 8a6960500217..caa0756b6914 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3097,8 +3097,10 @@ static int client_states_open(struct inode *inode, struct file *file) return -ENXIO; ret = seq_open(file, &states_seq_ops);
- if (ret)
- if (ret) {
return ret;drop_client(clp);- } s = file->private_data; s->private = clp; return 0;
Nice catch.
Reviewed-by: Jeff Layton jlayton@kernel.org
Hi, Chuck!
Sat, 06 Dec 2025 09:37:44 -0500, Chuck Lever wrote:
On Sat, Dec 6, 2025, at 2:38 AM, Haoxiang Li wrote:
In error path, call drop_client() to drop the reference obtained by get_nfsdfs_clp().
Fixes: a204f25e372d ("nfsd: create get_nfsdfs_clp helper")
An argument could be made that 78599c42ae3c ("nfsd4: add file to display list of client's opens") is where the reference counting was first broken. Would you mind if I updated the Fixes: tag when I apply this?
Thanks for pointing out the incorrect Fixes tag in the patch. Please feel free to correct it.
-Haoxiang Li
Cc: stable@vger.kernel.org Signed-off-by: Haoxiang Li lihaoxiang@isrc.iscas.ac.cn
fs/nfsd/nfs4state.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 8a6960500217..caa0756b6914 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3097,8 +3097,10 @@ static int client_states_open(struct inode *inode, struct file *file) return -ENXIO;
ret = seq_open(file, &states_seq_ops);
if (ret)
if (ret) { return ret;drop_client(clp); s = file->private_data; s->private = clp; return 0;}-- 2.25.1
-- Chuck Lever
From: Chuck Lever chuck.lever@oracle.com
On Sat, 06 Dec 2025 15:38:42 +0800, Haoxiang Li wrote:
In error path, call drop_client() to drop the reference obtained by get_nfsdfs_clp().
Applied to nfsd-testing, thanks!
[1/1] nfsd: Drop the client reference in client_states_open() commit: 88861b1c63861c7ee590e579b0b469c413154a6f
-- Chuck Lever
linux-stable-mirror@lists.linaro.org