36
36
xfs_bmbt_ptr_t *pp, int nrecs);
38
38
static const cmdinfo_t bmap_cmd =
39
{ "bmap", NULL, bmap_f, 0, 3, 0, "[-ad] [block [len]]",
40
"show block map for current file", NULL };
39
{ "bmap", NULL, bmap_f, 0, 3, 0, N_("[-ad] [block [len]]"),
40
N_("show block map for current file"), NULL };
92
92
rblock = (xfs_bmdr_block_t *)XFS_DFORK_PTR(dip, whichfork);
93
93
fsize = XFS_DFORK_SIZE(dip, mp, whichfork);
94
pp = XFS_BTREE_PTR_ADDR(fsize, xfs_bmdr, rblock, 1,
95
XFS_BTREE_BLOCK_MAXRECS(fsize, xfs_bmdr, 0));
96
kp = XFS_BTREE_KEY_ADDR(fsize, xfs_bmdr, rblock, 1,
97
XFS_BTREE_BLOCK_MAXRECS(fsize, xfs_bmdr, 0));
98
bno = select_child(curoffset, kp, pp, INT_GET(rblock->bb_numrecs, ARCH_CONVERT));
94
pp = XFS_BMDR_PTR_ADDR(rblock, 1, xfs_bmdr_maxrecs(mp, fsize, 0));
95
kp = XFS_BMDR_KEY_ADDR(rblock, 1);
96
bno = select_child(curoffset, kp, pp,
97
be16_to_cpu(rblock->bb_numrecs));
100
99
set_cur(&typtab[typ], XFS_FSB_TO_DADDR(mp, bno),
101
100
blkbb, DB_RING_IGN, NULL);
102
block = (xfs_bmbt_block_t *)iocur_top->data;
103
if (INT_GET(block->bb_level, ARCH_CONVERT) == 0)
101
block = (struct xfs_btree_block *)iocur_top->data;
102
if (be16_to_cpu(block->bb_level) == 0)
105
pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt,
107
XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize,
109
kp = XFS_BTREE_KEY_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt,
111
XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize,
104
pp = XFS_BMDR_PTR_ADDR(block, 1,
105
xfs_bmbt_maxrecs(mp, mp->m_sb.sb_blocksize, 0));
106
kp = XFS_BMDR_KEY_ADDR(block, 1);
113
107
bno = select_child(curoffset, kp, pp,
114
INT_GET(block->bb_numrecs, ARCH_CONVERT));
108
be16_to_cpu(block->bb_numrecs));
117
nextbno = INT_GET(block->bb_rightsib, ARCH_CONVERT);
118
nextents = INT_GET(block->bb_numrecs, ARCH_CONVERT);
119
xp = (xfs_bmbt_rec_64_t *)XFS_BTREE_REC_ADDR(
120
mp->m_sb.sb_blocksize, xfs_bmbt, block, 1,
121
XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize,
111
nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
112
nextents = be16_to_cpu(block->bb_numrecs);
113
xp = (xfs_bmbt_rec_64_t *)
114
XFS_BMBT_REC_ADDR(mp, block, 1);
123
115
for (ep = xp; ep < &xp[nextents] && n < nex; ep++) {
124
116
if (!bmap_one_extent(ep, &curoffset, eoffset,
180
172
set_cur_inode(iocur_top->ino);
181
173
dip = iocur_top->data;
182
if (INT_GET(dip->di_core.di_nextents, ARCH_CONVERT))
174
if (be32_to_cpu(dip->di_core.di_nextents))
184
if (INT_GET(dip->di_core.di_anextents, ARCH_CONVERT))
176
if (be16_to_cpu(dip->di_core.di_anextents))
188
180
if (optind < argc) {
189
181
co = (xfs_dfiloff_t)strtoull(argv[optind], &p, 0);
190
182
if (*p != '\0') {
191
dbprintf("bad block number for bmap %s\n",
183
dbprintf(_("bad block number for bmap %s\n"),
219
211
bmap(co, eo - co + 1, whichfork, &nex, &be);
222
dbprintf("%s offset %lld startblock %llu (%u/%u) count "
224
whichfork == XFS_DATA_FORK ? "data" : "attr",
214
dbprintf(_("%s offset %lld startblock %llu (%u/%u) count "
216
whichfork == XFS_DATA_FORK ? _("data") : _("attr"),
225
217
be.startoff, be.startblock,
226
218
XFS_FSB_TO_AGNO(mp, be.startblock),
227
219
XFS_FSB_TO_AGBNO(mp, be.startblock),
285
277
xfs_dfilblks_t *cp,
288
xfs_bmbt_irec_t irec, *s = &irec;
289
xfs_bmbt_rec_t rpcopy, *p = &rpcopy;
291
memmove(&rpcopy, rp, sizeof(rpcopy));
292
libxfs_bmbt_disk_get_all(p, s);
294
if (s->br_state == XFS_EXT_UNWRITTEN) {
300
*op = s->br_startoff;
301
*sp = s->br_startblock;
302
*cp = s->br_blockcount;
280
xfs_bmbt_irec_t irec;
282
libxfs_bmbt_disk_get_all(rp, &irec);
284
*fp = irec.br_state == XFS_EXT_UNWRITTEN;
285
*op = irec.br_startoff;
286
*sp = irec.br_startblock;
287
*cp = irec.br_blockcount;
336
321
for (i = 0; i < nrecs; i++) {
337
if (INT_GET(kp[i].br_startoff, ARCH_CONVERT) == off)
338
return INT_GET(pp[i], ARCH_CONVERT);
339
if (INT_GET(kp[i].br_startoff, ARCH_CONVERT) > off) {
322
if (be64_to_cpu(kp[i].br_startoff) == off)
323
return be64_to_cpu(pp[i]);
324
if (be64_to_cpu(kp[i].br_startoff) > off) {
341
return INT_GET(pp[i], ARCH_CONVERT);
326
return be64_to_cpu(pp[i]);
343
return INT_GET(pp[i - 1], ARCH_CONVERT);
328
return be64_to_cpu(pp[i - 1]);
346
return INT_GET(pp[nrecs - 1], ARCH_CONVERT);
331
return be64_to_cpu(pp[nrecs - 1]);