These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / md / dm-switch.c
index 50fca46..871c18f 100644 (file)
@@ -99,11 +99,11 @@ static int alloc_region_table(struct dm_target *ti, unsigned nr_paths)
        if (sector_div(nr_regions, sctx->region_size))
                nr_regions++;
 
-       sctx->nr_regions = nr_regions;
-       if (sctx->nr_regions != nr_regions || sctx->nr_regions >= ULONG_MAX) {
+       if (nr_regions >= ULONG_MAX) {
                ti->error = "Region table too large";
                return -EINVAL;
        }
+       sctx->nr_regions = nr_regions;
 
        nr_slots = nr_regions;
        if (sector_div(nr_slots, sctx->region_entries_per_slot))
@@ -511,27 +511,24 @@ static void switch_status(struct dm_target *ti, status_type_t type,
  *
  * Passthrough all ioctls to the path for sector 0
  */
-static int switch_ioctl(struct dm_target *ti, unsigned cmd,
-                       unsigned long arg)
+static int switch_prepare_ioctl(struct dm_target *ti,
+               struct block_device **bdev, fmode_t *mode)
 {
        struct switch_ctx *sctx = ti->private;
-       struct block_device *bdev;
-       fmode_t mode;
        unsigned path_nr;
-       int r = 0;
 
        path_nr = switch_get_path_nr(sctx, 0);
 
-       bdev = sctx->path_list[path_nr].dmdev->bdev;
-       mode = sctx->path_list[path_nr].dmdev->mode;
+       *bdev = sctx->path_list[path_nr].dmdev->bdev;
+       *mode = sctx->path_list[path_nr].dmdev->mode;
 
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (ti->len + sctx->path_list[path_nr].start != i_size_read(bdev->bd_inode) >> SECTOR_SHIFT)
-               r = scsi_verify_blk_ioctl(NULL, cmd);
-
-       return r ? : __blkdev_driver_ioctl(bdev, mode, cmd, arg);
+       if (ti->len + sctx->path_list[path_nr].start !=
+           i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT)
+               return 1;
+       return 0;
 }
 
 static int switch_iterate_devices(struct dm_target *ti,
@@ -560,7 +557,7 @@ static struct target_type switch_target = {
        .map = switch_map,
        .message = switch_message,
        .status = switch_status,
-       .ioctl = switch_ioctl,
+       .prepare_ioctl = switch_prepare_ioctl,
        .iterate_devices = switch_iterate_devices,
 };