kern/131342: [nfs] mounting/unmounting of disks causes NFS to fail

Martin Birgmeier Martin.Birgmeier at aon.at
Fri Jul 15 10:45:34 UTC 2011


This is indeed interesting - I did not know that the exports are handled 
in such a simple manner both with mount(8) and within the kernel.

But this in fact means that there is a major design flaw.

Thank you for enlightening me.

Regards,

Martin

On 07/15/11 12:36, Andrey Simonenko wrote:
> On Fri, Jul 15, 2011 at 12:19:56PM +0200, Martin Birgmeier wrote:
>> I do not think what you write has to do with the error condition I
>> describe, for two reasons: first, mountd is only consulted while doing
>> mounts, and the client is not doing a mount, but rather only a file
>> access on an already mounted file system; and second, this happens when
>> I mount a file system on the server which is not exported and thus does
>> not cause the exports list to be changed.
> I completely understood the situation you have described.
>
> The mountd is responsible for NFSv2/3 MOUNT requests (all procedures MNT,
> DUMP, UMNT, UNMNTALL, EXPORT), and it is responsible for loading NFS
> export settings into the kernel part of NFS server.
>
> When one mounts any file system on the server, then the mount(8) utility
> sends SIGHUP to mountd(8), see the src/sbin/mount/mount.c:restart_mountd()
> function.
>
> When mountd(8) re-reads exports(5) file(s), it 1) flushes all current
> settings and 2) loads all new settings one-by-one.  So, mountd(8) reloads
> all NFS export settings on each file system local mount, even if a file
> system is being mounted is not NFS exported.  If a NFSv2/3/4 client is
> active on some NFS exported file system, then it will get "access denied"
> error, NFS export settings on a server side are incomplete.
>
> If you do not believe me, then apply attached patch to src/sbin/mount/mount.c
> and try to reproduce this error.
>
> ps: I send CC to freebsd-fs as a separate email, because for some reason
> my messages could not be delivered to freebsd-fs during last week.
>
>> Regards,
>>
>> Martin
>>
>> On 07/15/11 12:13, Andrey Simonenko wrote:
>>> On Fri, Jul 08, 2011 at 01:10:03PM +0000, Martin Birgmeier wrote:
>>>> The following reply was made to PR kern/131342; it has been noted by GNATS.
>>>>
>>>> From: Martin Birgmeier<Martin.Birgmeier at aon.at>
>>>> To: bug-followup at FreeBSD.org
>>>> Cc:
>>>> Subject: Re: kern/131342: [nfs] mounting/unmounting of disks causes NFS to
>>>>    fail
>>>> Date: Fri, 08 Jul 2011 15:00:03 +0200
>>>>
>>>>    This is a friendly reminder that some kind soul with knowledge of the
>>>>    relevant kernel parts look into this... the error can easily be
>>>>    reproduced. I just had it on a 7.4 system which did heavy reading from
>>>>    an 8.2 server. When I mounted something on the server, the client got a
>>>>    "Permission denied" reply.
>>>>
>>>>    So, to recap the scenario:
>>>>
>>>>    7.4 NFS client
>>>>    8.2 NFS server
>>>>    client mounts a fs from the server (via IPv4, might be interesting to
>>>>    look at http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/151681, too, but
>>>>    that is unrelated)
>>>>    client does heavy i/o on the mounted fs
>>>>    server does a mount (on its side, in this case it was from an md device)
>>>>
>>>>    -->   error: client gets back some NFS error (in this case "permission
>>>>    denied")
>>>>
>>> This is a well-known behaviour of NFS server on FreeBSD when some file
>>> system is mounted on a server part.  This happens because when mount(8)
>>> mounts something it sends the SIGHUP signal to mountd(8), it then re-reads
>>> exports(5) file and loads new settings into NFS server.  Since mountd(8)
>>> flushes current settings, loads new settings in a step-by-step style, all
>>> these changes are happened in nonatomic way.  As a result exports settings
>>> in the NFS server are incomplete in any point of time during configuration
>>> loading or reloading.
>>>
>>> This time window allows "denied" clients to access not allowed parts of
>>> exported file systems and "allowed" clients can get access denied errors.
>>>
>>> If you are interested in this topic, you can look on the kern/136865
>>> and my messages related to this topic (information in [3] is outdated
>>> and in [4] is very outdated):
>>>
>>> 1. NFS exports atomic and on-the-fly atomic updates
>>>      http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/136865
>>>
>>> 2. NFSE: new NFS exports support for FreeBSD
>>>      http://nfse.sourceforge.net/
>>>
>>> 3. NFS exports atomic and on-the-fly atomic updates
>>>      http://lists.freebsd.org/pipermail/freebsd-hackers/2009-June/028782.html
>>>
>>> 4. Atomic updates of NFS export lists
>>>      http://lists.freebsd.org/pipermail/freebsd-hackers/2006-April/016248.html
>>>
>>> 5. CFT: nfse compatible mode with mountd (NFS exports file)
>>>      http://lists.freebsd.org/pipermail/freebsd-fs/2010-May/008421.html
>>>
>>>


More information about the freebsd-fs mailing list