@@ -230,6 +230,7 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
desc->pg_error = 0;
desc->pg_lseg = NULL;
desc->pg_test = NULL;
+ pnfs_pageio_init(desc, inode);
}
/**
@@ -1058,7 +1058,7 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
access_type = IOMODE_RW;
gfp_flags = GFP_NOFS;
}
-
+
if (pgio->pg_count == prev->wb_bytes) {
/* This is first coelesce call for a series of nfs_pages */
pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
@@ -292,7 +292,8 @@ static inline int pnfs_return_layout(struct inode *ino)
return 0;
}
-static inline void pnfs_pageio_init(struct nfs_pageio_descriptor *pgio, struct inode *inode)
+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;
@@ -381,7 +382,8 @@ static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
{
}
-static inline void pnfs_pageio_init(struct nfs_pageio_descriptor *, struct inode *)
+static inline void pnfs_pageio_init(struct nfs_pageio_descriptor *pgio,
+ struct inode *inode)
{
}
@@ -664,7 +664,6 @@ int nfs_readpages(struct file *filp, struct address_space *mapping,
if (ret == 0)
goto read_complete; /* all pages were read */
- pnfs_pageio_init(&pgio, inode);
if (rsize < PAGE_CACHE_SIZE)
nfs_pageio_init(&pgio, inode, nfs_pagein_multi, rsize, 0);
else
@@ -1036,7 +1036,6 @@ static void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
{
size_t wsize = NFS_SERVER(inode)->wsize;
- pnfs_pageio_init(pgio, inode);
if (wsize < PAGE_CACHE_SIZE)
nfs_pageio_init(pgio, inode, nfs_flush_multi, wsize, ioflags);
else
The call to pnfs_pageio_init() was done before the call to nfs_pageio_init which would override the .pg_test set there. But enough is enough. One init function is more than enough. Call pnfs_pageio_init() from within the nfs_pageio_init(). It is kept separate so the code can compile in ver < 4.1, where the layout_driver type is not defined Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> --- fs/nfs/pagelist.c | 1 + fs/nfs/pnfs.c | 2 +- fs/nfs/pnfs.h | 6 ++++-- fs/nfs/read.c | 1 - fs/nfs/write.c | 1 - 5 files changed, 6 insertions(+), 5 deletions(-)