Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1569559

[PATCH 7/7] autofs - take more care to not update last_used on path walk

From Ian Kent <raven@themaw.net>
Newsgroups linux.kernel
Subject [PATCH 7/7] autofs - take more care to not update last_used on path walk
Date 2017-01-30 11:30 +0100
Message-ID <t5hnJ-2NG-27@gated-at.bofh.it> (permalink)
References <t5hnI-2NG-13@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


GUI environments seem to be becoming more agressive at scanning
filesystems, to the point where autofs cannot expire mounts at
all.

This is one key reason the update of the autofs dentry info
last_used field is done in the expire system when the dentry
is seen to be in use.

But somewhere along the way instances of the update has crept
back into the autofs path walk functions which, with the more
aggressive file access patterns, is preventing expiration.

Changing the update in the path walk functions allows autofs
to at least make progress in spite of frequent immediate
re-mounts from file accesses.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 fs/autofs4/root.c |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
index a11f731..6ddd4fa 100644
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -281,8 +281,8 @@ static int autofs4_mount_wait(struct dentry *dentry, bool rcu_walk)
 		pr_debug("waiting for mount name=%pd\n", dentry);
 		status = autofs4_wait(sbi, dentry, NFY_MOUNT);
 		pr_debug("mount wait done status=%d\n", status);
+		ino->last_used = jiffies;
 	}
-	ino->last_used = jiffies;
 	return status;
 }
 
@@ -319,16 +319,21 @@ static struct dentry *autofs4_mountpoint_changed(struct path *path)
 	 */
 	if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) {
 		struct dentry *parent = dentry->d_parent;
-		struct autofs_info *ino;
 		struct dentry *new;
 
 		new = d_lookup(parent, &dentry->d_name);
 		if (!new)
 			return NULL;
-		ino = autofs4_dentry_ino(new);
-		ino->last_used = jiffies;
-		dput(path->dentry);
-		path->dentry = new;
+		if (new == dentry)
+			dput(new);
+		else {
+			struct autofs_info *ino;
+
+			ino = autofs4_dentry_ino(new);
+			ino->last_used = jiffies;
+			dput(path->dentry);
+			path->dentry = new;
+		}
 	}
 	return path->dentry;
 }

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 1/7] autofs: remove wrong comment Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 2/7] autofs: fix typo in Documentation Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 4/7] autofs: update ioctl documentation regarding struct  autofs_dev_ioctl Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 7/7] autofs - take more care to not update last_used on path  walk Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 6/7] autofs: remove duplicated AUTOFS_DEV_IOCTL_SIZE  definition Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 5/7] autofs: add command enum/macros for root-dir ioctls Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100
  [PATCH 3/7] autofs: fix wrong ioctl documentation regarding devid Ian Kent <raven@themaw.net> - 2017-01-30 11:30 +0100

csiph-web