On Wed, May 20 2009, Tejun Heo wrote: > Hello, Jens. > > Jens Axboe wrote: > > @@ -5039,16 +5039,19 @@ int ata_qc_complete_multiple(struct ata_port *ap, u32 qc_active) > > return -EINVAL; > > } > > > > - for (i = 0; i < ATA_MAX_QUEUE; i++) { > > + while (done_mask) { > > struct ata_queued_cmd *qc; > > + unsigned int next = __ffs(done_mask); > > > > - if (!(done_mask & (1 << i))) > > - continue; > > - > > - if ((qc = ata_qc_from_tag(ap, i))) { > > + qc = ata_qc_from_tag(ap, i + next); > > + if (qc) { > > ata_qc_complete(qc); > > nr_done++; > > } > > + if (++next >= ATA_MAX_QUEUE) > > + break; > > Given that __ffs doesn't care how far the first bit is on most archs > (even the generic one), I think it would be simpler and more efficient > to simply do done_mask &= ~(1 << i) and loop without adding to index > and shifting. It would be easier to read as well, agree. I'll repost it in 2 secs. -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html