diff -ruN ata/ata-queue.c ata.fixed/ata-queue.c --- ata/ata-queue.c Fri Sep 23 20:06:10 2005 +++ ata.fixed/ata-queue.c Wed Dec 14 18:52:58 2005 @@ -428,11 +430,14 @@ if (composite->wr_depend && (composite->rd_done & composite->wr_depend)==composite->wr_depend && (composite->wr_needed & (~composite->wr_done))) { - index = ((composite->wr_needed & (~composite->wr_done))) - 1; + index = (composite->wr_needed & (~composite->wr_done)); } mtx_unlock(&composite->lock); - if (index) + if (index) { + /* should be really bitshift */ + index = index - 1; ata_start(device_get_parent(composite->request[index]->dev)); + } } /* get results back to the initiator */