Re: [PATCH] libata: get rid of ATA_MAX_QUEUE loop in ata_qc_complete_multiple()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux