NFSv4.1: Fall back to ordinary i/o through the mds if we have no layout segment
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
d8007d4dd6
commit
e885de1a5b
6 changed files with 15 additions and 7 deletions
|
@ -296,7 +296,13 @@ extern int nfs_initiate_read(struct nfs_read_data *data, struct rpc_clnt *clnt,
|
|||
const struct rpc_call_ops *call_ops);
|
||||
extern void nfs_read_prepare(struct rpc_task *task, void *calldata);
|
||||
|
||||
struct nfs_pageio_descriptor;
|
||||
extern void nfs_pageio_init_read_mds(struct nfs_pageio_descriptor *pgio,
|
||||
struct inode *inode);
|
||||
|
||||
/* write.c */
|
||||
extern void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio,
|
||||
struct inode *inode, int ioflags);
|
||||
extern void nfs_commit_free(struct nfs_write_data *p);
|
||||
extern int nfs_initiate_write(struct nfs_write_data *data,
|
||||
struct rpc_clnt *clnt,
|
||||
|
|
|
@ -669,8 +669,6 @@ filelayout_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
|
|||
!nfs_generic_pg_test(pgio, prev, req))
|
||||
return false;
|
||||
|
||||
if (!pgio->pg_lseg)
|
||||
return 1;
|
||||
p_stripe = (u64)prev->wb_index << PAGE_CACHE_SHIFT;
|
||||
r_stripe = (u64)req->wb_index << PAGE_CACHE_SHIFT;
|
||||
stripe_unit = FILELAYOUT_LSEG(pgio->pg_lseg)->stripe_unit;
|
||||
|
|
|
@ -1000,9 +1000,6 @@ static bool objio_pg_test(struct nfs_pageio_descriptor *pgio,
|
|||
if (!pnfs_generic_pg_test(pgio, prev, req))
|
||||
return false;
|
||||
|
||||
if (pgio->pg_lseg == NULL)
|
||||
return true;
|
||||
|
||||
return pgio->pg_count + req->wb_bytes <=
|
||||
OBJIO_LSEG(pgio->pg_lseg)->max_io_size;
|
||||
}
|
||||
|
|
|
@ -1066,6 +1066,10 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
|
|||
req->wb_bytes,
|
||||
IOMODE_READ,
|
||||
GFP_KERNEL);
|
||||
/* If no lseg, fall back to read through mds */
|
||||
if (pgio->pg_lseg == NULL)
|
||||
nfs_pageio_init_read_mds(pgio, pgio->pg_inode);
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pnfs_generic_pg_init_read);
|
||||
|
||||
|
@ -1080,6 +1084,9 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *
|
|||
req->wb_bytes,
|
||||
IOMODE_RW,
|
||||
GFP_NOFS);
|
||||
/* If no lseg, fall back to write through mds */
|
||||
if (pgio->pg_lseg == NULL)
|
||||
nfs_pageio_init_write_mds(pgio, pgio->pg_inode, pgio->pg_ioflags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pnfs_generic_pg_init_write);
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ static void nfs_readpage_truncate_uninitialised_page(struct nfs_read_data *data)
|
|||
}
|
||||
}
|
||||
|
||||
static void nfs_pageio_init_read_mds(struct nfs_pageio_descriptor *pgio,
|
||||
void nfs_pageio_init_read_mds(struct nfs_pageio_descriptor *pgio,
|
||||
struct inode *inode)
|
||||
{
|
||||
nfs_pageio_init(pgio, inode, &nfs_pageio_read_ops,
|
||||
|
|
|
@ -1040,7 +1040,7 @@ static const struct nfs_pageio_ops nfs_pageio_write_ops = {
|
|||
.pg_doio = nfs_generic_pg_writepages,
|
||||
};
|
||||
|
||||
static void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio,
|
||||
void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio,
|
||||
struct inode *inode, int ioflags)
|
||||
{
|
||||
nfs_pageio_init(pgio, inode, &nfs_pageio_write_ops,
|
||||
|
|
Loading…
Reference in a new issue