tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: wedge device to name



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



Home | Main Index | Thread Index | Old Index