FAILED: patch "[PATCH] NFS: finish_automount() requires us to hold 2 refs to the" failed to apply to 5.5-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 75da98586af75eb80664714a67a9895bf0a5517e Mon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Thu, 2 Apr 2020 10:34:36 -0400
Subject: [PATCH] NFS: finish_automount() requires us to hold 2 refs to the
mount record
We must not return from nfs_d_automount() without holding 2 references to the mount record. Doing so, will trigger the BUG() in finish_automount(). Also ensure that we don't try to reschedule the automount timer with a negative or zero timeout value.
fs/nfs/namespace.c +7 -5
@@ -145,6 +145,7 @@ struct vfsmount *nfs_d_automount(struct path *path)struct vfsmount *mnt =ERR_PTR (-ENOMEM );struct nfs_server *server =NFS_SERVER (d_inode (path->dentry));struct nfs_client *client = server->nfs_client; +int timeout =READ_ONCE (nfs_mountpoint_expiry_timeout);int ret;if (IS_ROOT (path->dentry))
@@ -190,12 +191,12 @@ struct vfsmount *nfs_d_automount(struct path *path)if (IS_ERR (mnt)) goto out_fc; -if (nfs_mountpoint_expiry_timeout <0 ) +mntget (mnt);/* prevent immediate expiration */ +if (timeout <=0 ) goto out_fc; -mntget (mnt);/* prevent immediate expiration */ mnt_set_expiry (mnt, &nfs_automount_list); -schedule_delayed_work (&nfs_automount_task, nfs_mountpoint_expiry_timeout); +schedule_delayed_work (&nfs_automount_task, timeout); out_fc:put_fs_context (fc);
@@ -233,10 +234,11 @@ const struct inode_operations nfs_referral_inode_operations = {static void nfs_expire_automounts (struct work_struct *work) {struct list_head *list = &nfs_automount_list; +int timeout =READ_ONCE (nfs_mountpoint_expiry_timeout);mark_mounts_for_expiry (list); -if (!list_empty (list)) -schedule_delayed_work (&nfs_automount_task, nfs_mountpoint_expiry_timeout); +if (!list_empty (list) && timeout >0 ) +schedule_delayed_work (&nfs_automount_task, timeout); }void nfs_release_automount_timer (void )