Skip to content

Commit 6d6d7f9

Browse files
author
Trond Myklebust
committed
NFSv4/pnfs: Reset the layout state after a layoutreturn
If there are still layout segments in the layout plh_return_lsegs list after a layout return, we should be resetting the state to ensure they eventually get returned as well. Fixes: 68f7447 ("pNFS: Do not free layout segments that are marked for return") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
1 parent fa7ab64 commit 6d6d7f9

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

fs/nfs/pnfs.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,14 @@ pnfs_mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,
745745
return remaining;
746746
}
747747

748+
static void pnfs_reset_return_info(struct pnfs_layout_hdr *lo)
749+
{
750+
struct pnfs_layout_segment *lseg;
751+
752+
list_for_each_entry(lseg, &lo->plh_return_segs, pls_list)
753+
pnfs_set_plh_return_info(lo, lseg->pls_range.iomode, 0);
754+
}
755+
748756
static void
749757
pnfs_free_returned_lsegs(struct pnfs_layout_hdr *lo,
750758
struct list_head *free_me,
@@ -1292,6 +1300,7 @@ void pnfs_layoutreturn_free_lsegs(struct pnfs_layout_hdr *lo,
12921300
pnfs_mark_matching_lsegs_invalid(lo, &freeme, range, seq);
12931301
pnfs_free_returned_lsegs(lo, &freeme, range, seq);
12941302
pnfs_set_layout_stateid(lo, stateid, NULL, true);
1303+
pnfs_reset_return_info(lo);
12951304
} else
12961305
pnfs_mark_layout_stateid_invalid(lo, &freeme);
12971306
out_unlock:

0 commit comments

Comments
 (0)