pnfs: lookup new lseg at lseg boundary

Before mirroring support was added, the pageio descriptor's pg_lseg was
set to null when an RPC was sent. Because of this, pg_init was called
at lseg boundaries with pg_lseg = NULL, and it could be set to the new
lseg.

Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
This commit is contained in:
Weston Andros Adamson 2015-01-30 11:01:02 -05:00 committed by Tom Haynes
parent cb5d04bc39
commit 7c13789e3e
1 changed files with 8 additions and 2 deletions

View File

@ -1788,10 +1788,16 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio,
seg_end = end_offset(pgio->pg_lseg->pls_range.offset,
pgio->pg_lseg->pls_range.length);
req_start = req_offset(req);
WARN_ON_ONCE(req_start > seg_end);
WARN_ON_ONCE(req_start >= seg_end);
/* start of request is past the last byte of this segment */
if (req_start >= seg_end)
if (req_start >= seg_end) {
/* reference the new lseg */
if (pgio->pg_ops->pg_cleanup)
pgio->pg_ops->pg_cleanup(pgio);
if (pgio->pg_ops->pg_init)
pgio->pg_ops->pg_init(pgio, req);
return 0;
}
/* adjust 'size' iff there are fewer bytes left in the
* segment than what nfs_generic_pg_test returned */