scsi: core: Convert to scsi_execute_cmd()
authorMike Christie <michael.christie@oracle.com>
Thu, 29 Dec 2022 19:01:45 +0000 (13:01 -0600)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 14 Jan 2023 02:34:09 +0000 (21:34 -0500)
scsi_execute_req() is going to be removed. Convert SCSI midlayer to
scsi_execute_cmd().

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi.c
drivers/scsi/scsi_ioctl.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_scan.c

index 1426b9b..00ee47a 100644 (file)
@@ -309,8 +309,8 @@ static int scsi_vpd_inquiry(struct scsi_device *sdev, unsigned char *buffer,
         * I'm not convinced we need to try quite this hard to get VPD, but
         * all the existing users tried this hard.
         */
-       result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer,
-                                 len, NULL, 30 * HZ, 3, NULL);
+       result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buffer, len,
+                                 30 * HZ, 3, NULL);
        if (result)
                return -EIO;
 
@@ -510,6 +510,9 @@ int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
        unsigned char cmd[16];
        struct scsi_sense_hdr sshdr;
        int result, request_len;
+       const struct scsi_exec_args exec_args = {
+               .sshdr = &sshdr,
+       };
 
        if (sdev->no_report_opcodes || sdev->scsi_level < SCSI_SPC_3)
                return -EINVAL;
@@ -531,9 +534,8 @@ int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
        put_unaligned_be32(request_len, &cmd[6]);
        memset(buffer, 0, len);
 
-       result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer,
-                                 request_len, &sshdr, 30 * HZ, 3, NULL);
-
+       result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buffer,
+                                 request_len, 30 * HZ, 3, &exec_args);
        if (result < 0)
                return result;
        if (result && scsi_sense_valid(&sshdr) &&
index 1126a26..e3b31d3 100644 (file)
@@ -69,12 +69,15 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
 {
        int result;
        struct scsi_sense_hdr sshdr;
+       const struct scsi_exec_args exec_args = {
+               .sshdr = &sshdr,
+       };
 
        SCSI_LOG_IOCTL(1, sdev_printk(KERN_INFO, sdev,
                                      "Trying ioctl with scsi command %d\n", *cmd));
 
-       result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0,
-                                 &sshdr, timeout, retries, NULL);
+       result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, NULL, 0, timeout,
+                                 retries, &exec_args);
 
        SCSI_LOG_IOCTL(2, sdev_printk(KERN_INFO, sdev,
                                      "Ioctl returned  0x%x\n", result));
index 7d324db..abe93ec 100644 (file)
@@ -2084,6 +2084,9 @@ int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
 {
        unsigned char cmd[10];
        unsigned char *real_buffer;
+       const struct scsi_exec_args exec_args = {
+               .sshdr = sshdr,
+       };
        int ret;
 
        memset(cmd, 0, sizeof(cmd));
@@ -2133,8 +2136,8 @@ int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
                cmd[4] = len;
        }
 
-       ret = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, real_buffer, len,
-                              sshdr, timeout, retries, NULL);
+       ret = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_OUT, real_buffer, len,
+                              timeout, retries, &exec_args);
        kfree(real_buffer);
        return ret;
 }
@@ -2165,6 +2168,10 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
        int header_length;
        int result, retry_count = retries;
        struct scsi_sense_hdr my_sshdr;
+       const struct scsi_exec_args exec_args = {
+               /* caller might not be interested in sense, but we need it */
+               .sshdr = sshdr ? : &my_sshdr,
+       };
 
        memset(data, 0, sizeof(*data));
        memset(&cmd[0], 0, 12);
@@ -2173,9 +2180,7 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
        cmd[1] = dbd & 0x18;    /* allows DBD and LLBA bits */
        cmd[2] = modepage;
 
-       /* caller might not be interested in sense, but we need it */
-       if (!sshdr)
-               sshdr = &my_sshdr;
+       sshdr = exec_args.sshdr;
 
  retry:
        use_10_for_ms = sdev->use_10_for_ms || len > 255;
