[PATCH] libata-dev: Make the the in_wq check as an inline function
authorAlbert Lee <albertcc@tw.ibm.com>
Sat, 25 Mar 2006 09:58:38 +0000 (17:58 +0800)
committerJeff Garzik <jeff@garzik.org>
Wed, 29 Mar 2006 22:21:54 +0000 (17:21 -0500)
Make the the in_wq check easier to read as an inline function.

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/libata-core.c

index 61c120dae74d0ce2c4e61717a073fb733ed9c686..27078c06119a7cae363e437e508177c2de79b10c 100644 (file)
@@ -3535,6 +3535,33 @@ err_out:
        ap->hsm_task_state = HSM_ST_ERR;
 }
 
+/**
+ *     ata_hsm_ok_in_wq - Check if the qc can be handled in the workqueue.
+ *     @ap: the target ata_port
+ *     @qc: qc on going
+ *
+ *     RETURNS:
+ *     1 if ok in workqueue, 0 otherwise.
+ */
+
+static inline int ata_hsm_ok_in_wq(struct ata_port *ap, struct ata_queued_cmd *qc)
+{
+       if (qc->tf.flags & ATA_TFLAG_POLLING)
+               return 1;
+
+       if (ap->hsm_task_state == HSM_ST_FIRST) {
+               if (qc->tf.protocol == ATA_PROT_PIO &&
+                   (qc->tf.flags & ATA_TFLAG_WRITE))
+                   return 1;
+
+               if (is_atapi_taskfile(&qc->tf) &&
+                   !(qc->dev->flags & ATA_DFLAG_CDB_INTR))
+                       return 1;
+       }
+
+       return 0;
+}
+
 /**
  *     ata_hsm_move - move the HSM to the next state.
  *     @ap: the target ata_port
@@ -3558,12 +3585,7 @@ static int ata_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
         * like DMA polling into the workqueue. Notice that
         * in_wq is not equivalent to (qc->tf.flags & ATA_TFLAG_POLLING).
         */
-       WARN_ON(in_wq != ((qc->tf.flags & ATA_TFLAG_POLLING) ||
-                         (ap->hsm_task_state == HSM_ST_FIRST &&
-                          ((qc->tf.protocol == ATA_PROT_PIO &&
-                            (qc->tf.flags & ATA_TFLAG_WRITE)) ||
-                           (is_atapi_taskfile(&qc->tf) &&
-                            !(qc->dev->flags & ATA_DFLAG_CDB_INTR))))));
+       WARN_ON(in_wq != ata_hsm_ok_in_wq(ap, qc));
 
        /* check error */
        if (unlikely(status & (ATA_ERR | ATA_DF))) {