From: panda Date: Mon, 2 Nov 2009 12:23:32 +0000 (+0000) Subject: b=18801 X-Git-Tag: v1_8_2_02~1^2~14 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=87a49339a65eb241c2ffef17ef4d5f05f8ca6270;p=fs%2Flustre-release.git b=18801 i=Alexey Lyashkov i=Alexander Zarochentsev handle_short_read should use correct page shifts --- diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 2ccb080..abb9096 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -1023,7 +1023,7 @@ static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd) * via the LOV, and it _knows_ it's reading inside the file, it's just that * this stripe never got written at or beyond this stripe offset yet. */ static void handle_short_read(int nob_read, obd_count page_count, - struct brw_page **pga) + struct brw_page **pga, int pshift) { char *ptr; int i = 0; @@ -1035,7 +1035,7 @@ static void handle_short_read(int nob_read, obd_count page_count, if (pga[i]->count > nob_read) { /* EOF inside this page */ ptr = cfs_kmap(pga[i]->pg) + - (pga[i]->off & ~CFS_PAGE_MASK); + (OSC_FILE2MEM_OFF(pga[i]->off,pshift)&~CFS_PAGE_MASK); memset(ptr + nob_read, 0, pga[i]->count - nob_read); cfs_kunmap(pga[i]->pg); page_count--; @@ -1050,7 +1050,8 @@ static void handle_short_read(int nob_read, obd_count page_count, /* zero remaining pages */ while (page_count-- > 0) { - ptr = cfs_kmap(pga[i]->pg) + (pga[i]->off & ~CFS_PAGE_MASK); + ptr = cfs_kmap(pga[i]->pg) + + (OSC_FILE2MEM_OFF(pga[i]->off, pshift) & ~CFS_PAGE_MASK); memset(ptr, 0, pga[i]->count); cfs_kunmap(pga[i]->pg); i++; @@ -1441,7 +1442,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) } if (rc < aa->aa_requested_nob) - handle_short_read(rc, aa->aa_page_count, aa->aa_ppga); + handle_short_read(rc, aa->aa_page_count, aa->aa_ppga, aa->aa_pshift); if (body->oa.o_valid & OBD_MD_FLCKSUM) { static int cksum_counter;