.ioctl          = dasd_ioctl,
        .compat_ioctl   = dasd_ioctl,
        .getgeo         = dasd_getgeo,
+       .set_read_only  = dasd_set_read_only,
 };
 
 /*******************************************************************************
 
 void dasd_destroy_partitions(struct dasd_block *);
 
 /* externals in dasd_ioctl.c */
-int  dasd_ioctl(struct block_device *, fmode_t, unsigned int, unsigned long);
+int dasd_ioctl(struct block_device *, fmode_t, unsigned int, unsigned long);
+int dasd_set_read_only(struct block_device *bdev, bool ro);
 
 /* externals in dasd_proc.c */
 int dasd_proc_init(void);
 
 /*
  * Set read only
  */
-static int
-dasd_ioctl_set_ro(struct block_device *bdev, void __user *argp)
+int dasd_set_read_only(struct block_device *bdev, bool ro)
 {
        struct dasd_device *base;
-       int intval, rc;
+       int rc;
 
-       if (!capable(CAP_SYS_ADMIN))
-               return -EACCES;
+       /* do not manipulate hardware state for partitions */
        if (bdev_is_partition(bdev))
-               // ro setting is not allowed for partitions
-               return -EINVAL;
-       if (get_user(intval, (int __user *)argp))
-               return -EFAULT;
+               return 0;
+
        base = dasd_device_from_gendisk(bdev->bd_disk);
        if (!base)
                return -ENODEV;
-       if (!intval && test_bit(DASD_FLAG_DEVICE_RO, &base->flags)) {
-               dasd_put_device(base);
-               return -EROFS;
-       }
-       set_disk_ro(bdev->bd_disk, intval);
-       rc = dasd_set_feature(base->cdev, DASD_FEATURE_READONLY, intval);
+       if (!ro && test_bit(DASD_FLAG_DEVICE_RO, &base->flags))
+               rc = -EROFS;
+       else
+               rc = dasd_set_feature(base->cdev, DASD_FEATURE_READONLY, ro);
        dasd_put_device(base);
        return rc;
 }
        case BIODASDPRRST:
                rc = dasd_ioctl_reset_profile(block);
                break;
-       case BLKROSET:
-               rc = dasd_ioctl_set_ro(bdev, argp);
-               break;
        case DASDAPIVER:
                rc = dasd_ioctl_api_version(argp);
                break;