diff --git a/qla2x00t/kernel-patches/scst_fc_vport_create.patch b/qla2x00t/kernel-patches/scst_fc_vport_create.patch new file mode 100644 index 000000000..5948f6cc6 --- /dev/null +++ b/qla2x00t/kernel-patches/scst_fc_vport_create.patch @@ -0,0 +1,148 @@ +From: Cheng Renquan + +This is needed to build qla2xxx on top of 2.6.26 and +2.6.27 Linux kernels according this scst-devel mailing list thread, +http://sourceforge.net/mailarchive/message.php?msg_name=1288289831-23405-1-git-send-email-crquan@gmail.com + +--- + drivers/scsi/scsi_transport_fc.c | 53 +++++++++++++++++++-------------------- + include/scsi/scsi_transport_fc.h | 27 +++++++++++++++++++ + 2 files changed, 53 insertions(+), 27 deletions(-) + +Index: linux-2.6.26/drivers/scsi/scsi_transport_fc.c +=================================================================== +--- linux-2.6.26.orig/drivers/scsi/scsi_transport_fc.c 2010-11-12 01:16:11.000000000 +0800 ++++ linux-2.6.26/drivers/scsi/scsi_transport_fc.c 2010-11-12 01:17:09.000000000 +0800 +@@ -41,30 +41,7 @@ + static int fc_queue_work(struct Scsi_Host *, struct work_struct *); + static void fc_vport_sched_delete(struct work_struct *work); + +-/* +- * This is a temporary carrier for creating a vport. It will eventually +- * be replaced by a real message definition for sgio or netlink. +- * +- * fc_vport_identifiers: This set of data contains all elements +- * to uniquely identify and instantiate a FC virtual port. +- * +- * Notes: +- * symbolic_name: The driver is to append the symbolic_name string data +- * to the symbolic_node_name data that it generates by default. +- * the resulting combination should then be registered with the switch. +- * It is expected that things like Xen may stuff a VM title into +- * this field. +- */ +-struct fc_vport_identifiers { +- u64 node_name; +- u64 port_name; +- u32 roles; +- bool disable; +- enum fc_port_type vport_type; /* only FC_PORTTYPE_NPIV allowed */ +- char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN]; +-}; +- +-static int fc_vport_create(struct Scsi_Host *shost, int channel, ++static int fc_vport_setup(struct Scsi_Host *shost, int channel, + struct device *pdev, struct fc_vport_identifiers *ids, + struct fc_vport **vport); + +@@ -1759,7 +1736,7 @@ + vid.disable = false; /* always enabled */ + + /* we only allow support on Channel 0 !!! */ +- stat = fc_vport_create(shost, 0, &shost->shost_gendev, &vid, &vport); ++ stat = fc_vport_setup(shost, 0, &shost->shost_gendev, &vid, &vport); + return stat ? stat : count; + } + static FC_DEVICE_ATTR(host, vport_create, S_IWUSR, NULL, +@@ -3102,7 +3079,7 @@ + + + /** +- * fc_vport_create - allocates and creates a FC virtual port. ++ * fc_vport_setup - allocates and creates a FC virtual port. + * @shost: scsi host the virtual port is connected to. + * @channel: Channel on shost port connected to. + * @pdev: parent device for vport +@@ -3117,7 +3094,7 @@ + * This routine assumes no locks are held on entry. + */ + static int +-fc_vport_create(struct Scsi_Host *shost, int channel, struct device *pdev, ++fc_vport_setup(struct Scsi_Host *shost, int channel, struct device *pdev, + struct fc_vport_identifiers *ids, struct fc_vport **ret_vport) + { + struct fc_host_attrs *fc_host = shost_to_fc_host(shost); +@@ -3230,6 +3207,28 @@ + return error; + } + ++/** ++ * fc_vport_create - Admin App or LLDD requests creation of a vport ++ * @shost: scsi host the virtual port is connected to. ++ * @channel: channel on shost port connected to. ++ * @ids: The world wide names, FC4 port roles, etc for ++ * the virtual port. ++ * ++ * Notes: ++ * This routine assumes no locks are held on entry. ++ */ ++struct fc_vport * ++fc_vport_create(struct Scsi_Host *shost, int channel, ++ struct fc_vport_identifiers *ids) ++{ ++ int stat; ++ struct fc_vport *vport; ++ ++ stat = fc_vport_setup(shost, channel, &shost->shost_gendev, ++ ids, &vport); ++ return stat ? NULL : vport; ++} ++EXPORT_SYMBOL(fc_vport_create); + + /** + * fc_vport_terminate - Admin App or LLDD requests termination of a vport +Index: linux-2.6.26/include/scsi/scsi_transport_fc.h +=================================================================== +--- linux-2.6.26.orig/include/scsi/scsi_transport_fc.h 2010-11-12 01:16:11.000000000 +0800 ++++ linux-2.6.26/include/scsi/scsi_transport_fc.h 2010-11-12 01:17:47.000000000 +0800 +@@ -198,6 +198,31 @@ + */ + + #define FC_VPORT_SYMBOLIC_NAMELEN 64 ++#define FC_VPORT_CREATE_DEFINED ++ ++/* ++ * This is a temporary carrier for creating a vport. It will eventually ++ * be replaced by a real message definition for sgio or netlink. ++ * ++ * fc_vport_identifiers: This set of data contains all elements ++ * to uniquely identify and instantiate a FC virtual port. ++ * ++ * Notes: ++ * symbolic_name: The driver is to append the symbolic_name string data ++ * to the symbolic_node_name data that it generates by default. ++ * the resulting combination should then be registered with the switch. ++ * It is expected that things like Xen may stuff a VM title into ++ * this field. ++ */ ++struct fc_vport_identifiers { ++ u64 node_name; ++ u64 port_name; ++ u32 roles; ++ bool disable; ++ enum fc_port_type vport_type; /* only FC_PORTTYPE_NPIV allowed */ ++ char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN]; ++}; ++ + struct fc_vport { + /* Fixed Attributes */ + +@@ -732,6 +757,8 @@ + * be sure to read the Vendor Type and ID formatting requirements + * specified in scsi_netlink.h + */ ++struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, ++ struct fc_vport_identifiers *ids); + int fc_vport_terminate(struct fc_vport *vport); + + #endif /* SCSI_TRANSPORT_FC_H */