Commit 08be8f079c22ce79f4923a49a119cb55ec3556d0
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
fs/nfs/pnfs.c
... | ... | @@ -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); |