On 22.09.2019 18:22, Christos Zoulas wrote:
> On Sep 22, 5:58pm, n54%gmx.com@localhost (Kamil Rytarowski) wrote:
> -- Subject: Re: wedge device to name
>
> | I understand and I know. Unfortunately (or fortunately) we will need to
> | live with the old syscall forever.
>
> Yes, but cleaning the old code is obvious and simple. Untangling the
> sysctl-augmented API mess is nearly impossible.
>
Looking at the diff here, just adding f_mntfromlabel[] is a better
choice and it does not make too much dead code in old syscall version.
I propose to go for versioning here.
> | A programmer friendly wrapper of sysctl could be implemented in libutil.
>
> That is not really needed for the userland part; there is sysctlybyname();
>
> Here's the actual change compared to ~100s of lines of sysctl code:
>
> Index: kern/vfs_subr.c
> ===================================================================
> RCS file: /cvsroot/src/sys/kern/vfs_subr.c,v
> retrieving revision 1.471
> diff -u -u -r1.471 vfs_subr.c
> --- kern/vfs_subr.c 1 Jan 2019 10:06:54 -0000 1.471
> +++ kern/vfs_subr.c 22 Sep 2019 16:17:49 -0000
> @@ -1198,6 +1198,8 @@
> sizeof(sbp->f_mntonname));
> (void)memcpy(sbp->f_mntfromname, mp->mnt_stat.f_mntfromname,
> sizeof(sbp->f_mntfromname));
> + (void)memcpy(sbp->f_mntfromlabel, mp->mnt_stat.f_mntfromlabel,
> + sizeof(sbp->f_mntfromlabel));
> sbp->f_namemax = mbp->f_namemax;
> }
>
> Index: sys/statvfs.h
> ===================================================================
> RCS file: /cvsroot/src/sys/sys/statvfs.h,v
> retrieving revision 1.18
> diff -u -b -w -u -r1.18 statvfs.h
> --- sys/statvfs.h 5 Apr 2013 17:34:27 -0000 1.18
> +++ sys/statvfs.h 22 Sep 2019 16:18:43 -0000
> @@ -96,6 +96,7 @@
> char f_fstypename[_VFS_NAMELEN]; /* fs type name */
> char f_mntonname[_VFS_MNAMELEN]; /* directory on which mounted */
> char f_mntfromname[_VFS_MNAMELEN]; /* mounted file system */
> + char f_mntfromlabel[_VFS_MNAMELEN]; /* disk label name if available */
>
> };
>
> Index: miscfs/specfs/spec_vnops.c
> ===================================================================
> RCS file: /cvsroot/src/sys/miscfs/specfs/spec_vnops.c,v
> retrieving revision 1.175
> diff -u -r1.175 spec_vnops.c
> --- miscfs/specfs/spec_vnops.c 3 Sep 2018 16:29:35 -0000 1.175
> +++ miscfs/specfs/spec_vnops.c 22 Sep 2019 16:19:53 -0000
> @@ -75,6 +75,7 @@
> #include <sys/poll.h>
> #include <sys/file.h>
> #include <sys/disklabel.h>
> +#include <sys/disk.h>
> #include <sys/lockf.h>
> #include <sys/tty.h>
> #include <sys/kauth.h>
> @@ -366,10 +367,19 @@
> void
> spec_node_setmountedfs(vnode_t *devvp, struct mount *mp)
> {
> + struct dkwedge_info dkw;
>
> KASSERT(devvp->v_type == VBLK);
> KASSERT(devvp->v_specnode->sn_dev->sd_mountpoint == NULL || mp == NULL);
> devvp->v_specnode->sn_dev->sd_mountpoint = mp;
> + if (mp == NULL)
> + return;
> +
> + if (bdev_ioctl(devvp->v_rdev, DIOCGWEDGEINFO, &dkw, FREAD, curlwp) != 0)
> + return;
> +
> + strlcpy(mp->mnt_stat.f_mntfromlabel, dkw.dkw_wname,
> + sizeof(mp->mnt_stat.f_mntfromlabel));
> }
>
> /*
>
> And I do understand how much code is needed for compat:
>
> Legend:
>
> + required change
> - autogenerated file
>
> The rest are because of compat and glue.
>
> christos
>
> + M bin/df/df.c
> M lib/libc/shlib_version
> M lib/libc/compat/gen/Makefile.inc
> A lib/libc/compat/gen/compat___getmntinfo13.c
> M lib/libc/compat/gen/compat_opendir.c
> M lib/libc/compat/sys/Makefile.inc
> A lib/libc/compat/sys/compat___fhstatvfs140.c
> A lib/libc/compat/sys/compat___fhstatvfs40.c
> M lib/libc/compat/sys/compat_fhstatvfs.c
> M lib/libc/compat/sys/compat_fhstatvfs1.c
> M lib/libc/compat/sys/compat_statfs.c
> A lib/libc/compat/sys/compat_statvfs.c
> M lib/libc/include/namespace.h
> M lib/libc/sys/Makefile.inc
> M lib/libc/sys/statvfs.c
> A sys/compat/common/compat_90_mod.c
> M sys/compat/common/compat_mod.h
> M sys/compat/common/files.common
> M sys/compat/common/vfs_syscalls_20.c
> M sys/compat/common/vfs_syscalls_30.c
> A sys/compat/common/vfs_syscalls_90.c
> M sys/compat/netbsd32/files.netbsd32
> M sys/compat/netbsd32/netbsd32.h
> A sys/compat/netbsd32/netbsd32_compat_90.c
> M sys/compat/netbsd32/netbsd32_conv.h
> M sys/compat/netbsd32/netbsd32_fs.c
> - M sys/compat/netbsd32/netbsd32_syscall.h
> - M sys/compat/netbsd32/netbsd32_syscallargs.h
> - M sys/compat/netbsd32/netbsd32_syscalls.c
> - M sys/compat/netbsd32/netbsd32_syscalls_autoload.c
> - M sys/compat/netbsd32/netbsd32_sysent.c
> - M sys/compat/netbsd32/netbsd32_systrace_args.c
> M sys/compat/netbsd32/syscalls.conf
> M sys/compat/netbsd32/syscalls.master
> A sys/conf/compat_netbsd90.config
> M sys/conf/files
> - M sys/kern/init_sysent.c
> - M sys/kern/syscalls.c
> - M sys/kern/syscalls.conf
> - M sys/kern/syscalls.master
> - M sys/kern/syscalls_autoload.c
> - M sys/kern/systrace_args.c
> + M sys/kern/vfs_subr.c
> - M sys/kern/vfs_syscalls.c
> + M sys/miscfs/specfs/spec_vnops.c
> M sys/modules/Makefile
> A sys/modules/compat_90/Makefile
> A sys/modules/compat_netbsd32_90/Makefile
> - M sys/rump/rump.sysmap
> - M sys/rump/include/rump/rump_syscalls.h
> - M sys/rump/librump/rumpkern/rump_syscalls.c
> - M sys/rump/librump/rumpkern/rumpkern_syscalls.c
> - M sys/rump/librump/rumpnet/rumpnet_syscalls.c
> - M sys/rump/librump/rumpvfs/rumpvfs_syscalls.c
> M sys/sys/param.h
> + M sys/sys/statvfs.h
> - M sys/sys/syscall.h
> - M sys/sys/syscallargs.h
>
Attachment:
signature.asc
Description: OpenPGP digital signature