mirror of https://gitee.com/openkylin/linux.git
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:
parent
cb5d04bc39
commit
7c13789e3e
|
@ -1788,10 +1788,16 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio,
|
||||||
seg_end = end_offset(pgio->pg_lseg->pls_range.offset,
|
seg_end = end_offset(pgio->pg_lseg->pls_range.offset,
|
||||||
pgio->pg_lseg->pls_range.length);
|
pgio->pg_lseg->pls_range.length);
|
||||||
req_start = req_offset(req);
|
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 */
|
/* 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;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* adjust 'size' iff there are fewer bytes left in the
|
/* adjust 'size' iff there are fewer bytes left in the
|
||||||
* segment than what nfs_generic_pg_test returned */
|
* segment than what nfs_generic_pg_test returned */
|
||||||
|
|
Loading…
Reference in New Issue