Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 315939 Details for
Bug 249775
Request to backport zFCP NPIV support to RHEL 4
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
zfcp hostadapter patch
linux-2.6.9-s390-zfcp_hostadapter_update.patch (text/plain), 27.92 KB, created by
Brad Hinson
on 2008-09-05 23:34:08 UTC
(
hide
)
Description:
zfcp hostadapter patch
Filename:
MIME Type:
Creator:
Brad Hinson
Created:
2008-09-05 23:34:08 UTC
Size:
27.92 KB
patch
obsolete
>From: Brad Hinson <bhinson@redhat.com> > >Patch adapted from: >http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/broken-out/s390-7-12-zfcp-host-adapter.patch > >Original patch header: > >From: Martin Schwidefsky <schwidefsky@de.ibm.com> >From: Andreas Herrmann <aherrman@de.ibm.com> > >zfcp host adapter change: > - Return -EIO if wait_event_interruptible_timeout was interrupted. > - Reduce stack uage of zfcp_cfdc_dev_ioctl. > - Make zfcp_sg_list_[alloc,free] more consistent. > - Store driver version to zfcp_data structure. > - Add missing FSF states and make corresponding log messages consistent. > - Always wait for completion in zfcp_scsi_command_sync. > - Add Andreas to authors list. > - Add timeout for cfdc upload/download. > - Add support for temporary units (units not registered to the scsi stack). > - Allow sending of ELS commands to ports by their d_id. > - Increase port refcount while link test is running. > >--- linux-2.6.9/drivers/s390/scsi/zfcp_aux.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_aux.c >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -29,7 +30,7 @@ > */ > > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_AUX_REVISION "$Revision: 1.129 $" >+#define ZFCP_AUX_REVISION "$Revision: 1.135 $" > > #include "zfcp_ext.h" > >@@ -80,6 +81,7 @@ static struct miscdevice zfcp_cfdc_misc > module_init(zfcp_module_init); > > MODULE_AUTHOR("Heiko Carstens <heiko.carstens@de.ibm.com>, " >+ "Andreas Herrman <aherrman@de.ibm.com>, " > "Martin Peschke <mpeschke@de.ibm.com>, " > "Raimund Schroeder <raimund.schroeder@de.ibm.com>, " > "Wolfgang Taphorn <taphorn@de.ibm.com>, " >@@ -504,19 +506,10 @@ zfcp_cfdc_dev_ioctl(struct inode *inode, > } > } > >- retval = zfcp_fsf_control_file( >- adapter, &fsf_req, fsf_command, option, sg_list); >- if (retval == -EOPNOTSUPP) { >- ZFCP_LOG_INFO("adapter does not support cfdc\n"); >- goto out; >- } else if (retval != 0) { >- ZFCP_LOG_INFO("initiation of cfdc up/download failed\n"); >- retval = -EPERM; >+ retval = zfcp_fsf_control_file(adapter, &fsf_req, fsf_command, >+ option, sg_list); >+ if (retval) > goto out; >- } >- >- wait_event(fsf_req->completion_wq, >- fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED); > > if ((fsf_req->qtcb->prefix.prot_status != FSF_PROT_GOOD) && > (fsf_req->qtcb->prefix.prot_status != FSF_PROT_FSF_STATUS_PRESENTED)) { >@@ -603,13 +596,13 @@ zfcp_sg_list_alloc(struct zfcp_sg_list * > sg->length = min(size, PAGE_SIZE); > sg->offset = 0; > address = (void *) get_zeroed_page(GFP_KERNEL); >- zfcp_address_to_sg(address, sg); >- if (sg->page == NULL) { >+ if (address == NULL) { > sg_list->count = i; > zfcp_sg_list_free(sg_list); > retval = -ENOMEM; > goto out; > } >+ zfcp_address_to_sg(address, sg); > size -= sg->length; > } > >@@ -634,7 +627,7 @@ zfcp_sg_list_free(struct zfcp_sg_list *s > BUG_ON(sg_list == NULL); > > for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) >- __free_pages(sg->page, 0); >+ free_page((unsigned long) zfcp_sg_to_address(sg)); > > sg_list->count = 0; > kfree(sg_list->sg); >--- linux-2.6.9/drivers/s390/scsi/zfcp_ccw.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_ccw.c >@@ -10,6 +10,7 @@ > * Authors: > * Martin Peschke <mpeschke@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -26,7 +27,7 @@ > * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. > */ > >-#define ZFCP_CCW_C_REVISION "$Revision: 1.56 $" >+#define ZFCP_CCW_C_REVISION "$Revision: 1.57 $" > > #include "zfcp_ext.h" > >--- linux-2.6.9/drivers/s390/scsi/zfcp_def.h.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_def.h >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -33,7 +34,7 @@ > #define ZFCP_DEF_H > > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_DEF_REVISION "$Revision: 1.91 $" >+#define ZFCP_DEF_REVISION "$Revision: 1.98 $" > > /*************************** INCLUDES *****************************************/ > >@@ -71,7 +72,7 @@ > /********************* GENERAL DEFINES *********************************/ > > /* zfcp version number, it consists of major, minor, and patch-level number */ >-#define ZFCP_VERSION "4.1.3" >+#define ZFCP_VERSION "4.1.4" > > /** > * zfcp_sg_to_address - determine kernel address from struct scatterlist >@@ -832,7 +833,9 @@ typedef void (*zfcp_send_els_handler_t)( > > /** > * struct zfcp_send_els - used to pass parameters to function zfcp_fsf_send_els >+ * @adapter: adapter where request is sent from > * @port: port where the request is sent to >+ * @d_id: destiniation id of port where request is sent to > * @req: scatter-gather list for request > * @resp: scatter-gather list for response > * @req_count: number of elements in request scatter-gather list >@@ -844,7 +847,9 @@ typedef void (*zfcp_send_els_handler_t)( > * @status: used to pass error status to calling function > */ > struct zfcp_send_els { >+ struct zfcp_adapter *adapter; > struct zfcp_port *port; >+ u32 d_id; > struct scatterlist *req; > struct scatterlist *resp; > unsigned int req_count; >@@ -1073,6 +1078,7 @@ struct zfcp_data { > char init_busid[BUS_ID_SIZE]; > wwn_t init_wwpn; > fcp_lun_t init_fcp_lun; >+ char *driver_version; > }; > > /** >--- linux-2.6.9/drivers/s390/scsi/zfcp_erp.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_erp.c >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -31,7 +32,7 @@ > #define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP > > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_ERP_REVISION "$Revision: 1.65 $" >+#define ZFCP_ERP_REVISION "$Revision: 1.69 $" > > #include "zfcp_ext.h" > >@@ -317,7 +318,9 @@ zfcp_els(struct zfcp_port *port, u8 ls_c > send_els->req->offset = 0; > send_els->resp->offset = PAGE_SIZE >> 1; > >+ send_els->adapter = port->adapter; > send_els->port = port; >+ send_els->d_id = port->d_id; > send_els->ls_code = ls_code; > send_els->handler = zfcp_els_handler; > send_els->handler_data = (unsigned long)send_els; >@@ -3485,9 +3488,9 @@ zfcp_erp_action_dequeue(struct zfcp_erp_ > /** > * zfcp_erp_action_cleanup > * >- * registers unit with scsi stack if appropiate and fixes reference counts >+ * Register unit with scsi stack if appropiate and fix reference counts. >+ * Note: Temporary units are not registered with scsi stack. > */ >- > static void > zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, > struct zfcp_port *port, struct zfcp_unit *unit, >@@ -3499,7 +3502,8 @@ zfcp_erp_action_cleanup(int action, stru > && (!atomic_test_mask(ZFCP_STATUS_UNIT_TEMPORARY, > &unit->status)) > && (atomic_test_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, >- &unit->status) == 0)) >+ &unit->status) == 0) >+ && (!unit->device)) > zfcp_erp_schedule_work(unit); > zfcp_unit_put(unit); > break; >--- linux-2.6.9/drivers/s390/scsi/zfcp_ext.h.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_ext.h >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -31,7 +32,7 @@ > #ifndef ZFCP_EXT_H > #define ZFCP_EXT_H > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_EXT_REVISION "$Revision: 1.57 $" >+#define ZFCP_EXT_REVISION "$Revision: 1.58 $" > > #include "zfcp_def.h" > >--- linux-2.6.9/drivers/s390/scsi/zfcp_fsf.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_fsf.c >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -29,7 +30,7 @@ > */ > > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_FSF_C_REVISION "$Revision: 1.65 $" >+#define ZFCP_FSF_C_REVISION "$Revision: 1.76 $" > > #include "zfcp_ext.h" > >@@ -1695,6 +1696,41 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf > | ZFCP_STATUS_FSFREQ_RETRY; > break; > >+ /* following states should never occure, all cases avoided >+ in zfcp_fsf_send_ct - but who knows ... */ >+ case FSF_PAYLOAD_SIZE_MISMATCH: >+ ZFCP_LOG_FLAGS(2, "FSF_PAYLOAD_SIZE_MISMATCH\n"); >+ ZFCP_LOG_INFO("payload size mismatch (adapter: %s, " >+ "req_buf_length=%d, resp_buf_length=%d)\n", >+ zfcp_get_busid_by_adapter(adapter), >+ bottom->req_buf_length, bottom->resp_buf_length); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ case FSF_REQUEST_SIZE_TOO_LARGE: >+ ZFCP_LOG_FLAGS(2, "FSF_REQUEST_SIZE_TOO_LARGE\n"); >+ ZFCP_LOG_INFO("request size too large (adapter: %s, " >+ "req_buf_length=%d)\n", >+ zfcp_get_busid_by_adapter(adapter), >+ bottom->req_buf_length); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ case FSF_RESPONSE_SIZE_TOO_LARGE: >+ ZFCP_LOG_FLAGS(2, "FSF_RESPONSE_SIZE_TOO_LARGE\n"); >+ ZFCP_LOG_INFO("response size too large (adapter: %s, " >+ "resp_buf_length=%d)\n", >+ zfcp_get_busid_by_adapter(adapter), >+ bottom->resp_buf_length); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ case FSF_SBAL_MISMATCH: >+ ZFCP_LOG_FLAGS(2, "FSF_SBAL_MISMATCH\n"); >+ ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " >+ "resp_buf_length=%d)\n", >+ zfcp_get_busid_by_adapter(adapter), >+ bottom->req_buf_length, bottom->resp_buf_length); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ > default : > ZFCP_LOG_NORMAL("bug: An unknown FSF Status was presented " > "(debug info 0x%x)\n", header->fsf_status); >@@ -1723,14 +1759,14 @@ zfcp_fsf_send_els(struct zfcp_send_els * > { > volatile struct qdio_buffer_element *sbale; > struct zfcp_fsf_req *fsf_req; >- struct zfcp_port *port; >+ u32 d_id; > struct zfcp_adapter *adapter; > unsigned long lock_flags; > int bytes; > int ret = 0; > >- port = els->port; >- adapter = port->adapter; >+ d_id = els->d_id; >+ adapter = els->adapter; > > ret = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS, > ZFCP_REQ_AUTO_CLEANUP, >@@ -1738,7 +1774,7 @@ zfcp_fsf_send_els(struct zfcp_send_els * > if (ret < 0) { > ZFCP_LOG_INFO("error: creation of ELS request failed " > "(adapter %s, port d_id: 0x%08x)\n", >- zfcp_get_busid_by_adapter(adapter), port->d_id); >+ zfcp_get_busid_by_adapter(adapter), d_id); > goto failed_req; > } > >@@ -1763,8 +1799,7 @@ zfcp_fsf_send_els(struct zfcp_send_els * > if (bytes <= 0) { > ZFCP_LOG_INFO("error: creation of ELS request failed " > "(adapter %s, port d_id: 0x%08x)\n", >- zfcp_get_busid_by_adapter(adapter), >- port->d_id); >+ zfcp_get_busid_by_adapter(adapter), d_id); > if (bytes == 0) { > ret = -ENOMEM; > } else { >@@ -1781,8 +1816,7 @@ zfcp_fsf_send_els(struct zfcp_send_els * > if (bytes <= 0) { > ZFCP_LOG_INFO("error: creation of ELS request failed " > "(adapter %s, port d_id: 0x%08x)\n", >- zfcp_get_busid_by_adapter(adapter), >- port->d_id); >+ zfcp_get_busid_by_adapter(adapter), d_id); > if (bytes == 0) { > ret = -ENOMEM; > } else { >@@ -1796,13 +1830,13 @@ zfcp_fsf_send_els(struct zfcp_send_els * > ZFCP_LOG_INFO("error: microcode does not support chained SBALs" > ", ELS request too big (adapter %s, " > "port d_id: 0x%08x)\n", >- zfcp_get_busid_by_adapter(adapter), port->d_id); >+ zfcp_get_busid_by_adapter(adapter), d_id); > ret = -EOPNOTSUPP; > goto failed_send; > } > > /* settings in QTCB */ >- fsf_req->qtcb->bottom.support.d_id = port->d_id; >+ fsf_req->qtcb->bottom.support.d_id = d_id; > fsf_req->qtcb->bottom.support.service_class = adapter->fc_service_class; > fsf_req->qtcb->bottom.support.timeout = ZFCP_ELS_TIMEOUT; > fsf_req->data.send_els = els; >@@ -1813,13 +1847,13 @@ zfcp_fsf_send_els(struct zfcp_send_els * > ret = zfcp_fsf_req_send(fsf_req); > if (ret) { > ZFCP_LOG_DEBUG("error: initiation of ELS request failed " >- "(adapter %s, port 0x%016Lx)\n", >- zfcp_get_busid_by_adapter(adapter), port->wwpn); >+ "(adapter %s, port d_id: 0x%08x)\n", >+ zfcp_get_busid_by_adapter(adapter), d_id); > goto failed_send; > } > >- ZFCP_LOG_DEBUG("ELS request initiated (adapter %s, port 0x%016Lx)\n", >- zfcp_get_busid_by_adapter(adapter), port->wwpn); >+ ZFCP_LOG_DEBUG("ELS request initiated (adapter %s, port d_id: " >+ "0x%08x)\n", zfcp_get_busid_by_adapter(adapter), d_id); > goto out; > > failed_send: >@@ -1846,15 +1880,17 @@ static int zfcp_fsf_send_els_handler(str > { > struct zfcp_adapter *adapter; > struct zfcp_port *port; >+ u32 d_id; > struct fsf_qtcb_header *header; > struct fsf_qtcb_bottom_support *bottom; > struct zfcp_send_els *send_els; > int retval = -EINVAL; > u16 subtable, rule, counter; > >- adapter = fsf_req->adapter; > send_els = fsf_req->data.send_els; >+ adapter = send_els->adapter; > port = send_els->port; >+ d_id = send_els->d_id; > header = &fsf_req->qtcb->header; > bottom = &fsf_req->qtcb->bottom.support; > >@@ -1873,13 +1909,13 @@ static int zfcp_fsf_send_els_handler(str > if (adapter->fc_service_class <= 3) { > ZFCP_LOG_INFO("error: adapter %s does " > "not support fibrechannel class %d.\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > adapter->fc_service_class); > } else { > ZFCP_LOG_INFO("bug: The fibrechannel class at " > "adapter %s is invalid. " > "(debug info %d)\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > adapter->fc_service_class); > } > /* stop operation for this adapter */ >@@ -1891,17 +1927,15 @@ static int zfcp_fsf_send_els_handler(str > case FSF_ADAPTER_STATUS_AVAILABLE: > ZFCP_LOG_FLAGS(2, "FSF_ADAPTER_STATUS_AVAILABLE\n"); > switch (header->fsf_status_qual.word[0]){ >- case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: { >+ case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE: > ZFCP_LOG_FLAGS(2,"FSF_SQ_INVOKE_LINK_TEST_PROCEDURE\n"); > debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ltest"); >- if (send_els->ls_code != ZFCP_LS_ADISC) >+ if (port && (send_els->ls_code != ZFCP_LS_ADISC)) > zfcp_test_link(port); > fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; > break; >- } > case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED: > ZFCP_LOG_FLAGS(2,"FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED\n"); >- /* ERP strategy will escalate */ > debug_text_event(adapter->erp_dbf, 1, "fsf_sq_ulp"); > fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; > retval = >@@ -1926,8 +1960,8 @@ static int zfcp_fsf_send_els_handler(str > ZFCP_LOG_FLAGS(2, "FSF_ELS_COMMAND_REJECTED\n"); > ZFCP_LOG_INFO("ELS has been rejected because command filter " > "prohibited sending " >- "(adapter: %s, wwpn=0x%016Lx)\n", >- zfcp_get_busid_by_port(port), port->wwpn); >+ "(adapter: %s, port d_id: 0x%08x)\n", >+ zfcp_get_busid_by_adapter(adapter), d_id); > > break; > >@@ -1937,7 +1971,7 @@ static int zfcp_fsf_send_els_handler(str > "ELS request size and ELS response size must be either " > "both 0, or both greater than 0 " > "(adapter: %s, req_buf_length=%d resp_buf_length=%d)\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > bottom->req_buf_length, > bottom->resp_buf_length); > break; >@@ -1950,7 +1984,7 @@ static int zfcp_fsf_send_els_handler(str > "exceeds the size of the buffers " > "that have been allocated for ELS request data " > "(adapter: %s, req_buf_length=%d)\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > bottom->req_buf_length); > break; > >@@ -1962,15 +1996,25 @@ static int zfcp_fsf_send_els_handler(str > "exceeds the size of the buffers " > "that have been allocated for ELS response data " > "(adapter: %s, resp_buf_length=%d)\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > bottom->resp_buf_length); > break; > >+ case FSF_SBAL_MISMATCH: >+ /* should never occure, avoided in zfcp_fsf_send_els */ >+ ZFCP_LOG_FLAGS(2, "FSF_SBAL_MISMATCH\n"); >+ ZFCP_LOG_INFO("SBAL mismatch (adapter: %s, req_buf_length=%d, " >+ "resp_buf_length=%d)\n", >+ zfcp_get_busid_by_adapter(adapter), >+ bottom->req_buf_length, bottom->resp_buf_length); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ > case FSF_ACCESS_DENIED: > ZFCP_LOG_FLAGS(2, "FSF_ACCESS_DENIED\n"); > ZFCP_LOG_NORMAL("Access denied, cannot send ELS " >- "(adapter: %s, wwpn=0x%016Lx)\n", >- zfcp_get_busid_by_port(port), port->wwpn); >+ "(adapter: %s, port d_id: 0x%08x)\n", >+ zfcp_get_busid_by_adapter(adapter), d_id); > for (counter = 0; counter < 2; counter++) { > subtable = header->fsf_status_qual.halfword[counter * 2]; > rule = header->fsf_status_qual.halfword[counter * 2 + 1]; >@@ -1993,7 +2037,7 @@ static int zfcp_fsf_send_els_handler(str > ZFCP_LOG_NORMAL( > "bug: An unknown FSF Status was presented " > "(adapter: %s, fsf_status=0x%08x)\n", >- zfcp_get_busid_by_port(port), >+ zfcp_get_busid_by_adapter(adapter), > header->fsf_status); > debug_text_event(adapter->erp_dbf, 0, "fsf_sq_inval"); > debug_exception(adapter->erp_dbf, 0, >@@ -2622,6 +2666,15 @@ zfcp_fsf_open_port_handler(struct zfcp_f > } > break; > >+ case FSF_UNKNOWN_OP_SUBTYPE: >+ /* should never occure, subtype not set in zfcp_fsf_open_port */ >+ ZFCP_LOG_FLAGS(2, "FSF_UNKNOWN_OP_SUBTYPE\n"); >+ ZFCP_LOG_INFO("unknown operation subtype (adapter: %s, " >+ "op_subtype=0x%x)\n", zfcp_get_busid_by_port(port), >+ fsf_req->qtcb->bottom.support.operation_subtype); >+ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; >+ break; >+ > default: > ZFCP_LOG_NORMAL("bug: An unknown FSF Status was presented " > "(debug info 0x%x)\n", >@@ -4445,7 +4498,7 @@ zfcp_fsf_send_fcp_command_task_managemen > * -EOPNOTSUPP - The FCP adapter does not have Control File support > * -EINVAL - Invalid direction specified > * -ENOMEM - Insufficient memory >- * -EPERM - Cannot create FSF request or or place it in QDIO queue >+ * -EPERM - Cannot create FSF request or place it in QDIO queue > */ > int > zfcp_fsf_control_file(struct zfcp_adapter *adapter, >@@ -4463,11 +4516,10 @@ zfcp_fsf_control_file(struct zfcp_adapte > int retval = 0; > > if (!(adapter->adapter_features & FSF_FEATURE_CFDC)) { >- ZFCP_LOG_INFO( >- "Adapter %s does not support control file\n", >- zfcp_get_busid_by_adapter(adapter)); >+ ZFCP_LOG_INFO("cfdc not supported (adapter %s)\n", >+ zfcp_get_busid_by_adapter(adapter)); > retval = -EOPNOTSUPP; >- goto no_cfdc_support; >+ goto out; > } > > switch (fsf_command) { >@@ -4485,7 +4537,8 @@ zfcp_fsf_control_file(struct zfcp_adapte > > default: > ZFCP_LOG_INFO("Invalid FSF command code 0x%08x\n", fsf_command); >- goto invalid_command; >+ retval = -EINVAL; >+ goto out; > } > > retval = zfcp_fsf_req_create(adapter, fsf_command, req_flags, >@@ -4495,7 +4548,7 @@ zfcp_fsf_control_file(struct zfcp_adapte > "adapter %s\n", > zfcp_get_busid_by_adapter(adapter)); > retval = -EPERM; >- goto out; >+ goto unlock_queue_lock; > } > > sbale = zfcp_qdio_sbale_req(fsf_req, fsf_req->sbal_curr, 0); >@@ -4517,42 +4570,40 @@ zfcp_fsf_control_file(struct zfcp_adapte > "SBALS for an FSF request to the adapter %s\n", > zfcp_get_busid_by_adapter(adapter)); > retval = -ENOMEM; >- goto sbals_failed; >+ goto free_fsf_req; > } >- } else { >+ } else > sbale[1].flags |= SBAL_FLAGS_LAST_ENTRY; >- } > > zfcp_fsf_start_timer(fsf_req, ZFCP_FSF_REQUEST_TIMEOUT); > retval = zfcp_fsf_req_send(fsf_req); > if (retval < 0) { >- ZFCP_LOG_INFO( >- "error: Could not send FSF request to the adapter %s\n", >- zfcp_get_busid_by_adapter(adapter)); >+ ZFCP_LOG_INFO("initiation of cfdc up/download failed" >+ "(adapter %s)\n", >+ zfcp_get_busid_by_adapter(adapter)); > retval = -EPERM; >- goto queue_failed; >+ goto free_fsf_req; > } >+ write_unlock_irqrestore(&adapter->request_queue.queue_lock, lock_flags); > >- ZFCP_LOG_NORMAL( >- "Control file %s FSF request has been sent to the adapter %s\n", >- fsf_command == FSF_QTCB_DOWNLOAD_CONTROL_FILE ? >+ ZFCP_LOG_NORMAL("Control file %s FSF request has been sent to the " >+ "adapter %s\n", >+ fsf_command == FSF_QTCB_DOWNLOAD_CONTROL_FILE ? > "download" : "upload", >- zfcp_get_busid_by_adapter(adapter)); >+ zfcp_get_busid_by_adapter(adapter)); > >- *fsf_req_ptr = fsf_req; >+ wait_event(fsf_req->completion_wq, >+ fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED); > >+ *fsf_req_ptr = fsf_req; > goto out; > >-sbals_failed: >-queue_failed: >+ free_fsf_req: > zfcp_fsf_req_free(fsf_req); >- >-out: >- write_unlock_irqrestore(&adapter->request_queue.queue_lock, lock_flags); >- >-invalid_command: >-no_cfdc_support: >- return retval; >+ unlock_queue_lock: >+ write_unlock_irqrestore(&adapter->request_queue.queue_lock, lock_flags); >+ out: >+ return retval; > } > > >@@ -4697,11 +4748,9 @@ zfcp_fsf_control_file_handler(struct zfc > > case FSF_UNKNOWN_OP_SUBTYPE: > ZFCP_LOG_FLAGS(2, "FSF_UNKNOWN_OP_SUBTYPE\n"); >- ZFCP_LOG_NORMAL( >- "Invalid operation subtype 0x%x has been specified " >- "in QTCB bottom sent to the adapter %s\n", >- bottom->operation_subtype, >- zfcp_get_busid_by_adapter(adapter)); >+ ZFCP_LOG_NORMAL("unknown operation subtype (adapter: %s, " >+ "op_subtype=0x%x)\n", zfcp_get_busid_by_adapter(adapter), >+ bottom->operation_subtype); > fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; > retval = -EINVAL; > break; >--- linux-2.6.9/drivers/s390/scsi/zfcp_fsf.h.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_fsf.h >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -105,6 +106,8 @@ > #define FSF_PAYLOAD_SIZE_MISMATCH 0x00000060 > #define FSF_REQUEST_SIZE_TOO_LARGE 0x00000061 > #define FSF_RESPONSE_SIZE_TOO_LARGE 0x00000062 >+#define FSF_SBAL_MISMATCH 0x00000063 >+#define FSF_OPEN_PORT_WITHOUT_PRLI 0x00000064 > #define FSF_ADAPTER_STATUS_AVAILABLE 0x000000AD > #define FSF_FCP_RSP_AVAILABLE 0x000000AF > #define FSF_UNKNOWN_COMMAND 0x000000E2 >--- linux-2.6.9/drivers/s390/scsi/zfcp_qdio.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_qdio.c > * Raimund Schroeder <raimund.schroeder@de.ibm.com> > * Wolfgang Taphorn > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -28,7 +29,7 @@ > * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. > */ > >-#define ZFCP_QDIO_C_REVISION "$Revision: 1.19 $" >+#define ZFCP_QDIO_C_REVISION "$Revision: 1.20 $" > > #include "zfcp_ext.h" > >--- linux-2.6.9/drivers/s390/scsi/zfcp_scsi.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_scsi.c >@@ -12,6 +12,7 @@ > * Wolfgang Taphorn > * Stefan Bader <stefan.bader@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -31,7 +32,7 @@ > #define ZFCP_LOG_AREA ZFCP_LOG_AREA_SCSI > > /* this drivers version (do not edit !!! generated and updated by cvs) */ >-#define ZFCP_SCSI_REVISION "$Revision: 1.68 $" >+#define ZFCP_SCSI_REVISION "$Revision: 1.71 $" > > #include "zfcp_ext.h" > #include <asm/atomic.h> >@@ -84,7 +85,8 @@ struct zfcp_data zfcp_data = { > unchecked_isa_dma: 0, > use_clustering: 1, > sdev_attrs: zfcp_sysfs_sdev_attrs, >- } >+ }, >+ .driver_version = ZFCP_VERSION, > /* rest initialised with zeros */ > }; > >--- linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_adapter.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_adapter.c >@@ -10,6 +10,7 @@ > * Authors: > * Martin Peschke <mpeschke@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >--- linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_driver.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_driver.c >@@ -10,6 +10,7 @@ > * Authors: > * Martin Peschke <mpeschke@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -26,7 +27,7 @@ > * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. > */ > >-#define ZFCP_SYSFS_DRIVER_C_REVISION "$Revision: 1.15 $" >+#define ZFCP_SYSFS_DRIVER_C_REVISION "$Revision: 1.17 $" > > #include "zfcp_ext.h" > >@@ -85,7 +86,7 @@ ZFCP_DEFINE_DRIVER_ATTR(fc, FC); > static ssize_t zfcp_sysfs_version_show(struct device_driver *dev, > char *buf) > { >- return sprintf(buf, "%s\n", ZFCP_VERSION); >+ return sprintf(buf, "%s\n", zfcp_data.driver_version); > } > > static DRIVER_ATTR(version, S_IRUGO, zfcp_sysfs_version_show, NULL); >--- linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_port.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_port.c >@@ -10,6 +10,7 @@ > * Authors: > * Martin Peschke <mpeschke@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -26,7 +27,7 @@ > * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. > */ > >-#define ZFCP_SYSFS_PORT_C_REVISION "$Revision: 1.44 $" >+#define ZFCP_SYSFS_PORT_C_REVISION "$Revision: 1.46 $" > > #include "zfcp_ext.h" > >--- linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_unit.c.orig >+++ linux-2.6.9/drivers/s390/scsi/zfcp_sysfs_unit.c >@@ -10,6 +10,7 @@ > * Authors: > * Martin Peschke <mpeschke@de.ibm.com> > * Heiko Carstens <heiko.carstens@de.ibm.com> >+ * Andreas Herrmann <aherrman@de.ibm.com> > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by >@@ -26,7 +27,7 @@ > * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. > */ > >-#define ZFCP_SYSFS_UNIT_C_REVISION "$Revision: 1.27 $" >+#define ZFCP_SYSFS_UNIT_C_REVISION "$Revision: 1.29 $" > > #include "zfcp_ext.h" >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 249775
:
160756
|
310706
|
314486
| 315939 |
316275