> I can't think of a way to avoid second pass over scatterlist without > duplicating code (ata_qc_prep() and ata_fill_sg() from libata-core.c). This appears to be incomplete: > + VPRINTK("Splitting last PRD.\n"); > + > + ap->prd[idx - 1].flags_len -= cpu_to_le32(SG_COUNT_ASIC_BUG); > + VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, SG_COUNT_ASIC_BUG); > + > + addr = le32_to_cpu(ap->prd[idx - 1].addr) + len - SG_COUNT_ASIC_BUG; > + len = SG_COUNT_ASIC_BUG; > + ap->prd[idx].addr = cpu_to_le32(addr); > + ap->prd[idx].flags_len = cpu_to_le32(len); > + VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len); > + > + idx++; What guarantees you have enough PRD entries to do this without changing the limit in the structures ? Otherwise looks good - 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