Commit 08be8f079c22ce79f4923a49a119cb55ec3556d0

Authored by Peng Tao
Committed by Greg Kroah-Hartman
1 parent 052f8db44c

nfs41: .init_read and .init_write can be called with valid pg_lseg

commit cb5d04bc39e914124e811ea55f3034d2379a5f6c upstream.

With pgio refactoring in v3.15, .init_read and .init_write can be
called with valid pgio->pg_lseg. file layout was fixed at that time
by commit c6194271f (pnfs: filelayout: support non page aligned
layouts). But the generic helper still needs to be fixed.

Signed-off-by: Peng Tao <tao.peng@primarydata.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 1 changed file with 20 additions and 21 deletions Side-by-side Diff

... ... @@ -1445,19 +1445,19 @@
1445 1445 {
1446 1446 u64 rd_size = req->wb_bytes;
1447 1447  
1448   - WARN_ON_ONCE(pgio->pg_lseg != NULL);
  1448 + if (pgio->pg_lseg == NULL) {
  1449 + if (pgio->pg_dreq == NULL)
  1450 + rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
  1451 + else
  1452 + rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
1449 1453  
1450   - if (pgio->pg_dreq == NULL)
1451   - rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
1452   - else
1453   - rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
1454   -
1455   - pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
1456   - req->wb_context,
1457   - req_offset(req),
1458   - rd_size,
1459   - IOMODE_READ,
1460   - GFP_KERNEL);
  1454 + pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
  1455 + req->wb_context,
  1456 + req_offset(req),
  1457 + rd_size,
  1458 + IOMODE_READ,
  1459 + GFP_KERNEL);
  1460 + }
1461 1461 /* If no lseg, fall back to read through mds */
1462 1462 if (pgio->pg_lseg == NULL)
1463 1463 nfs_pageio_reset_read_mds(pgio);
... ... @@ -1469,14 +1469,13 @@
1469 1469 pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
1470 1470 struct nfs_page *req, u64 wb_size)
1471 1471 {
1472   - WARN_ON_ONCE(pgio->pg_lseg != NULL);
1473   -
1474   - pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
1475   - req->wb_context,
1476   - req_offset(req),
1477   - wb_size,
1478   - IOMODE_RW,
1479   - GFP_NOFS);
  1472 + if (pgio->pg_lseg == NULL)
  1473 + pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
  1474 + req->wb_context,
  1475 + req_offset(req),
  1476 + wb_size,
  1477 + IOMODE_RW,
  1478 + GFP_NOFS);
1480 1479 /* If no lseg, fall back to write through mds */
1481 1480 if (pgio->pg_lseg == NULL)
1482 1481 nfs_pageio_reset_write_mds(pgio);