Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57c23773 authored by Christof Schmitt's avatar Christof Schmitt Committed by James Bottomley
Browse files

[SCSI] zfcp: Add zfcp private struct as SCSI device driver data



Add a new data structure zfcp_scsi_dev that holds zfcp private data
for each SCSI device. Use scsi_transport_reserve_device to let the
SCSI midlayer automatically allocate this with each SCSI device.

Reviewed-by: default avatarSwen Schillig <swen@vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent d99e5f48
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -159,6 +159,9 @@ static int __init zfcp_module_init(void)
		fc_attach_transport(&zfcp_transport_functions);
	if (!zfcp_data.scsi_transport_template)
		goto out_transport;
	scsi_transport_reserve_device(zfcp_data.scsi_transport_template,
				      sizeof(struct zfcp_scsi_dev));


	retval = misc_register(&zfcp_cfdc_misc);
	if (retval) {
+39 −0
Original line number Diff line number Diff line
@@ -233,6 +233,45 @@ struct zfcp_unit {
	struct work_struct	scsi_work;
};

/**
 * struct zfcp_scsi_dev - zfcp data per SCSI device
 * @status: zfcp internal status flags
 * @lun_handle: handle from "open lun" for issuing FSF requests
 * @erp_action: zfcp erp data for opening and recovering this LUN
 * @erp_counter: zfcp erp counter for this LUN
 * @latencies: FSF channel and fabric latencies
 * @port: zfcp_port where this LUN belongs to
 */
struct zfcp_scsi_dev {
	atomic_t		status;
	u32			lun_handle;
	struct zfcp_erp_action	erp_action;
	atomic_t		erp_counter;
	struct zfcp_latencies	latencies;
	struct zfcp_port	*port;
};

/**
 * sdev_to_zfcp - Access zfcp LUN data for SCSI device
 * @sdev: scsi_device where to get the zfcp_scsi_dev pointer
 */
static inline struct zfcp_scsi_dev *sdev_to_zfcp(struct scsi_device *sdev)
{
	return scsi_transport_device_data(sdev);
}

/**
 * zfcp_scsi_dev_lun - Return SCSI device LUN as 64 bit FCP LUN
 * @sdev: SCSI device where to get the LUN from
 */
static inline u64 zfcp_scsi_dev_lun(struct scsi_device *sdev)
{
	u64 fcp_lun;

	int_to_scsilun(sdev->lun, (struct scsi_lun *)&fcp_lun);
	return fcp_lun;
}

/**
 * struct zfcp_fsf_req - basic FSF request structure
 * @list: list of FSF requests