mountd changed?
Rink Springer
rink at FreeBSD.org
Mon Oct 16 06:33:07 UTC 2006
Hi Erik,
On Mon, Oct 16, 2006 at 12:01:11AM +0200, Erik Trulsson wrote:
> [Second attempt to send this, since my first seems to have been eaten by my
> ISP. Apologies if it appears twice.]
>
> On Sun, Oct 15, 2006 at 05:40:22PM +0200, Rink Springer wrote:
> > Hi,
> >
> > On Sun, Oct 15, 2006 at 11:30:23PM +0800, Lin Jui-Nan Eric wrote:
> > > Hi,
> > >
> > > If I revert to revision 1.81.2.4, it worked correctly.
> > >
> > > On 10/15/06, Rink Springer <rink at freebsd.org> wrote:
> > > >Hi,
> > > >
> > > >Hmm, I recently changed something which might trigger this. Could you
> > > >back out revision 1.81.2.5 of src/usr.sbin/mountd/mountd.c and let me
> > > >know whether this fixed the problem?
> > > >
> >
> > OK, could you try the attached patch (untested) and let me know whether
> > it works? (it patches the 1.81.2.5 revision of mountd.c)
>
> I had the same problems, but only when trying to export directories from
> the root filesystem. Your patch below would not help.
> The following patch (very much inspired by the comment on line 1038 in
> mountd.c) makes things work for me:
>
> Index: mountd.c
> ===================================================================
> RCS file: /ncvs/src/usr.sbin/mountd/mountd.c,v
> retrieving revision 1.81.2.5
> diff -u -r1.81.2.5 mountd.c
> --- mountd.c 14 Oct 2006 23:04:07 -0000 1.81.2.5
> +++ mountd.c 15 Oct 2006 21:09:20 -0000
> @@ -1911,7 +1911,7 @@
> iov[5].iov_base = fsb->f_mntfromname; /* "from" */
> iov[5].iov_len = strlen(fsb->f_mntfromname) + 1;
>
> - while (nmount(iov, iovlen, fsb->f_flags) < 0) {
> + while (nmount(iov, iovlen, fsb->f_flags & ~MNT_ROOTFS) < 0) {
> if (cp)
> *cp-- = savedc;
> else
>
>
>
>
>
>
> > --- mountd.c.org Thu Sep 21 10:07:57 2006
> > +++ mountd.c Thu Sep 21 10:08:42 2006
> > @@ -1912,7 +1912,7 @@
> > iov[5].iov_base = fsb->f_mntfromname; /* "from" */
> > iov[5].iov_len = strlen(fsb->f_mntfromname) + 1;
> >
> > - while (nmount(iov, iovlen, fsb->f_flags) < 0) {
> > + while (nmount(iov, iovlen, fsb->f_flags | MNT_UPDATE) < 0) {
> > if (cp)
> > *cp-- = savedc;
> > else
Ah, it seems that nmount(2) will deny any mount that has the MNT_ROOTFS
flag set; whereas this flag is returned by getmntinfo().
I'll get this committed. Thanks for the report and patch!
--
Rink P.W. Springer - http://rink.nu
"Patience is for those who cannot afford
decent hardware." - Peter Koeleman
More information about the freebsd-stable
mailing list