On Sep 22, 5:58pm, n...@gmx.com (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. | 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