Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit a01b077

Browse files
olgakorn1Trond Myklebust
authored andcommitted
pNFS: rework pnfs_generic_pg_check_layout to check IO range
All callers of pnfs_generic_pg_check_layout() also want to do a call to check that the layout's range covers the IO range. Merge the functionality of the pnfs_generic_pg_check_range() into that of pnfs_generic_pg_check_layout(). Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
1 parent 523412b commit a01b077

File tree

4 files changed

+14
-36
lines changed

4 files changed

+14
-36
lines changed

fs/nfs/filelayout/filelayout.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -867,8 +867,7 @@ static void
867867
filelayout_pg_init_read(struct nfs_pageio_descriptor *pgio,
868868
struct nfs_page *req)
869869
{
870-
pnfs_generic_pg_check_layout(pgio);
871-
pnfs_generic_pg_check_range(pgio, req);
870+
pnfs_generic_pg_check_layout(pgio, req);
872871
if (!pgio->pg_lseg) {
873872
pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
874873
nfs_req_openctx(req),
@@ -892,8 +891,7 @@ static void
892891
filelayout_pg_init_write(struct nfs_pageio_descriptor *pgio,
893892
struct nfs_page *req)
894893
{
895-
pnfs_generic_pg_check_layout(pgio);
896-
pnfs_generic_pg_check_range(pgio, req);
894+
pnfs_generic_pg_check_layout(pgio, req);
897895
if (!pgio->pg_lseg) {
898896
pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
899897
nfs_req_openctx(req),

fs/nfs/flexfilelayout/flexfilelayout.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -822,14 +822,6 @@ ff_layout_pg_get_read(struct nfs_pageio_descriptor *pgio,
822822
}
823823
}
824824

825-
static void
826-
ff_layout_pg_check_layout(struct nfs_pageio_descriptor *pgio,
827-
struct nfs_page *req)
828-
{
829-
pnfs_generic_pg_check_layout(pgio);
830-
pnfs_generic_pg_check_range(pgio, req);
831-
}
832-
833825
static void
834826
ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
835827
struct nfs_page *req)
@@ -840,7 +832,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
840832
u32 ds_idx;
841833

842834
retry:
843-
ff_layout_pg_check_layout(pgio, req);
835+
pnfs_generic_pg_check_layout(pgio, req);
844836
/* Use full layout for now */
845837
if (!pgio->pg_lseg) {
846838
ff_layout_pg_get_read(pgio, req, false);
@@ -895,7 +887,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
895887
u32 i;
896888

897889
retry:
898-
ff_layout_pg_check_layout(pgio, req);
890+
pnfs_generic_pg_check_layout(pgio, req);
899891
if (!pgio->pg_lseg) {
900892
pgio->pg_lseg =
901893
pnfs_update_layout(pgio->pg_inode, nfs_req_openctx(req),

fs/nfs/pnfs.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2705,38 +2705,28 @@ pnfs_layout_return_unused_byclid(struct nfs_client *clp,
27052705
&range);
27062706
}
27072707

2708+
/* Check if we have we have a valid layout but if there isn't an intersection
2709+
* between the request and the pgio->pg_lseg, put this pgio->pg_lseg away.
2710+
*/
27082711
void
2709-
pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio)
2712+
pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio,
2713+
struct nfs_page *req)
27102714
{
27112715
if (pgio->pg_lseg == NULL ||
2712-
test_bit(NFS_LSEG_VALID, &pgio->pg_lseg->pls_flags))
2716+
(test_bit(NFS_LSEG_VALID, &pgio->pg_lseg->pls_flags) &&
2717+
pnfs_lseg_request_intersecting(pgio->pg_lseg, req)))
27132718
return;
27142719
pnfs_put_lseg(pgio->pg_lseg);
27152720
pgio->pg_lseg = NULL;
27162721
}
27172722
EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_layout);
27182723

2719-
/*
2720-
* Check for any intersection between the request and the pgio->pg_lseg,
2721-
* and if none, put this pgio->pg_lseg away.
2722-
*/
2723-
void
2724-
pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
2725-
{
2726-
if (pgio->pg_lseg && !pnfs_lseg_request_intersecting(pgio->pg_lseg, req)) {
2727-
pnfs_put_lseg(pgio->pg_lseg);
2728-
pgio->pg_lseg = NULL;
2729-
}
2730-
}
2731-
EXPORT_SYMBOL_GPL(pnfs_generic_pg_check_range);
2732-
27332724
void
27342725
pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
27352726
{
27362727
u64 rd_size;
27372728

2738-
pnfs_generic_pg_check_layout(pgio);
2739-
pnfs_generic_pg_check_range(pgio, req);
2729+
pnfs_generic_pg_check_layout(pgio, req);
27402730
if (pgio->pg_lseg == NULL) {
27412731
if (pgio->pg_dreq == NULL)
27422732
rd_size = i_size_read(pgio->pg_inode) - req_offset(req);
@@ -2766,8 +2756,7 @@ void
27662756
pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
27672757
struct nfs_page *req, u64 wb_size)
27682758
{
2769-
pnfs_generic_pg_check_layout(pgio);
2770-
pnfs_generic_pg_check_range(pgio, req);
2759+
pnfs_generic_pg_check_layout(pgio, req);
27712760
if (pgio->pg_lseg == NULL) {
27722761
pgio->pg_lseg =
27732762
pnfs_update_layout(pgio->pg_inode, nfs_req_openctx(req),

fs/nfs/pnfs.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,7 @@ void pnfs_put_lseg(struct pnfs_layout_segment *lseg);
257257

258258
void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, struct nfs_fsinfo *);
259259
void unset_pnfs_layoutdriver(struct nfs_server *);
260-
void pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio);
261-
void pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req);
260+
void pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio, struct nfs_page *req);
262261
void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
263262
int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
264263
void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,

0 commit comments

Comments
 (0)