|
@@ -1711,19 +1711,19 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
|
|
|
{
|
|
|
u64 rd_size = req->wb_bytes;
|
|
|
|
|
|
- WARN_ON_ONCE(pgio->pg_lseg != NULL);
|
|
|
-
|
|
|
- if (pgio->pg_dreq == NULL)
|
|
|
- rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
|
|
|
- else
|
|
|
- rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
|
|
|
-
|
|
|
- pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
|
|
- req->wb_context,
|
|
|
- req_offset(req),
|
|
|
- rd_size,
|
|
|
- IOMODE_READ,
|
|
|
- GFP_KERNEL);
|
|
|
+ if (pgio->pg_lseg == NULL) {
|
|
|
+ if (pgio->pg_dreq == NULL)
|
|
|
+ rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
|
|
|
+ else
|
|
|
+ rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
|
|
|
+
|
|
|
+ pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
|
|
+ req->wb_context,
|
|
|
+ req_offset(req),
|
|
|
+ rd_size,
|
|
|
+ IOMODE_READ,
|
|
|
+ GFP_KERNEL);
|
|
|
+ }
|
|
|
/* If no lseg, fall back to read through mds */
|
|
|
if (pgio->pg_lseg == NULL)
|
|
|
nfs_pageio_reset_read_mds(pgio);
|
|
@@ -1735,14 +1735,13 @@ void
|
|
|
pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
|
|
struct nfs_page *req, u64 wb_size)
|
|
|
{
|
|
|
- WARN_ON_ONCE(pgio->pg_lseg != NULL);
|
|
|
-
|
|
|
- pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
|
|
- req->wb_context,
|
|
|
- req_offset(req),
|
|
|
- wb_size,
|
|
|
- IOMODE_RW,
|
|
|
- GFP_NOFS);
|
|
|
+ if (pgio->pg_lseg == NULL)
|
|
|
+ pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
|
|
+ req->wb_context,
|
|
|
+ req_offset(req),
|
|
|
+ wb_size,
|
|
|
+ IOMODE_RW,
|
|
|
+ GFP_NOFS);
|
|
|
/* If no lseg, fall back to write through mds */
|
|
|
if (pgio->pg_lseg == NULL)
|
|
|
nfs_pageio_reset_write_mds(pgio);
|