]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
NFSD: enhance inter-server copy cleanup
authorDai Ngo <dai.ngo@oracle.com>
Mon, 19 Dec 2022 00:55:53 +0000 (16:55 -0800)
committerAndrea Righi <andrea.righi@canonical.com>
Tue, 14 Mar 2023 15:46:48 +0000 (16:46 +0100)
commitf70de0a1fa3414c190430c0ec60a50a88059e87a
tree9777de2dc97ea67eab1bdce20b46693090b7bf7b
parent8d89d4bfa7948b519b12d1c5222facd96369a8a8
NFSD: enhance inter-server copy cleanup

BugLink: https://bugs.launchpad.net/bugs/2011425
[ Upstream commit df24ac7a2e3a9d0bc68f1756a880e50bfe4b4522 ]

Currently nfsd4_setup_inter_ssc returns the vfsmount of the source
server's export when the mount completes. After the copy is done
nfsd4_cleanup_inter_ssc is called with the vfsmount of the source
server and it searches nfsd_ssc_mount_list for a matching entry
to do the clean up.

The problems with this approach are (1) the need to search the
nfsd_ssc_mount_list and (2) the code has to handle the case where
the matching entry is not found which looks ugly.

The enhancement is instead of nfsd4_setup_inter_ssc returning the
vfsmount, it returns the nfsd4_ssc_umount_item which has the
vfsmount embedded in it. When nfsd4_cleanup_inter_ssc is called
it's passed with the nfsd4_ssc_umount_item directly to do the
clean up so no searching is needed and there is no need to handle
the 'not found' case.

Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
[ cel: adjusted whitespace and variable/function names ]
Reviewed-by: Olga Kornievskaia <kolga@netapp.com>
Stable-dep-of: 34e8f9ec4c9a ("NFSD: fix leaked reference count of nfsd4_ssc_umount_item")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
fs/nfsd/nfs4proc.c
fs/nfsd/xdr4.h
include/linux/nfs_ssc.h