Patch "NFSv3: only use NFS timeout for MOUNT when protocols are compatible" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    NFSv3: only use NFS timeout for MOUNT when protocols are compatible

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfsv3-only-use-nfs-timeout-for-mount-when-protocols-.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e4d6916c0bf90aa5efd2360e3ad36c7a6919745a
Author: NeilBrown <neilb@xxxxxxx>
Date:   Fri Oct 4 11:07:23 2024 +1000

    NFSv3: only use NFS timeout for MOUNT when protocols are compatible
    
    [ Upstream commit 6e2a10343ecb71c4457bc16be05758f9c7aae7d9 ]
    
    If a timeout is specified in the mount options, it currently applies to
    both the NFS protocol and (with v3) the MOUNT protocol.  This is
    sensible when they both use the same underlying protocol, or those
    protocols are compatible w.r.t timeouts as RDMA and TCP are.
    
    However if, for example, NFS is using TCP and MOUNT is using UDP then
    using the same timeout doesn't make much sense.
    
    If you
       mount -o vers=3,proto=tcp,mountproto=udp,timeo=600,retrans=5 \
          server:/path /mountpoint
    
    then the timeo=600 which was intended for the NFS/TCP request will
    apply to the MOUNT/UDP requests with the result that there will only be
    one request sent (because UDP has a maximum timeout of 60 seconds).
    This is not what a reasonable person might expect.
    
    This patch disables the sharing of timeout information in cases where
    the underlying protocols are not compatible.
    
    Fixes: c9301cb35b59 ("nfs: hornor timeo and retrans option when mounting NFSv3")
    Signed-off-by: NeilBrown <neilb@xxxxxxx>
    Signed-off-by: Anna Schumaker <anna.schumaker@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 9e672aed35901..f91cb1267b44e 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -867,7 +867,15 @@ static int nfs_request_mount(struct fs_context *fc,
 	 * Now ask the mount server to map our export path
 	 * to a file handle.
 	 */
-	status = nfs_mount(&request, ctx->timeo, ctx->retrans);
+	if ((request.protocol == XPRT_TRANSPORT_UDP) ==
+	    !(ctx->flags & NFS_MOUNT_TCP))
+		/*
+		 * NFS protocol and mount protocol are both UDP or neither UDP
+		 * so timeouts are compatible.  Use NFS timeouts for MOUNT
+		 */
+		status = nfs_mount(&request, ctx->timeo, ctx->retrans);
+	else
+		status = nfs_mount(&request, NFS_UNSPEC_TIMEO, NFS_UNSPEC_RETRANS);
 	if (status != 0) {
 		dfprintk(MOUNT, "NFS: unable to mount server %s, error %d\n",
 				request.hostname, status);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux