On Mon, Nov 27 2017, Ian Kent wrote: > While the patch of commit 092a53452b helped (partially) resolve a > problem where automounts were not expiring due to aggressive accesses > from user space it has a side effect for very large environments. > > This change helps with the expire problem by making the expire more > aggressive but, for very large environments, that means more mount > requests from clients. When there are a lot of clients that can mean > fairly significant server load increases. > > It turns out I put the last_used in this position to solve this > very problem and failed to update my own thinking of the autofs > expire policy. So the patch being reverted introduces a regression > which should be fixed. > > Reverts: 092a53452b I would add: Fixes: 092a53452bb7 ("autofs: take more care to not update last_used on path walk") Cc: stable@xxxxxxxxxxxxxxx (v4.11+) to ensure these are picked up as needed (different Fixes line for second of course). Reviewed-by: NeilBrown <neilb@xxxxxxxx> Thanks, NeilBrown > > Signed-off-by: Ian Kent <raven@xxxxxxxxxx> > Cc: Neil Brown <neilb@xxxxxxxx> > Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > fs/autofs4/root.c | 17 ++++++----------- > 1 file changed, 6 insertions(+), 11 deletions(-) > > diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c > index d79ced925861..82e8f6edfb48 100644 > --- a/fs/autofs4/root.c > +++ b/fs/autofs4/root.c > @@ -281,8 +281,8 @@ static int autofs4_mount_wait(const struct path *path, bool rcu_walk) > pr_debug("waiting for mount name=%pd\n", path->dentry); > status = autofs4_wait(sbi, path, NFY_MOUNT); > pr_debug("mount wait done status=%d\n", status); > - ino->last_used = jiffies; > } > + ino->last_used = jiffies; > return status; > } > > @@ -321,21 +321,16 @@ 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; > - 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; > - } > + ino = autofs4_dentry_ino(new); > + ino->last_used = jiffies; > + dput(path->dentry); > + path->dentry = new; > } > return path->dentry; > }
Attachment:
signature.asc
Description: PGP signature