mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 08:46:46 +00:00
skip LAYOUTRETURN if layout is invalid
[ Upstream commit93b7f7ad20
] Currently, when IO to DS fails, client returns the layout and retries against the MDS. However, then on umounting (inode eviction) it returns the layout again. This is because pnfs_return_layout() was changed in commitd78471d32b
("pnfs/blocklayout: set PNFS_LAYOUTRETURN_ON_ERROR") to always set NFS_LAYOUT_RETURN_REQUESTED so even if we returned the layout, it will be returned again. Instead, let's also check if we have already marked the layout invalid. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0a84c912f5
commit
44a78f7d17
1 changed files with 4 additions and 2 deletions
|
@ -1126,7 +1126,7 @@ _pnfs_return_layout(struct inode *ino)
|
|||
LIST_HEAD(tmp_list);
|
||||
nfs4_stateid stateid;
|
||||
int status = 0;
|
||||
bool send;
|
||||
bool send, valid_layout;
|
||||
|
||||
dprintk("NFS: %s for inode %lu\n", __func__, ino->i_ino);
|
||||
|
||||
|
@ -1147,6 +1147,7 @@ _pnfs_return_layout(struct inode *ino)
|
|||
goto out_put_layout_hdr;
|
||||
spin_lock(&ino->i_lock);
|
||||
}
|
||||
valid_layout = pnfs_layout_is_valid(lo);
|
||||
pnfs_clear_layoutcommit(ino, &tmp_list);
|
||||
pnfs_mark_matching_lsegs_invalid(lo, &tmp_list, NULL, 0);
|
||||
|
||||
|
@ -1160,7 +1161,8 @@ _pnfs_return_layout(struct inode *ino)
|
|||
}
|
||||
|
||||
/* Don't send a LAYOUTRETURN if list was initially empty */
|
||||
if (!test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags)) {
|
||||
if (!test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags) ||
|
||||
!valid_layout) {
|
||||
spin_unlock(&ino->i_lock);
|
||||
dprintk("NFS: %s no layout segments to return\n", __func__);
|
||||
goto out_put_layout_hdr;
|
||||
|
|
Loading…
Reference in a new issue