Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2016 12:41:53 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Alexander Motin <mav@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r297337 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <20160328094153.GD1741@kib.kiev.ua>
In-Reply-To: <201603280812.u2S8CTde080966@repo.freebsd.org>
References:  <201603280812.u2S8CTde080966@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160328094153.GD1741>