From: Ian Kent <raven@themaw.net> To: Mateusz Guzik <mguzik@redhat.com>, NeilBrown <neilb@suse.com> Cc: Andrew Morton <akpm@linux-foundation.org>, autofs mailing list <autofs@vger.kernel.org>, Kernel Mailing List <linux-kernel@vger.kernel.org>, Al Viro <viro@ZenIV.linux.org.uk>, linux-fsdevel <linux-fsdevel@vger.kernel.org>, Omar Sandoval <osandov@osandov.com>, "Eric W. Biederman" <ebiederm@xmission.com> Subject: Re: [PATCH 3/4] autofs - make mountpoint checks namespace aware Date: Mon, 19 Sep 2016 09:36:13 +0800 [thread overview] Message-ID: <1474248973.3204.14.camel@themaw.net> (raw) In-Reply-To: <20160917201000.omswgttgyzcu7jt6@mguzik> On Sat, 2016-09-17 at 22:10 +0200, Mateusz Guzik wrote: > On Wed, Sep 14, 2016 at 02:14:45PM +0800, Ian Kent wrote: > > If an automount mount is clone(2)ed into a file system that is > > propagation private, when it later expires in the originating > > namespace subsequent calls to autofs ->d_automount() for that > > dentry in the original namespace will return ELOOP until the > > mount is manually umounted in the cloned namespace. > > > > In the same way, if an autofs mount is triggered by automount(8) > > running within a container the dentry will be seen as mounted in > > the root init namespace and calls to ->d_automount() in that namespace > > will return ELOOP until the mount is umounted within the container. > > > > Also, have_submounts() can return an incorect result when a mount > > exists in a namespace other than the one being checked. > > > > @@ -460,7 +460,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool > > rcu_walk) > > > > if (ino->flags & AUTOFS_INF_WANT_EXPIRE) > > return 0; > > - if (d_mountpoint(dentry)) > > + if (is_local_mountpoint(dentry)) > > return 0; > > inode = d_inode_rcu(dentry); > > if (inode && S_ISLNK(inode->i_mode)) > > This change is within RCU lookup. > > is_local_mountpoint may end up calling __is_local_mountpoint, which will > optionally take the namespace_sem lock, resulting in a splat: Yes, that's a serious problem I missed. snip ... > I don't know this code. Perhaps it will be perfectly fine performance wise to > just drop out of RCU lookup in this case. It's a bit worse than that. I think being able to continue the rcu-walk for an already mounted dentry that is not being expired is an important part of the performance improvement given by the series that added this. Can you confirm that Neil? But for the case here the existing test can allow rcu-walk to continue for a dentry that would attempt to trigger an automount so it's also a bug in the existing code. Any thoughts on how we can handle this Neil, I'm having a bit of trouble working out how to resolve this one. Ian
WARNING: multiple messages have this Message-ID (diff)
From: Ian Kent <raven@themaw.net> To: Mateusz Guzik <mguzik@redhat.com>, NeilBrown <neilb@suse.com> Cc: Andrew Morton <akpm@linux-foundation.org>, autofs mailing list <autofs@vger.kernel.org>, Kernel Mailing List <linux-kernel@vger.kernel.org>, Al Viro <viro@ZenIV.linux.org.uk>, linux-fsdevel <linux-fsdevel@vger.kernel.org>, Omar Sandoval <osandov@osandov.com>, "Eric W. Biederman" <ebiederm@xmission.com> Subject: Re: [PATCH 3/4] autofs - make mountpoint checks namespace aware Date: Mon, 19 Sep 2016 09:36:13 +0800 [thread overview] Message-ID: <1474248973.3204.14.camel@themaw.net> (raw) In-Reply-To: <20160917201000.omswgttgyzcu7jt6@mguzik> On Sat, 2016-09-17 at 22:10 +0200, Mateusz Guzik wrote: > On Wed, Sep 14, 2016 at 02:14:45PM +0800, Ian Kent wrote: > > If an automount mount is clone(2)ed into a file system that is > > propagation private, when it later expires in the originating > > namespace subsequent calls to autofs ->d_automount() for that > > dentry in the original namespace will return ELOOP until the > > mount is manually umounted in the cloned namespace. > > > > In the same way, if an autofs mount is triggered by automount(8) > > running within a container the dentry will be seen as mounted in > > the root init namespace and calls to ->d_automount() in that namespace > > will return ELOOP until the mount is umounted within the container. > > > > Also, have_submounts() can return an incorect result when a mount > > exists in a namespace other than the one being checked. > > > > @@ -460,7 +460,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool > > rcu_walk) > > > > if (ino->flags & AUTOFS_INF_WANT_EXPIRE) > > return 0; > > - if (d_mountpoint(dentry)) > > + if (is_local_mountpoint(dentry)) > > return 0; > > inode = d_inode_rcu(dentry); > > if (inode && S_ISLNK(inode->i_mode)) > > This change is within RCU lookup. > > is_local_mountpoint may end up calling __is_local_mountpoint, which will > optionally take the namespace_sem lock, resulting in a splat: Yes, that's a serious problem I missed. snip ... > I don't know this code. Perhaps it will be perfectly fine performance wise to > just drop out of RCU lookup in this case. It's a bit worse than that. I think being able to continue the rcu-walk for an already mounted dentry that is not being expired is an important part of the performance improvement given by the series that added this. Can you confirm that Neil? But for the case here the existing test can allow rcu-walk to continue for a dentry that would attempt to trigger an automount so it's also a bug in the existing code. Any thoughts on how we can handle this Neil, I'm having a bit of trouble working out how to resolve this one. Ian -- To unsubscribe from this list: send the line "unsubscribe autofs" in
next prev parent reply other threads:[~2016-09-19 1:36 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-14 6:14 [PATCH 1/4] fs - make is_local_mountpoint() usable by others Ian Kent 2016-09-14 6:14 ` Ian Kent 2016-09-14 6:14 ` [PATCH 2/4] fs - add have_local_submounts() Ian Kent 2016-09-14 6:14 ` [PATCH 3/4] autofs - make mountpoint checks namespace aware Ian Kent 2016-09-14 17:28 ` Eric W. Biederman 2016-09-15 0:09 ` Ian Kent 2016-09-15 0:09 ` Ian Kent 2016-09-15 0:32 ` Omar Sandoval 2016-09-15 2:08 ` Eric W. Biederman 2016-09-15 2:08 ` Eric W. Biederman 2016-09-15 4:12 ` Ian Kent 2016-09-15 4:12 ` Ian Kent 2016-09-15 8:19 ` Ian Kent 2016-09-16 0:47 ` Eric W. Biederman 2016-09-16 0:47 ` Eric W. Biederman 2016-09-16 2:58 ` Ian Kent 2016-09-19 0:58 ` Ian Kent 2016-09-19 0:58 ` Ian Kent 2016-09-20 16:09 ` Eric W. Biederman 2016-09-20 16:09 ` Eric W. Biederman 2016-09-15 1:03 ` Ian Kent 2016-09-15 1:03 ` Ian Kent 2016-09-16 21:14 ` Omar Sandoval 2016-09-16 21:14 ` Omar Sandoval 2016-09-17 20:10 ` Mateusz Guzik 2016-09-17 20:10 ` Mateusz Guzik 2016-09-19 1:36 ` Ian Kent [this message] 2016-09-19 1:36 ` Ian Kent 2016-09-20 16:50 ` Eric W. Biederman 2016-09-20 22:44 ` Ian Kent 2016-09-20 23:00 ` Ian Kent 2016-09-20 23:00 ` Ian Kent 2016-09-22 1:33 ` Ian Kent 2016-09-22 1:33 ` Ian Kent 2016-09-22 15:43 ` Eric W. Biederman 2016-09-23 0:55 ` Ian Kent 2016-09-23 0:55 ` Ian Kent 2016-09-23 1:37 ` Eric W. Biederman 2016-09-23 4:26 ` Ian Kent 2016-09-23 12:00 ` Ian Kent 2016-09-28 10:18 ` Ian Kent 2016-09-23 19:15 ` Eric W. Biederman 2016-09-24 0:11 ` Ian Kent 2016-09-26 16:05 ` Eric W. Biederman 2016-09-27 1:52 ` Ian Kent 2016-09-27 1:52 ` Ian Kent 2016-09-27 13:14 ` Eric W. Biederman 2016-09-27 13:14 ` Eric W. Biederman 2016-09-28 0:19 ` Ian Kent 2016-09-28 0:19 ` Ian Kent 2016-09-14 6:14 ` [PATCH 4/4] fs - remove unused have_submounts() function Ian Kent 2016-09-14 6:14 ` Ian Kent
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1474248973.3204.14.camel@themaw.net \ --to=raven@themaw.net \ --cc=akpm@linux-foundation.org \ --cc=autofs@vger.kernel.org \ --cc=ebiederm@xmission.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mguzik@redhat.com \ --cc=neilb@suse.com \ --cc=osandov@osandov.com \ --cc=viro@ZenIV.linux.org.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.