[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 27/78] rbd: implement ->set_read_only to hook into BLKROSET processing



Implement the ->set_read_only method instead of parsing the actual
ioctl command.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Acked-by: Ilya Dryomov <idryomov@xxxxxxxxx>
---
 drivers/block/rbd.c | 40 ++++------------------------------------
 1 file changed, 4 insertions(+), 36 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index b7a194ffda55b4..2ed79b09439a82 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -692,12 +692,9 @@ static void rbd_release(struct gendisk *disk, fmode_t mode)
        put_device(&rbd_dev->dev);
 }
 
-static int rbd_ioctl_set_ro(struct rbd_device *rbd_dev, unsigned long arg)
+static int rbd_set_read_only(struct block_device *bdev, bool ro)
 {
-       int ro;
-
-       if (get_user(ro, (int __user *)arg))
-               return -EFAULT;
+       struct rbd_device *rbd_dev = bdev->bd_disk->private_data;
 
        /*
         * Both images mapped read-only and snapshots can't be marked
@@ -710,43 +707,14 @@ static int rbd_ioctl_set_ro(struct rbd_device *rbd_dev, 
unsigned long arg)
                rbd_assert(!rbd_is_snap(rbd_dev));
        }
 
-       /* Let blkdev_roset() handle it */
-       return -ENOTTY;
-}
-
-static int rbd_ioctl(struct block_device *bdev, fmode_t mode,
-                       unsigned int cmd, unsigned long arg)
-{
-       struct rbd_device *rbd_dev = bdev->bd_disk->private_data;
-       int ret;
-
-       switch (cmd) {
-       case BLKROSET:
-               ret = rbd_ioctl_set_ro(rbd_dev, arg);
-               break;
-       default:
-               ret = -ENOTTY;
-       }
-
-       return ret;
-}
-
-#ifdef CONFIG_COMPAT
-static int rbd_compat_ioctl(struct block_device *bdev, fmode_t mode,
-                               unsigned int cmd, unsigned long arg)
-{
-       return rbd_ioctl(bdev, mode, cmd, arg);
+       return 0;
 }
-#endif /* CONFIG_COMPAT */
 
 static const struct block_device_operations rbd_bd_ops = {
        .owner                  = THIS_MODULE,
        .open                   = rbd_open,
        .release                = rbd_release,
-       .ioctl                  = rbd_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl           = rbd_compat_ioctl,
-#endif
+       .set_read_only          = rbd_set_read_only,
 };
 
 /*
-- 
2.29.2




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.