Revert "block: remove __blkdev_driver_ioctl"
authorHoegeun Kwon <hoegeun.kwon@samsung.com>
Wed, 9 Nov 2022 05:59:19 +0000 (14:59 +0900)
committerHoegeun Kwon <hoegeun.kwon@samsung.com>
Thu, 3 Aug 2023 09:35:24 +0000 (18:35 +0900)
Revert that commit for use with the blkdev_flushbuf ioctl.

This reverts commit a7cb3d2f09c8405aed59d97a7d02cebea43cd3c7.

Change-Id: Idd8b165ea6c83ecbacdb697afa0532414b330360
Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
block/ioctl.c
drivers/block/pktcdvd.c
drivers/md/bcache/request.c
drivers/md/dm.c
include/linux/blkdev.h

index cd506a9..44c3ce1 100644 (file)
@@ -232,6 +232,23 @@ static int compat_put_ulong(compat_ulong_t __user *argp, compat_ulong_t val)
 }
 #endif
 
+int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
+                       unsigned cmd, unsigned long arg)
+{
+       struct gendisk *disk = bdev->bd_disk;
+
+       if (disk->fops->ioctl)
+               return disk->fops->ioctl(bdev, mode, cmd, arg);
+
+       return -ENOTTY;
+}
+/*
+ * For the record: _GPL here is only because somebody decided to slap it
+ * on the previous export.  Sheer idiocy, since it wasn't copyrightable
+ * at all and could be open-coded without any exports by anybody who cares.
+ */
+EXPORT_SYMBOL_GPL(__blkdev_driver_ioctl);
+
 #ifdef CONFIG_COMPAT
 /*
  * This is the equivalent of compat_ptr_ioctl(), to be used by block
@@ -593,12 +610,10 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
        }
 
        ret = blkdev_common_ioctl(bdev, mode, cmd, arg, argp);
-       if (ret != -ENOIOCTLCMD)
-               return ret;
+       if (ret == -ENOIOCTLCMD)
+               return __blkdev_driver_ioctl(bdev, mode, cmd, arg);
 
-       if (!bdev->bd_disk->fops->ioctl)
-               return -ENOTTY;
-       return bdev->bd_disk->fops->ioctl(bdev, mode, cmd, arg);
+       return ret;
 }
 EXPORT_SYMBOL_GPL(blkdev_ioctl); /* for /dev/raw */
 
index ca2ab97..49bebd3 100644 (file)
@@ -2619,11 +2619,9 @@ static int pkt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
        case CDROM_LAST_WRITTEN:
        case CDROM_SEND_PACKET:
        case SCSI_IOCTL_SEND_COMMAND:
-               if (!bdev->bd_disk->fops->ioctl)
-                       ret = -ENOTTY;
-               else
-                       ret = bdev->bd_disk->fops->ioctl(bdev, mode, cmd, arg);
+               ret = __blkdev_driver_ioctl(pd->bdev, mode, cmd, arg);
                break;
+
        default:
                pkt_dbg(2, pd, "Unknown ioctl (%x)\n", cmd);
                ret = -ENOTTY;
index 9f4a285..f575b2d 100644 (file)
@@ -1239,9 +1239,8 @@ static int cached_dev_ioctl(struct bcache_device *d, fmode_t mode,
 
        if (dc->io_disable)
                return -EIO;
-       if (!dc->bdev->bd_disk->fops->ioctl)
-               return -ENOTTY;
-       return dc->bdev->bd_disk->fops->ioctl(dc->bdev, mode, cmd, arg);
+
+       return __blkdev_driver_ioctl(dc->bdev, mode, cmd, arg);
 }
 
 void bch_cached_dev_request_init(struct cached_dev *dc)
index 9dd2c2d..b68d52c 100644 (file)
@@ -466,10 +466,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,
                }
        }
 
-       if (!bdev->bd_disk->fops->ioctl)
-               r = -ENOTTY;
-       else
-               r = bdev->bd_disk->fops->ioctl(bdev, mode, cmd, arg);
+       r =  __blkdev_driver_ioctl(bdev, mode, cmd, arg);
 out:
        dm_unprepare_ioctl(md, srcu_idx);
        return r;
index cf64df9..4b99811 100644 (file)
@@ -1881,6 +1881,8 @@ extern int blkdev_compat_ptr_ioctl(struct block_device *, fmode_t,
 #define blkdev_compat_ptr_ioctl NULL
 #endif
 
+extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
+                                unsigned long);
 extern int bdev_read_page(struct block_device *, sector_t, struct page *);
 extern int bdev_write_page(struct block_device *, sector_t, struct page *,
                                                struct writeback_control *);