#else
static fmode_t
#endif
-vdev_bdev_mode(spa_mode_t spa_mode)
+vdev_bdev_mode(spa_mode_t spa_mode, boolean_t exclusive)
{
#ifdef HAVE_BLK_MODE_T
blk_mode_t mode = 0;
if (spa_mode & SPA_MODE_WRITE)
mode |= BLK_OPEN_WRITE;
+
+ if (exclusive)
+ mode |= BLK_OPEN_EXCL;
#else
fmode_t mode = 0;
if (spa_mode & SPA_MODE_WRITE)
mode |= FMODE_WRITE;
+
+ if (exclusive)
+ mode |= FMODE_EXCL;
#endif
return (mode);
{
#ifdef HAVE_BLKDEV_GET_BY_PATH_4ARG
return (blkdev_get_by_path(path,
- vdev_bdev_mode(mode) | BLK_OPEN_EXCL, holder, hops));
+ vdev_bdev_mode(mode, B_TRUE), holder, hops));
#else
return (blkdev_get_by_path(path,
- vdev_bdev_mode(mode) | FMODE_EXCL, holder));
+ vdev_bdev_mode(mode, B_TRUE), holder));
#endif
}
#ifdef HAVE_BLKDEV_PUT_HOLDER
return (blkdev_put(bdev, holder));
#else
- return (blkdev_put(bdev, vdev_bdev_mode(mode) | FMODE_EXCL));
+ return (blkdev_put(bdev, vdev_bdev_mode(mode, B_TRUE)));
#endif
}
{
struct block_device *bdev;
#ifdef HAVE_BLK_MODE_T
- blk_mode_t mode = vdev_bdev_mode(spa_mode(v->vdev_spa));
+ blk_mode_t mode = vdev_bdev_mode(spa_mode(v->vdev_spa), B_FALSE);
#else
- fmode_t mode = vdev_bdev_mode(spa_mode(v->vdev_spa));
+ fmode_t mode = vdev_bdev_mode(spa_mode(v->vdev_spa), B_FALSE);
#endif
hrtime_t timeout = MSEC2NSEC(zfs_vdev_open_timeout_ms);
vdev_disk_t *vd;