On Sun, Apr 24, 2016 at 01:48:04PM +0200, Stefan Kempf wrote: > > Diff reads good to me. Any reason why you changed setting f_mntfromname > from "fusefs" to "fuse"?
No, it's a typo; updated diff below. Thanks! natano Index: isofs/cd9660/cd9660_vfsops.c =================================================================== RCS file: /cvs/src/sys/isofs/cd9660/cd9660_vfsops.c,v retrieving revision 1.77 diff -u -p -r1.77 cd9660_vfsops.c --- isofs/cd9660/cd9660_vfsops.c 27 Mar 2016 11:39:37 -0000 1.77 +++ isofs/cd9660/cd9660_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -383,6 +383,7 @@ iso_mountfs(devvp, mp, p, argp) mp->mnt_data = (qaddr_t)isomp; mp->mnt_stat.f_fsid.val[0] = (long)dev; mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; + mp->mnt_stat.f_namemax = NAME_MAX; mp->mnt_flag |= MNT_LOCAL; isomp->im_mountp = mp; isomp->im_dev = dev; @@ -650,13 +651,9 @@ cd9660_statfs(mp, sbp, p) sbp->f_bavail = 0; /* blocks free for non superuser */ sbp->f_files = 0; /* total files */ sbp->f_ffree = 0; /* free file nodes */ - if (sbp != &mp->mnt_stat) { - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); - bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, - MNAMELEN); - bcopy(&mp->mnt_stat.mount_info.iso_args, - &sbp->mount_info.iso_args, sizeof(struct iso_args)); - } + sbp->f_favail = 0; /* file nodes free for non superuser */ + copy_statfs_info(sbp, mp); + return (0); } Index: isofs/udf/udf_vfsops.c =================================================================== RCS file: /cvs/src/sys/isofs/udf/udf_vfsops.c,v retrieving revision 1.49 diff -u -p -r1.49 udf_vfsops.c --- isofs/udf/udf_vfsops.c 27 Mar 2016 11:39:37 -0000 1.49 +++ isofs/udf/udf_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -264,6 +264,7 @@ udf_mountfs(struct vnode *devvp, struct mp->mnt_data = (qaddr_t) ump; mp->mnt_stat.f_fsid.val[0] = devvp->v_rdev; mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; + mp->mnt_stat.f_namemax = NAME_MAX; mp->mnt_flag |= MNT_LOCAL; ump->um_mountp = mp; @@ -542,6 +543,8 @@ udf_statfs(struct mount *mp, struct stat sbp->f_bavail = 0; sbp->f_files = 0; sbp->f_ffree = 0; + sbp->f_favail = 0; + copy_statfs_info(sbp, mp); return (0); } Index: kern/vfs_subr.c =================================================================== RCS file: /cvs/src/sys/kern/vfs_subr.c,v retrieving revision 1.244 diff -u -p -r1.244 vfs_subr.c --- kern/vfs_subr.c 7 Apr 2016 09:58:11 -0000 1.244 +++ kern/vfs_subr.c 19 Apr 2016 18:52:52 -0000 @@ -2276,6 +2276,6 @@ copy_statfs_info(struct statfs *sbp, con memcpy(sbp->f_mntonname, mp->mnt_stat.f_mntonname, MNAMELEN); memcpy(sbp->f_mntfromname, mp->mnt_stat.f_mntfromname, MNAMELEN); memcpy(sbp->f_mntfromspec, mp->mnt_stat.f_mntfromspec, MNAMELEN); - memcpy(&sbp->mount_info.ufs_args, &mp->mnt_stat.mount_info.ufs_args, - sizeof(struct ufs_args)); + memcpy(&sbp->mount_info, &mp->mnt_stat.mount_info, + sizeof(union mount_info)); } Index: miscfs/fuse/fuse_vfsops.c =================================================================== RCS file: /cvs/src/sys/miscfs/fuse/fuse_vfsops.c,v retrieving revision 1.20 diff -u -p -r1.20 fuse_vfsops.c --- miscfs/fuse/fuse_vfsops.c 27 Mar 2016 11:39:37 -0000 1.20 +++ miscfs/fuse/fuse_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -111,7 +111,9 @@ fusefs_mount(struct mount *mp, const cha bzero(mp->mnt_stat.f_mntonname, MNAMELEN); strlcpy(mp->mnt_stat.f_mntonname, path, MNAMELEN); bzero(mp->mnt_stat.f_mntfromname, MNAMELEN); - bcopy("fusefs", mp->mnt_stat.f_mntfromname, sizeof("fusefs")); + strlcpy(mp->mnt_stat.f_mntfromname, "fusefs", MNAMELEN); + bzero(mp->mnt_stat.f_mntfromspec, MNAMELEN); + strlcpy(mp->mnt_stat.f_mntfromspec, "fusefs", MNAMELEN); fuse_device_set_fmp(fmp, 1); fbuf = fb_setup(0, 0, FBT_INIT, p); @@ -204,6 +206,8 @@ fusefs_statfs(struct mount *mp, struct s fmp = VFSTOFUSEFS(mp); + copy_statfs_info(sbp, mp); + if (fmp->sess_init) { fbuf = fb_setup(0, FUSE_ROOT_ID, FBT_STATFS, p); @@ -219,7 +223,9 @@ fusefs_statfs(struct mount *mp, struct s sbp->f_blocks = fbuf->fb_stat.f_blocks; sbp->f_files = fbuf->fb_stat.f_files; sbp->f_ffree = fbuf->fb_stat.f_ffree; + sbp->f_favail = fbuf->fb_stat.f_favail; sbp->f_bsize = fbuf->fb_stat.f_frsize; + sbp->f_iosize = fbuf->fb_stat.f_bsize; sbp->f_namemax = fbuf->fb_stat.f_namemax; fb_delete(fbuf); } else { @@ -227,8 +233,10 @@ fusefs_statfs(struct mount *mp, struct s sbp->f_bfree = 0; sbp->f_blocks = 0; sbp->f_ffree = 0; + sbp->f_favail = 0; sbp->f_files = 0; sbp->f_bsize = 0; + sbp->f_iosize = 0; sbp->f_namemax = 0; } Index: msdosfs/msdosfs_vfsops.c =================================================================== RCS file: /cvs/src/sys/msdosfs/msdosfs_vfsops.c,v retrieving revision 1.76 diff -u -p -r1.76 msdosfs_vfsops.c --- msdosfs/msdosfs_vfsops.c 27 Mar 2016 11:39:37 -0000 1.76 +++ msdosfs/msdosfs_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -252,6 +252,11 @@ msdosfs_mount(struct mount *mp, const ch } } + if (pmp->pm_flags & MSDOSFSMNT_LONGNAME) + mp->mnt_stat.f_namemax = WIN_MAXLEN; + else + mp->mnt_stat.f_namemax = 12; + bzero(mp->mnt_stat.f_mntonname, MNAMELEN); strlcpy(mp->mnt_stat.f_mntonname, path, MNAMELEN); bzero(mp->mnt_stat.f_mntfromname, MNAMELEN); @@ -667,14 +672,9 @@ msdosfs_statfs(struct mount *mp, struct sbp->f_bfree = pmp->pm_freeclustercount; sbp->f_bavail = pmp->pm_freeclustercount; sbp->f_files = pmp->pm_RootDirEnts; /* XXX */ - sbp->f_ffree = 0; /* what to put in here? */ - if (sbp != &mp->mnt_stat) { - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); - bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); - bcopy(&mp->mnt_stat.mount_info.msdosfs_args, - &sbp->mount_info.msdosfs_args, sizeof(struct msdosfs_args)); - } - strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); + sbp->f_ffree = sbp->f_favail = 0; /* what to put in here? */ + copy_statfs_info(sbp, mp); + return (0); } Index: nfs/nfs_vfsops.c =================================================================== RCS file: /cvs/src/sys/nfs/nfs_vfsops.c,v retrieving revision 1.108 diff -u -p -r1.108 nfs_vfsops.c --- nfs/nfs_vfsops.c 17 Mar 2016 18:52:31 -0000 1.108 +++ nfs/nfs_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -152,7 +152,6 @@ nfs_statfs(struct mount *mp, struct stat tquad = fxdr_hyper(&sfp->sf_ffiles); sbp->f_ffree = tquad; sbp->f_favail = tquad; - sbp->f_namemax = MAXNAMLEN; } else { sbp->f_bsize = fxdr_unsigned(int32_t, sfp->sf_bsize); sbp->f_blocks = fxdr_unsigned(int32_t, sfp->sf_blocks); @@ -160,6 +159,7 @@ nfs_statfs(struct mount *mp, struct stat sbp->f_bavail = fxdr_unsigned(int32_t, sfp->sf_bavail); sbp->f_files = 0; sbp->f_ffree = 0; + sbp->f_favail = 0; } copy_statfs_info(sbp, mp); m_freem(info.nmi_mrep); @@ -641,10 +641,13 @@ mountnfs(struct nfs_args *argp, struct m nmp->nm_acdirmin = NFS_MINATTRTIMO; nmp->nm_acdirmax = NFS_MAXATTRTIMO; bcopy(argp->fh, nmp->nm_fh, argp->fhsize); - strncpy(&mp->mnt_stat.f_fstypename[0], mp->mnt_vfc->vfc_name, MFSNAMELEN); - bcopy(pth, mp->mnt_stat.f_mntonname, MNAMELEN); - bcopy(hst, mp->mnt_stat.f_mntfromname, MNAMELEN); - bcopy(hst, mp->mnt_stat.f_mntfromspec, MNAMELEN); + mp->mnt_stat.f_namemax = MAXNAMLEN; + memset(mp->mnt_stat.f_mntonname, 0, MNAMELEN); + strlcpy(mp->mnt_stat.f_mntonname, pth, MNAMELEN); + memset(mp->mnt_stat.f_mntfromname, 0, MNAMELEN); + strlcpy(mp->mnt_stat.f_mntfromname, hst, MNAMELEN); + memset(mp->mnt_stat.f_mntfromspec, 0, MNAMELEN); + strlcpy(mp->mnt_stat.f_mntfromspec, hst, MNAMELEN); bcopy(argp, &mp->mnt_stat.mount_info.nfs_args, sizeof(*argp)); nmp->nm_nam = nam; nfs_decode_args(nmp, argp, &mp->mnt_stat.mount_info.nfs_args); Index: ntfs/ntfs_vfsops.c =================================================================== RCS file: /cvs/src/sys/ntfs/ntfs_vfsops.c,v retrieving revision 1.49 diff -u -p -r1.49 ntfs_vfsops.c --- ntfs/ntfs_vfsops.c 27 Mar 2016 11:39:37 -0000 1.49 +++ ntfs/ntfs_vfsops.c 19 Apr 2016 18:52:52 -0000 @@ -436,6 +436,7 @@ ntfs_mountfs(struct vnode *devvp, struct mp->mnt_stat.f_fsid.val[0] = dev; mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; + mp->mnt_stat.f_namemax = NTFS_MAXFILENAME; mp->mnt_flag |= MNT_LOCAL; devvp->v_specmountpoint = mp; return (0); @@ -609,17 +610,10 @@ ntfs_statfs(struct mount *mp, struct sta sbp->f_iosize = ntmp->ntm_bps * ntmp->ntm_spc; sbp->f_blocks = ntmp->ntm_bootfile.bf_spv; sbp->f_bfree = sbp->f_bavail = ntfs_cntobn(ntmp->ntm_cfree); - sbp->f_ffree = sbp->f_bfree / ntmp->ntm_bpmftrec; + sbp->f_ffree = sbp->f_favail = sbp->f_bfree / ntmp->ntm_bpmftrec; sbp->f_files = mftallocated / ntfs_bntob(ntmp->ntm_bpmftrec) + sbp->f_ffree; - sbp->f_flags = mp->mnt_flag; - if (sbp != &mp->mnt_stat) { - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); - bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); - bcopy(&mp->mnt_stat.mount_info.ntfs_args, - &sbp->mount_info.ntfs_args, sizeof(struct ntfs_args)); - } - strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); + copy_statfs_info(sbp, mp); return (0); } Index: ufs/ext2fs/ext2fs_vfsops.c =================================================================== RCS file: /cvs/src/sys/ufs/ext2fs/ext2fs_vfsops.c,v retrieving revision 1.89 diff -u -p -r1.89 ext2fs_vfsops.c --- ufs/ext2fs/ext2fs_vfsops.c 27 Mar 2016 11:39:37 -0000 1.89 +++ ufs/ext2fs/ext2fs_vfsops.c 19 Apr 2016 18:52:53 -0000 @@ -293,6 +293,7 @@ ext2fs_mount(struct mount *mp, const cha strlcpy(mp->mnt_stat.f_mntfromname, fname, MNAMELEN); memset(mp->mnt_stat.f_mntfromspec, 0, MNAMELEN); strlcpy(mp->mnt_stat.f_mntfromspec, fspec, MNAMELEN); + memcpy(&mp->mnt_stat.mount_info.ufs_args, &args, sizeof(args)); if (fs->e2fs_fmod != 0) { /* XXX */ fs->e2fs_fmod = 0; @@ -583,6 +584,7 @@ ext2fs_mountfs(struct vnode *devvp, stru mp->mnt_data = (qaddr_t)ump; mp->mnt_stat.f_fsid.val[0] = (long)dev; mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; + mp->mnt_stat.f_namemax = MAXNAMLEN; mp->mnt_flag |= MNT_LOCAL; ump->um_mountp = mp; ump->um_dev = dev; @@ -711,13 +713,9 @@ ext2fs_statfs(struct mount *mp, struct s sbp->f_bfree = fs->e2fs.e2fs_fbcount; sbp->f_bavail = sbp->f_bfree - fs->e2fs.e2fs_rbcount; sbp->f_files = fs->e2fs.e2fs_icount; - sbp->f_ffree = fs->e2fs.e2fs_ficount; - if (sbp != &mp->mnt_stat) { - memcpy(sbp->f_mntonname, mp->mnt_stat.f_mntonname, MNAMELEN); - memcpy(sbp->f_mntfromname, mp->mnt_stat.f_mntfromname, MNAMELEN); - memcpy(sbp->f_mntfromspec, mp->mnt_stat.f_mntfromspec, MNAMELEN); - } - strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); + sbp->f_favail = sbp->f_ffree = fs->e2fs.e2fs_ficount; + copy_statfs_info(sbp, mp); + return (0); } Index: ufs/mfs/mfs_extern.h =================================================================== RCS file: /cvs/src/sys/ufs/mfs/mfs_extern.h,v retrieving revision 1.18 diff -u -p -r1.18 mfs_extern.h --- ufs/mfs/mfs_extern.h 21 Dec 2010 20:14:44 -0000 1.18 +++ ufs/mfs/mfs_extern.h 19 Apr 2016 18:52:53 -0000 @@ -49,7 +49,6 @@ extern struct vops mfs_vops; int mfs_mount(struct mount *, const char *, void *, struct nameidata *, struct proc *); int mfs_start(struct mount *, int, struct proc *); -int mfs_statfs(struct mount *, struct statfs *, struct proc *); int mfs_init(struct vfsconf *); int mfs_checkexp(struct mount *, struct mbuf *, int *, struct ucred **); Index: ufs/mfs/mfs_vfsops.c =================================================================== RCS file: /cvs/src/sys/ufs/mfs/mfs_vfsops.c,v retrieving revision 1.49 diff -u -p -r1.49 mfs_vfsops.c --- ufs/mfs/mfs_vfsops.c 14 Mar 2016 23:08:06 -0000 1.49 +++ ufs/mfs/mfs_vfsops.c 19 Apr 2016 18:52:53 -0000 @@ -65,7 +65,7 @@ const struct vfsops mfs_vfsops = { ffs_unmount, ufs_root, ufs_quotactl, - mfs_statfs, + ffs_statfs, ffs_sync, ffs_vget, ffs_fhtovp, @@ -207,22 +207,6 @@ mfs_start(struct mount *mp, int flags, s sleepreturn = tsleep((caddr_t)vp, mfs_pri, "mfsidl", 0); } return (0); -} - -/* - * Get file system statistics. - */ -int -mfs_statfs(struct mount *mp, struct statfs *sbp, struct proc *p) -{ - int error; - - error = ffs_statfs(mp, sbp, p); - strncpy(&sbp->f_fstypename[0], mp->mnt_vfc->vfc_name, MFSNAMELEN); - if (sbp != &mp->mnt_stat) - memcpy(&sbp->mount_info.mfs_args, - &mp->mnt_stat.mount_info.mfs_args, sizeof(struct mfs_args)); - return (error); } /*