projects/linux·commit f5235962

[SCSI] scsi_lib.c: properly count the number of pages in scsi_req_map_sg()

f5235962 · Bryan Holty <[email protected]> · 2006-03-22 06:35:39 -06:00

The calculation of nr_pages in scsi_req_map_sg() doesn't account for
the fact that the first page could have an offset that pushes the end
of the buffer onto a new page.

Signed-off-by: Bryan Holty <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
Commit
f52359622fa25783cf1a08c0772048d2ed1a7434
Parents
9f434d4f

Changes

1 files changed · +1 −1

FileStatusAddDelContent
drivers/scsi/scsi_lib.cmodified+1−1View file

drivers/scsi/scsi_lib.c

View file
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 764a8b3..faee475 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -367,7 +367,7 @@ static int scsi_req_map_sg(struct request *rq, struct scatterlist *sgl,
int nsegs, unsigned bufflen, gfp_t gfp)
{
struct request_queue *q = rq->q;
- int nr_pages = (bufflen + PAGE_SIZE - 1) >> PAGE_SHIFT;
+ int nr_pages = (bufflen + sgl[0].offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
unsigned int data_len = 0, len, bytes, off;
struct page *page;
struct bio *bio = NULL;