]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - drivers/scsi/scsi_lib.c
scsi: simplify scsi_log_(send|completion)
[mirror_ubuntu-jammy-kernel.git] / drivers / scsi / scsi_lib.c
index 50a6e1ac8d9cb48419c1547f72226a46543234c9..26a57faf885b33f87693bcc9f84e6bed42ce058f 100644 (file)
@@ -47,7 +47,7 @@ struct scsi_host_sg_pool {
        mempool_t       *pool;
 };
 
-#define SP(x) { x, "sgpool-" __stringify(x) }
+#define SP(x) { .size = x, "sgpool-" __stringify(x) }
 #if (SCSI_MAX_SG_SEGMENTS < 32)
 #error SCSI_MAX_SG_SEGMENTS is too small (must be 32 or greater)
 #endif
@@ -831,8 +831,8 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
        struct request *req = cmd->request;
        int error = 0;
        struct scsi_sense_hdr sshdr;
-       int sense_valid = 0;
-       int sense_deferred = 0;
+       bool sense_valid = false;
+       int sense_deferred = 0, level = 0;
        enum {ACTION_FAIL, ACTION_REPREP, ACTION_RETRY,
              ACTION_DELAYED_RETRY} action;
        unsigned long wait_for = (cmd->allowed + 1) * req->timeout;
@@ -912,7 +912,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
                if ((sshdr.asc == 0x0) && (sshdr.ascq == 0x1d))
                        ;
                else if (!(req->cmd_flags & REQ_QUIET))
-                       scsi_print_sense("", cmd);
+                       scsi_print_sense(cmd);
                result = 0;
                /* BLOCK_PC may have set error */
                error = 0;
@@ -1038,10 +1038,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
        switch (action) {
        case ACTION_FAIL:
                /* Give up and fail the remainder of the request */
-               if (!(req->cmd_flags & REQ_QUIET)) {
-                       scsi_print_result(cmd);
+               if (unlikely(scsi_logging_level))
+                       level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT,
+                                              SCSI_LOG_MLQUEUE_BITS);
+               /*
+                * if logging is enabled the failure will be printed
+                * in scsi_log_completion(), so avoid duplicate messages
+                */
+               if (!level && !(req->cmd_flags & REQ_QUIET)) {
+                       scsi_print_result(cmd, NULL, FAILED);
                        if (driver_byte(result) & DRIVER_SENSE)
-                               scsi_print_sense("", cmd);
+                               scsi_print_sense(cmd);
                        scsi_print_command(cmd);
                }
                if (!scsi_end_request(req, error, blk_rq_err_bytes(req), 0))