From: "J. Bruce Fields" <bfields@fieldses.org>
To: NeilBrown <neilb@suse.de>
Cc: Al Viro <viro@ZenIV.linux.org.uk>, NFS <linux-nfs@vger.kernel.org>
Subject: Re: [patch/rfc] allow exported (and *not* exported) filesystems to be unmounted.
Date: Mon, 1 Jul 2013 15:12:38 -0400 [thread overview]
Message-ID: <20130701191238.GD19945@fieldses.org> (raw)
In-Reply-To: <20130606100512.1c701a64@notabene.brown>
On Thu, Jun 06, 2013 at 10:05:12AM +1000, NeilBrown wrote:
> On Wed, 5 Jun 2013 09:36:58 -0400 "J. Bruce Fields" <bfields@fieldses.org>
> wrote:
>
> > On Wed, Jun 05, 2013 at 04:19:34PM +1000, NeilBrown wrote:
> > > On Wed, 5 Jun 2013 04:41:15 +0100 Al Viro <viro@ZenIV.linux.org.uk> wrote:
> > >
> > > > On Wed, Jun 05, 2013 at 01:05:41PM +1000, NeilBrown wrote:
> > > > >
> > > > > Hi Bruce,
> > > > > this is a little issue that seems to keep coming up so I thought it might be
> > > > > time to fix it.
> > > > >
> > > > > As you know, a filesystem that is exported cannot be unmounted as the export
> > > > > cache holds a reference to it. Though if it hasn't been accessed for a
> > > > > while then it can.
> > > > >
> > > > > As I hadn't realised before sometimes *non* exported filesystems can be
> > > > > pinned to. A negative entry in the cache can pin a filesystem just as
> > > > > easily as a positive entry.
> > > > > An amusing, if somewhat contrived, example is that if you export '/' with
> > > > > crossmnt and:
> > > > >
> > > > > mount localhost:/ /mnt
> > > > > ls -l /
> > > > > umount /mnt
> > > > >
> > > > > the umount might fail. This is because the "ls -l" tried to export every
> > > > > filesystem found mounted in '/'. The export of "/mnt" failed of course
> > > > > because you cannot re-export an NFS filesystem. But it is still in the
> > > > > cache.
> > > > > An 'exportfs -f' fixes this, but shouldn't be necessary.
> >
> > Yeah, ugh. As a less contrived example, can the default v4 root export
> > lead to arbitrary filesystems being pinned just because a client tried
> > to mount the wrong path?
>
> I think it can only pin filesystems that are exported, either explicitly or
> via a parent being exported with 'crossmnt'.
But see utils/mountd/v4root.c, and:
[root@server ~]# exportfs -v
/export <world>(rw,...)
[root@server ~]# mount /mnt
[root@pip4 ~]# mount pip4:/ /mnt/
[root@pip4 ~]# ls -l /mnt/
total 4
drwxrwxrwt 3 root root 4096 Jun 7 10:34 export
[root@pip4 ~]#
[root@server ~]# umount /mnt/
umount: /mnt: target is busy.
...
[root@server ~]# grep /mnt /proc/net/rpc/nfsd.export/content
# /mnt *()
> > Could the export cache be indexed on a path string instead of a struct
> > path?
>
> Yes. It would mean lots of extra pathname lookups and possibly lots of
> "d_path()" calls.
Right. Ugh. Still, struct path seems wrong as it's not something gssd
knows about, and there's not really a 1-1 mapping between the two (see
e.g. the recent complaint about the case where the struct path
represents a lazy-unmounted export
http://mid.gmane.org/<20130625191008.GA20277@us.ibm.com> ).
--b.
next prev parent reply other threads:[~2013-07-01 19:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-05 3:05 [patch/rfc] allow exported (and *not* exported) filesystems to be unmounted NeilBrown
2013-06-05 3:41 ` Al Viro
2013-06-05 6:19 ` NeilBrown
2013-06-05 13:36 ` J. Bruce Fields
2013-06-06 0:05 ` NeilBrown
2013-07-01 19:12 ` J. Bruce Fields [this message]
2013-07-01 22:24 ` NeilBrown
2013-07-02 15:50 ` J. Bruce Fields
2013-07-08 7:30 ` NeilBrown
2013-07-08 20:04 ` J. Bruce Fields
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=20130701191238.GD19945@fieldses.org \
--to=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--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: link
Be 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.