Use set_disk_ro to propagate the read-only state to the block layer
instead of checking for it in ->open and leaking a reference in case
of a read-only device.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220215094514.3828912-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
 
        mutex_lock(&mspro_block_disk_lock);
 
-       if (msb && msb->card) {
+       if (msb && msb->card)
                msb->usage_count++;
-               if ((mode & FMODE_WRITE) && msb->read_only)
-                       rc = -EROFS;
-               else
-                       rc = 0;
-       }
 
        mutex_unlock(&mspro_block_disk_lock);
 
        set_capacity(msb->disk, capacity);
        dev_dbg(&card->dev, "capacity set %ld\n", capacity);
 
+       if (msb->read_only)
+               set_disk_ro(msb->disk, true);
+
        rc = device_add_disk(&card->dev, msb->disk, NULL);
        if (rc)
                goto out_cleanup_disk;