linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] autofs - fix symlinks aren't checked for expiry
@ 2013-11-28  8:38 Ian Kent
  0 siblings, 0 replies; 4+ messages in thread
From: Ian Kent @ 2013-11-28  8:38 UTC (permalink / raw)
  To: Kernel Mailing List; +Cc: linux-fsdevel, autofs mailing list

From: Ian Kent <ikent@redhat.com>

The autofs4 module doesn't consider symlinks for expire.

The user space daemon has focused on the use of bind mounts
instead of symlinks for a long time now. But, with the
future addition of amd map parsing in automount(8), not
to mention amd iteslf, symlink expiry is needed.

The direct and offset mount types can't be symlinks and
the tree mounts of version 4 were always real mounts so
only indirect mounts need expire symlinks.

Signed-off-by: Ian Kent <ikent@redhat.com>
---
 fs/autofs4/expire.c  |   12 ++++++++++++
 fs/autofs4/symlink.c |    3 +++
 2 files changed, 15 insertions(+)

diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
index 3d9d3f5..ce7df7c 100644
--- a/fs/autofs4/expire.c
+++ b/fs/autofs4/expire.c
@@ -402,6 +402,18 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
 			goto next;
 		}
 
+		if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)) {
+			/*
+			 * A symlink can't be "busy" in the usual sense so
+			 * just check last used for expire timeout.
+			 */
+			if (autofs4_can_expire(dentry, timeout, do_now)) {
+				expired = dentry;
+				goto found;
+			}
+			goto next;
+		}
+
 		if (simple_empty(dentry))
 			goto next;
 
diff --git a/fs/autofs4/symlink.c b/fs/autofs4/symlink.c
index f27c094..061a692 100644
--- a/fs/autofs4/symlink.c
+++ b/fs/autofs4/symlink.c
@@ -14,6 +14,9 @@
 
 static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
 {
+	struct autofs_info *ino = autofs4_dentry_ino(dentry);
+	if (ino)
+		ino->last_used = jiffies;
 	nd_set_link(nd, dentry->d_inode->i_private);
 	return NULL;
 }


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] autofs - fix symlinks aren't checked for expiry
  2013-12-27 10:53   ` Sedat Dilek
@ 2013-12-28  2:31     ` Ian Kent
  0 siblings, 0 replies; 4+ messages in thread
From: Ian Kent @ 2013-12-28  2:31 UTC (permalink / raw)
  To: sedat.dilek
  Cc: Andrew Morton, linux-fsdevel, autofs mailing list, Kernel Mailing List

On Fri, 2013-12-27 at 11:53 +0100, Sedat Dilek wrote:
> On Fri, Dec 27, 2013 at 5:32 AM, Ian Kent <raven@themaw.net> wrote:
> 
> Hi,
> 
> saw some typos...

Right, I'm pretty tired, and seem to be so a lot these days.

Andrew, let me fix the typos and re-submit the patch.

