From 950a79d88f4d863c31d06c365da7d92a2d2fac6d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 12 Jan 2024 21:51:05 +0100 Subject: [PATCH] drop queue-6.1/nfsd-drop-the-nfsd_put-helper.patch --- queue-6.1/nfsd-drop-the-nfsd_put-helper.patch | 125 ------------------ queue-6.1/series | 1 - 2 files changed, 126 deletions(-) delete mode 100644 queue-6.1/nfsd-drop-the-nfsd_put-helper.patch diff --git a/queue-6.1/nfsd-drop-the-nfsd_put-helper.patch b/queue-6.1/nfsd-drop-the-nfsd_put-helper.patch deleted file mode 100644 index 43f4af87e9f..00000000000 --- a/queue-6.1/nfsd-drop-the-nfsd_put-helper.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 64e6304169f1e1f078e7f0798033f80a7fb0ea46 Mon Sep 17 00:00:00 2001 -From: Jeff Layton -Date: Wed, 3 Jan 2024 08:36:52 -0500 -Subject: nfsd: drop the nfsd_put helper - -From: Jeff Layton - -commit 64e6304169f1e1f078e7f0798033f80a7fb0ea46 upstream. - -It's not safe to call nfsd_put once nfsd_last_thread has been called, as -that function will zero out the nn->nfsd_serv pointer. - -Drop the nfsd_put helper altogether and open-code the svc_put in its -callers instead. That allows us to not be reliant on the value of that -pointer when handling an error. - -Fixes: 2a501f55cd64 ("nfsd: call nfsd_last_thread() before final nfsd_put()") -Reported-by: Zhi Li -Cc: NeilBrown -Signed-off-by: Jeffrey Layton -Signed-off-by: Chuck Lever -Signed-off-by: Greg Kroah-Hartman ---- - fs/nfsd/nfsctl.c | 31 +++++++++++++++++-------------- - fs/nfsd/nfsd.h | 7 ------- - 2 files changed, 17 insertions(+), 21 deletions(-) - ---- a/fs/nfsd/nfsctl.c -+++ b/fs/nfsd/nfsctl.c -@@ -705,6 +705,7 @@ static ssize_t __write_ports_addfd(char - char *mesg = buf; - int fd, err; - struct nfsd_net *nn = net_generic(net, nfsd_net_id); -+ struct svc_serv *serv; - - err = get_int(&mesg, &fd); - if (err != 0 || fd < 0) -@@ -714,15 +715,15 @@ static ssize_t __write_ports_addfd(char - if (err != 0) - return err; - -- err = svc_addsock(nn->nfsd_serv, net, fd, buf, SIMPLE_TRANSACTION_LIMIT, cred); -+ serv = nn->nfsd_serv; -+ err = svc_addsock(serv, net, fd, buf, SIMPLE_TRANSACTION_LIMIT, cred); - -- if (err < 0 && !nn->nfsd_serv->sv_nrthreads && !nn->keep_active) -+ if (err < 0 && !serv->sv_nrthreads && !nn->keep_active) - nfsd_last_thread(net); -- else if (err >= 0 && -- !nn->nfsd_serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) -- svc_get(nn->nfsd_serv); -+ else if (err >= 0 && !serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) -+ svc_get(serv); - -- nfsd_put(net); -+ svc_put(serv); - return err; - } - -@@ -736,6 +737,7 @@ static ssize_t __write_ports_addxprt(cha - struct svc_xprt *xprt; - int port, err; - struct nfsd_net *nn = net_generic(net, nfsd_net_id); -+ struct svc_serv *serv; - - if (sscanf(buf, "%15s %5u", transport, &port) != 2) - return -EINVAL; -@@ -747,32 +749,33 @@ static ssize_t __write_ports_addxprt(cha - if (err != 0) - return err; - -- err = svc_xprt_create(nn->nfsd_serv, transport, net, -+ serv = nn->nfsd_serv; -+ err = svc_xprt_create(serv, transport, net, - PF_INET, port, SVC_SOCK_ANONYMOUS, cred); - if (err < 0) - goto out_err; - -- err = svc_xprt_create(nn->nfsd_serv, transport, net, -+ err = svc_xprt_create(serv, transport, net, - PF_INET6, port, SVC_SOCK_ANONYMOUS, cred); - if (err < 0 && err != -EAFNOSUPPORT) - goto out_close; - -- if (!nn->nfsd_serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) -- svc_get(nn->nfsd_serv); -+ if (!serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) -+ svc_get(serv); - -- nfsd_put(net); -+ svc_put(serv); - return 0; - out_close: -- xprt = svc_find_xprt(nn->nfsd_serv, transport, net, PF_INET, port); -+ xprt = svc_find_xprt(serv, transport, net, PF_INET, port); - if (xprt != NULL) { - svc_xprt_close(xprt); - svc_xprt_put(xprt); - } - out_err: -- if (!nn->nfsd_serv->sv_nrthreads && !nn->keep_active) -+ if (!serv->sv_nrthreads && !nn->keep_active) - nfsd_last_thread(net); - -- nfsd_put(net); -+ svc_put(serv); - return err; - } - ---- a/fs/nfsd/nfsd.h -+++ b/fs/nfsd/nfsd.h -@@ -97,13 +97,6 @@ int nfsd_pool_stats_open(struct inode * - int nfsd_pool_stats_release(struct inode *, struct file *); - void nfsd_shutdown_threads(struct net *net); - --static inline void nfsd_put(struct net *net) --{ -- struct nfsd_net *nn = net_generic(net, nfsd_net_id); -- -- svc_put(nn->nfsd_serv); --} -- - bool i_am_nfsd(void); - - struct nfsdfs_client { diff --git a/queue-6.1/series b/queue-6.1/series index 00244dd8a67..22373318a05 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -1,2 +1 @@ -nfsd-drop-the-nfsd_put-helper.patch ipv6-remove-max_size-check-inline-with-ipv4.patch -- 2.47.3