--- sys/cddl/compat/opensolaris/sys/vnode.h +++ sys/cddl/compat/opensolaris/sys/vnode.h @@ -172,7 +172,8 @@ ASSERT(crwhy == CRCREAT); operation = CREATE; } else { - ASSERT(filemode == (FREAD | FWRITE | FOFFMAX)); + ASSERT(filemode == (FREAD | FOFFMAX) || + filemode == (FREAD | FWRITE | FOFFMAX)); ASSERT(crwhy == 0); operation = LOOKUP; } --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c +++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c @@ -69,6 +69,7 @@ if (vd->vdev_tsd != NULL) { ASSERT(vd->vdev_reopening); vf = vd->vdev_tsd; + vp = vf->vf_vnode; goto skip_open; } @@ -86,6 +87,8 @@ if (error) { vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; + kmem_free(vd->vdev_tsd, sizeof (vdev_file_t)); + vd->vdev_tsd = NULL; return (error); }