> 
> > From: Ian Kent <ikent@redhat.com>
> >
> > The autofs4 module doesn't consider symlinks for expire as it did
> > in the older autofs v3 module (so it's actually a long stnding
> 
> s/stnding/standing
> 
> > regression).
> >
> > The user space daemon has focused on the use of bind mounts instead
> > of symlinks for a long time now and that's why this has not been
> > noticed. But with the future addition of amd map parsing to
> > automount(8), not to mention amd itself (of am-utils), symlink
> > expiry will be needed.
> >
> > The direct and offset mount types can't be symlinks and the tree
> > mounts of version 4 were always real mounts so only indirect
> > mounts need expire symlinks.
> >
> > Since the current users of the autofs4 module haven't reproted
> 
> s/reproted/reported
> 
> - Sedat -
> 
> > this as a problem to date this patch probably isn't a candidate
> > for backport to stable.
> >
> > Signed-off-by: Ian Kent <ikent@redhat.com>
> > ---
> >  fs/autofs4/expire.c  |   14 ++++++++++++++
> >  fs/autofs4/symlink.c |    4 ++++
> >  2 files changed, 18 insertions(+)
> >
> > diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
> > index 3d9d3f5..394e90b 100644
> > --- a/fs/autofs4/expire.c
> > +++ b/fs/autofs4/expire.c
> > @@ -402,6 +402,20 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
> >                         goto next;
> >                 }
> >
> > +               if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)) {
> > +                       DPRINTK("checking symlink %p %.*s",
> > +                               dentry, (int)dentry->d_name.len, dentry->d_name.name);
> > +                       /*
> > +                        * A symlink can't be "busy" in the usual sense so
> > +                        * just check last used for expire timeout.
> > +                        */
> > +                       if (autofs4_can_expire(dentry, timeout, do_now)) {
> > +                               expired = dentry;
> > +                               goto found;
> > +                       }
> > +                       goto next;
> > +               }
> > +
> >                 if (simple_empty(dentry))
> >                         goto next;
> >
> > diff --git a/fs/autofs4/symlink.c b/fs/autofs4/symlink.c
> > index f27c094..1e8ea19 100644
> > --- a/fs/autofs4/symlink.c
> > +++ b/fs/autofs4/symlink.c
> > @@ -14,6 +14,10 @@
> >
> >  static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
> >  {
> > +       struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
> > +       struct autofs_info *ino = autofs4_dentry_ino(dentry);
> > +       if (ino && !autofs4_oz_mode(sbi))
> > +               ino->last_used = jiffies;
> >         nd_set_link(nd, dentry->d_inode->i_private);
> >         return NULL;
> >  }
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] autofs - fix symlinks aren't checked for expiry
  2013-12-27  4:32 ` [PATCH] autofs - fix symlinks aren't checked for expiry Ian Kent
@ 2013-12-27 10:53   ` Sedat Dilek
  2013-12-28  2:31     ` Ian Kent
  0 siblings, 1 reply; 4+ messages in thread
From: Sedat Dilek @ 2013-12-27 10:53 UTC (permalink / raw)
  To: Ian Kent
  Cc: Andrew Morton, linux-fsdevel, autofs mailing list, Kernel Mailing List

On Fri, Dec 27, 2013 at 5:32 AM, Ian Kent <raven@themaw.net> wrote:

Hi,

saw some typos...

> From: Ian Kent <ikent@redhat.com>
>
> The autofs4 module doesn't consider symlinks for expire as it did
> in the older autofs v3 module (so it's actually a long stnding

s/stnding/standing

> regression).
>
> The user space daemon has focused on the use of bind mounts instead
> of symlinks for a long time now and that's why this has not been
> noticed. But with the future addition of amd map parsing to
> automount(8), not to mention amd itself (of am-utils), symlink
> expiry will be needed.
>
> The direct and offset mount types can't be symlinks and the tree
> mounts of version 4 were always real mounts so only indirect
> mounts need expire symlinks.
>
> Since the current users of the autofs4 module haven't reproted

s/reproted/reported

- Sedat -

> this as a problem to date this patch probably isn't a candidate
> for backport to stable.
>
> Signed-off-by: Ian Kent <ikent@redhat.com>
> ---
>  fs/autofs4/expire.c  |   14 ++++++++++++++
>  fs/autofs4/symlink.c |    4 ++++
>  2 files changed, 18 insertions(+)
>
> diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
> index 3d9d3f5..394e90b 100644
> --- a/fs/autofs4/expire.c
> +++ b/fs/autofs4/expire.c
> @@ -402,6 +402,20 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
>                         goto next;
>                 }
>
> +               if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)) {
> +                       DPRINTK("checking symlink %p %.*s",
> +                               dentry, (int)dentry->d_name.len, dentry->d_name.name);
> +                       /*
> +                        * A symlink can't be "busy" in the usual sense so
> +                        * just check last used for expire timeout.
> +                        */
> +                       if (autofs4_can_expire(dentry, timeout, do_now)) {
> +                               expired = dentry;
> +                               goto found;
> +                       }
> +                       goto next;
> +               }
> +
>                 if (simple_empty(dentry))
>                         goto next;
>
> diff --git a/fs/autofs4/symlink.c b/fs/autofs4/symlink.c
> index f27c094..1e8ea19 100644
> --- a/fs/autofs4/symlink.c
> +++ b/fs/autofs4/symlink.c
> @@ -14,6 +14,10 @@
>
>  static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
>  {
> +       struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
> +       struct autofs_info *ino = autofs4_dentry_ino(dentry);
> +       if (ino && !autofs4_oz_mode(sbi))
> +               ino->last_used = jiffies;
>         nd_set_link(nd, dentry->d_inode->i_private);
>         return NULL;
>  }
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] autofs - fix symlinks aren't checked for expiry
  2013-12-27  4:32 [PATCH] Current patch to fix autofs symlink expiry Ian Kent
@ 2013-12-27  4:32 ` Ian Kent
  2013-12-27 10:53   ` Sedat Dilek
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Kent @ 2013-12-27  4:32 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-fsdevel, autofs mailing list, Kernel Mailing List

From: Ian Kent <ikent@redhat.com>

The autofs4 module doesn't consider symlinks for expire as it did
in the older autofs v3 module (so it's actually a long stnding
regression).

The user space daemon has focused on the use of bind mounts instead
of symlinks for a long time now and that's why this has not been
noticed. But with the future addition of amd map parsing to
automount(8), not to mention amd itself (of am-utils), symlink
expiry will be needed.

The direct and offset mount types can't be symlinks and the tree
mounts of version 4 were always real mounts so only indirect
mounts need expire symlinks.

Since the current users of the autofs4 module haven't reproted
this as a problem to date this patch probably isn't a candidate
for backport to stable.

Signed-off-by: Ian Kent <ikent@redhat.com>
---
 fs/autofs4/expire.c  |   14 ++++++++++++++
 fs/autofs4/symlink.c |    4 ++++
 2 files changed, 18 insertions(+)

diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
index 3d9d3f5..394e90b 100644
--- a/fs/autofs4/expire.c
+++ b/fs/autofs4/expire.c
@@ -402,6 +402,20 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
 			goto next;
 		}
 
+		if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)) {
+			DPRINTK("checking symlink %p %.*s",
+				dentry, (int)dentry->d_name.len, dentry->d_name.name);
+			/*
+			 * A symlink can't be "busy" in the usual sense so
+			 * just check last used for expire timeout.
+			 */
+			if (autofs4_can_expire(dentry, timeout, do_now)) {
+				expired = dentry;
+				goto found;
+			}
+			goto next;
+		}
+
 		if (simple_empty(dentry))
 			goto next;
 
diff --git a/fs/autofs4/symlink.c b/fs/autofs4/symlink.c
index f27c094..1e8ea19 100644
--- a/fs/autofs4/symlink.c
+++ b/fs/autofs4/symlink.c
@@ -14,6 +14,10 @@
 
 static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
 {
+	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
+	struct autofs_info *ino = autofs4_dentry_ino(dentry);
+	if (ino && !autofs4_oz_mode(sbi))
+		ino->last_used = jiffies;
 	nd_set_link(nd, dentry->d_inode->i_private);
 	return NULL;
 }


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-12-28  2:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-28  8:38 [PATCH] autofs - fix symlinks aren't checked for expiry Ian Kent
2013-12-27  4:32 [PATCH] Current patch to fix autofs symlink expiry Ian Kent
2013-12-27  4:32 ` [PATCH] autofs - fix symlinks aren't checked for expiry Ian Kent
2013-12-27 10:53   ` Sedat Dilek
2013-12-28  2:31     ` Ian Kent

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).