libata: remove assumption that ATA_MAX_QUEUE - 1 is the max
authorJens Axboe <axboe@kernel.dk>
Fri, 11 May 2018 18:51:07 +0000 (12:51 -0600)
committerTejun Heo <tj@kernel.org>
Fri, 11 May 2018 20:10:43 +0000 (13:10 -0700)
In a few spots we iterate to ATA_MAX_QUEUE -1, including internal
knowledge that the last tag is the internal tag. Remove this
assumption.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/libata-eh.c

index 1035de1e5120e6a2060334df7df70097a18d7032..9f9aad77fbcd91c875f4b2f448d198109e66b478 100644 (file)
@@ -873,9 +873,12 @@ static int ata_eh_nr_in_flight(struct ata_port *ap)
        int nr = 0;
 
        /* count only non-internal commands */
-       for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++)
+       for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
+               if (ata_tag_internal(tag))
+                       continue;
                if (ata_qc_from_tag(ap, tag))
                        nr++;
+       }
 
        return nr;
 }
@@ -900,7 +903,7 @@ void ata_eh_fastdrain_timerfn(struct timer_list *t)
                /* No progress during the last interval, tag all
                 * in-flight qcs as timed out and freeze the port.
                 */
-               for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++) {
+               for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
                        struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
                        if (qc)
                                qc->err_mask |= AC_ERR_TIMEOUT;