--- libata-2.6-reorder/drivers/scsi/libata-core.c 2005-03-18 12:56:44.000000000 +0800 +++ libata-2.6-extrabytes/drivers/scsi/libata-core.c 2005-03-18 14:00:34.000000000 +0800 @@ -2338,6 +2338,14 @@ ap->pio_task_state = PIO_ST_LAST; next_sg: + /* check whether qc->sg is full */ + if (unlikely(qc->cursg >= qc->n_elem)) { + printk(KERN_WARNING "ata%u: qc->sg full, %u bytes trailing\n", ap->id, bytes); + + ap->pio_task_state = PIO_ST_ERR; + return; + } + sg = &qc->sg[qc->cursg]; page = sg->page;