scsi: replace the fmode_t argument to ->sg_io_fn with a simple bool
authorChristoph Hellwig <hch@lst.de>
Thu, 8 Jun 2023 11:02:48 +0000 (13:02 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 12 Jun 2023 14:04:04 +0000 (08:04 -0600)
Instead of passing a fmode_t and only checking it for FMODE_WRITE, pass
a bool open_for_write to prepare for callers that won't have the fmode_t.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Acked-by: Christian Brauner <brauner@kernel.org>
Link: https://lore.kernel.org/r/20230608110258.189493-21-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bsg-lib.c
block/bsg.c
drivers/scsi/scsi_bsg.c
include/linux/bsg.h

index 435c32373cd68ff98a2b0923efcb2dde92148fef..b3acdbdb6e7ea8f62c8d9f76d7ae83a4a35bf0e2 100644 (file)
@@ -26,7 +26,7 @@ struct bsg_set {
 };
 
 static int bsg_transport_sg_io_fn(struct request_queue *q, struct sg_io_v4 *hdr,
-               fmode_t mode, unsigned int timeout)
+               bool open_for_write, unsigned int timeout)
 {
        struct bsg_job *job;
        struct request *rq;
index 7eca43f33d7ff8f6e2ef8f56908feea5c280768a..bec4027842b31e7ab52f6ed2f5456dd597c7bfb2 100644 (file)
@@ -54,7 +54,8 @@ static unsigned int bsg_timeout(struct bsg_device *bd, struct sg_io_v4 *hdr)
        return max_t(unsigned int, timeout, BLK_MIN_SG_TIMEOUT);
 }
 
-static int bsg_sg_io(struct bsg_device *bd, fmode_t mode, void __user *uarg)
+static int bsg_sg_io(struct bsg_device *bd, bool open_for_write,
+                    void __user *uarg)
 {
        struct sg_io_v4 hdr;
        int ret;
@@ -63,7 +64,8 @@ static int bsg_sg_io(struct bsg_device *bd, fmode_t mode, void __user *uarg)
                return -EFAULT;
        if (hdr.guard != 'Q')
                return -EINVAL;
-       ret = bd->sg_io_fn(bd->queue, &hdr, mode, bsg_timeout(bd, &hdr));
+       ret = bd->sg_io_fn(bd->queue, &hdr, open_for_write,
+                          bsg_timeout(bd, &hdr));
        if (!ret && copy_to_user(uarg, &hdr, sizeof(hdr)))
                return -EFAULT;
        return ret;
@@ -146,7 +148,7 @@ static long bsg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        case SG_EMULATED_HOST:
                return put_user(1, intp);
        case SG_IO:
-               return bsg_sg_io(bd, file->f_mode, uarg);
+               return bsg_sg_io(bd, file->f_mode & FMODE_WRITE, uarg);
        case SCSI_IOCTL_SEND_COMMAND:
                pr_warn_ratelimited("%s: calling unsupported SCSI_IOCTL_SEND_COMMAND\n",
                                current->comm);
index 12431f35f861e199ff4d43247abb8c6eeef54350..a9a9ec086a7e3f2ac13a05f80fe3a04bec976a3a 100644 (file)
@@ -10,7 +10,7 @@
 #define uptr64(val) ((void __user *)(uintptr_t)(val))
 
 static int scsi_bsg_sg_io_fn(struct request_queue *q, struct sg_io_v4 *hdr,
-               fmode_t mode, unsigned int timeout)
+               bool open_for_write, unsigned int timeout)
 {
        struct scsi_cmnd *scmd;
        struct request *rq;
@@ -42,7 +42,7 @@ static int scsi_bsg_sg_io_fn(struct request_queue *q, struct sg_io_v4 *hdr,
        if (copy_from_user(scmd->cmnd, uptr64(hdr->request), scmd->cmd_len))
                goto out_put_request;
        ret = -EPERM;
-       if (!scsi_cmd_allowed(scmd->cmnd, mode & FMODE_WRITE))
+       if (!scsi_cmd_allowed(scmd->cmnd, open_for_write))
                goto out_put_request;
 
        ret = 0;
index 1ac81c809da9b3794f4912495b1354de9fed862b..ee2df73edf83f8e1925bf50f9f1c0403bd51ba14 100644 (file)
@@ -9,7 +9,7 @@ struct device;
 struct request_queue;
 
 typedef int (bsg_sg_io_fn)(struct request_queue *, struct sg_io_v4 *hdr,
-               fmode_t mode, unsigned int timeout);
+               bool open_for_write, unsigned int timeout);
 
 struct bsg_device *bsg_register_queue(struct request_queue *q,
                struct device *parent, const char *name,