]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ibmvfc: Improve async event handling
authorBrian King <brking@linux.vnet.ibm.com>
Thu, 18 Dec 2008 15:26:51 +0000 (09:26 -0600)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 18 Jan 2009 18:44:05 +0000 (10:44 -0800)
commit d2131b33c7e07c2905ee2f2321cc4dae1928c483 upstream.

While doing various error injection testing, such as cable
pulls and target moves, some issues were observed in handling
these events. This patch improves the way these events are handled
by increasing the delay waiting for the fabric to settle and also
changes the behavior of Link Up to break the CRQ to ensure everything
gets cleaned up properly on the VIOS.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/scsi/ibmvscsi/ibmvfc.c
drivers/scsi/ibmvscsi/ibmvfc.h

index 4dbb9cd6dac32b03a090eb03233b9bd281b85a74..189be8c5e0771a15a9b6acc4460e429ed1ee54e6 100644 (file)
@@ -2090,15 +2090,17 @@ static void ibmvfc_handle_async(struct ibmvfc_async_crq *crq,
        case IBMVFC_AE_LINK_UP:
        case IBMVFC_AE_RESUME:
                vhost->events_to_log |= IBMVFC_AE_LINKUP;
-               ibmvfc_init_host(vhost, 1);
+               vhost->delay_init = 1;
+               __ibmvfc_reset_host(vhost);
                break;
        case IBMVFC_AE_SCN_FABRIC:
+       case IBMVFC_AE_SCN_DOMAIN:
                vhost->events_to_log |= IBMVFC_AE_RSCN;
-               ibmvfc_init_host(vhost, 1);
+               vhost->delay_init = 1;
+               __ibmvfc_reset_host(vhost);
                break;
        case IBMVFC_AE_SCN_NPORT:
        case IBMVFC_AE_SCN_GROUP:
-       case IBMVFC_AE_SCN_DOMAIN:
                vhost->events_to_log |= IBMVFC_AE_RSCN;
        case IBMVFC_AE_ELS_LOGO:
        case IBMVFC_AE_ELS_PRLO:
@@ -3523,7 +3525,7 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
                if (vhost->delay_init) {
                        vhost->delay_init = 0;
                        spin_unlock_irqrestore(vhost->host->host_lock, flags);
-                       ssleep(5);
+                       ssleep(15);
                        return;
                } else
                        vhost->job_step(vhost);
index 089598e2dddb53182f36521ca6f824776b092149..d0e76d511194a620693709b2b39e1557e13927da 100644 (file)
@@ -33,7 +33,7 @@
 #define IBMVFC_DRIVER_DATE             "(August 14, 2008)"
 
 #define IBMVFC_DEFAULT_TIMEOUT 15
-#define IBMVFC_INIT_TIMEOUT            30
+#define IBMVFC_INIT_TIMEOUT            120
 #define IBMVFC_MAX_REQUESTS_DEFAULT    100
 
 #define IBMVFC_DEBUG                   0