[PATCH 10/13] scsi_lib.c: properly count the number of pages in scsi_req_map_sg()

Chris Wright
2006-06-20T11:51:08Z

[-- Attachment #1: scsi_lib.c-properly-count-the-number-of-pages-in-scsi_req_map_sg.patch --]
[-- Type: text/plain, Size: 1089 bytes --]

-stable review patch. If anyone has any objections, please let us know.
------------------

From: James Bottomley <jejb@mulgrave.il.steeleye.com>

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 <lgeek@frontiernet.net>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---

drivers/scsi/scsi_lib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- linux-2.6.16.21.orig/drivers/scsi/scsi_lib.c
+++ linux-2.6.16.21/drivers/scsi/scsi_lib.c
@@ -368,7 +368,7 @@ static int scsi_req_map_sg(struct reques
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;

--