Lines Matching +full:high +full:- +full:to +full:- +full:low

1 // SPDX-License-Identifier: GPL-2.0+
28 /* Convert an xfs_fsmap to an fsmap. */
34 dest->fmr_device = src->fmr_device; in xfs_fsmap_from_internal()
35 dest->fmr_flags = src->fmr_flags; in xfs_fsmap_from_internal()
36 dest->fmr_physical = BBTOB(src->fmr_physical); in xfs_fsmap_from_internal()
37 dest->fmr_owner = src->fmr_owner; in xfs_fsmap_from_internal()
38 dest->fmr_offset = BBTOB(src->fmr_offset); in xfs_fsmap_from_internal()
39 dest->fmr_length = BBTOB(src->fmr_length); in xfs_fsmap_from_internal()
40 dest->fmr_reserved[0] = 0; in xfs_fsmap_from_internal()
41 dest->fmr_reserved[1] = 0; in xfs_fsmap_from_internal()
42 dest->fmr_reserved[2] = 0; in xfs_fsmap_from_internal()
45 /* Convert an fsmap to an xfs_fsmap. */
51 dest->fmr_device = src->fmr_device; in xfs_fsmap_to_internal()
52 dest->fmr_flags = src->fmr_flags; in xfs_fsmap_to_internal()
53 dest->fmr_physical = BTOBBT(src->fmr_physical); in xfs_fsmap_to_internal()
54 dest->fmr_owner = src->fmr_owner; in xfs_fsmap_to_internal()
55 dest->fmr_offset = BTOBBT(src->fmr_offset); in xfs_fsmap_to_internal()
56 dest->fmr_length = BTOBBT(src->fmr_length); in xfs_fsmap_to_internal()
65 if (!(src->fmr_flags & FMR_OF_SPECIAL_OWNER)) { in xfs_fsmap_owner_to_rmap()
66 dest->rm_owner = src->fmr_owner; in xfs_fsmap_owner_to_rmap()
70 switch (src->fmr_owner) { in xfs_fsmap_owner_to_rmap()
72 case -1ULL: /* "highest owner id possible" */ in xfs_fsmap_owner_to_rmap()
73 dest->rm_owner = 0; in xfs_fsmap_owner_to_rmap()
76 dest->rm_owner = XFS_RMAP_OWN_NULL; in xfs_fsmap_owner_to_rmap()
79 dest->rm_owner = XFS_RMAP_OWN_UNKNOWN; in xfs_fsmap_owner_to_rmap()
82 dest->rm_owner = XFS_RMAP_OWN_FS; in xfs_fsmap_owner_to_rmap()
85 dest->rm_owner = XFS_RMAP_OWN_LOG; in xfs_fsmap_owner_to_rmap()
88 dest->rm_owner = XFS_RMAP_OWN_AG; in xfs_fsmap_owner_to_rmap()
91 dest->rm_owner = XFS_RMAP_OWN_INOBT; in xfs_fsmap_owner_to_rmap()
94 dest->rm_owner = XFS_RMAP_OWN_INODES; in xfs_fsmap_owner_to_rmap()
97 dest->rm_owner = XFS_RMAP_OWN_REFC; in xfs_fsmap_owner_to_rmap()
100 dest->rm_owner = XFS_RMAP_OWN_COW; in xfs_fsmap_owner_to_rmap()
105 return -EINVAL; in xfs_fsmap_owner_to_rmap()
116 dest->fmr_flags = 0; in xfs_fsmap_owner_from_rmap()
117 if (!XFS_RMAP_NON_INODE_OWNER(src->rm_owner)) { in xfs_fsmap_owner_from_rmap()
118 dest->fmr_owner = src->rm_owner; in xfs_fsmap_owner_from_rmap()
121 dest->fmr_flags |= FMR_OF_SPECIAL_OWNER; in xfs_fsmap_owner_from_rmap()
123 switch (src->rm_owner) { in xfs_fsmap_owner_from_rmap()
125 dest->fmr_owner = XFS_FMR_OWN_FS; in xfs_fsmap_owner_from_rmap()
128 dest->fmr_owner = XFS_FMR_OWN_LOG; in xfs_fsmap_owner_from_rmap()
131 dest->fmr_owner = XFS_FMR_OWN_AG; in xfs_fsmap_owner_from_rmap()
134 dest->fmr_owner = XFS_FMR_OWN_INOBT; in xfs_fsmap_owner_from_rmap()
137 dest->fmr_owner = XFS_FMR_OWN_INODES; in xfs_fsmap_owner_from_rmap()
140 dest->fmr_owner = XFS_FMR_OWN_REFC; in xfs_fsmap_owner_from_rmap()
143 dest->fmr_owner = XFS_FMR_OWN_COW; in xfs_fsmap_owner_from_rmap()
146 dest->fmr_owner = XFS_FMR_OWN_FREE; in xfs_fsmap_owner_from_rmap()
150 return -EFSCORRUPTED; in xfs_fsmap_owner_from_rmap()
164 struct xfs_rmap_irec low; /* low rmap key */ member
165 struct xfs_rmap_irec high; /* high rmap key */ member
186 return d1->dev - d2->dev; in xfs_getfsmap_dev_compare()
197 struct xfs_mount *mp = tp->t_mountp; in xfs_getfsmap_is_shared()
204 if (!xfs_sb_version_hasreflink(&mp->m_sb)) in xfs_getfsmap_is_shared()
206 /* rt files will have agno set to NULLAGNUMBER */ in xfs_getfsmap_is_shared()
207 if (info->agno == NULLAGNUMBER) in xfs_getfsmap_is_shared()
212 cur = xfs_refcountbt_init_cursor(mp, tp, info->agf_bp, in xfs_getfsmap_is_shared()
213 info->agno); in xfs_getfsmap_is_shared()
215 error = xfs_refcount_find_shared(cur, rec->rm_startblock, in xfs_getfsmap_is_shared()
216 rec->rm_blockcount, &fbno, &flen, false); in xfs_getfsmap_is_shared()
236 rec = &info->fsmap_recs[info->head->fmh_entries++]; in xfs_getfsmap_format()
252 struct xfs_mount *mp = tp->t_mountp; in xfs_getfsmap_helper()
257 return -EINTR; in xfs_getfsmap_helper()
263 if (xfs_rmap_compare(rec, &info->low) < 0) { in xfs_getfsmap_helper()
264 rec_daddr += XFS_FSB_TO_BB(mp, rec->rm_blockcount); in xfs_getfsmap_helper()
265 if (info->next_daddr < rec_daddr) in xfs_getfsmap_helper()
266 info->next_daddr = rec_daddr; in xfs_getfsmap_helper()
271 if (info->head->fmh_count == 0) { in xfs_getfsmap_helper()
272 if (info->head->fmh_entries == UINT_MAX) in xfs_getfsmap_helper()
273 return -ECANCELED; in xfs_getfsmap_helper()
275 if (rec_daddr > info->next_daddr) in xfs_getfsmap_helper()
276 info->head->fmh_entries++; in xfs_getfsmap_helper()
278 if (info->last) in xfs_getfsmap_helper()
281 info->head->fmh_entries++; in xfs_getfsmap_helper()
283 rec_daddr += XFS_FSB_TO_BB(mp, rec->rm_blockcount); in xfs_getfsmap_helper()
284 if (info->next_daddr < rec_daddr) in xfs_getfsmap_helper()
285 info->next_daddr = rec_daddr; in xfs_getfsmap_helper()
294 if (rec_daddr > info->next_daddr) { in xfs_getfsmap_helper()
295 if (info->head->fmh_entries >= info->head->fmh_count) in xfs_getfsmap_helper()
296 return -ECANCELED; in xfs_getfsmap_helper()
298 fmr.fmr_device = info->dev; in xfs_getfsmap_helper()
299 fmr.fmr_physical = info->next_daddr; in xfs_getfsmap_helper()
300 fmr.fmr_owner = info->missing_owner; in xfs_getfsmap_helper()
302 fmr.fmr_length = rec_daddr - info->next_daddr; in xfs_getfsmap_helper()
307 if (info->last) in xfs_getfsmap_helper()
311 if (info->head->fmh_entries >= info->head->fmh_count) in xfs_getfsmap_helper()
312 return -ECANCELED; in xfs_getfsmap_helper()
314 trace_xfs_fsmap_mapping(mp, info->dev, info->agno, rec); in xfs_getfsmap_helper()
316 fmr.fmr_device = info->dev; in xfs_getfsmap_helper()
321 fmr.fmr_offset = XFS_FSB_TO_BB(mp, rec->rm_offset); in xfs_getfsmap_helper()
322 fmr.fmr_length = XFS_FSB_TO_BB(mp, rec->rm_blockcount); in xfs_getfsmap_helper()
323 if (rec->rm_flags & XFS_RMAP_UNWRITTEN) in xfs_getfsmap_helper()
325 if (rec->rm_flags & XFS_RMAP_ATTR_FORK) in xfs_getfsmap_helper()
327 if (rec->rm_flags & XFS_RMAP_BMBT_BLOCK) in xfs_getfsmap_helper()
339 rec_daddr += XFS_FSB_TO_BB(mp, rec->rm_blockcount); in xfs_getfsmap_helper()
340 if (info->next_daddr < rec_daddr) in xfs_getfsmap_helper()
341 info->next_daddr = rec_daddr; in xfs_getfsmap_helper()
352 struct xfs_mount *mp = cur->bc_mp; in xfs_getfsmap_datadev_helper()
357 fsb = XFS_AGB_TO_FSB(mp, cur->bc_ag.agno, rec->rm_startblock); in xfs_getfsmap_datadev_helper()
360 return xfs_getfsmap_helper(cur->bc_tp, info, rec, rec_daddr); in xfs_getfsmap_datadev_helper()
370 struct xfs_mount *mp = cur->bc_mp; in xfs_getfsmap_datadev_bnobt_helper()
375 rec_daddr = XFS_AGB_TO_DADDR(mp, cur->bc_ag.agno, in xfs_getfsmap_datadev_bnobt_helper()
376 rec->ar_startblock); in xfs_getfsmap_datadev_bnobt_helper()
378 irec.rm_startblock = rec->ar_startblock; in xfs_getfsmap_datadev_bnobt_helper()
379 irec.rm_blockcount = rec->ar_blockcount; in xfs_getfsmap_datadev_bnobt_helper()
384 return xfs_getfsmap_helper(cur->bc_tp, info, &irec, rec_daddr); in xfs_getfsmap_datadev_bnobt_helper()
393 irec->rm_flags = 0; in xfs_getfsmap_set_irec_flags()
394 if (fmr->fmr_flags & FMR_OF_ATTR_FORK) in xfs_getfsmap_set_irec_flags()
395 irec->rm_flags |= XFS_RMAP_ATTR_FORK; in xfs_getfsmap_set_irec_flags()
396 if (fmr->fmr_flags & FMR_OF_EXTENT_MAP) in xfs_getfsmap_set_irec_flags()
397 irec->rm_flags |= XFS_RMAP_BMBT_BLOCK; in xfs_getfsmap_set_irec_flags()
398 if (fmr->fmr_flags & FMR_OF_PREALLOC) in xfs_getfsmap_set_irec_flags()
399 irec->rm_flags |= XFS_RMAP_UNWRITTEN; in xfs_getfsmap_set_irec_flags()
409 struct xfs_mount *mp = tp->t_mountp; in xfs_getfsmap_logdev()
414 info->low.rm_startblock = XFS_BB_TO_FSBT(mp, keys[0].fmr_physical); in xfs_getfsmap_logdev()
415 info->low.rm_offset = XFS_BB_TO_FSBT(mp, keys[0].fmr_offset); in xfs_getfsmap_logdev()
416 error = xfs_fsmap_owner_to_rmap(&info->low, keys); in xfs_getfsmap_logdev()
419 info->low.rm_blockcount = 0; in xfs_getfsmap_logdev()
420 xfs_getfsmap_set_irec_flags(&info->low, &keys[0]); in xfs_getfsmap_logdev()
422 error = xfs_fsmap_owner_to_rmap(&info->high, keys + 1); in xfs_getfsmap_logdev()
425 info->high.rm_startblock = -1U; in xfs_getfsmap_logdev()
426 info->high.rm_owner = ULLONG_MAX; in xfs_getfsmap_logdev()
427 info->high.rm_offset = ULLONG_MAX; in xfs_getfsmap_logdev()
428 info->high.rm_blockcount = 0; in xfs_getfsmap_logdev()
429 info->high.rm_flags = XFS_RMAP_KEY_FLAGS | XFS_RMAP_REC_FLAGS; in xfs_getfsmap_logdev()
430 info->missing_owner = XFS_FMR_OWN_FREE; in xfs_getfsmap_logdev()
432 trace_xfs_fsmap_low_key(mp, info->dev, info->agno, &info->low); in xfs_getfsmap_logdev()
433 trace_xfs_fsmap_high_key(mp, info->dev, info->agno, &info->high); in xfs_getfsmap_logdev()
440 rmap.rm_blockcount = mp->m_sb.sb_logblocks; in xfs_getfsmap_logdev()
456 struct xfs_mount *mp = tp->t_mountp; in xfs_getfsmap_rtdev_rtbitmap_helper()
461 irec.rm_startblock = rec->ar_startext * mp->m_sb.sb_rextsize; in xfs_getfsmap_rtdev_rtbitmap_helper()
463 irec.rm_blockcount = rec->ar_extcount * mp->m_sb.sb_rextsize; in xfs_getfsmap_rtdev_rtbitmap_helper()
480 struct xfs_mount *mp = tp->t_mountp; in __xfs_getfsmap_rtdev()
486 eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rblocks); in __xfs_getfsmap_rtdev()
490 keys[1].fmr_physical = eofs - 1; in __xfs_getfsmap_rtdev()
495 info->low.rm_startblock = start_fsb; in __xfs_getfsmap_rtdev()
496 error = xfs_fsmap_owner_to_rmap(&info->low, &keys[0]); in __xfs_getfsmap_rtdev()
499 info->low.rm_offset = XFS_BB_TO_FSBT(mp, keys[0].fmr_offset); in __xfs_getfsmap_rtdev()
500 info->low.rm_blockcount = 0; in __xfs_getfsmap_rtdev()
501 xfs_getfsmap_set_irec_flags(&info->low, &keys[0]); in __xfs_getfsmap_rtdev()
503 info->high.rm_startblock = end_fsb; in __xfs_getfsmap_rtdev()
504 error = xfs_fsmap_owner_to_rmap(&info->high, &keys[1]); in __xfs_getfsmap_rtdev()
507 info->high.rm_offset = XFS_BB_TO_FSBT(mp, keys[1].fmr_offset); in __xfs_getfsmap_rtdev()
508 info->high.rm_blockcount = 0; in __xfs_getfsmap_rtdev()
509 xfs_getfsmap_set_irec_flags(&info->high, &keys[1]); in __xfs_getfsmap_rtdev()
511 trace_xfs_fsmap_low_key(mp, info->dev, info->agno, &info->low); in __xfs_getfsmap_rtdev()
512 trace_xfs_fsmap_high_key(mp, info->dev, info->agno, &info->high); in __xfs_getfsmap_rtdev()
527 xfs_ilock(tp->t_mountp->m_rbmip, XFS_ILOCK_SHARED); in xfs_getfsmap_rtdev_rtbitmap_query()
529 alow.ar_startext = info->low.rm_startblock; in xfs_getfsmap_rtdev_rtbitmap_query()
530 ahigh.ar_startext = info->high.rm_startblock; in xfs_getfsmap_rtdev_rtbitmap_query()
531 do_div(alow.ar_startext, tp->t_mountp->m_sb.sb_rextsize); in xfs_getfsmap_rtdev_rtbitmap_query()
532 if (do_div(ahigh.ar_startext, tp->t_mountp->m_sb.sb_rextsize)) in xfs_getfsmap_rtdev_rtbitmap_query()
540 info->last = true; in xfs_getfsmap_rtdev_rtbitmap_query()
545 xfs_iunlock(tp->t_mountp->m_rbmip, XFS_ILOCK_SHARED); in xfs_getfsmap_rtdev_rtbitmap_query()
556 info->missing_owner = XFS_FMR_OWN_UNKNOWN; in xfs_getfsmap_rtdev_rtbitmap()
574 struct xfs_mount *mp = tp->t_mountp; in __xfs_getfsmap_datadev()
583 eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks); in __xfs_getfsmap_datadev()
587 keys[1].fmr_physical = eofs - 1; in __xfs_getfsmap_datadev()
592 * Convert the fsmap low/high keys to AG based keys. Initialize in __xfs_getfsmap_datadev()
593 * low to the fsmap low key and max out the high key to the end in __xfs_getfsmap_datadev()
596 info->low.rm_startblock = XFS_FSB_TO_AGBNO(mp, start_fsb); in __xfs_getfsmap_datadev()
597 info->low.rm_offset = XFS_BB_TO_FSBT(mp, keys[0].fmr_offset); in __xfs_getfsmap_datadev()
598 error = xfs_fsmap_owner_to_rmap(&info->low, &keys[0]); in __xfs_getfsmap_datadev()
601 info->low.rm_blockcount = 0; in __xfs_getfsmap_datadev()
602 xfs_getfsmap_set_irec_flags(&info->low, &keys[0]); in __xfs_getfsmap_datadev()
604 info->high.rm_startblock = -1U; in __xfs_getfsmap_datadev()
605 info->high.rm_owner = ULLONG_MAX; in __xfs_getfsmap_datadev()
606 info->high.rm_offset = ULLONG_MAX; in __xfs_getfsmap_datadev()
607 info->high.rm_blockcount = 0; in __xfs_getfsmap_datadev()
608 info->high.rm_flags = XFS_RMAP_KEY_FLAGS | XFS_RMAP_REC_FLAGS; in __xfs_getfsmap_datadev()
614 for (info->agno = start_ag; info->agno <= end_ag; info->agno++) { in __xfs_getfsmap_datadev()
616 * Set the AG high key from the fsmap high key if this in __xfs_getfsmap_datadev()
619 if (info->agno == end_ag) { in __xfs_getfsmap_datadev()
620 info->high.rm_startblock = XFS_FSB_TO_AGBNO(mp, in __xfs_getfsmap_datadev()
622 info->high.rm_offset = XFS_BB_TO_FSBT(mp, in __xfs_getfsmap_datadev()
624 error = xfs_fsmap_owner_to_rmap(&info->high, &keys[1]); in __xfs_getfsmap_datadev()
627 xfs_getfsmap_set_irec_flags(&info->high, &keys[1]); in __xfs_getfsmap_datadev()
633 xfs_trans_brelse(tp, info->agf_bp); in __xfs_getfsmap_datadev()
634 info->agf_bp = NULL; in __xfs_getfsmap_datadev()
637 error = xfs_alloc_read_agf(mp, tp, info->agno, 0, in __xfs_getfsmap_datadev()
638 &info->agf_bp); in __xfs_getfsmap_datadev()
642 trace_xfs_fsmap_low_key(mp, info->dev, info->agno, &info->low); in __xfs_getfsmap_datadev()
643 trace_xfs_fsmap_high_key(mp, info->dev, info->agno, in __xfs_getfsmap_datadev()
644 &info->high); in __xfs_getfsmap_datadev()
651 * Set the AG low key to the start of the AG prior to in __xfs_getfsmap_datadev()
652 * moving on to the next AG. in __xfs_getfsmap_datadev()
654 if (info->agno == start_ag) { in __xfs_getfsmap_datadev()
655 info->low.rm_startblock = 0; in __xfs_getfsmap_datadev()
656 info->low.rm_owner = 0; in __xfs_getfsmap_datadev()
657 info->low.rm_offset = 0; in __xfs_getfsmap_datadev()
658 info->low.rm_flags = 0; in __xfs_getfsmap_datadev()
663 info->last = true; in __xfs_getfsmap_datadev()
672 if (info->agf_bp) { in __xfs_getfsmap_datadev()
673 xfs_trans_brelse(tp, info->agf_bp); in __xfs_getfsmap_datadev()
674 info->agf_bp = NULL; in __xfs_getfsmap_datadev()
689 if (info->last) in xfs_getfsmap_datadev_rmapbt_query()
690 return xfs_getfsmap_datadev_helper(*curpp, &info->high, info); in xfs_getfsmap_datadev_rmapbt_query()
693 *curpp = xfs_rmapbt_init_cursor(tp->t_mountp, tp, info->agf_bp, in xfs_getfsmap_datadev_rmapbt_query()
694 info->agno); in xfs_getfsmap_datadev_rmapbt_query()
695 return xfs_rmap_query_range(*curpp, &info->low, &info->high, in xfs_getfsmap_datadev_rmapbt_query()
706 info->missing_owner = XFS_FMR_OWN_FREE; in xfs_getfsmap_datadev_rmapbt()
722 if (info->last) in xfs_getfsmap_datadev_bnobt_query()
726 *curpp = xfs_allocbt_init_cursor(tp->t_mountp, tp, info->agf_bp, in xfs_getfsmap_datadev_bnobt_query()
727 info->agno, XFS_BTNUM_BNO); in xfs_getfsmap_datadev_bnobt_query()
728 key->ar_startblock = info->low.rm_startblock; in xfs_getfsmap_datadev_bnobt_query()
729 key[1].ar_startblock = info->high.rm_startblock; in xfs_getfsmap_datadev_bnobt_query()
743 info->missing_owner = XFS_FMR_OWN_UNKNOWN; in xfs_getfsmap_datadev_bnobt()
754 if (fm->fmr_device == 0 || fm->fmr_device == UINT_MAX || in xfs_getfsmap_is_valid_device()
755 fm->fmr_device == new_encode_dev(mp->m_ddev_targp->bt_dev)) in xfs_getfsmap_is_valid_device()
757 if (mp->m_logdev_targp && in xfs_getfsmap_is_valid_device()
758 fm->fmr_device == new_encode_dev(mp->m_logdev_targp->bt_dev)) in xfs_getfsmap_is_valid_device()
760 if (mp->m_rtdev_targp && in xfs_getfsmap_is_valid_device()
761 fm->fmr_device == new_encode_dev(mp->m_rtdev_targp->bt_dev)) in xfs_getfsmap_is_valid_device()
766 /* Ensure that the low key is less than the high key. */
772 if (low_key->fmr_device > high_key->fmr_device) in xfs_getfsmap_check_keys()
774 if (low_key->fmr_device < high_key->fmr_device) in xfs_getfsmap_check_keys()
777 if (low_key->fmr_physical > high_key->fmr_physical) in xfs_getfsmap_check_keys()
779 if (low_key->fmr_physical < high_key->fmr_physical) in xfs_getfsmap_check_keys()
782 if (low_key->fmr_owner > high_key->fmr_owner) in xfs_getfsmap_check_keys()
784 if (low_key->fmr_owner < high_key->fmr_owner) in xfs_getfsmap_check_keys()
787 if (low_key->fmr_offset > high_key->fmr_offset) in xfs_getfsmap_check_keys()
789 if (low_key->fmr_offset < high_key->fmr_offset) in xfs_getfsmap_check_keys()
806 * in the supplied records array until there are no more reverse mappings to
808 * function returns -ECANCELED to indicate that more records would have been
811 * Key to Confusion
812 * ----------------
814 * xfs_fsmap_head.fmh_keys -- low and high fsmap keys passed in;
815 * these reflect fs-wide sector addrs.
816 * dkeys -- fmh_keys used to query each device;
817 * these are fmh_keys but w/ the low key
819 * xfs_getfsmap_info.next_daddr -- next disk addr we expect to see; this
822 * xfs_getfsmap_info.low/high -- per-AG low/high keys computed from
823 * dkeys; used to query the metadata.
832 struct xfs_fsmap dkeys[2]; /* per-dev keys */ in xfs_getfsmap()
839 if (head->fmh_iflags & ~FMH_IF_VALID) in xfs_getfsmap()
840 return -EINVAL; in xfs_getfsmap()
841 if (!xfs_getfsmap_is_valid_device(mp, &head->fmh_keys[0]) || in xfs_getfsmap()
842 !xfs_getfsmap_is_valid_device(mp, &head->fmh_keys[1])) in xfs_getfsmap()
843 return -EINVAL; in xfs_getfsmap()
846 xfs_sb_version_hasrmapbt(&mp->m_sb); in xfs_getfsmap()
847 head->fmh_entries = 0; in xfs_getfsmap()
851 handlers[0].dev = new_encode_dev(mp->m_ddev_targp->bt_dev); in xfs_getfsmap()
856 if (mp->m_logdev_targp != mp->m_ddev_targp) { in xfs_getfsmap()
857 handlers[1].dev = new_encode_dev(mp->m_logdev_targp->bt_dev); in xfs_getfsmap()
861 if (mp->m_rtdev_targp) { in xfs_getfsmap()
862 handlers[2].dev = new_encode_dev(mp->m_rtdev_targp->bt_dev); in xfs_getfsmap()
871 * To continue where we left off, we allow userspace to use the in xfs_getfsmap()
872 * last mapping from a previous call as the low key of the next. in xfs_getfsmap()
873 * This is identified by a non-zero length in the low key. We in xfs_getfsmap()
874 * have to increment the low key in this scenario to ensure we in xfs_getfsmap()
878 * If the low key mapping refers to file data, the same physical in xfs_getfsmap()
879 * blocks could be mapped to several other files/offsets. in xfs_getfsmap()
880 * According to rmapbt record ordering, the minimal next in xfs_getfsmap()
882 * offset in the same inode. Therefore, bump the file offset to in xfs_getfsmap()
883 * continue the search appropriately. For all other low key in xfs_getfsmap()
888 dkeys[0] = head->fmh_keys[0]; in xfs_getfsmap()
893 return -EINVAL; in xfs_getfsmap()
899 if (!xfs_getfsmap_check_keys(dkeys, &head->fmh_keys[1])) in xfs_getfsmap()
900 return -EINVAL; in xfs_getfsmap()
902 info.next_daddr = head->fmh_keys[0].fmr_physical + in xfs_getfsmap()
903 head->fmh_keys[0].fmr_length; in xfs_getfsmap()
910 * buffers. Freeze quiesces the log (which waits for the buffer LRU to in xfs_getfsmap()
913 sb_start_write(mp->m_super); in xfs_getfsmap()
920 if (head->fmh_keys[0].fmr_device > handlers[i].dev) in xfs_getfsmap()
922 if (head->fmh_keys[1].fmr_device < handlers[i].dev) in xfs_getfsmap()
926 * If this device number matches the high key, we have in xfs_getfsmap()
927 * to pass the high key to the handler to limit the in xfs_getfsmap()
929 * low key, zero out the low key so that we get in xfs_getfsmap()
932 if (handlers[i].dev == head->fmh_keys[1].fmr_device) in xfs_getfsmap()
933 dkeys[1] = head->fmh_keys[1]; in xfs_getfsmap()
934 if (handlers[i].dev > head->fmh_keys[0].fmr_device) in xfs_getfsmap()
954 sb_end_write(mp->m_super); in xfs_getfsmap()
955 head->fmh_oflags = FMH_OF_DEV_T; in xfs_getfsmap()