forked from luck/tmp_suning_uos_patched
pNFS/flexfiles: Check the layout segment range before doing I/O
When starting to read or write with a layout segment, check that the range matches our request. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
660d1eb223
commit
e1e54ab710
|
@ -830,6 +830,14 @@ ff_layout_pg_get_read(struct nfs_pageio_descriptor *pgio,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ff_layout_pg_check_layout(struct nfs_pageio_descriptor *pgio,
|
||||||
|
struct nfs_page *req)
|
||||||
|
{
|
||||||
|
pnfs_generic_pg_check_layout(pgio);
|
||||||
|
pnfs_generic_pg_check_range(pgio, req);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
|
ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
|
||||||
struct nfs_page *req)
|
struct nfs_page *req)
|
||||||
|
@ -840,7 +848,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
|
||||||
int ds_idx;
|
int ds_idx;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
pnfs_generic_pg_check_layout(pgio);
|
ff_layout_pg_check_layout(pgio, req);
|
||||||
/* Use full layout for now */
|
/* Use full layout for now */
|
||||||
if (!pgio->pg_lseg) {
|
if (!pgio->pg_lseg) {
|
||||||
ff_layout_pg_get_read(pgio, req, false);
|
ff_layout_pg_get_read(pgio, req, false);
|
||||||
|
@ -900,7 +908,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
pnfs_generic_pg_check_layout(pgio);
|
ff_layout_pg_check_layout(pgio, req);
|
||||||
if (!pgio->pg_lseg) {
|
if (!pgio->pg_lseg) {
|
||||||
pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
|
||||||
nfs_req_openctx(req),
|
nfs_req_openctx(req),
|
||||||
|
|
|
@ -2611,7 +2611,7 @@ EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_layout);
|
||||||
* Check for any intersection between the request and the pgio->pg_lseg,
|
* Check for any intersection between the request and the pgio->pg_lseg,
|
||||||
* and if none, put this pgio->pg_lseg away.
|
* and if none, put this pgio->pg_lseg away.
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
|
pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
|
||||||
{
|
{
|
||||||
if (pgio->pg_lseg && !pnfs_lseg_request_intersecting(pgio->pg_lseg, req)) {
|
if (pgio->pg_lseg && !pnfs_lseg_request_intersecting(pgio->pg_lseg, req)) {
|
||||||
|
@ -2619,6 +2619,7 @@ pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page
|
||||||
pgio->pg_lseg = NULL;
|
pgio->pg_lseg = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_range);
|
||||||
|
|
||||||
void
|
void
|
||||||
pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
|
pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
|
||||||
|
|
|
@ -252,6 +252,7 @@ void pnfs_put_lseg(struct pnfs_layout_segment *lseg);
|
||||||
void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, struct nfs_fsinfo *);
|
void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, struct nfs_fsinfo *);
|
||||||
void unset_pnfs_layoutdriver(struct nfs_server *);
|
void unset_pnfs_layoutdriver(struct nfs_server *);
|
||||||
void pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio);
|
void pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio);
|
||||||
|
void pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req);
|
||||||
void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
|
void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
|
||||||
int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
|
int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
|
||||||
void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user