* Bug#470706: xfsprogs: xfs_repair crashes during attempted repair
[not found] <20080313000050.5526.46208.reportbug@senior.lodge.glasgownet.com>
@ 2018-11-25 14:31 ` Bernhard Übelacker
0 siblings, 0 replies; only message in thread
From: Bernhard Übelacker @ 2018-11-25 14:31 UTC (permalink / raw)
To: 470706, 470706-submitter
[-- Attachment #1: Type: text/plain, Size: 1355 bytes --]
Dear Maintainer,
I tried to find out where this given backtrace points to.
I think that following would be the location
where the invalid pointer was tried to be freed.
Attached file contains some details on how it was retrieved.
Upstream removed/replaced function teardown_ag_bmap in [1],
therefore this bug might be just closed.
Kind regards,
Bernhard
Phase 5 - rebuild AG headers and trees...
*** glibc detected *** xfs_repair: munmap_chunk(): invalid pointer: 0xb092c008 ***
======= Backtrace: =========
/lib/i686/cmov/libc.so.6(cfree+0x1bb)[0xb7de24ab] | 0xb7de24ab |
xfs_repair[0x8061f2d] | 0x08061f2d | <teardown_ag_bmap+21>: call <free@plt>
xfs_repair[0x806b311] | 0x0806b311 | <phase5+60>: call <teardown_ag_bmap>
xfs_repair[0x807cb28] | 0x0807cb28 | <main+884>: call <phase5>
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7d89450] | 0xb7d89450 | <__libc_start_main+226>: call *0x8(%ebp)
xfs_repair[0x8049541] | 0x08049541 | <_start+28>: call <__libc_start_main@plt>
======= Memory map: ========
[1] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/repair?id=c1f7a46c4d6403e3313c13487e2f2174f92db670
[-- Attachment #2: debugging.txt --]
[-- Type: text/plain, Size: 24731 bytes --]
Phase 5 - rebuild AG headers and trees...
*** glibc detected *** xfs_repair: munmap_chunk(): invalid pointer:
0xb092c008 ***
======= Backtrace: =========
/lib/i686/cmov/libc.so.6(cfree+0x1bb)[0xb7de24ab] | 0xb7de24ab |
xfs_repair[0x8061f2d] | 0x08061f2d | <teardown_ag_bmap+21>: call 0x80492c4 <free@plt>
xfs_repair[0x806b311] | 0x0806b311 | <phase5+60>: call 0x8061d60 <teardown_ag_bmap>
xfs_repair[0x807cb28] | 0x0807cb28 | <main+884>: call 0x806ae60 <phase5>
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7d89450] | 0xb7d89450 | <__libc_start_main+226>: call *0x8(%ebp)
xfs_repair[0x8049541] | 0x08049541 | <_start+28>: call 0x8049254 <__libc_start_main@plt>
======= Memory map: ========
08048000-080ce000 r-xp 00000000 03:01 195863 /sbin/xfs_repair
080ce000-080cf000 rw-p 00085000 03:01 195863 /sbin/xfs_repair
080cf000-0aadc000 rw-p 080cf000 00:00 0 [heap]
##########
deb [check-valid-until=no] http://snapshot.debian.org/archive/debian/20091004T111800Z/ lenny main
deb-src [check-valid-until=no] http://snapshot.debian.org/archive/debian/20091004T111800Z/ lenny main
apt-get update
apt-get install debian-archive-keyring gdb xfsprogs devscripts dpkg-dev build-essential uuid-dev autoconf debhelper gettext libtool libreadline5-dev gcc-4.1
wget http://snapshot.debian.org/archive/debian/20060822T000000Z/pool/main/x/xfsprogs/xfsprogs_2.8.11-1_i386.deb
dpkg -i xfsprogs_2.8.11-1_i386.deb
https://buildd.debian.org/status/fetch.php?pkg=xfsprogs&arch=amd64&ver=2.8.11-1&stamp=1156139624&raw=0
# Unfortunately no log for i386
# -> was built with gcc-4.1
ln -sf gcc-4.1 /usr/bin/gcc
mkdir xfsprogs/orig -p
cd xfsprogs/orig
dget http://snapshot.debian.org/archive/debian/20060822T000000Z/pool/main/x/xfsprogs/xfsprogs_2.8.11-1.dsc
dpkg-source -x xfsprogs_2.8.11-1.dsc
cd ../..
cd xfsprogs
cp orig try1 -a
cd try1/xfsprogs-2.8.11/
dpkg-buildpackage -b
benutzer@debian:~$ objdump -D /sbin/xfs_repair > objdump.txt
debian:~/xfsprogs/try1/xfsprogs-2.8.11# file /sbin/xfs_repair /root/xfsprogs/try1/xfsprogs-2.8.11/repair/xfs_repair
/sbin/xfs_repair: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped
/root/xfsprogs/try1/xfsprogs-2.8.11/repair/xfs_repair: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
debian:~/xfsprogs/try1/xfsprogs-2.8.11# gdb -q --args /root/xfsprogs/try1/xfsprogs-2.8.11/repair/xfs_repair
(gdb) set width 0
(gdb) set pagination off
(gdb) disassemble main
debian:~# gdb -q --args /sbin/xfs_repair
(no debugging symbols found)
(gdb) set width 0
(gdb) set pagination off
(gdb) b __libc_start_main
--- original binary --- | --- rebuild with debug info ---
|
(gdb) info target | (gdb) info target
Symbols from "/sbin/xfs_repair". | Symbols from "/root/xfsprogs/try1/xfsprogs-2.8.11/repair/xfs_repair".
Local exec file: | Local exec file:
`/sbin/xfs_repair', file type elf32-i386. | `/root/xfsprogs/try1/xfsprogs-2.8.11/repair/xfs_repair', file type elf32-i386.
Entry point: 0x8049520 0x08048134 - 0x08048147 is .interp | Entry point: 0x8049590 0x08048134 - 0x08048147 is .interp
... | ...
0x08049520 - 0x080c1434 is .text | 0x08049590 - 0x080bb4dc is .text
|
|
(gdb) disassemble 0x8049520 0x8049520+35 | (gdb) disassemble _start
Dump of assembler code from 0x8049520 to 0x8049543: | Dump of assembler code for function _start:
0x08049520 <strcpy@plt+28>: xor %ebp,%ebp | 0x08049590 <_start+0>: xor %ebp,%ebp
0x08049522 <strcpy@plt+30>: pop %esi | 0x08049592 <_start+2>: pop %esi
0x08049523 <strcpy@plt+31>: mov %esp,%ecx | 0x08049593 <_start+3>: mov %esp,%ecx
0x08049525 <strcpy@plt+33>: and $0xfffffff0,%esp | 0x08049595 <_start+5>: and $0xfffffff0,%esp
0x08049528 <strcpy@plt+36>: push %eax | 0x08049598 <_start+8>: push %eax
0x08049529 <strcpy@plt+37>: push %esp | 0x08049599 <_start+9>: push %esp
0x0804952a <strcpy@plt+38>: push %edx | 0x0804959a <_start+10>: push %edx
0x0804952b <strcpy@plt+39>: push $0x80c1350 | 0x0804959b <_start+11>: push $0x80bb440
0x08049530 <strcpy@plt+44>: push $0x80c13a0 | 0x080495a0 <_start+16>: push $0x80bb450
0x08049535 <strcpy@plt+49>: push %ecx | 0x080495a5 <_start+21>: push %ecx
0x08049536 <strcpy@plt+50>: push %esi | 0x080495a6 <_start+22>: push %esi
0x08049537 <strcpy@plt+51>: push $0x807c7a0 | 0x080495a7 <_start+23>: push $0x8079ec0
0x0804953c <strcpy@plt+56>: call 0x8049374 <__libc_start_main@plt> | 0x080495ac <_start+28>: call 0x8049254 <__libc_start_main@plt>
0x08049541 <strcpy@plt+61>: hlt | 0x080495b1 <_start+33>: hlt
0x08049542 <strcpy@plt+62>: nop |
End of assembler dump. |
|
| (gdb) print main
| $2 = {int (int, char **)} 0x8079ec0 <main>
|
--> main starts at 0x807c7a0 |
|
|
(gdb) disassemble 0x807c7a0 0x807c7a0+1650 | (gdb) disassemble 0x08079ec0 0x08079ec0+1640
Dump of assembler code from 0x807c7a0 to 0x807ce12: | Dump of assembler code from 0x8079ec0 to 0x807a528:
0x0807c7a0 <strcpy@plt+209564>: lea 0x4(%esp),%ecx | 0x08079ec0 <main+0>: lea 0x4(%esp),%ecx
0x0807c7a4 <strcpy@plt+209568>: and $0xfffffff0,%esp | 0x08079ec4 <main+4>: and $0xfffffff0,%esp
...
0x0807cadd <strcpy@plt+210393>: call 0x807be50 <strcpy@plt+207180> | 0x0807c68f <main+831>: call 0x807b9e0 <do_warn>
0x0807cae2 <strcpy@plt+210398>: lea 0x0(%esi,%eiz,1),%esi | 0x0807c694 <main+836>: mov 0x80ce9c4,%edi
0x0807cae9 <strcpy@plt+210405>: lea 0x0(%edi,%eiz,1),%edi | 0x0807c69a <main+842>: test %edi,%edi
0x0807caf0 <strcpy@plt+210412>: mov 0x80ced48,%eax | 0x0807c69c <main+844>: je 0x807c5d3 <main+643>
0x0807caf5 <strcpy@plt+210417>: test %eax,%eax | 0x0807c6a2 <main+850>: mov 0x80ce9a4,%esi
0x0807caf7 <strcpy@plt+210419>: je 0x807ca20 <strcpy@plt+210204> | 0x0807c6a8 <main+856>: test %esi,%esi
0x0807cafd <strcpy@plt+210425>: mov 0x80cedfc,%eax | 0x0807c6aa <main+858>: jne 0x807c8a5 <main+1365>
0x0807cb02 <strcpy@plt+210430>: test %eax,%eax | 0x0807c6b0 <main+864>: movl $0x80cb7f8,(%esp)
0x0807cb04 <strcpy@plt+210432>: jne 0x807cd09 <strcpy@plt+210949> |
0x0807cb0a <strcpy@plt+210438>: movl $0x80cbc98,(%esp) |
0x0807cb11 <strcpy@plt+210445>: call 0x807be50 <strcpy@plt+207180> | 0x0807c6b7 <main+871>: call 0x807b9e0 <do_warn>
0x0807cb16 <strcpy@plt+210450>: jmp 0x807ca20 <strcpy@plt+210204> | 0x0807c6bc <main+876>: jmp 0x807c5d3 <main+643>
0x0807cb1b <strcpy@plt+210455>: nop | 0x0807c6c1 <main+881>: mov %ebx,(%esp)
0x0807cb1c <strcpy@plt+210456>: lea 0x0(%esi,%eiz,1),%esi |
0x0807cb20 <strcpy@plt+210460>: mov %ebx,(%esp) |
|
0x0807cb23 <strcpy@plt+210463>: call 0x806b2d0 <strcpy@plt+138700> | 0x0807c6c4 <main+884>: call 0x806ae60 <phase5>
0x0807cb28 <strcpy@plt+210468>: jmp 0x807c9bb <strcpy@plt+210103> | 0x0807c6c9 <main+889>: jmp 0x807c573 <main+547>
|
0x0807cb2d <strcpy@plt+210473>: lea 0x0(%esi),%esi | 0x0807c6ce <main+894>: xchg %ax,%ax
0x0807cb30 <strcpy@plt+210476>: xor %esi,%esi |
0x0807cb32 <strcpy@plt+210478>: call 0x807f390 <strcpy@plt+220812> | 0x0807c6d0 <main+896>: call 0x807ee60 <libxfs_icache_purge>
0x0807cb37 <strcpy@plt+210483>: call 0x807f3b0 <strcpy@plt+220844> | 0x0807c6d5 <main+901>: call 0x807ee80 <libxfs_bcache_purge>
0x0807cb3c <strcpy@plt+210488>: mov %esi,0x4(%esp) | 0x0807c6da <main+906>: movl $0x0,0x4(%esp)
0x0807cb40 <strcpy@plt+210492>: mov %ebx,(%esp) | 0x0807c6e2 <main+914>: mov %ebx,(%esp)
0x0807cb43 <strcpy@plt+210495>: call 0x807fca0 <strcpy@plt+223132> | 0x0807c6e5 <main+917>: call 0x807f750 <libxfs_getsb>
0x0807cb48 <strcpy@plt+210500>: test %eax,%eax | 0x0807c6ea <main+922>: test %eax,%eax
0x0807cb4a <strcpy@plt+210502>: mov %eax,%edi | 0x0807c6ec <main+924>: mov %eax,%edi
0x0807cb4c <strcpy@plt+210504>: je 0x807cd4d <strcpy@plt+211017> | 0x0807c6ee <main+926>: je 0x807c8e9 <main+1433>
0x0807cb52 <strcpy@plt+210510>: mov 0x48(%edi),%esi | 0x0807c6f4 <main+932>: mov 0x48(%edi),%esi
0x0807cb55 <strcpy@plt+210513>: movzwl 0xb0(%esi),%eax | 0x0807c6f7 <main+935>: movzwl 0xb0(%esi),%eax
0x0807cb5c <strcpy@plt+210520>: test $0x24,%al | 0x0807c6fe <main+942>: test $0x24,%al
0x0807cb5e <strcpy@plt+210522>: jne 0x807cc66 <strcpy@plt+210786> | 0x0807c700 <main+944>: jne 0x807c80a <main+1210>
0x0807cb64 <strcpy@plt+210528>: mov 0x80cee2c,%ecx | 0x0807c706 <main+950>: mov 0x80ce988,%eax
0x0807cb6a <strcpy@plt+210534>: test %ecx,%ecx | 0x0807c70b <main+955>: test %eax,%eax
0x0807cb6c <strcpy@plt+210536>: jne 0x807cc31 <strcpy@plt+210733> | 0x0807c70d <main+957>: jne 0x807c7d1 <main+1153>
0x0807cb72 <strcpy@plt+210542>: xor %eax,%eax | 0x0807c713 <main+963>: movl $0x0,0x4(%esp)
0x0807cb74 <strcpy@plt+210544>: mov %eax,0x4(%esp) | 0x0807c71b <main+971>: mov %edi,(%esp)
0x0807cb78 <strcpy@plt+210548>: mov %edi,(%esp) | 0x0807c71e <main+974>: call 0x807eec0 <libxfs_writebuf>
|
|
|
|
|
|
|
(gdb) disassemble 0x806b2d0 0x806b2d0+800 | (gdb) disassemble phase5
Dump of assembler code from 0x806b2d0 to 0x806b5f0: | Dump of assembler code for function phase5:
0x0806b2d0 <strcpy@plt+138700>: push %ebp | 0x0806ae60 <phase5+0>: push %ebp
0x0806b2d1 <strcpy@plt+138701>: mov %esp,%ebp | 0x0806ae61 <phase5+1>: mov %esp,%ebp
0x0806b2d3 <strcpy@plt+138703>: push %edi | 0x0806ae63 <phase5+3>: push %edi
0x0806b2d4 <strcpy@plt+138704>: push %esi | 0x0806ae64 <phase5+4>: push %esi
0x0806b2d5 <strcpy@plt+138705>: push %ebx | 0x0806ae65 <phase5+5>: push %ebx
0x0806b2d6 <strcpy@plt+138706>: sub $0x39c,%esp | 0x0806ae66 <phase5+6>: sub $0x39c,%esp
0x0806b2dc <strcpy@plt+138712>: mov 0x8(%ebp),%edi | 0x0806ae6c <phase5+12>: mov 0x8(%ebp),%edi
0x0806b2df <strcpy@plt+138715>: movl $0x80c7dc4,(%esp) | 0x0806ae6f <phase5+15>: movl $0x80c7924,(%esp)
0x0806b2e6 <strcpy@plt+138722>: call 0x807be20 <strcpy@plt+207132> | 0x0806ae76 <phase5+22>: call 0x807b9b0 <do_log>
0x0806b2eb <strcpy@plt+138727>: mov %edi,(%esp) | 0x0806ae7b <phase5+27>: mov %edi,(%esp)
0x0806b2ee <strcpy@plt+138730>: call 0x8068bf0 <strcpy@plt+128748> | 0x0806ae7e <phase5+30>: call 0x8068960 <keep_fsinos>
0x0806b2f3 <strcpy@plt+138735>: mov 0x58(%edi),%ebx | 0x0806ae83 <phase5+35>: mov 0x58(%edi),%edx
0x0806b2f6 <strcpy@plt+138738>: test %ebx,%ebx | 0x0806ae86 <phase5+38>: test %edx,%edx
0x0806b2f8 <strcpy@plt+138740>: je 0x806b566 <strcpy@plt+139362> | 0x0806ae88 <phase5+40>: je 0x806b105 <phase5+677>
0x0806b2fe <strcpy@plt+138746>: xor %esi,%esi | 0x0806ae8e <phase5+46>: xor %esi,%esi
0x0806b300 <strcpy@plt+138748>: jmp 0x806b525 <strcpy@plt+139297> | 0x0806ae90 <phase5+48>: jmp 0x806b0c0 <phase5+608>
0x0806b305 <strcpy@plt+138753>: mov %esi,0x4(%esp) | 0x0806ae95 <phase5+53>: mov %esi,0x4(%esp)
0x0806b309 <strcpy@plt+138757>: mov %edi,(%esp) | 0x0806ae99 <phase5+57>: mov %edi,(%esp)
|
0x0806b30c <strcpy@plt+138760>: call 0x8061f10 <strcpy@plt+100876> | 0x0806ae9c <phase5+60>: call 0x8061d60 <teardown_ag_bmap>
0x0806b311 <strcpy@plt+138765>: lea -0x28(%ebp),%eax | 0x0806aea1 <phase5+65>: lea -0x28(%ebp),%eax
|
0x0806b314 <strcpy@plt+138768>: lea -0x20(%ebp),%edx | 0x0806aea4 <phase5+68>: lea -0x20(%ebp),%edx
0x0806b317 <strcpy@plt+138771>: mov %eax,0x10(%esp) | 0x0806aea7 <phase5+71>: mov %eax,0x10(%esp)
0x0806b31b <strcpy@plt+138775>: lea -0x37c(%ebp),%eax | 0x0806aeab <phase5+75>: lea -0x37c(%ebp),%eax
0x0806b321 <strcpy@plt+138781>: mov %edx,0xc(%esp) | 0x0806aeb1 <phase5+81>: mov %edx,0xc(%esp)
0x0806b325 <strcpy@plt+138785>: mov %eax,0x8(%esp) | 0x0806aeb5 <phase5+85>: mov %eax,0x8(%esp)
0x0806b329 <strcpy@plt+138789>: mov %esi,0x4(%esp) | 0x0806aeb9 <phase5+89>: mov %esi,0x4(%esp)
0x0806b32d <strcpy@plt+138793>: mov %edi,(%esp) | 0x0806aebd <phase5+93>: mov %edi,(%esp)
0x0806b330 <strcpy@plt+138796>: call 0x806a8e0 <strcpy@plt+136156> | 0x0806aec0 <phase5+96>: call 0x806a4a0 <init_ino_cursor>
0x0806b335 <strcpy@plt+138801>: mov -0x20(%ebp),%eax | 0x0806aec5 <phase5+101>: mov -0x20(%ebp),%eax
0x0806b338 <strcpy@plt+138804>: add %eax,0x80cee10 | 0x0806aec8 <phase5+104>: add %eax,0x80ce9b0
|
|
|
|
|
(gdb) disassemble 0x8061f10 0x8061f10+50 | (gdb) disassemble teardown_ag_bmap
Dump of assembler code from 0x8061f10 to 0x8061f42: | Dump of assembler code for function teardown_ag_bmap:
0x08061f10 <strcpy@plt+100876>: push %ebp | 0x08061d60 <teardown_ag_bmap+0>: push %ebp
0x08061f11 <strcpy@plt+100877>: mov %esp,%ebp | 0x08061d61 <teardown_ag_bmap+1>: mov %esp,%ebp
0x08061f13 <strcpy@plt+100879>: push %ebx | 0x08061d63 <teardown_ag_bmap+3>: push %ebx
0x08061f14 <strcpy@plt+100880>: sub $0x4,%esp | 0x08061d64 <teardown_ag_bmap+4>: sub $0x4,%esp
0x08061f17 <strcpy@plt+100883>: mov 0xc(%ebp),%ebx | 0x08061d67 <teardown_ag_bmap+7>: mov 0xc(%ebp),%ebx
0x08061f1a <strcpy@plt+100886>: mov 0x80cede4,%eax | 0x08061d6a <teardown_ag_bmap+10>: mov 0x80ce908,%eax
0x08061f1f <strcpy@plt+100891>: shl $0x2,%ebx | 0x08061d6f <teardown_ag_bmap+15>: mov (%eax,%ebx,4),%eax
0x08061f22 <strcpy@plt+100894>: mov (%ebx,%eax,1),%eax | 0x08061d72 <teardown_ag_bmap+18>: mov %eax,(%esp)
0x08061f25 <strcpy@plt+100897>: mov %eax,(%esp) | 0x08061d75 <teardown_ag_bmap+21>: call 0x80492c4 <free@plt>
0x08061f28 <strcpy@plt+100900>: call 0x8049444 <free@plt> | 0x08061d7a <teardown_ag_bmap+26>: mov 0x80ce908,%eax
0x08061f2d <strcpy@plt+100905>: mov 0x80cede4,%eax | 0x08061d7f <teardown_ag_bmap+31>: movl $0x0,(%eax,%ebx,4)
0x08061f32 <strcpy@plt+100910>: movl $0x0,(%ebx,%eax,1) | 0x08061d86 <teardown_ag_bmap+38>: add $0x4,%esp
0x08061f39 <strcpy@plt+100917>: pop %eax | 0x08061d89 <teardown_ag_bmap+41>: pop %ebx
0x08061f3a <strcpy@plt+100918>: pop %ebx | 0x08061d8a <teardown_ag_bmap+42>: pop %ebp
0x08061f3b <strcpy@plt+100919>: pop %ebp | 0x08061d8b <teardown_ag_bmap+43>: ret
0x08061f3c <strcpy@plt+100920>: ret | End of assembler dump.
End of assembler dump. | (gdb)
(gdb) list teardown_ag_bmap
114
115 /* ARGSUSED */
116 void
117 teardown_ag_bmap(xfs_mount_t *mp, xfs_agnumber_t agno)
118 {
119 ASSERT(ba_bmap[agno] != NULL);
120
121 free(ba_bmap[agno]);
122 ba_bmap[agno] = NULL;
123
124 return;
125 }
# repair/incore.c
(gdb) list phase5
1414 set_inode_used(irec, i);
1415 }
1416
1417 void
1418 phase5(xfs_mount_t *mp)
1419 {
1420 __uint64_t num_inos;
1421 __uint64_t num_free_inos;
1422 bt_status_t bno_btree_curs;
1423 bt_status_t bcnt_btree_curs;
1424 bt_status_t ino_btree_curs;
1425 xfs_agnumber_t agno;
1426 int extra_blocks = 0;
1427 uint num_freeblocks;
1428 xfs_extlen_t freeblks1;
1429 #ifdef DEBUG
1430 xfs_extlen_t freeblks2;
1431 #endif
1432 xfs_agblock_t num_extents;
1433 extern int count_bno_extents(xfs_agnumber_t);
1434 extern int count_bno_extents_blocks(xfs_agnumber_t, uint *);
1435 #ifdef XR_BLD_FREE_TRACE
1436 extern int count_bcnt_extents(xfs_agnumber_t);
1437 #endif
1438
1439 do_log(_("Phase 5 - rebuild AG headers and trees...\n"));
1440
1441 #ifdef XR_BLD_FREE_TRACE
1442 fprintf(stderr, "inobt level 1, maxrec = %d, minrec = %d\n",
1443 XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize, xfs_inobt, 0),
1444 XFS_BTREE_BLOCK_MINRECS(mp->m_sb.sb_blocksize, xfs_inobt, 0)
1445 );
1446 fprintf(stderr, "inobt level 0 (leaf), maxrec = %d, minrec = %d\n",
1447 XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize, xfs_inobt, 1),
1448 XFS_BTREE_BLOCK_MINRECS(mp->m_sb.sb_blocksize, xfs_inobt, 1)
1449 );
1450 fprintf(stderr, "xr inobt level 0 (leaf), maxrec = %d\n",
1451 XR_INOBT_BLOCK_MAXRECS(mp, 0));
1452 fprintf(stderr, "xr inobt level 1 (int), maxrec = %d\n",
1453 XR_INOBT_BLOCK_MAXRECS(mp, 1));
1454 fprintf(stderr, "bnobt level 1, maxrec = %d, minrec = %d\n",
1455 XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize, xfs_alloc, 0),
1456 XFS_BTREE_BLOCK_MINRECS(mp->m_sb.sb_blocksize, xfs_alloc, 0));
1457 fprintf(stderr, "bnobt level 0 (leaf), maxrec = %d, minrec = %d\n",
1458 XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize, xfs_alloc, 1),
1459 XFS_BTREE_BLOCK_MINRECS(mp->m_sb.sb_blocksize, xfs_alloc, 1));
1460 #endif
1461
1462 /*
1463 * make sure the root and realtime inodes show up allocated
1464 */
1465 keep_fsinos(mp);
1466
1467 for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
1468 /*
1469 * build up incore bno and bcnt extent btrees
1470 */
1471 num_extents = mk_incore_fstree(mp, agno);
1472
1473 #ifdef XR_BLD_FREE_TRACE
1474 fprintf(stderr, "# of bno extents is %d\n",
1475 count_bno_extents(agno));
1476 #endif
1477
1478 if (num_extents == 0) {
1479 /*
1480 * XXX - what we probably should do here is pick an
1481 * inode for a regular file in the allocation group
1482 * that has space allocated and shoot it by traversing
1483 * the bmap list and putting all its extents on the
1484 * incore freespace trees, clearing the inode,
1485 * and clearing the in-use bit in the incore inode
1486 * tree. Then try mk_incore_fstree() again.
1487 */
1488 do_error(_("unable to rebuild AG %u. "
1489 "Not enough free space in on-disk AG.\n"),
1490 agno);
1491 }
1492
1493 /*
1494 * done with the AG bitmap, toss it...
1495 */
1496 teardown_ag_bmap(mp, agno);
1497
# repair/phase5.c
[1] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/repair?id=c1f7a46c4d6403e3313c13487e2f2174f92db670
^ permalink raw reply [flat|nested] only message in thread