Fnic: Not probing all the vNICS via fnic_probe on boot
authorHiral Shah <hishah@cisco.com>
Mon, 10 Nov 2014 20:54:32 +0000 (12:54 -0800)
committerChristoph Hellwig <hch@lst.de>
Thu, 20 Nov 2014 08:10:08 +0000 (09:10 +0100)
In fnic_dev_wait, Wait for finish to complete at least three times in two
seconds while loop before returning -ETIMEDOUT as sometime
schedule_timeout_uninterruptible takes more than two seconds to wake up.

- Increment fnic version from 1.6.0.11 to 1.6.0.12

Signed-off-by: Hiral Shah <hishah@cisco.com>
Signed-off-by: Sesidhar Baddela <sebaddel@cisco.com>
Signed-off-by: Anil Chintalapati <achintal@cisco.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/fnic/fnic.h
drivers/scsi/fnic/fnic_main.c

index bf8d34c26f13ffb99dcb6c6d616303a80076cc5e..69dee6838678735fc491aba46a547d30325c868d 100644 (file)
@@ -39,7 +39,7 @@
 
 #define DRV_NAME               "fnic"
 #define DRV_DESCRIPTION                "Cisco FCoE HBA Driver"
-#define DRV_VERSION            "1.6.0.11"
+#define DRV_VERSION            "1.6.0.12"
 #define PFX                    DRV_NAME ": "
 #define DFX                     DRV_NAME "%d: "
 
index cf1560c30b7f034a27413be791e360493fd00f62..1e5706ed9a40ddd2198931fa332e0855e603ee05 100644 (file)
@@ -437,21 +437,30 @@ static int fnic_dev_wait(struct vnic_dev *vdev,
        unsigned long time;
        int done;
        int err;
+       int count;
+
+       count = 0;
 
        err = start(vdev, arg);
        if (err)
                return err;
 
-       /* Wait for func to complete...2 seconds max */
+       /* Wait for func to complete.
+       * Sometime schedule_timeout_uninterruptible take long time
+       * to wake up so we do not retry as we are only waiting for
+       * 2 seconds in while loop. By adding count, we make sure
+       * we try atleast three times before returning -ETIMEDOUT
+       */
        time = jiffies + (HZ * 2);
        do {
                err = finished(vdev, &done);
+               count++;
                if (err)
                        return err;
                if (done)
                        return 0;
                schedule_timeout_uninterruptible(HZ / 10);
-       } while (time_after(time, jiffies));
+       } while (time_after(time, jiffies) || (count < 3));
 
        return -ETIMEDOUT;
 }