pNFS: consolidate the different range intersection tests
Both pnfs.c and the flexfiles code have their own versions of the range intersection testing, and the "end_offset" helper. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
@@ -500,15 +500,6 @@ pnfs_put_lseg_locked(struct pnfs_layout_segment *lseg)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pnfs_put_lseg_locked);
|
||||
|
||||
static u64
|
||||
end_offset(u64 start, u64 len)
|
||||
{
|
||||
u64 end;
|
||||
|
||||
end = start + len;
|
||||
return end >= start ? end : NFS4_MAX_UINT64;
|
||||
}
|
||||
|
||||
/*
|
||||
* is l2 fully contained in l1?
|
||||
* start1 end1
|
||||
@@ -521,33 +512,13 @@ pnfs_lseg_range_contained(const struct pnfs_layout_range *l1,
|
||||
const struct pnfs_layout_range *l2)
|
||||
{
|
||||
u64 start1 = l1->offset;
|
||||
u64 end1 = end_offset(start1, l1->length);
|
||||
u64 end1 = pnfs_end_offset(start1, l1->length);
|
||||
u64 start2 = l2->offset;
|
||||
u64 end2 = end_offset(start2, l2->length);
|
||||
u64 end2 = pnfs_end_offset(start2, l2->length);
|
||||
|
||||
return (start1 <= start2) && (end1 >= end2);
|
||||
}
|
||||
|
||||
/*
|
||||
* is l1 and l2 intersecting?
|
||||
* start1 end1
|
||||
* [----------------------------------)
|
||||
* start2 end2
|
||||
* [----------------)
|
||||
*/
|
||||
static bool
|
||||
pnfs_lseg_range_intersecting(const struct pnfs_layout_range *l1,
|
||||
const struct pnfs_layout_range *l2)
|
||||
{
|
||||
u64 start1 = l1->offset;
|
||||
u64 end1 = end_offset(start1, l1->length);
|
||||
u64 start2 = l2->offset;
|
||||
u64 end2 = end_offset(start2, l2->length);
|
||||
|
||||
return (end1 == NFS4_MAX_UINT64 || end1 > start2) &&
|
||||
(end2 == NFS4_MAX_UINT64 || end2 > start1);
|
||||
}
|
||||
|
||||
static bool pnfs_lseg_dec_and_remove_zero(struct pnfs_layout_segment *lseg,
|
||||
struct list_head *tmp_list)
|
||||
{
|
||||
@@ -2069,7 +2040,7 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio,
|
||||
*
|
||||
*/
|
||||
if (pgio->pg_lseg) {
|
||||
seg_end = end_offset(pgio->pg_lseg->pls_range.offset,
|
||||
seg_end = pnfs_end_offset(pgio->pg_lseg->pls_range.offset,
|
||||
pgio->pg_lseg->pls_range.length);
|
||||
req_start = req_offset(req);
|
||||
WARN_ON_ONCE(req_start >= seg_end);
|
||||
|
Reference in New Issue
Block a user