diff options
| -rw-r--r-- | fs/nfs/nfs4filelayout.c | 3 | ||||
| -rw-r--r-- | fs/nfs/objlayout/objio_osd.c | 14 | ||||
| -rw-r--r-- | fs/nfs/pnfs.c | 13 | ||||
| -rw-r--r-- | fs/nfs/pnfs.h | 6 | 
4 files changed, 17 insertions, 19 deletions
| diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c index 24f05720daf1..426908809c97 100644 --- a/fs/nfs/nfs4filelayout.c +++ b/fs/nfs/nfs4filelayout.c @@ -661,6 +661,9 @@ filelayout_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,  	u64 p_stripe, r_stripe;  	u32 stripe_unit; +	if (!pnfs_generic_pg_test(pgio, prev, req)) +		return 0; +  	if (!pgio->pg_lseg)  		return 1;  	p_stripe = (u64)prev->wb_index << PAGE_CACHE_SHIFT; diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c index 8c2bd3eb8e8d..3b10d09e5210 100644 --- a/fs/nfs/objlayout/objio_osd.c +++ b/fs/nfs/objlayout/objio_osd.c @@ -988,18 +988,6 @@ ssize_t objio_write_pagelist(struct objlayout_io_state *ol_state, bool stable)  	return _write_exec(ios);  } -/* - * objlayout_pg_test(). Called by nfs_can_coalesce_requests() - * - * return true iff coalesce page - */ -bool -objlayout_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, -		   struct nfs_page *req) -{ -	return true; -} -  static struct pnfs_layoutdriver_type objlayout_type = {  	.id = LAYOUT_OSD2_OBJECTS,  	.name = "LAYOUT_OSD2_OBJECTS", @@ -1013,7 +1001,7 @@ static struct pnfs_layoutdriver_type objlayout_type = {  	.read_pagelist           = objlayout_read_pagelist,  	.write_pagelist          = objlayout_write_pagelist, -	.pg_test                 = objlayout_pg_test, +	.pg_test                 = pnfs_generic_pg_test,  	.free_deviceid_node	 = objio_free_deviceid_node, diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 212fc292761a..d79f2df33a46 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -1067,12 +1067,17 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,  						   pgio->pg_count,  						   access_type,  						   gfp_flags); -	} else if (pgio->pg_lseg && -		   req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset, -						pgio->pg_lseg->pls_range.length)) +		return true; +	} + +	if (pgio->pg_lseg && +	    req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset, +					 pgio->pg_lseg->pls_range.length))  		return false; -	return NFS_SERVER(pgio->pg_inode)->pnfs_curr_ld->pg_test(pgio, prev, req); + +	return true;  } +EXPORT_SYMBOL_GPL(pnfs_generic_pg_test);  /*   * Called by non rpc-based layout drivers diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index 65daae59c8ae..48d0a8e4d062 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h @@ -295,8 +295,10 @@ static inline int pnfs_return_layout(struct inode *ino)  static inline void pnfs_pageio_init(struct nfs_pageio_descriptor *pgio,  				    struct inode *inode)  { -	if (NFS_SERVER(inode)->pnfs_curr_ld) -		pgio->pg_test = pnfs_generic_pg_test; +	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld; + +	if (ld) +		pgio->pg_test = ld->pg_test;  }  #else  /* CONFIG_NFS_V4_1 */ |