pNFS/flexfile: Don't merge layout segments if the mirrors don't match
Check that the number of mirrors, and the mirror information matches before deciding to merge layout segments in pNFS/flexfiles. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
e18c18ebd7
commit
660d1eb223
@ -283,6 +283,23 @@ static void _ff_layout_free_lseg(struct nfs4_ff_layout_segment *fls)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
ff_lseg_match_mirrors(struct pnfs_layout_segment *l1,
|
||||||
|
struct pnfs_layout_segment *l2)
|
||||||
|
{
|
||||||
|
const struct nfs4_ff_layout_segment *fl1 = FF_LAYOUT_LSEG(l1);
|
||||||
|
const struct nfs4_ff_layout_segment *fl2 = FF_LAYOUT_LSEG(l1);
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
if (fl1->mirror_array_cnt != fl2->mirror_array_cnt)
|
||||||
|
return false;
|
||||||
|
for (i = 0; i < fl1->mirror_array_cnt; i++) {
|
||||||
|
if (fl1->mirror_array[i] != fl2->mirror_array[i])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
ff_lseg_range_is_after(const struct pnfs_layout_range *l1,
|
ff_lseg_range_is_after(const struct pnfs_layout_range *l1,
|
||||||
const struct pnfs_layout_range *l2)
|
const struct pnfs_layout_range *l2)
|
||||||
@ -318,6 +335,8 @@ ff_lseg_merge(struct pnfs_layout_segment *new,
|
|||||||
new->pls_range.length);
|
new->pls_range.length);
|
||||||
if (new_end < old->pls_range.offset)
|
if (new_end < old->pls_range.offset)
|
||||||
return false;
|
return false;
|
||||||
|
if (!ff_lseg_match_mirrors(new, old))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* Mergeable: copy info from 'old' to 'new' */
|
/* Mergeable: copy info from 'old' to 'new' */
|
||||||
if (new_end < old_end)
|
if (new_end < old_end)
|
||||||
|
Loading…
Reference in New Issue
Block a user