[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: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
d99e5f488a
commit
57c237731b
|
@ -159,6 +159,9 @@ static int __init zfcp_module_init(void)
|
||||||
fc_attach_transport(&zfcp_transport_functions);
|
fc_attach_transport(&zfcp_transport_functions);
|
||||||
if (!zfcp_data.scsi_transport_template)
|
if (!zfcp_data.scsi_transport_template)
|
||||||
goto out_transport;
|
goto out_transport;
|
||||||
|
scsi_transport_reserve_device(zfcp_data.scsi_transport_template,
|
||||||
|
sizeof(struct zfcp_scsi_dev));
|
||||||
|
|
||||||
|
|
||||||
retval = misc_register(&zfcp_cfdc_misc);
|
retval = misc_register(&zfcp_cfdc_misc);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
|
|
|
@ -233,6 +233,45 @@ struct zfcp_unit {
|
||||||
struct work_struct scsi_work;
|
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
|
* struct zfcp_fsf_req - basic FSF request structure
|
||||||
* @list: list of FSF requests
|
* @list: list of FSF requests
|
||||||
|
|
Reference in New Issue