Re: [patch/rfc] allow exported (and *not* exported) filesystems to be unmounted.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 5 Jun 2013 09:36:58 -0400 "J. Bruce Fields" <bfields@xxxxxxxxxxxx>
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@xxxxxxxxxxxxxxxxxx> 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'.

> 
> 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.

> 
> The problem of negative entries aside, anyone counting on the ability to
> unexport mounted filesystems on a running nfs server is setting
 ^unmount exported^?
> themselves up for trouble: suppose we fix this problem, what if an rpc
> is in progress, or a lock or v4 open or delegation is held?

All of these should prevent the unmount - and I think people would expect
that - you cannot unmount a filesystem that is still being used, and all of
these are examples of current use.  At the very least, the  filesystem must
be mounted on some client.

In the (few) times this has been raised over the years, the position has been
"I'm not using it any more, why cannot I unmount it?  fuser/lsof doesn't
show any users!".

An alternate approach to the problem might be to get rpc.mountd to hold an
open file descriptor for every exported filesystem.  That would guide people
(via lsof/fuser) to stopping nfsd, which would make the filesystem
unmountable.
However I don't find that approach particularly elegant...

NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux