aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorWeston Andros Adamson <dros@primarydata.com>2014-05-15 11:56:55 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-05-29 11:11:49 -0400
commit19b54848fee419f0bb35479e4ea98d9f2b985657 (patch)
tree979464ece075c8edaf8a9dac88ff9e8904f2ded3 /fs/nfs
parent5002c58639d41b93e800c8a4b7eca49c40d57822 (diff)
pnfs: allow non page aligned pnfs layout segments
Remove alignment checks that would revert to MDS and change pg_test to return the max ammount left in the segment (or other pg_test call) up to size of passed request, or 0 if no space is left. Signed-off-by: Weston Andros Adamson <dros@primarydata.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/pnfs.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 6ef108b1d85f..ce46a417e500 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1388,11 +1388,6 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
1388 1388
1389 WARN_ON_ONCE(pgio->pg_lseg != NULL); 1389 WARN_ON_ONCE(pgio->pg_lseg != NULL);
1390 1390
1391 if (req->wb_offset != req->wb_pgbase) {
1392 nfs_pageio_reset_read_mds(pgio);
1393 return;
1394 }
1395
1396 if (pgio->pg_dreq == NULL) 1391 if (pgio->pg_dreq == NULL)
1397 rd_size = i_size_read(pgio->pg_inode) - req_offset(req); 1392 rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
1398 else 1393 else
@@ -1417,11 +1412,6 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
1417{ 1412{
1418 WARN_ON_ONCE(pgio->pg_lseg != NULL); 1413 WARN_ON_ONCE(pgio->pg_lseg != NULL);
1419 1414
1420 if (req->wb_offset != req->wb_pgbase) {
1421 nfs_pageio_reset_write_mds(pgio);
1422 return;
1423 }
1424
1425 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, 1415 pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
1426 req->wb_context, 1416 req->wb_context,
1427 req_offset(req), 1417 req_offset(req),
@@ -1443,9 +1433,9 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
1443 struct nfs_page *req) 1433 struct nfs_page *req)
1444{ 1434{
1445 unsigned int size; 1435 unsigned int size;
1436 u64 end;
1446 1437
1447 size = nfs_generic_pg_test(pgio, prev, req); 1438 size = nfs_generic_pg_test(pgio, prev, req);
1448
1449 if (!size) 1439 if (!size)
1450 return 0; 1440 return 0;
1451 1441
@@ -1463,11 +1453,16 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
1463 * first byte that lies outside the pnfs_layout_range. FIXME? 1453 * first byte that lies outside the pnfs_layout_range. FIXME?
1464 * 1454 *
1465 */ 1455 */
1466 if (req_offset(req) >= end_offset(pgio->pg_lseg->pls_range.offset, 1456 if (pgio->pg_lseg) {
1467 pgio->pg_lseg->pls_range.length)) 1457 end = end_offset(pgio->pg_lseg->pls_range.offset,
1468 return 0; 1458 pgio->pg_lseg->pls_range.length);
1459 WARN_ON_ONCE(req_offset(req) > end);
1460 if (req_offset(req) >= end)
1461 return 0;
1462 size = min((unsigned int)(end - req_offset(req)), size);
1463 }
1469 1464
1470 return min(size, req->wb_bytes); 1465 return size;
1471} 1466}
1472EXPORT_SYMBOL_GPL(pnfs_generic_pg_test); 1467EXPORT_SYMBOL_GPL(pnfs_generic_pg_test);
1473 1468