| From: Cheng Renquan <crquan@gmail.com> |
| |
| 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 */ |