In message <[EMAIL PROTECTED]>, John writes:

>Looking in /usr/src/sbin/mountd/mountd.c, under line 930
>shows the following:
>
>        num = getmntinfo(&fsp, MNT_NOWAIT);
>
>and then runs through a loop 'num' times trying to
>delete any export for each entry.

Thanks, you're right - this has nothing to do with mountdtab or
mounttab. The commit that caused these messages to appear is
phk's centralisation of the kernel netexport structure:

REV:1.149               ffs_vfsops.c        2001/04/25 07:07:50       phk

   Move the netexport structure from the fs-specific mountstructure
   to struct mount.
   ...

Doing a MNT_DELEXPORT mount used to be a no-op if there were no
exports, but now it returns EINVAL. Maybe that should be changed
to ENOENT or something, so that mountd can detect it as a 'normal'
error? (untested patch below). 

Ian


Index: sys/kern/vfs_export.c
===================================================================
RCS file: /dump/FreeBSD-CVS/src/sys/kern/vfs_export.c,v
retrieving revision 1.310
diff -u -r1.310 vfs_export.c
--- sys/kern/vfs_export.c       2001/04/26 20:47:14     1.310
+++ sys/kern/vfs_export.c       2001/05/29 09:28:43
@@ -207,7 +207,7 @@
        nep = mp->mnt_export;
        if (argp->ex_flags & MNT_DELEXPORT) {
                if (nep == NULL)
-                       return (EINVAL);
+                       return (ENOENT);
                if (mp->mnt_flag & MNT_EXPUBLIC) {
                        vfs_setpublicfs(NULL, NULL, NULL);
                        mp->mnt_flag &= ~MNT_EXPUBLIC;
Index: sbin/mountd/mountd.c
===================================================================
RCS file: /dump/FreeBSD-CVS/src/sbin/mountd/mountd.c,v
retrieving revision 1.51
diff -u -r1.51 mountd.c
--- sbin/mountd/mountd.c        2001/05/25 08:14:02     1.51
+++ sbin/mountd/mountd.c        2001/05/29 09:31:43
@@ -903,6 +903,7 @@
        struct xucred anon;
        char *cp, *endcp, *dirp, *hst, *usr, *dom, savedc;
        int len, has_host, exflags, got_nondir, dirplen, num, i, netgrp;
+       int error;
 
        dirp = NULL;
        dirplen = 0;
@@ -949,10 +950,11 @@
                    !strcmp(fsp->f_fstypename, "cd9660")) {
                        targs.ua.fspec = NULL;
                        targs.ua.export.ex_flags = MNT_DELEXPORT;
-                       if (mount(fsp->f_fstypename, fsp->f_mntonname,
-                                 fsp->f_flags | MNT_UPDATE,
-                                 (caddr_t)&targs) < 0)
-                               syslog(LOG_ERR, "can't delete exports for %s",
+                       error = mount(fsp->f_fstypename, fsp->f_mntonname,
+                           fsp->f_flags | MNT_UPDATE, (caddr_t)&targs);
+                       if (error && error != ENOENT)
+                               syslog(LOG_ERR,
+                                   "can't delete exports for %s: %m",
                                    fsp->f_mntonname);
                }
                fsp++;

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to