mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 23:34:05 +08:00
pNFS: Sync the layout state bits in pnfs_cache_lseg_for_layoutreturn
Ensure that the layout state bits are synced when we cache a layout segment for layoutreturn using an appropriate call to pnfs_set_plh_return_info. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
24408f5282
commit
4aab97327f
@ -305,6 +305,20 @@ pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pnfs_set_plh_return_info(struct pnfs_layout_hdr *lo, enum pnfs_iomode iomode,
|
||||||
|
u32 seq)
|
||||||
|
{
|
||||||
|
if (lo->plh_return_iomode != 0 && lo->plh_return_iomode != iomode)
|
||||||
|
iomode = IOMODE_ANY;
|
||||||
|
lo->plh_return_iomode = iomode;
|
||||||
|
set_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags);
|
||||||
|
if (seq != 0) {
|
||||||
|
WARN_ON_ONCE(lo->plh_return_seq != 0 && lo->plh_return_seq != seq);
|
||||||
|
lo->plh_return_seq = seq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo)
|
pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo)
|
||||||
{
|
{
|
||||||
@ -456,6 +470,7 @@ pnfs_cache_lseg_for_layoutreturn(struct pnfs_layout_hdr *lo,
|
|||||||
{
|
{
|
||||||
if (test_and_clear_bit(NFS_LSEG_LAYOUTRETURN, &lseg->pls_flags) &&
|
if (test_and_clear_bit(NFS_LSEG_LAYOUTRETURN, &lseg->pls_flags) &&
|
||||||
pnfs_layout_is_valid(lo)) {
|
pnfs_layout_is_valid(lo)) {
|
||||||
|
pnfs_set_plh_return_info(lo, lseg->pls_range.iomode, 0);
|
||||||
list_move_tail(&lseg->pls_list, &lo->plh_return_segs);
|
list_move_tail(&lseg->pls_list, &lo->plh_return_segs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1001,20 +1016,6 @@ out_unlock:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
pnfs_set_plh_return_info(struct pnfs_layout_hdr *lo, enum pnfs_iomode iomode,
|
|
||||||
u32 seq)
|
|
||||||
{
|
|
||||||
if (lo->plh_return_iomode != 0 && lo->plh_return_iomode != iomode)
|
|
||||||
iomode = IOMODE_ANY;
|
|
||||||
lo->plh_return_iomode = iomode;
|
|
||||||
set_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags);
|
|
||||||
if (seq != 0) {
|
|
||||||
WARN_ON_ONCE(lo->plh_return_seq != 0 && lo->plh_return_seq != seq);
|
|
||||||
lo->plh_return_seq = seq;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
pnfs_prepare_layoutreturn(struct pnfs_layout_hdr *lo,
|
pnfs_prepare_layoutreturn(struct pnfs_layout_hdr *lo,
|
||||||
nfs4_stateid *stateid,
|
nfs4_stateid *stateid,
|
||||||
|
Loading…
Reference in New Issue
Block a user