scsi: target: usb: gadget: Convert to new submission API
authorMike Christie <michael.christie@oracle.com>
Sat, 27 Feb 2021 16:59:51 +0000 (10:59 -0600)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 4 Mar 2021 22:37:01 +0000 (17:37 -0500)
target_submit_cmd() is now only for simple drivers that do their own sync
during shutdown and do not use target_stop_session(). It will never return
a failure, so we can remove that code from the driver.

Note: Before these patches target_submit_cmd() would never return an error
for usb since it does not use target_stop_session(). If it did then we
would have hit a refcount error here:

    transport_send_check_condition_and_sense(se_cmd,
                             TCM_UNSUPPORTED_SCSI_OPCODE, 1);
    transport_generic_free_cmd(&cmd->se_cmd, 0);

transport_send_check_condition_and_sense() calls queue_status and the
driver can sometimes do transport_generic_free_cmd() from there via
uasp_status_data_cmpl(). In that case, the above
transport_generic_free_cmd() would then hit a refcount error.

So that other use of the above error path in the driver is also probably
wrong, but someone with the hardware needs to fix that.

Link: https://lore.kernel.org/r/20210227170006.5077-11-michael.christie@oracle.com
Cc: Felipe Balbi <balbi@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/usb/gadget/function/f_tcm.c

index dcce6e2605f52069a5aef3f05cc57044c69354d5..7acb507946e6795f4b5ae565c6d4748e693c8804 100644 (file)
@@ -1058,11 +1058,9 @@ static void usbg_cmd_work(struct work_struct *work)
                goto out;
        }
 
-       if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess, cmd->cmd_buf,
-                             cmd->sense_iu.sense, cmd->unpacked_lun, 0,
-                             cmd->prio_attr, dir, flags) < 0)
-               goto out;
-
+       target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess, cmd->cmd_buf,
+                         cmd->sense_iu.sense, cmd->unpacked_lun, 0,
+                         cmd->prio_attr, dir, flags);
        return;
 
 out:
@@ -1189,11 +1187,9 @@ static void bot_cmd_work(struct work_struct *work)
                goto out;
        }
 
-       if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
-                       cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
-                       cmd->data_len, cmd->prio_attr, dir, 0) < 0)
-               goto out;
-
+       target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
+                         cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
+                         cmd->data_len, cmd->prio_attr, dir, 0);
        return;
 
 out: