Commit fb597392 authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen
Browse files

scsi: megaraid: Stop using the SCSI pointer

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: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarHimanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent cb2b6208
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -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;

	list_for_each(pos, &adapter->completed_list) {
	struct megaraid_cmd_priv *cmd_priv;

		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
+22 −1
Original line number Diff line number Diff line
@@ -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