[SCSI] zfcp: Add zfcp private struct as SCSI device driver data
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Wed, 8 Sep 2010 12:39:51 +0000 (14:39 +0200)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 17 Sep 2010 02:54:14 +0000 (22:54 -0400)
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>
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_def.h

index 68df571..5c4b874 100644 (file)
@@ -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) {
index e1c6b6e..d31158c 100644 (file)
@@ -234,6 +234,45 @@ struct zfcp_unit {
 };
 
 /**
+ * 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
  * @req_id: unique request ID