scsi: usb: Call scsi_done() directly
authorBart Van Assche <bvanassche@acm.org>
Thu, 7 Oct 2021 20:46:10 +0000 (13:46 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 17 Oct 2021 01:31:43 +0000 (21:31 -0400)
Conditional statements are faster than indirect calls. Hence call
scsi_done() directly.

Link: https://lore.kernel.org/r/20211007204618.2196847-10-bvanassche@acm.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/usb/storage/scsiglue.c
drivers/usb/storage/uas.c
drivers/usb/storage/usb.c

index e5a971b83e3f567d17623b88e1826b5bd429dfdb..9dfea19e5a91e5de04b0ea11e254578f138d8237 100644 (file)
@@ -393,7 +393,6 @@ static int queuecommand_lck(struct scsi_cmnd *srb,
        }
 
        /* enqueue the command and wake up the control thread */
-       srb->scsi_done = done;
        us->srb = srb;
        complete(&us->cmnd_ready);
 
index bef89c6bd1d7faa52897d83faa4469717f9f828d..774d18907f47279f9b19cd6ff0d57a48c7fa3ac9 100644 (file)
@@ -256,7 +256,7 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
                return -EBUSY;
        devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
        uas_free_unsubmitted_urbs(cmnd);
-       cmnd->scsi_done(cmnd);
+       scsi_done(cmnd);
        return 0;
 }
 
@@ -653,7 +653,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
                memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
                       sizeof(usb_stor_sense_invalidCDB));
                cmnd->result = SAM_STAT_CHECK_CONDITION;
-               cmnd->scsi_done(cmnd);
+               scsi_done(cmnd);
                return 0;
        }
 
@@ -661,7 +661,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
 
        if (devinfo->resetting) {
                set_host_byte(cmnd, DID_ERROR);
-               cmnd->scsi_done(cmnd);
+               scsi_done(cmnd);
                goto zombie;
        }
 
@@ -675,8 +675,6 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
                return SCSI_MLQUEUE_DEVICE_BUSY;
        }
 
-       cmnd->scsi_done = done;
-
        memset(cmdinfo, 0, sizeof(*cmdinfo));
        cmdinfo->uas_tag = idx + 1; /* uas-tag == usb-stream-id, so 1 based */
        cmdinfo->state = SUBMIT_STATUS_URB | ALLOC_CMD_URB | SUBMIT_CMD_URB;
@@ -706,7 +704,7 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
         */
        if (err == -ENODEV) {
                set_host_byte(cmnd, DID_ERROR);
-               cmnd->scsi_done(cmnd);
+               scsi_done(cmnd);
                goto zombie;
        }
        if (err) {
index 90aa9c12ffac5fd542d18a614320de2e1ba54e9a..8b543f2c9857530643ccf376faa401eba3c1d055 100644 (file)
@@ -388,7 +388,7 @@ static int usb_stor_control_thread(void * __us)
                if (srb->result == DID_ABORT << 16) {
 SkipForAbort:
                        usb_stor_dbg(us, "scsi command aborted\n");
-                       srb = NULL;     /* Don't call srb->scsi_done() */
+                       srb = NULL;     /* Don't call scsi_done() */
                }
 
                /*
@@ -417,7 +417,7 @@ SkipForAbort:
                if (srb) {
                        usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
                                        srb->result);
-                       srb->scsi_done(srb);
+                       scsi_done(srb);
                }
        } /* for (;;) */