scsi: megaraid: Stop using the SCSI pointer
authorBart Van Assche <bvanassche@acm.org>
Fri, 18 Feb 2022 19:51:00 +0000 (11:51 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 23 Feb 2022 02:11:05 +0000 (21:11 -0500)
Set .cmd_size in the SCSI host template instead of using the SCSI pointer
from struct scsi_cmnd. This patch prepares for removal of the SCSI pointer
from struct scsi_cmnd.

Link: https://lore.kernel.org/r/20220218195117.25689-33-bvanassche@acm.org
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid.c
drivers/scsi/megaraid.h

index 2061e3fe9824f63737d3f033d4fde6d0364e25f9..a5d8cee2d5106d2964b9db765ec7f96a5db77b59 100644 (file)
@@ -1644,16 +1644,10 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
 static void
 mega_rundoneq (adapter_t *adapter)
 {
-       struct scsi_cmnd *cmd;
-       struct list_head *pos;
+       struct megaraid_cmd_priv *cmd_priv;
 
-       list_for_each(pos, &adapter->completed_list) {
-
-               struct scsi_pointer* spos = (struct scsi_pointer *)pos;
-
-               cmd = list_entry(spos, struct scsi_cmnd, SCp);
-               scsi_done(cmd);
-       }
+       list_for_each_entry(cmd_priv, &adapter->completed_list, entry)
+               scsi_done(megaraid_to_scsi_cmd(cmd_priv));
 
        INIT_LIST_HEAD(&adapter->completed_list);
 }
@@ -4123,6 +4117,7 @@ static struct scsi_host_template megaraid_template = {
        .eh_bus_reset_handler           = megaraid_reset,
        .eh_host_reset_handler          = megaraid_reset,
        .no_write_same                  = 1,
+       .cmd_size                       = sizeof(struct megaraid_cmd_priv),
 };
 
 static int
index cce23a086fbe43b3b8a5e7b6b7407d6e71343373..013fbfb911b945692860d1135d364426de3646d0 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <linux/spinlock.h>
 #include <linux/mutex.h>
+#include <scsi/scsi_cmnd.h>
 
 #define MEGARAID_VERSION       \
        "v2.00.4 (Release Date: Thu Feb 9 08:51:30 EST 2006)\n"
@@ -756,8 +757,28 @@ struct private_bios_data {
 #define CACHED_IO              0
 #define DIRECT_IO              1
 
+struct megaraid_cmd_priv {
+       struct list_head entry;
+};
+
+#define SCSI_LIST(scp)                                                 \
+       (&((struct megaraid_cmd_priv *)scsi_cmd_priv(scp))->entry)
+
+struct scsi_cmd_and_priv {
+       struct scsi_cmnd         cmd;
+       struct megaraid_cmd_priv priv;
+};
+
+static inline struct scsi_cmnd *
+megaraid_to_scsi_cmd(struct megaraid_cmd_priv *cmd_priv)
+{
+       /* See also scsi_mq_setup_tags() */
+       BUILD_BUG_ON(sizeof(struct scsi_cmd_and_priv) !=
+                    sizeof(struct scsi_cmnd) +
+                    sizeof(struct megaraid_cmd_priv));
 
-#define SCSI_LIST(scp) ((struct list_head *)(&(scp)->SCp))
+       return &container_of(cmd_priv, struct scsi_cmd_and_priv, priv)->cmd;
+}
 
 /*
  * Each controller's soft state