(end2 == NFS4_MAX_UINT64 || end2 > start1);
 }
 
-static bool
-should_free_lseg(const struct pnfs_layout_range *lseg_range,
-                const struct pnfs_layout_range *recall_range)
-{
-       return (recall_range->iomode == IOMODE_ANY ||
-               lseg_range->iomode == recall_range->iomode) &&
-              pnfs_lseg_range_intersecting(lseg_range, recall_range);
-}
-
 static bool pnfs_lseg_dec_and_remove_zero(struct pnfs_layout_segment *lseg,
                struct list_head *tmp_list)
 {
        return (s32)(s1 - s2) > 0;
 }
 
+static bool
+pnfs_should_free_range(const struct pnfs_layout_range *lseg_range,
+                const struct pnfs_layout_range *recall_range)
+{
+       return (recall_range->iomode == IOMODE_ANY ||
+               lseg_range->iomode == recall_range->iomode) &&
+              pnfs_lseg_range_intersecting(lseg_range, recall_range);
+}
+
+static bool
+pnfs_match_lseg_recall(const struct pnfs_layout_segment *lseg,
+               const struct pnfs_layout_range *recall_range,
+               u32 seq)
+{
+       if (seq != 0 && pnfs_seqid_is_newer(lseg->pls_seq, seq))
+               return false;
+       if (recall_range == NULL)
+               return true;
+       return pnfs_should_free_range(&lseg->pls_range, recall_range);
+}
+
 /**
  * pnfs_mark_matching_lsegs_invalid - tear down lsegs or mark them for later
  * @lo: layout header containing the lsegs
        if (list_empty(&lo->plh_segs))
                return 0;
        list_for_each_entry_safe(lseg, next, &lo->plh_segs, pls_list)
-               if (!recall_range ||
-                   should_free_lseg(&lseg->pls_range, recall_range)) {
-                       if (seq && pnfs_seqid_is_newer(lseg->pls_seq, seq))
-                               continue;
+               if (pnfs_match_lseg_recall(lseg, recall_range, seq)) {
                        dprintk("%s: freeing lseg %p iomode %d seq %u"
                                "offset %llu length %llu\n", __func__,
                                lseg, lseg->pls_range.iomode, lseg->pls_seq,
        assert_spin_locked(&lo->plh_inode->i_lock);
 
        list_for_each_entry_safe(lseg, next, &lo->plh_segs, pls_list)
-               if (should_free_lseg(&lseg->pls_range, return_range)) {
+               if (pnfs_match_lseg_recall(lseg, return_range, seq)) {
                        dprintk("%s: marking lseg %p iomode %d "
                                "offset %llu length %llu\n", __func__,
                                lseg, lseg->pls_range.iomode,