OSDN Git Service

[SCSI] qla4xxx: Remove AF_DPC_SCHEDULED flag from ha.
authorLalit Chandivade <lalit.chandivade@qlogic.com>
Wed, 18 May 2011 06:17:09 +0000 (23:17 -0700)
committerJames Bottomley <jbottomley@parallels.com>
Tue, 24 May 2011 16:40:02 +0000 (12:40 -0400)
Since queue_work does not requeue, there is no need to check
if a work is in progress using the AF_DPC_SCHEDULED flag.
queue_work would return if work is pending without adding the
work, do_dpc would again get invoked from qla4xxx_timer if
there is still DPC flags set.

Signed-off-by: Lalit Chandivade <lalit.chandivade@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <jbottomley@parallels.com>
drivers/scsi/qla4xxx/ql4_def.h
drivers/scsi/qla4xxx/ql4_os.c

index 75edfba..8e3a28e 100644 (file)
@@ -368,7 +368,6 @@ struct scsi_qla_host {
 #define AF_INIT_DONE                   1 /* 0x00000002 */
 #define AF_MBOX_COMMAND                        2 /* 0x00000004 */
 #define AF_MBOX_COMMAND_DONE           3 /* 0x00000008 */
-#define AF_DPC_SCHEDULED               5 /* 0x00000020 */
 #define AF_INTERRUPTS_ON               6 /* 0x00000040 */
 #define AF_GET_CRASH_RECORD            7 /* 0x00000080 */
 #define AF_LINK_UP                     8 /* 0x00000100 */
index 302938e..9c1c845 100644 (file)
@@ -859,7 +859,7 @@ static void qla4xxx_timer(struct scsi_qla_host *ha)
        }
 
        /* Wakeup the dpc routine for this adapter, if needed. */
-       if ((start_dpc ||
+       if (start_dpc ||
             test_bit(DPC_RESET_HA, &ha->dpc_flags) ||
             test_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags) ||
             test_bit(DPC_RELOGIN_DEVICE, &ha->dpc_flags) ||
@@ -869,9 +869,7 @@ static void qla4xxx_timer(struct scsi_qla_host *ha)
             test_bit(DPC_LINK_CHANGED, &ha->dpc_flags) ||
             test_bit(DPC_HA_UNRECOVERABLE, &ha->dpc_flags) ||
             test_bit(DPC_HA_NEED_QUIESCENT, &ha->dpc_flags) ||
-            test_bit(DPC_AEN, &ha->dpc_flags)) &&
-            !test_bit(AF_DPC_SCHEDULED, &ha->flags) &&
-            ha->dpc_thread) {
+            test_bit(DPC_AEN, &ha->dpc_flags)) {
                DEBUG2(printk("scsi%ld: %s: scheduling dpc routine"
                              " - dpc flags = 0x%lx\n",
                              ha->host_no, __func__, ha->dpc_flags));
@@ -1261,11 +1259,8 @@ static void qla4xxx_relogin_all_devices(struct scsi_qla_host *ha)
 
 void qla4xxx_wake_dpc(struct scsi_qla_host *ha)
 {
-       if (ha->dpc_thread &&
-           !test_bit(AF_DPC_SCHEDULED, &ha->flags)) {
-               set_bit(AF_DPC_SCHEDULED, &ha->flags);
+       if (ha->dpc_thread)
                queue_work(ha->dpc_thread, &ha->dpc_work);
-       }
 }
 
 /**
@@ -1292,12 +1287,12 @@ static void qla4xxx_do_dpc(struct work_struct *work)
 
        /* Initialization not yet finished. Don't do anything yet. */
        if (!test_bit(AF_INIT_DONE, &ha->flags))
-               goto do_dpc_exit;
+               return;
 
        if (test_bit(AF_EEH_BUSY, &ha->flags)) {
                DEBUG2(printk(KERN_INFO "scsi%ld: %s: flags = %lx\n",
                    ha->host_no, __func__, ha->flags));
-               goto do_dpc_exit;
+               return;
        }
 
        if (is_qla8022(ha)) {
@@ -1404,8 +1399,6 @@ dpc_post_reset_ha:
                }
        }
 
-do_dpc_exit:
-       clear_bit(AF_DPC_SCHEDULED, &ha->flags);
 }
 
 /**