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.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"