Don't use the statfs field f_mntonname in filesystems. For the userland
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Wed, 2 Feb 2005 21:34:19 +0000 (21:34 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Wed, 2 Feb 2005 21:34:19 +0000 (21:34 +0000)
export code, it can synthesized from mnt_ncp.
For debugging code, use f_mntfromname, it should be enough to find
culprit. The vfs_unmountall doesn't use code_fullpath to avoid problems
with resource allocation and to make it more likely that a call from ddb
succeds.
Change getfsstat and fhstatfs to not show directories outside a chroot
path, with the exception of the filesystem counting the chroot root itself.

27 files changed:
sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c
sys/kern/vfs_cache.c
sys/kern/vfs_mount.c
sys/kern/vfs_subr.c
sys/kern/vfs_syscalls.c
sys/vfs/coda/coda_vfsops.c
sys/vfs/fdesc/fdesc_vfsops.c
sys/vfs/gnu/ext2fs/ext2_vfsops.c
sys/vfs/hpfs/hpfs_vfsops.c
sys/vfs/isofs/cd9660/cd9660_rrip.c
sys/vfs/isofs/cd9660/cd9660_vfsops.c
sys/vfs/mfs/mfs_vfsops.c
sys/vfs/msdosfs/msdosfs_vfsops.c
sys/vfs/nfs/nfs_vfsops.c
sys/vfs/ntfs/ntfs_vfsops.c
sys/vfs/nullfs/null_vfsops.c
sys/vfs/nwfs/nwfs_vfsops.c
sys/vfs/portal/portal_vfsops.c
sys/vfs/procfs/procfs_vfsops.c
sys/vfs/smbfs/smbfs_vfsops.c
sys/vfs/udf/udf_vfsops.c
sys/vfs/ufs/ffs_softdep.c
sys/vfs/ufs/ffs_vfsops.c
sys/vfs/ufs/ufs_lookup.c
sys/vfs/ufs/ufs_quota.c
sys/vfs/umapfs/umap_vfsops.c
sys/vfs/union/union_vfsops.c

index ad9d42e..c19c203 100644 (file)
@@ -39,7 +39,7 @@
  *     @(#)procfs_vfsops.c     8.7 (Berkeley) 5/10/95
  *
  * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vfsops.c,v 1.2.2.3 2001/10/15 20:42:01 des Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.8 2004/12/17 00:18:05 dillon Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.9 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -94,9 +94,6 @@ linprocfs_mount(mp, path, data, td)
 
        vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, linprocfs_vnodeop_entries);
 
-       (void) copyinstr(path, (caddr_t)mp->mnt_stat.f_mntonname, MNAMELEN, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
        size = sizeof("linprocfs") - 1;
        bcopy("linprocfs", mp->mnt_stat.f_mntfromname, size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
@@ -159,7 +156,6 @@ linprocfs_statfs(mp, sbp, td)
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
 
index ec7eecb..412248f 100644 (file)
@@ -67,7 +67,7 @@
  *
  *     @(#)vfs_cache.c 8.5 (Berkeley) 3/22/95
  * $FreeBSD: src/sys/kern/vfs_cache.c,v 1.42.2.6 2001/10/05 20:07:03 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_cache.c,v 1.49 2005/02/01 14:43:44 joerg Exp $
+ * $DragonFly: src/sys/kern/vfs_cache.c,v 1.50 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -379,7 +379,7 @@ cache_lock(struct namecache *ncp)
                        didwarn = 1;
                        printf("[diagnostic] cache_lock: blocked on %p", ncp);
                        if ((ncp->nc_flag & NCF_MOUNTPT) && ncp->nc_mount)
-                           printf(" [MOUNTPT %s]\n", ncp->nc_mount->mnt_stat.f_mntonname);
+                           printf(" [MOUNTFROM %s]\n", ncp->nc_mount->mnt_stat.f_mntfromname);
                        else
                            printf(" \"%*.*s\"\n",
                                ncp->nc_nlen, ncp->nc_nlen,
@@ -1763,16 +1763,19 @@ cache_fullpath(struct proc *p, struct namecache *ncp, char **retbuf, char **free
 {
        char *bp, *buf;
        int i, slash_prefixed;
-       struct filedesc *fdp;
+       struct namecache *fd_nrdir;
 
        numfullpathcalls--;
 
        buf = malloc(MAXPATHLEN, M_TEMP, M_WAITOK);
        bp = buf + MAXPATHLEN - 1;
        *bp = '\0';
-       fdp = p->p_fd;
+       if (p != NULL)
+               fd_nrdir = p->p_fd->fd_nrdir;
+       else
+               fd_nrdir = NULL;
        slash_prefixed = 0;
-       while (ncp && ncp != fdp->fd_nrdir && (ncp->nc_flag & NCF_ROOT) == 0) {
+       while (ncp && ncp != fd_nrdir && (ncp->nc_flag & NCF_ROOT) == 0) {
                if (ncp->nc_flag & NCF_MOUNTPT) {
                        if (ncp->nc_mount == NULL) {
                                free(buf, M_TEMP);
@@ -1803,7 +1806,7 @@ cache_fullpath(struct proc *p, struct namecache *ncp, char **retbuf, char **free
                free(buf, M_TEMP);
                return(ENOENT);
        }
-       if ((ncp->nc_flag & NCF_ROOT) && ncp != fdp->fd_nrdir) {
+       if (p != NULL && (ncp->nc_flag & NCF_ROOT) && ncp != fd_nrdir) {
                bp = buf + MAXPATHLEN - 1;
                *bp = '\0';
                slash_prefixed = 0;
index 00ffabd..5f071ca 100644 (file)
@@ -67,7 +67,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/kern/vfs_mount.c,v 1.4 2004/12/29 02:40:02 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_mount.c,v 1.5 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -272,9 +272,6 @@ vfs_rootmountalloc(char *fstypename, char *devname, struct mount **mpp)
        mp->mnt_stat.f_type = vfsp->vfc_typenum;
        mp->mnt_flag |= vfsp->vfc_flags & MNT_VISFLAGMASK;
        strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN);
-       mp->mnt_stat.f_mntonname[0] = '/';
-       mp->mnt_stat.f_mntonname[1] = 0;
-       (void) copystr(devname, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, 0);
        *mpp = mp;
        return (0);
 }
index c20be2a..53499ca 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_subr.c  8.31 (Berkeley) 5/26/95
  * $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_subr.c,v 1.50 2004/12/17 00:18:07 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_subr.c,v 1.51 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -1320,8 +1320,7 @@ vfs_unmountall(void)
                error = dounmount(mp, MNT_FORCE, td);
                if (error) {
                        TAILQ_REMOVE(&mountlist, mp, mnt_list);
-                       printf("unmount of %s failed (",
-                           mp->mnt_stat.f_mntonname);
+                       printf("unmount of filesystem mounted from %s failed (", mp->mnt_stat.f_mntfromname);
                        if (error == EBUSY)
                                printf("BUSY)\n");
                        else
index e24f1b2..8b42517 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_syscalls.c      8.13 (Berkeley) 4/15/94
  * $FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.151.2.18 2003/04/04 20:35:58 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.57 2005/02/01 21:52:11 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.58 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -76,6 +76,7 @@
 static int checkvp_chdir (struct vnode *vn, struct thread *td);
 static void checkdirs (struct vnode *olddp, struct namecache *ncp);
 static int chroot_refuse_vdir_fds (struct filedesc *fdp);
+static int chroot_visible_mnt(struct mount *mp, struct proc *p);
 static int getutimes (const struct timeval *, struct timespec *);
 static int setfown (struct vnode *, uid_t, gid_t);
 static int setfmode (struct vnode *, int);
@@ -806,8 +807,10 @@ int
 kern_statfs(struct nlookupdata *nd, struct statfs *buf)
 {
        struct thread *td = curthread;
+       struct proc *p = td->td_proc;
        struct mount *mp;
        struct statfs *sp;
+       char *fullpath, *freepath;
        int error;
 
        if ((error = nlookup(nd)) != 0)
@@ -816,6 +819,14 @@ kern_statfs(struct nlookupdata *nd, struct statfs *buf)
        sp = &mp->mnt_stat;
        if ((error = VFS_STATFS(mp, sp, td)) != 0)
                return (error);
+
+       error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath);
+       if (error)
+               return(error);
+       bzero(sp->f_mntonname, sizeof(sp->f_mntonname));
+       strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname));
+       free(freepath, M_TEMP);
+
        sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
        bcopy(sp, buf, sizeof(*buf));
        /* Only root should have access to the fsid's. */
@@ -853,6 +864,7 @@ kern_fstatfs(int fd, struct statfs *buf)
        struct file *fp;
        struct mount *mp;
        struct statfs *sp;
+       char *fullpath, *freepath;
        int error;
 
        KKASSERT(p);
@@ -866,8 +878,17 @@ kern_fstatfs(int fd, struct statfs *buf)
        error = VFS_STATFS(mp, sp, td);
        if (error)
                return (error);
+
+       error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath);
+       if (error)
+               return(error);
+       bzero(sp->f_mntonname, sizeof(sp->f_mntonname));
+       strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname));
+       free(freepath, M_TEMP);
+
        sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
        bcopy(sp, buf, sizeof(*buf));
+
        /* Only root should have access to the fsid's. */
        if (suser(td))
                buf->f_fsid.val[0] = buf->f_fsid.val[1] = 0;
@@ -902,10 +923,18 @@ int
 getfsstat(struct getfsstat_args *uap)
 {
        struct thread *td = curthread;
+       struct proc *p = td->td_proc;
        struct mount *mp, *nmp;
        struct statfs *sp, *sfsp;
        lwkt_tokref ilock;
        long count, maxcount, error;
+       int is_chrooted;
+       char *freepath, *fullpath;
+
+       if (p != NULL && (p->p_fd->fd_nrdir->nc_flag & NCF_ROOT) == 0)
+               is_chrooted = 1;
+       else
+               is_chrooted = 0;
 
        maxcount = uap->bufsize / sizeof(struct statfs);
        sfsp = uap->buf;
@@ -917,6 +946,12 @@ getfsstat(struct getfsstat_args *uap)
                        continue;
                }
                if (sfsp && count < maxcount) {
+                       if (is_chrooted && !chroot_visible_mnt(mp, p)) {
+                               lwkt_gettokref(&ilock);
+                               nmp = TAILQ_NEXT(mp, mnt_list);
+                               vfs_unbusy(mp, td);
+                               continue;
+                       }
                        sp = &mp->mnt_stat;
                        /*
                         * If MNT_NOWAIT or MNT_LAZY is specified, do not
@@ -932,6 +967,15 @@ getfsstat(struct getfsstat_args *uap)
                                continue;
                        }
                        sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
+
+                       error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath);
+                       if (error)
+                               return(error);
+                       bzero(sp->f_mntonname, sizeof(sp->f_mntonname));
+                       strlcpy(sp->f_mntonname, fullpath,
+                               sizeof(sp->f_mntonname));
+                       free(freepath, M_TEMP);
+
                        error = copyout(sp, sfsp, sizeof(*sp));
                        if (error) {
                                vfs_unbusy(mp, td);
@@ -3278,10 +3322,12 @@ int
 fhstatfs(struct fhstatfs_args *uap)
 {
        struct thread *td = curthread;
+       struct proc *p = td->td_proc;
        struct statfs *sp;
        struct mount *mp;
        struct vnode *vp;
        struct statfs sb;
+       char *fullpath, *freepath;
        fhandle_t fh;
        int error;
 
@@ -3296,6 +3342,11 @@ fhstatfs(struct fhstatfs_args *uap)
 
        if ((mp = vfs_getvfs(&fh.fh_fsid)) == NULL)
                return (ESTALE);
+
+       if (p != NULL && (p->p_fd->fd_nrdir->nc_flag & NCF_ROOT) == 0 &&
+           !chroot_visible_mnt(mp, p))
+               return (ESTALE);
+
        if ((error = VFS_FHTOVP(mp, &fh.fh_fid, &vp)))
                return (error);
        mp = vp->v_mount;
@@ -3303,6 +3354,14 @@ fhstatfs(struct fhstatfs_args *uap)
        vput(vp);
        if ((error = VFS_STATFS(mp, sp, td)) != 0)
                return (error);
+
+       error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath);
+       if (error)
+               return(error);
+       bzero(sp->f_mntonname, sizeof(sp->f_mntonname));
+       strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname));
+       free(freepath, M_TEMP);
+
        sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
        if (suser(td)) {
                bcopy(sp, &sb, sizeof(sb));
@@ -3564,3 +3623,34 @@ vfs_bufstats(void)
         }
 }
 #endif
+
+static int
+chroot_visible_mnt(struct mount *mp, struct proc *p)
+{
+       struct namecache *ncp;
+       /*
+        * First check if this file system is below
+        * the chroot path.
+        */
+       ncp = mp->mnt_ncp;
+       while (ncp != NULL && ncp != p->p_fd->fd_nrdir)
+               ncp = ncp->nc_parent;
+       if (ncp == NULL) {
+               /*
+                * This is not below the chroot path.
+                *
+                * Check if the chroot path is on the same filesystem,
+                * by determing if we have to cross a mount point
+                * before reaching mp->mnt_ncp.
+                */
+               ncp = p->p_fd->fd_nrdir;
+               while (ncp != NULL && ncp != mp->mnt_ncp) {
+                       if (ncp->nc_flag & NCF_MOUNTPT) {
+                               ncp = NULL;
+                               break;
+                       }
+                       ncp = ncp->nc_parent;
+               }
+       }
+       return(ncp != NULL);
+}
index 7b54572..abf019d 100644 (file)
@@ -28,7 +28,7 @@
  * 
  *     @(#) src/sys/cfs/coda_vfsops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
  * $FreeBSD: src/sys/coda/coda_vfsops.c,v 1.24.2.1 2001/07/26 20:36:45 iedowse Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.c,v 1.18 2004/11/12 00:09:28 dillon Exp $
+ * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.c,v 1.19 2005/02/02 21:34:18 joerg Exp $
  * 
  */
 
@@ -388,7 +388,6 @@ coda_nb_statfs(struct mount *vfsp, struct statfs *sbp, struct thread *td)
     sbp->f_files = NB_SFS_SIZ;
     sbp->f_ffree = NB_SFS_SIZ;
     bcopy((caddr_t)&(vfsp->mnt_stat.f_fsid), (caddr_t)&(sbp->f_fsid), sizeof (fsid_t));
-    snprintf(sbp->f_mntonname, sizeof(sbp->f_mntonname), "/coda");
     snprintf(sbp->f_mntfromname, sizeof(sbp->f_mntfromname), "CODA");
 /*  MARK_INT_SAT(CODA_STATFS_STATS); */
     return(0);
index f837ca6..d217e73 100644 (file)
@@ -36,7 +36,7 @@
  *     @(#)fdesc_vfsops.c      8.4 (Berkeley) 1/21/94
  *
  * $FreeBSD: src/sys/miscfs/fdesc/fdesc_vfsops.c,v 1.22.2.3 2002/08/23 17:42:39 njl Exp $
- * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.11 2004/12/17 00:18:18 dillon Exp $
+ * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.12 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -104,8 +104,6 @@ fdesc_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = (qaddr_t) fmp;
        vfs_getnewfsid(mp);
 
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        bzero(mp->mnt_stat.f_mntfromname, MNAMELEN);
        bcopy("fdesc", mp->mnt_stat.f_mntfromname, sizeof("fdesc"));
        (void)fdesc_statfs(mp, &mp->mnt_stat, td);
@@ -201,7 +199,6 @@ fdesc_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return (0);
index 9f20680..ab35f66 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)ffs_vfsops.c        8.8 (Berkeley) 4/18/94
  *     $FreeBSD: src/sys/gnu/ext2fs/ext2_vfsops.c,v 1.63.2.7 2002/07/01 00:18:51 iedowse Exp $
- *     $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.25 2004/12/29 02:42:14 dillon Exp $
+ *     $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include "opt_quota.h"
@@ -262,7 +262,6 @@ ext2_mount(struct mount *mp, char *path,
        fs = ump->um_e2fs;
        copyinstr(path, fs->fs_fsmnt, sizeof(fs->fs_fsmnt) - 1, &size);
        bzero(fs->fs_fsmnt + size, sizeof(fs->fs_fsmnt) - size);
-       bcopy(fs->fs_fsmnt, mp->mnt_stat.f_mntonname, MNAMELEN);
        copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
        ext2_statfs(mp, &mp->mnt_stat, td);
@@ -842,8 +841,6 @@ ext2_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = es->s_free_inodes_count; 
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy((caddr_t)mp->mnt_stat.f_mntonname,
-                       (caddr_t)&sbp->f_mntonname[0], MNAMELEN);
                bcopy((caddr_t)mp->mnt_stat.f_mntfromname,
                        (caddr_t)&sbp->f_mntfromname[0], MNAMELEN);
        }
index 29d4917..b4ed2e9 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.3.2.2 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.25 2004/12/29 02:42:15 dillon Exp $
+ * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $
  */
 
 
@@ -229,19 +229,6 @@ hpfs_mount(struct mount *mp,
         ********************
         */
 
-       /*
-        * Since this is a new mount, we want the names for
-        * the device and the mount point copied in.  If an
-        * error occurs,  the mountpoint is discarded by the
-        * upper level code.
-        */
-       /* Save "last mounted on" info for mount point (NULL pad)*/
-       copyinstr(      path,                           /* mount point*/
-                       mp->mnt_stat.f_mntonname,       /* save area*/
-                       MNAMELEN - 1,                   /* max size*/
-                       &size);                         /* real size*/
-       bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
        /* Save "mounted from" info for mount point (NULL pad)*/
        copyinstr(      args.fspec,                     /* device name*/
                        mp->mnt_stat.f_mntfromname,     /* save area*/
@@ -254,8 +241,8 @@ hpfs_mount(struct mount *mp,
                goto error_2;
 
        /*
-        * Initialize FS stat information in mount struct; uses both
-        * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname
+        * Initialize FS stat information in mount struct; uses
+        * mp->mnt_stat.f_mntfromname.
         *
         * This code is common to root and non-root mounts
         */
@@ -499,8 +486,6 @@ hpfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = 0;
        sbp->f_files = 0;
        if (sbp != &mp->mnt_stat) {
-               bcopy((caddr_t)mp->mnt_stat.f_mntonname,
-                       (caddr_t)&sbp->f_mntonname[0], MNAMELEN);
                bcopy((caddr_t)mp->mnt_stat.f_mntfromname,
                        (caddr_t)&sbp->f_mntfromname[0], MNAMELEN);
        }
index c125845..7e3716d 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)cd9660_rrip.c       8.6 (Berkeley) 12/5/94
  * $FreeBSD: src/sys/isofs/cd9660/cd9660_rrip.c,v 1.17 1999/08/28 00:46:06 peter Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_rrip.c,v 1.7 2004/04/12 23:18:55 cpressey Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_rrip.c,v 1.8 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -121,14 +121,15 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana)
 {
        ISO_RRIP_SLINK_COMPONENT *pcomp;
        ISO_RRIP_SLINK_COMPONENT *pcompe;
-       int len, wlen, cont;
-       char *outbuf, *inbuf;
+       int error, len, wlen, cont;
+       char *outbuf, *inbuf, *freebuf;
 
        pcomp = (ISO_RRIP_SLINK_COMPONENT *)p->component;
        pcompe = (ISO_RRIP_SLINK_COMPONENT *)((char *)p + isonum_711(p->h.length));
        len = *ana->outlen;
        outbuf = ana->outbuf;
        cont = ana->cont;
+       freebuf = NULL;
 
        /*
         * Gathering a Symbolic name from each component with path
@@ -173,7 +174,10 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana)
                        /* same as above */
                        outbuf -= len;
                        len = 0;
-                       inbuf = ana->imp->im_mountp->mnt_stat.f_mntonname;
+                       error = cache_fullpath(NULL, ana->imp->im_mountp->mnt_ncp,
+                                              &inbuf, &freebuf);
+                       if (error)
+                               goto bad;
                        wlen = strlen(inbuf);
                        break;
 
@@ -197,19 +201,17 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana)
                        break;
                }
 
-               if (len + wlen > ana->maxlen) {
-                       /* indicate error to caller */
-                       ana->cont = 1;
-                       ana->fields = 0;
-                       ana->outbuf -= *ana->outlen;
-                       *ana->outlen = 0;
-                       return 0;
-               }
+               if (len + wlen > ana->maxlen)
+                       goto bad;
 
                bcopy(inbuf,outbuf,wlen);
                outbuf += wlen;
                len += wlen;
 
+               if (freebuf != NULL) {
+                       free(freebuf, M_TEMP);
+                       freebuf = NULL;
+               }
        }
        ana->outbuf = outbuf;
        *ana->outlen = len;
@@ -220,6 +222,13 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana)
                return ISO_SUSP_SLINK;
        }
        return 0;
+
+bad:
+       ana->cont = 1;
+       ana->fields = 0;
+       ana->outbuf -= *ana->outlen;
+       *ana->outlen = 0;
+       return 0;
 }
 
 /*
index 61e19d0..bbdf828 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)cd9660_vfsops.c     8.18 (Berkeley) 5/22/95
  * $FreeBSD: src/sys/isofs/cd9660/cd9660_vfsops.c,v 1.74.2.7 2002/04/08 09:39:29 bde Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.24 2004/12/17 00:18:23 dillon Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.25 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -257,8 +257,6 @@ cd9660_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
                return error;
        }
        imp = VFSTOISOFS(mp);
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        (void) copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1,
            &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
@@ -603,7 +601,6 @@ cd9660_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = 0; /* free file nodes */
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return 0;
index 4c2d6c1..ab38341 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)mfs_vfsops.c        8.11 (Berkeley) 6/19/95
  * $FreeBSD: src/sys/ufs/mfs/mfs_vfsops.c,v 1.81.2.3 2001/07/04 17:35:21 tegge Exp $
- * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.20 2004/12/17 00:18:25 dillon Exp $
+ * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.21 2005/02/02 21:34:18 joerg Exp $
  */
 
 
@@ -314,19 +314,6 @@ mfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mfsp->mfs_active = 1;
        bufq_init(&mfsp->buf_queue);
 
-       /*
-        * Since this is a new mount, we want the names for
-        * the device and the mount point copied in.  If an
-        * error occurs,  the mountpoint is discarded by the
-        * upper level code.
-        */
-       /* Save "last mounted on" info for mount point (NULL pad)*/
-       copyinstr(      path,                           /* mount point*/
-                       mp->mnt_stat.f_mntonname,       /* save area*/
-                       MNAMELEN - 1,                   /* max size*/
-                       &size);                         /* real size*/
-       bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
        /* Save "mounted from" info for mount point (NULL pad)*/
        copyinstr(      args.fspec,                     /* device name*/
                        mp->mnt_stat.f_mntfromname,     /* save area*/
@@ -341,8 +328,8 @@ mfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        }
 
        /*
-        * Initialize FS stat information in mount struct; uses both
-        * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname
+        * Initialize FS stat information in mount struct; uses
+        * mp->mnt_stat.f_mntfromname.
         *
         * This code is common to root and non-root mounts
         */
index 5529daa..dba5a4a 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/msdosfs/Attic/msdosfs_vfsops.c,v 1.60.2.8 2004/03/02 09:43:04 tjr Exp $ */
-/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.23 2004/12/29 02:42:16 dillon Exp $ */
+/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.24 2005/02/02 21:34:18 joerg Exp $ */
 /*     $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $   */
 
 /*-
@@ -287,8 +287,6 @@ msdosfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
                return error;
        }
 
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        (void) copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1,
            &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
@@ -767,7 +765,6 @@ msdosfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = 0;       /* what to put in here? */
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
index 611eedf..aee0be7 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_vfsops.c        8.12 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/nfs/nfs_vfsops.c,v 1.91.2.7 2003/01/27 20:04:08 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.23 2004/12/17 00:18:28 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.24 2005/02/02 21:34:18 joerg Exp $
  */
 
 #include "opt_bootp.h"
@@ -345,7 +345,6 @@ nfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        }
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        m_freem(mrep);
@@ -625,7 +624,6 @@ nfs_mountdiskless(char *path, char *which, int mountflag,
                FREE(nam, M_SONAME);
                return (error);
        }
-       (void) copystr(which, mp->mnt_stat.f_mntonname, MNAMELEN - 1, 0);
        *mpp = mp;
        return (0);
 }
@@ -928,7 +926,6 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
        nmp->nm_fhsize = argp->fhsize;
        bcopy((caddr_t)argp->fh, (caddr_t)nmp->nm_fh, argp->fhsize);
        bcopy(hst, mp->mnt_stat.f_mntfromname, MNAMELEN);
-       bcopy(pth, mp->mnt_stat.f_mntonname, MNAMELEN);
        nmp->nm_nam = nam;
        /* Set up the sockets and per-host congestion */
        nmp->nm_sotype = argp->sotype;
index b2f51fc..0073b19 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs_vfsops.c,v 1.20.2.5 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.25 2004/12/17 00:18:29 dillon Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $
  */
 
 
@@ -355,19 +355,6 @@ ntfs_mount(struct mount *mp,
                 ********************
                 */
 
-               /*
-                * Since this is a new mount, we want the names for
-                * the device and the mount point copied in.  If an
-                * error occurs,  the mountpoint is discarded by the
-                * upper level code.
-                */
-               /* Save "last mounted on" info for mount point (NULL pad)*/
-               copyinstr(      path,                           /* mount point*/
-                               mp->mnt_stat.f_mntonname,       /* save area*/
-                               MNAMELEN - 1,                   /* max size*/
-                               &size);                         /* real size*/
-               bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
                /* Save "mounted from" info for mount point (NULL pad)*/
                copyinstr(      args.fspec,                     /* device name*/
                                mp->mnt_stat.f_mntfromname,     /* save area*/
@@ -385,8 +372,8 @@ ntfs_mount(struct mount *mp,
 dostatfs:
 #endif
        /*
-        * Initialize FS stat information in mount struct; uses both
-        * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname
+        * Initialize FS stat information in mount struct; uses
+        * mp->mnt_stat.f_mntfromname.
         *
         * This code is common to root and non-root mounts
         */
@@ -789,8 +776,6 @@ ntfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_files = mftallocated / ntfs_bntob(ntmp->ntm_bpmftrec) +
                       sbp->f_ffree;
        if (sbp != &mp->mnt_stat) {
-               bcopy((caddr_t)mp->mnt_stat.f_mntonname,
-                       (caddr_t)&sbp->f_mntonname[0], MNAMELEN);
                bcopy((caddr_t)mp->mnt_stat.f_mntfromname,
                        (caddr_t)&sbp->f_mntfromname[0], MNAMELEN);
        }
index 91e2655..aaf5de5 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)lofs_vfsops.c   1.2 (Berkeley) 6/18/92
  * $FreeBSD: src/sys/miscfs/nullfs/null_vfsops.c,v 1.35.2.3 2001/07/26 20:37:11 iedowse Exp $
- * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.15 2004/12/17 00:18:30 dillon Exp $
+ * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.16 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -190,14 +190,12 @@ nullfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = (qaddr_t) xmp;
        vfs_getnewfsid(mp);
 
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        (void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, MNAMELEN - 1,
            &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
        (void)nullfs_statfs(mp, &mp->mnt_stat, td);
        NULLFSDEBUG("nullfs_mount: lower %s, alias at %s\n",
-               mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname);
+               mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntfromname);
        return (0);
 }
 
@@ -305,7 +303,6 @@ nullfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = mstat.f_ffree;
        if (sbp != &mp->mnt_stat) {
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return (0);
index af10a0b..c06df55 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/nwfs/nwfs_vfsops.c,v 1.6.2.6 2001/10/25 19:18:54 dillon Exp $
- * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.14 2004/12/17 00:18:32 dillon Exp $
+ * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.15 2005/02/02 21:34:18 joerg Exp $
  */
 #include "opt_ncp.h"
 #ifndef NCP
@@ -201,8 +201,6 @@ nwfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        nmp->m.dir_mode  = (nmp->m.dir_mode &
                            (S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR;
        if ((error = nwfs_initnls(nmp)) != 0) goto bad;
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        pc = mp->mnt_stat.f_mntfromname;
        pe = pc+sizeof(mp->mnt_stat.f_mntfromname);
        bzero(pc, MNAMELEN);
@@ -463,7 +461,6 @@ nwfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
                sbp->f_fsid = mp->mnt_stat.f_fsid;      /* file system id */
                sbp->f_owner = mp->mnt_stat.f_owner;    /* user that mounted the filesystem */
                sbp->f_type = mp->mnt_vfc->vfc_typenum; /* type of filesystem */
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
index d6313e9..dc97443 100644 (file)
@@ -36,7 +36,7 @@
  *     @(#)portal_vfsops.c     8.11 (Berkeley) 5/14/95
  *
  * $FreeBSD: src/sys/miscfs/portal/portal_vfsops.c,v 1.26.2.2 2001/07/26 20:37:16 iedowse Exp $
- * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.14 2004/12/17 00:18:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.15 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -135,8 +135,6 @@ portal_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = (qaddr_t) fmp;
        vfs_getnewfsid(mp);
 
-       (void)copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        (void)copyinstr(args.pa_config,
            mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
@@ -226,7 +224,6 @@ portal_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return (0);
index 2f6fefd..502ab58 100644 (file)
@@ -37,7 +37,7 @@
  *     @(#)procfs_vfsops.c     8.7 (Berkeley) 5/10/95
  *
  * $FreeBSD: src/sys/miscfs/procfs/procfs_vfsops.c,v 1.32.2.1 2001/10/15 20:42:01 des Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.10 2004/12/17 00:18:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.11 2005/02/02 21:34:18 joerg Exp $
  */
 
 /*
@@ -85,9 +85,6 @@ procfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = 0;
        vfs_getnewfsid(mp);
 
-       (void) copyinstr(path, (caddr_t)mp->mnt_stat.f_mntonname, MNAMELEN, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
        size = sizeof("procfs") - 1;
        bcopy("procfs", mp->mnt_stat.f_mntfromname, size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
@@ -145,7 +142,6 @@ procfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
 
index 3293116..c7e845a 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/smbfs/smbfs_vfsops.c,v 1.2.2.5 2003/01/17 08:20:26 tjr Exp $
- * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.16 2004/12/17 00:18:35 dillon Exp $
+ * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.17 2005/02/02 21:34:18 joerg Exp $
  */
 #include "opt_netsmb.h"
 #ifndef NETSMB
@@ -200,10 +200,6 @@ smbfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
                            (S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR;
 
 /*     simple_lock_init(&smp->sm_npslock);*/
-       error = copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       if (error)
-               goto bad;
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        pc = mp->mnt_stat.f_mntfromname;
        pe = pc + sizeof(mp->mnt_stat.f_mntfromname);
        bzero(pc, MNAMELEN);
@@ -414,7 +410,6 @@ smbfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
                sbp->f_fsid = mp->mnt_stat.f_fsid;      /* file system id */
                sbp->f_owner = mp->mnt_stat.f_owner;    /* user that mounted the filesystem */
                sbp->f_type = mp->mnt_vfc->vfc_typenum; /* type of filesystem */
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
index 18f5b5f..a9b41b3 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/udf/udf_vfsops.c,v 1.16 2003/11/05 06:56:08 scottl Exp $
- * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.11 2004/12/17 00:18:36 dillon Exp $
+ * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.12 2005/02/02 21:34:18 joerg Exp $
  */
 
 /* udf_vfsops.c */
@@ -196,8 +196,6 @@ udf_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
 
        imp->im_flags = args.flags;
 
-       copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
        udf_statfs(mp, &mp->mnt_stat, td);
@@ -475,7 +473,6 @@ udf_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = 0;
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
 
index 5d3282e..ce016df 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     from: @(#)ffs_softdep.c 9.59 (McKusick) 6/21/00
  * $FreeBSD: src/sys/ufs/ffs/ffs_softdep.c,v 1.57.2.11 2002/02/05 18:46:53 dillon Exp $
- * $DragonFly: src/sys/vfs/ufs/ffs_softdep.c,v 1.20 2004/11/09 04:41:47 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ffs_softdep.c,v 1.21 2005/02/02 21:34:19 joerg Exp $
  */
 
 /*
@@ -4935,7 +4935,7 @@ softdep_deallocate_dependencies(bp)
 
        if ((bp->b_flags & B_ERROR) == 0)
                panic("softdep_deallocate_dependencies: dangling deps");
-       softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntonname, bp->b_error);
+       softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntfromname, bp->b_error);
        panic("softdep_deallocate_dependencies: unrecovered I/O error");
 }
 
index 0146b0f..8eab64b 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)ffs_vfsops.c        8.31 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.117.2.10 2002/06/23 22:34:52 iedowse Exp $
- * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.29 2004/12/17 00:18:44 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.30 2005/02/02 21:34:19 joerg Exp $
  */
 
 #include "opt_quota.h"
@@ -352,19 +352,6 @@ ffs_mount(struct mount *mp,                /* mount struct pointer */
                 ********************
                 */
 
-               /*
-                * Since this is a new mount, we want the names for
-                * the device and the mount point copied in.  If an
-                * error occurs,  the mountpoint is discarded by the
-                * upper level code.
-                */
-               /* Save "last mounted on" info for mount point (NULL pad)*/
-               copyinstr(      path,                           /* mount point*/
-                               mp->mnt_stat.f_mntonname,       /* save area*/
-                               MNAMELEN - 1,                   /* max size*/
-                               &size);                         /* real size*/
-               bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
                /* Save "mounted from" info for mount point (NULL pad)*/
                copyinstr(      args.fspec,                     /* device name*/
                                mp->mnt_stat.f_mntfromname,     /* save area*/
@@ -380,8 +367,8 @@ ffs_mount(struct mount *mp,         /* mount struct pointer */
 
 dostatfs:
        /*
-        * Initialize FS stat information in mount struct; uses both
-        * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname
+        * Initialize FS stat information in mount struct; uses
+        * mp->mnt_stat.f_mntfromname.
         *
         * This code is common to root and non-root mounts
         */
@@ -754,15 +741,6 @@ ffs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td,
        dev->si_mountpoint = mp;
        ffs_oldfscompat(fs);
 
-       /*
-        * Set FS local "last mounted on" information (NULL pad)
-        */
-       copystr(        mp->mnt_stat.f_mntonname,       /* mount point*/
-                       fs->fs_fsmnt,                   /* copy area*/
-                       sizeof(fs->fs_fsmnt) - 1,       /* max size*/
-                       &strsize);                      /* real size*/
-       bzero( fs->fs_fsmnt + strsize, sizeof(fs->fs_fsmnt) - strsize);
-
        if( mp->mnt_flag & MNT_ROOTFS) {
                /*
                 * Root mount; update timestamp in mount structure.
@@ -948,8 +926,6 @@ ffs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = fs->fs_cstotal.cs_nifree;
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy((caddr_t)mp->mnt_stat.f_mntonname,
-                       (caddr_t)&sbp->f_mntonname[0], MNAMELEN);
                bcopy((caddr_t)mp->mnt_stat.f_mntfromname,
                        (caddr_t)&sbp->f_mntfromname[0], MNAMELEN);
        }
index d552f6d..a6f0acd 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)ufs_lookup.c        8.15 (Berkeley) 6/16/95
  * $FreeBSD: src/sys/ufs/ufs/ufs_lookup.c,v 1.33.2.7 2001/09/22 19:22:13 iedowse Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.16 2004/11/12 00:09:52 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.17 2005/02/02 21:34:19 joerg Exp $
  */
 
 #include "opt_ufs.h"
@@ -604,7 +604,7 @@ ufs_dirbad(struct inode *ip, doff_t offset, char *how)
 
        mp = ITOV(ip)->v_mount;
        (void)printf("%s: bad dir ino %lu at offset %ld: %s\n",
-           mp->mnt_stat.f_mntonname, (u_long)ip->i_number, (long)offset, how);
+           mp->mnt_stat.f_mntfromname, (u_long)ip->i_number, (long)offset, how);
        if ((mp->mnt_flag & MNT_RDONLY) == 0)
                panic("ufs_dirbad: bad dir");
 }
index e16bedc..d4dbb30 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)ufs_quota.c 8.5 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/ufs/ufs/ufs_quota.c,v 1.27.2.3 2002/01/15 10:33:32 phk Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.17 2004/11/12 00:09:52 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.18 2005/02/02 21:34:19 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -187,7 +187,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type)
                if ((dq->dq_flags & DQ_BLKS) == 0 &&
                    ip->i_uid == cred->cr_uid) {
                        uprintf("\n%s: write failed, %s disk limit reached\n",
-                           ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                           ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                            quotatypes[type]);
                        dq->dq_flags |= DQ_BLKS;
                }
@@ -203,7 +203,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type)
                            VFSTOUFS(ITOV(ip)->v_mount)->um_btime[type];
                        if (ip->i_uid == cred->cr_uid)
                                uprintf("\n%s: warning, %s %s\n",
-                                   ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                                   ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                                    quotatypes[type], "disk quota exceeded");
                        return (0);
                }
@@ -211,7 +211,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type)
                        if ((dq->dq_flags & DQ_BLKS) == 0 &&
                            ip->i_uid == cred->cr_uid) {
                                uprintf("\n%s: write failed, %s %s\n",
-                                   ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                                   ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                                    quotatypes[type],
                                    "disk quota exceeded for too long");
                                dq->dq_flags |= DQ_BLKS;
@@ -300,7 +300,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type)
                if ((dq->dq_flags & DQ_INODS) == 0 &&
                    ip->i_uid == cred->cr_uid) {
                        uprintf("\n%s: write failed, %s inode limit reached\n",
-                           ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                           ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                            quotatypes[type]);
                        dq->dq_flags |= DQ_INODS;
                }
@@ -316,7 +316,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type)
                            VFSTOUFS(ITOV(ip)->v_mount)->um_itime[type];
                        if (ip->i_uid == cred->cr_uid)
                                uprintf("\n%s: warning, %s %s\n",
-                                   ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                                   ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                                    quotatypes[type], "inode quota exceeded");
                        return (0);
                }
@@ -324,7 +324,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type)
                        if ((dq->dq_flags & DQ_INODS) == 0 &&
                            ip->i_uid == cred->cr_uid) {
                                uprintf("\n%s: write failed, %s %s\n",
-                                   ITOV(ip)->v_mount->mnt_stat.f_mntonname,
+                                   ITOV(ip)->v_mount->mnt_stat.f_mntfromname,
                                    quotatypes[type],
                                    "inode quota exceeded for too long");
                                dq->dq_flags |= DQ_INODS;
index db83c0e..680ebfe 100644 (file)
@@ -36,7 +36,7 @@
  *     @(#)umap_vfsops.c       8.8 (Berkeley) 5/14/95
  *
  * $FreeBSD: src/sys/miscfs/umapfs/umap_vfsops.c,v 1.31.2.2 2001/09/11 09:49:53 kris Exp $
- * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.15 2004/12/17 00:18:46 dillon Exp $
+ * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.16 2005/02/02 21:34:19 joerg Exp $
  */
 
 /*
@@ -229,16 +229,10 @@ umapfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = (qaddr_t) amp;
        vfs_getnewfsid(mp);
 
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        (void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, MNAMELEN - 1,
            &size);
        bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
        (void)umapfs_statfs(mp, &mp->mnt_stat, td);
-#ifdef DEBUG
-       printf("umapfs_mount: lower %s, alias at %s\n",
-               mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname);
-#endif
        return (0);
 }
 
@@ -352,7 +346,6 @@ umapfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        sbp->f_ffree = mstat.f_ffree;
        if (sbp != &mp->mnt_stat) {
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return (0);
index 83ec453..cfd50c7 100644 (file)
@@ -36,7 +36,7 @@
  *
  *     @(#)union_vfsops.c      8.20 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/miscfs/union/union_vfsops.c,v 1.39.2.2 2001/10/25 19:18:53 dillon Exp $
- * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.18 2004/12/17 00:18:47 dillon Exp $
+ * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.19 2005/02/02 21:34:19 joerg Exp $
  */
 
 /*
@@ -249,9 +249,6 @@ union_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
        mp->mnt_data = (qaddr_t) um;
        vfs_getnewfsid(mp);
 
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
-
        switch (um->um_op) {
        case UNMNT_ABOVE:
                cp = "<above>:";
@@ -276,8 +273,6 @@ union_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
 
        (void)union_statfs(mp, &mp->mnt_stat, td);
 
-       UDEBUG(("union_mount: from %s, on %s\n",
-               mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname));
        return (0);
 
 bad:
@@ -446,7 +441,6 @@ union_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
        if (sbp != &mp->mnt_stat) {
                sbp->f_type = mp->mnt_vfc->vfc_typenum;
                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        return (0);