Re: NFSD automatically releases all states when underlying file system is unmounted

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

 



On Wed, 26 Mar 2025, Dai Ngo wrote:
> On 3/25/25 5:23 PM, NeilBrown wrote:
> > On Sat, 22 Mar 2025, Chuck Lever wrote:
> >> On 3/21/25 10:36 AM, Benjamin Coddington wrote:
> >>> On 20 Mar 2025, at 13:53, Chuck Lever wrote:
> >>>
> >>>> On 3/19/25 5:46 PM, NeilBrown wrote:
> >>>>> On Thu, 20 Mar 2025, Dai Ngo wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> Currently when the local file system needs to be unmounted for maintenance
> >>>>>> the admin needs to make sure all the NFS clients have stopped using any files
> >>>>>> on the NFS shares before the umount(8) can succeed.
> >>>>> This is easily achieved with
> >>>>>    echo /path/to/filesystem > /proc/fs/nfsd/unlock_filesystem
> >>>>>
> >>>>> Do this after unexporting and before unmounting.
> >>>> Seems like administrators would expect that a filesystem can be
> >>>> unmounted immediately after unexporting it. Should "exportfs" be changed
> >>>> to handle this extra step under the covers? Doesn't seem like it would
> >>>> be hard to do, and I can't think of a use case where it would be
> >>>> harmful.
> >>> No. I think that admins don't expect to lose all their NFS client's state if
> >>> they're managing the exports.  That would be a really big and invisible change
> >>> to existing behavior.
> >> To be clear, I mean that a file system should be unlocked only when it
> >> is specifically unexported. IMO, unexport is usually an administrator
> >> action that means "I want to stop remote access to this file system now"
> >> and that's what unlock_filesystem does.
> > A problem with that position is that "unexport" isn't a well defined
> > operation.
> > It is quite possible to edit /etc/exports then run "exportfs -r".  This
> > may implicit unexport things.
> >
> > The kernel certainly doesn't have a concept of "unexport".  You can run
> > "exportfs -f" at any time quite safely.  That tells the kernel to forget
> > all export information, but allows the kernel to ask mountd for anything
> > it find that it needs.
> >
> >> IMO administrators would be surprised to learn that NFS clients may
> >> continue to access a file system (via existing open files) after it
> >> has been explicitly unexported.
> > They can't access those file while it remains unexported.  But if it is
> > re-exported, the access they had can continue seamlessly.
> >
> > The origin model is NLM which is separate from NFS.  Unexporting to NFS
> > doesn't close the locks held by NLM.  That can be done separately by the
> > client with a STATMON request.  In fact NLM never drops locks unless
> > explicitly asked to by the client or forced by the server admin.  So it
> > isn't a good model, but it is what we had.
> >
> >> The alternative is to document unlock_filesystem in man exportfs(8).
> > Another alternative is to provide new functionality in exportfs.  Maybe
> > a --force flag or a --close-all flag.
> > It could examine /proc/fs/nfsd/clients/*/states to determine which
> > filesystems had active state, then examine the export tables
> > (/var/lib/nfs/etab) to see what was currently exported, then write
> > something appropriate to unlock_filesystem for any active filesystems
> > which are no longer exported.
> 
> Is it possible that at the time of cache_clean/svc_export_put the kernel
> makes an upcall to rpc.mountd to check if svc_export.ex_path is still
> exported?. If it's not then release all the states that use that super_block.

I suspect that could be done, but then you would hit Ben's concern.
Temporarily unexported a filesystem would change from the client getting
ESTALE if it happens to access a file while the filesystem is not
exported, to the client definitely getting ADMIN_REVOKED (probably -EIO)
then next time it accesses a file even if the filesystem has been
exported again.

I agree with Ben that there needs to be a deliberate admin action to
revoke state, not just a side-effect of unexport which historically has
not revoked state.

NeilBrown



> 
> -Dai
> 
> >
> > If we did that we would want to find NLM locks in /proc/locks too and
> > ensure those were discarded if necessary.
> >
> > There is also the possibility that a filesystem is still exported to
> > some clients but not to all.  In that case writing something to
> > unlock_ip might be appropriate - though that doesn't revoke v4 state
> > yet.
> >
> > Thanks,
> > NeilBrown
> >
> >
> >> And perhaps we need a more surgical mechanism that can handle the case
> >> where the file system is still exported but the security policy has
> >> changed. Because this does feel like a real information leak.
> >>
> >>
> >> -- 
> >> Chuck Lever
> >>
> 






[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