From: Trond Myklebust Date: Wed, 16 Dec 2020 19:01:07 +0000 (-0500) Subject: pNFS/flexfiles: Avoid spurious layout returns in ff_layout_choose_ds_for_read X-Git-Tag: v5.10.241~358 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a050c749ddfae44e6a05ed523d647d36ae6d36cc;p=thirdparty%2Fkernel%2Fstable.git pNFS/flexfiles: Avoid spurious layout returns in ff_layout_choose_ds_for_read [ Upstream commit 9bfffea3524b49d0268d01f8e7967f06c4d0a942 ] The callers of ff_layout_choose_ds_for_read() should decide whether or not they want to return the layout on error. Sometimes, we may just want to retry from the beginning. Signed-off-by: Trond Myklebust Stable-dep-of: f06bedfa62d5 ("pNFS/flexfiles: don't attempt pnfs on fatal DS errors") Signed-off-by: Sasha Levin --- diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index f8962eaec87bc..a053dd05057f2 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -740,16 +740,12 @@ ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg, struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg); struct nfs4_ff_layout_mirror *mirror; struct nfs4_pnfs_ds *ds; - bool fail_return = false; u32 idx; /* mirrors are initially sorted by efficiency */ for (idx = start_idx; idx < fls->mirror_array_cnt; idx++) { - if (idx+1 == fls->mirror_array_cnt) - fail_return = !check_device; - mirror = FF_LAYOUT_COMP(lseg, idx); - ds = nfs4_ff_layout_prepare_ds(lseg, mirror, fail_return); + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, false); if (!ds) continue;