svn commit: r297337 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Konstantin Belousov kostikbel at gmail.com
Mon Mar 28 09:41:59 UTC 2016


On Mon, Mar 28, 2016 at 08:12:29AM +0000, Alexander Motin wrote:
> Author: mav
> Date: Mon Mar 28 08:12:29 2016
> New Revision: 297337
> URL: https://svnweb.freebsd.org/changeset/base/297337
> 
> Log:
>   Pass through error code from make_dev_p().
>   
>   ENAMETOOLONG is much more informative in logs then ENXIO.
>   
>   MFC after:	1 week
> 
> Modified:
>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
> 
> Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
> ==============================================================================
> --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Mar 28 08:01:38 2016	(r297336)
> +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Mar 28 08:12:29 2016	(r297337)
> @@ -688,13 +688,14 @@ zvol_create_minor(const char *name)
>  		bioq_init(&zv->zv_queue);
>  		mtx_init(&zv->zv_queue_mtx, "zvol", NULL, MTX_DEF);
>  	} else if (zv->zv_volmode == ZFS_VOLMODE_DEV) {
> -		if (make_dev_p(MAKEDEV_CHECKNAME | MAKEDEV_WAITOK,
> +		error = make_dev_p(MAKEDEV_CHECKNAME | MAKEDEV_WAITOK,
>  		    &dev, &zvol_cdevsw, NULL, UID_ROOT, GID_OPERATOR,
> -		    0640, "%s/%s", ZVOL_DRIVER, name) != 0) {
> +		    0640, "%s/%s", ZVOL_DRIVER, name);
> +		if (error != 0) {
>  			kmem_free(zv, sizeof(*zv));
>  			dmu_objset_disown(os, FTAG);
>  			mutex_exit(&zfsdev_state_lock);
> -			return (SET_ERROR(ENXIO));
> +			return (error);
>  		}
>  		zv->zv_dev = dev;
>  		dev->si_iosize_max = MAXPHYS;
Did you considered switching to make_dev_s(9) KPI ?
The next line, not shown in the diff, is
		dev->si_drv2 = zv;
The make_dev_s() use would solve an issue where user mode request might
be executed before si_drv2 is assigned.


More information about the svn-src-head mailing list