@@ -2198,8 +2203,8 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
 
        memset(buffer, 0, len);
 
-       result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer, len,
-                                 sshdr, timeout, retries, NULL);
+       result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buffer, len,
+                                 timeout, retries, &exec_args);
        if (result < 0)
                return result;
 
@@ -2279,12 +2284,15 @@ scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries,
        char cmd[] = {
                TEST_UNIT_READY, 0, 0, 0, 0, 0,
        };
+       const struct scsi_exec_args exec_args = {
+               .sshdr = sshdr,
+       };
        int result;
 
        /* try to eat the UNIT_ATTENTION if there are enough retries */
        do {
-               result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr,
-                                         timeout, 1, NULL);
+               result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, NULL, 0,
+                                         timeout, 1, &exec_args);
                if (sdev->removable && scsi_sense_valid(sshdr) &&
                    sshdr->sense_key == UNIT_ATTENTION)
                        sdev->changed = 1;
index 7a6904a..a629253 100644 (file)
@@ -210,7 +210,7 @@ static void scsi_unlock_floptical(struct scsi_device *sdev,
        scsi_cmd[3] = 0;
        scsi_cmd[4] = 0x2a;     /* size */
        scsi_cmd[5] = 0;
-       scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE, result, 0x2a, NULL,
+       scsi_execute_cmd(sdev, scsi_cmd, REQ_OP_DRV_IN, result, 0x2a,
                         SCSI_TIMEOUT, 3, NULL);
 }
 
@@ -646,8 +646,12 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
        unsigned char scsi_cmd[MAX_COMMAND_SIZE];
        int first_inquiry_len, try_inquiry_len, next_inquiry_len;
        int response_len = 0;
-       int pass, count, result;
+       int pass, count, result, resid;
        struct scsi_sense_hdr sshdr;
+       const struct scsi_exec_args exec_args = {
+               .sshdr = &sshdr,
+               .resid = &resid,
+       };
 
        *bflags = 0;
 
@@ -665,18 +669,16 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
 
        /* Each pass gets up to three chances to ignore Unit Attention */
        for (count = 0; count < 3; ++count) {
-               int resid;
-
                memset(scsi_cmd, 0, 6);
                scsi_cmd[0] = INQUIRY;
                scsi_cmd[4] = (unsigned char) try_inquiry_len;
 
                memset(inq_result, 0, try_inquiry_len);
 
-               result = scsi_execute_req(sdev,  scsi_cmd, DMA_FROM_DEVICE,
-                                         inq_result, try_inquiry_len, &sshdr,
+               result = scsi_execute_cmd(sdev,  scsi_cmd, REQ_OP_DRV_IN,
+                                         inq_result, try_inquiry_len,
                                          HZ / 2 + HZ * scsi_inq_timeout, 3,
-                                         &resid);
+                                         &exec_args);
 
                SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev,
                                "scsi scan: INQUIRY %s with code 0x%x\n",
@@ -1402,6 +1404,9 @@ static int scsi_report_lun_scan(struct scsi_target *starget, blist_flags_t bflag
        struct scsi_sense_hdr sshdr;
        struct scsi_device *sdev;
        struct Scsi_Host *shost = dev_to_shost(&starget->dev);
+       const struct scsi_exec_args exec_args = {
+               .sshdr = &sshdr,
+       };
        int ret = 0;
 
        /*
@@ -1476,9 +1481,10 @@ retry:
                                "scsi scan: Sending REPORT LUNS to (try %d)\n",
                                retries));
 
-               result = scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE,
-                                         lun_data, length, &sshdr,
-                                         SCSI_REPORT_LUNS_TIMEOUT, 3, NULL);
+               result = scsi_execute_cmd(sdev, scsi_cmd, REQ_OP_DRV_IN,
+                                         lun_data, length,
+                                         SCSI_REPORT_LUNS_TIMEOUT, 3,
+                                         &exec_args);
 
                SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
                                "scsi scan: REPORT LUNS"