Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b03670e5277224d1166cb5e4f610fc388186b065
Commit:     b03670e5277224d1166cb5e4f610fc388186b065
Parent:     2135be5f24ee6620ea6f2a594087d51b6a67ce7e
Author:     Christof Schmitt <[EMAIL PROTECTED]>
AuthorDate: Mon May 7 16:35:04 2007 +0200
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Tue May 8 11:19:50 2007 -0500

    [SCSI] zfcp: Stop system after memory corruption
    
    For each request that is sent to the FCP adapter, zfcp allocates
    memory. Status information and data that is being read from the
    device is written to this memory by the hardware. After that,
    the hardware signals this via the response queue and zfcp
    continues processing.
    
    Now, if zfcp detects that there is a signal for an incoming
    response from the hardware, but there is no outstanding request
    for that request id, then some memory that can be in use anywhere
    in the system has just been overwritten. This should never happen,
    but if it does, stop the system with a panic.
    
    Signed-off-by: Christof Schmitt <[EMAIL PROTECTED]>
    Signed-off-by: Swen Schillig <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/s390/scsi/zfcp_qdio.c |   34 ++++++----------------------------
 1 files changed, 6 insertions(+), 28 deletions(-)

diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c
index 1e12a78..e50e6ad 100644
--- a/drivers/s390/scsi/zfcp_qdio.c
+++ b/drivers/s390/scsi/zfcp_qdio.c
@@ -285,8 +285,8 @@ zfcp_qdio_request_handler(struct ccw_device *ccw_device,
 /**
  * zfcp_qdio_reqid_check - checks for valid reqids or unsolicited status
  */
-static int zfcp_qdio_reqid_check(struct zfcp_adapter *adapter, 
-                                unsigned long req_id)
+static void zfcp_qdio_reqid_check(struct zfcp_adapter *adapter,
+                                 unsigned long req_id)
 {
        struct zfcp_fsf_req *fsf_req;
        unsigned long flags;
@@ -298,9 +298,7 @@ static int zfcp_qdio_reqid_check(struct zfcp_adapter 
*adapter,
 
        if (!fsf_req) {
                spin_unlock_irqrestore(&adapter->req_list_lock, flags);
-               ZFCP_LOG_NORMAL("error: unknown request id (%ld).\n", req_id);
-               zfcp_erp_adapter_reopen(adapter, 0);
-               return -EINVAL;
+               panic("error: unknown request id (%ld).\n", req_id);
        }
 
        zfcp_reqlist_remove(adapter, req_id);
@@ -309,8 +307,6 @@ static int zfcp_qdio_reqid_check(struct zfcp_adapter 
*adapter,
 
        /* finish the FSF request */
        zfcp_fsf_req_complete(fsf_req);
-
-       return 0;
 }
 
 /*
@@ -374,27 +370,9 @@ zfcp_qdio_response_handler(struct ccw_device *ccw_device,
 
                        /* look for QDIO request identifiers in SB */
                        buffere = &buffer->element[buffere_index];
-                       retval = zfcp_qdio_reqid_check(adapter,
-                                       (unsigned long) buffere->addr);
-
-                       if (retval) {
-                               ZFCP_LOG_NORMAL("bug: unexpected inbound "
-                                               "packet on adapter %s "
-                                               "(reqid=0x%lx, "
-                                               "first_element=%d, "
-                                               "elements_processed=%d)\n",
-                                               
zfcp_get_busid_by_adapter(adapter),
-                                               (unsigned long) buffere->addr,
-                                               first_element,
-                                               elements_processed);
-                               ZFCP_LOG_NORMAL("hex dump of inbound buffer "
-                                               "at address %p "
-                                               "(buffer_index=%d, "
-                                               "buffere_index=%d)\n", buffer,
-                                               buffer_index, buffere_index);
-                               ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL,
-                                             (char *) buffer, SBAL_SIZE);
-                       }
+                       zfcp_qdio_reqid_check(adapter,
+                                             (unsigned long) buffere->addr);
+
                        /*
                         * A single used SBALE per inbound SBALE has been
                         * implemented by QDIO so far. Hope they will
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to