rbd: treat images mapped read-only seriously
authorIlya Dryomov <idryomov@gmail.com>
Fri, 8 Nov 2019 14:26:51 +0000 (15:26 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 25 Nov 2019 10:44:02 +0000 (11:44 +0100)
Even though -o ro/-o read_only/--read-only options are very old, we
have never really treated them seriously (on par with snapshots).  As
a first step, fail writes to images mapped read-only just like we do
for snapshots.

We need this check in rbd because the block layer basically ignores
read-only setting, see commit a32e236eb93e ("Partially revert "block:
fail op_is_write() requests to read-only partitions"").

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Jason Dillaman <dillaman@redhat.com>
Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
drivers/block/rbd.c

index 978549d..02cd2a7 100644 (file)
@@ -4837,11 +4837,14 @@ static void rbd_queue_workfn(struct work_struct *work)
                goto err_rq;
        }
 
-       if (op_type != OBJ_OP_READ && rbd_is_snap(rbd_dev)) {
-               rbd_warn(rbd_dev, "%s on read-only snapshot",
-                        obj_op_name(op_type));
-               result = -EIO;
-               goto err;
+       if (op_type != OBJ_OP_READ) {
+               if (rbd_is_ro(rbd_dev)) {
+                       rbd_warn(rbd_dev, "%s on read-only mapping",
+                                obj_op_name(op_type));
+                       result = -EIO;
+                       goto err;
+               }
+               rbd_assert(!rbd_is_snap(rbd_dev));
        }
 
        /*