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