rnbd-srv: replace sess->open_flags with a "bool readonly"
authorChristoph Hellwig <hch@lst.de>
Thu, 8 Jun 2023 11:02:51 +0000 (13:02 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 12 Jun 2023 14:04:04 +0000 (08:04 -0600)
Stop passing the fmode_t around and just use a simple bool to track if
an export is read-only.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Acked-by: Christian Brauner <brauner@kernel.org>
Acked-by: Jack Wang <jinpu.wang@ionos.com>
Link: https://lore.kernel.org/r/20230608110258.189493-24-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/rnbd/rnbd-srv-sysfs.c
drivers/block/rnbd/rnbd-srv.c
drivers/block/rnbd/rnbd-srv.h

index 4962826..39b89f9 100644 (file)
@@ -87,8 +87,7 @@ static ssize_t read_only_show(struct kobject *kobj, struct kobj_attribute *attr,
 
        sess_dev = container_of(kobj, struct rnbd_srv_sess_dev, kobj);
 
-       return sysfs_emit(page, "%d\n",
-                         !(sess_dev->open_flags & FMODE_WRITE));
+       return sysfs_emit(page, "%d\n", sess_dev->readonly);
 }
 
 static struct kobj_attribute rnbd_srv_dev_session_ro_attr =
index a909f87..591a1be 100644 (file)
@@ -222,7 +222,7 @@ void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev, bool keep_id)
        blkdev_put(sess_dev->bdev, NULL);
        mutex_lock(&sess_dev->dev->lock);
        list_del(&sess_dev->dev_list);
-       if (sess_dev->open_flags & FMODE_WRITE)
+       if (!sess_dev->readonly)
                sess_dev->dev->open_write_cnt--;
        mutex_unlock(&sess_dev->dev->lock);
 
@@ -559,7 +559,7 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp,
 static struct rnbd_srv_sess_dev *
 rnbd_srv_create_set_sess_dev(struct rnbd_srv_session *srv_sess,
                              const struct rnbd_msg_open *open_msg,
-                             struct block_device *bdev, fmode_t open_flags,
+                             struct block_device *bdev, bool readonly,
                              struct rnbd_srv_dev *srv_dev)
 {
        struct rnbd_srv_sess_dev *sdev = rnbd_sess_dev_alloc(srv_sess);
@@ -574,7 +574,7 @@ rnbd_srv_create_set_sess_dev(struct rnbd_srv_session *srv_sess,
        sdev->bdev              = bdev;
        sdev->sess              = srv_sess;
        sdev->dev               = srv_dev;
-       sdev->open_flags        = open_flags;
+       sdev->readonly          = readonly;
        sdev->access_mode       = open_msg->access_mode;
 
        return sdev;
@@ -677,13 +677,12 @@ static int process_msg_open(struct rnbd_srv_session *srv_sess,
        struct rnbd_srv_sess_dev *srv_sess_dev;
        const struct rnbd_msg_open *open_msg = msg;
        struct block_device *bdev;
-       fmode_t open_flags;
+       fmode_t open_flags = FMODE_READ;
        char *full_path;
        struct rnbd_msg_open_rsp *rsp = data;
 
        trace_process_msg_open(srv_sess, open_msg);
 
-       open_flags = FMODE_READ;
        if (open_msg->access_mode != RNBD_ACCESS_RO)
                open_flags |= FMODE_WRITE;
 
@@ -732,9 +731,9 @@ static int process_msg_open(struct rnbd_srv_session *srv_sess,
                goto blkdev_put;
        }
 
-       srv_sess_dev = rnbd_srv_create_set_sess_dev(srv_sess, open_msg,
-                                                    bdev, open_flags,
-                                                    srv_dev);
+       srv_sess_dev = rnbd_srv_create_set_sess_dev(srv_sess, open_msg, bdev,
+                               open_msg->access_mode == RNBD_ACCESS_RO,
+                               srv_dev);
        if (IS_ERR(srv_sess_dev)) {
                pr_err("Opening device '%s' on session %s failed, creating sess_dev failed, err: %ld\n",
                       full_path, srv_sess->sessname, PTR_ERR(srv_sess_dev));
index 6b5e5ad..1027656 100644 (file)
@@ -52,7 +52,7 @@ struct rnbd_srv_sess_dev {
        struct kobject                  kobj;
        u32                             device_id;
        bool                            keep_id;
-       fmode_t                         open_flags;
+       bool                            readonly;
        struct kref                     kref;
        struct completion               *destroy_comp;
        char                            pathname[NAME_MAX];