Messages in this thread Patch in this message | | | Date | Tue, 23 Oct 2007 09:23:59 +0200 | From | Jens Axboe <> | Subject | Re: IDE crash... |
| |
On Tue, Oct 23 2007, David Miller wrote: > From: Jens Axboe <jens.axboe@oracle.com> > Date: Tue, 23 Oct 2007 09:09:33 +0200 > > > Eh this wont work, it's the wrong entry... Here's a temporary > > work-around. > > > > diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c > > index c89f0d3..108202b 100644 > > --- a/drivers/ide/ide-io.c > > +++ b/drivers/ide/ide-io.c > > @@ -822,6 +822,7 @@ void ide_map_sg(ide_drive_t *drive, struct request *rq) > > return; > > > > if (rq->cmd_type != REQ_TYPE_ATA_TASKFILE) { > > + sg_init_table(hwif->sg_table, hwif->sg_max_nents); > > hwif->sg_nents = blk_rq_map_sg(drive->queue, rq, sg); > > } else { > > sg_init_one(sg, rq->buffer, rq->nr_sectors * SECTOR_SIZE); > > That's the exact patch I'm about to boot test :-)
That should work - once you verify that, would you mind testing this one as well? Thanks!
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index 61c2e39..290836f 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c @@ -1352,7 +1352,7 @@ new_segment: if (!sg) sg = sglist; else - sg = sg_next(sg); + sg = sg_next_force(sg); sg_dma_len(sg) = 0; sg_dma_address(sg) = 0; diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 42daf5e..a98a2ee 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h @@ -99,6 +99,22 @@ static inline struct scatterlist *sg_next(struct scatterlist *sg) return sg; } +/** + * sg_next_force - return the next scatterlist entry in a list + * @sg: The current sg entry + * + * Description: + * Must only be used when more entries beyond this one is known to exist, + * as it clears the termination bit. Useful to avoid adding a full sg + * table init on every mapping. + * + **/ +static inline struct scatterlist *sg_next_force(struct scatterlist *sg) +{ + sg->page_link &= ~0x02; + return sg_next(sg); +} + /* * Loop over each sg element, following the pointer to a new list if necessary */ -- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |