Re: [Patch v2 00/42] btrfs: add data write support for subpage
From: Qu Wenruo <hidden>
Date: 2021-05-14 22:45:51
On 2021/5/14 下午7:30, David Sterba wrote:
On Thu, May 13, 2021 at 10:21:24AM +0800, Qu Wenruo wrote:quoted
quoted
On 2021/5/13 上午6:18, David Sterba wrote:quoted
On Wed, Apr 28, 2021 at 07:03:07AM +0800, Qu Wenruo wrote:quoted
=== Patchset structure === Patch 01~02: hardcoded PAGE_SIZE related fixes Patch 03~05: submit_extent_page() refactor which will reduce overhead for write path. This should benefit 4K page the most. Although the primary objective is just to make the code easier to read. Patch 06: Cleanup for metadata writepath, to reduce the impact on regular sectorsize path. Patch 07~13: PagePrivate2 and ordered extent related refactor. Although it's still a refactor, the refactor is pretty important for subpage data write path, as for subpage we could have btrfs_writepage_endio_finish_ordered() call across several sectors, which may or may not have ordered extent for those sectors. ^^^ Above patches are all subpage data write preparation ^^^Do you think the patches 1-13 are safe to be merged independently? I've paged through the whole patchset and some of the patches are obviously preparatory stuff so they can go in without much risk.Yes. I believe they are OK for merge. I have run the full tests on x86 VM for the whole patchset, no new regression. Especially patch 03~05 would benefit 4K page size the most, thus merging them first would definitely help. Just let me to run the tests with patch 1~13 only, to see if there is any special dependency missing.Yep, patch 1~13 with the v5 read time repair patches are safe for x86.All fine up to generic/521 that got stuck. It looks like some use after free, check the 2nd line of the dump, there's the 0x6b6b signature generic/521 [00:33:06][26901.358817] run fstests generic/521 at 2021-05-14 00:33:06 [27273.028163] general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6a9b: 0000 [#1] PREEMPT SMP [27273.030710] CPU: 0 PID: 20046 Comm: fsx Not tainted 5.13.0-rc1-default+ #1463 [27273.032295] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba527-rebuilt.opensuse.org 04/01/2014 [27273.034731] RIP: 0010:btrfs_lookup_first_ordered_range+0x46/0x140 [btrfs]
It's in the new function introduced, and considering how few parameteres are passed in, I guess it's really something wrong in the function, other than some conflicts with other patches. Any line number for it? Thanks, Qu
[27273.040247] RSP: 0018:ffffb7ac06617b10 EFLAGS: 00010002 [27273.041365] RAX: 6b6b6b6b6b6b6b6b RBX: 6b6b6b6b6b6b6b6b RCX: ffffffffffffffff [27273.042841] RDX: 6b6b6b6b6b6b6b6b RSI: ffffffffc01b3e09 RDI: ffff93c444e397d0 [27273.044388] RBP: 0000000000001000 R08: 0000000000000001 R09: 0000000000000000 [27273.045938] R10: ffffffffc01b3e09 R11: 0000000000000000 R12: 000000000002f000 [27273.047409] R13: ffff93c48ae79368 R14: ffff93c444e397b8 R15: 000000000002f000 [27273.048959] FS: 00007fb0f0a5e740(0000) GS:ffff93c4bd600000(0000) knlGS:0000000000000000 [27273.050674] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [27273.051971] CR2: 00007fb0f0936000 CR3: 0000000028bf4001 CR4: 0000000000170eb0 [27273.053548] Call Trace: [27273.054145] btrfs_invalidatepage+0xd3/0x390 [btrfs] [27273.055276] truncate_cleanup_page+0xda/0x170 [27273.056243] truncate_inode_pages_range+0x131/0x5a0 [27273.057334] ? trace_btrfs_space_reservation+0x33/0xf0 [btrfs] [27273.058642] ? lock_acquire+0xa0/0x150 [27273.059506] ? unmap_mapping_pages+0x4d/0x130 [27273.060491] ? do_raw_spin_unlock+0x4b/0xa0 [27273.061477] ? unmap_mapping_pages+0x5e/0x130 [27273.062482] btrfs_punch_hole_lock_range+0xc5/0x130 [btrfs] [27273.063738] btrfs_zero_range+0x1d7/0x4b0 [btrfs] [27273.064833] btrfs_fallocate+0x6b4/0x890 [btrfs] [27273.065921] ? __x64_sys_fallocate+0x3e/0x70 [27273.066920] ? __do_sys_newfstatat+0x40/0x70 [27273.067875] vfs_fallocate+0x12e/0x420 [27273.068738] __x64_sys_fallocate+0x3e/0x70 [27273.069684] do_syscall_64+0x3f/0xb0 [27273.070539] entry_SYSCALL_64_after_hwframe+0x44/0xae [27273.071641] RIP: 0033:0x7fb0f0b5716a [27273.076352] RSP: 002b:00007fff6503e0c8 EFLAGS: 00000246 ORIG_RAX: 000000000000011d [27273.078019] RAX: ffffffffffffffda RBX: 0000000000007909 RCX: 00007fb0f0b5716a [27273.079522] RDX: 000000000002956d RSI: 0000000000000010 RDI: 0000000000000003 [27273.081020] RBP: 000000000002956d R08: 0000000000007909 R09: 000000000002956d [27273.082542] R10: 0000000000007909 R11: 0000000000000246 R12: 0000000000000000 [27273.083984] R13: 0000000000030e76 R14: 0000000000000010 R15: 000000000002956d [27273.090924] ---[ end trace f729bc2baa232124 ]--- [27273.092000] RIP: 0010:btrfs_lookup_first_ordered_range+0x46/0x140 [btrfs] [27273.097206] RSP: 0018:ffffb7ac06617b10 EFLAGS: 00010002 [27273.098338] RAX: 6b6b6b6b6b6b6b6b RBX: 6b6b6b6b6b6b6b6b RCX: ffffffffffffffff [27273.099843] RDX: 6b6b6b6b6b6b6b6b RSI: ffffffffc01b3e09 RDI: ffff93c444e397d0 [27273.101302] RBP: 0000000000001000 R08: 0000000000000001 R09: 0000000000000000 [27273.102827] R10: ffffffffc01b3e09 R11: 0000000000000000 R12: 000000000002f000 [27273.104328] R13: ffff93c48ae79368 R14: ffff93c444e397b8 R15: 000000000002f000 [27273.105786] FS: 00007fb0f0a5e740(0000) GS:ffff93c4bd600000(0000) knlGS:0000000000000000 [27273.107478] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [27273.108672] CR2: 00007fb0f0936000 CR3: 0000000028bf4001 CR4: 0000000000170eb0 [27273.110157] note: fsx[20046] exited with preempt_count 1 [27273.111323] BUG: sleeping function called from invalid context at include/linux/percpu-rwsem.h:49 [27273.113204] in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 20046, name: fsx [27273.114784] INFO: lockdep is turned off. [27273.115614] irq event stamp: 0 [27273.116355] hardirqs last enabled at (0): [<0000000000000000>] 0x0 [27273.117657] hardirqs last disabled at (0): [<ffffffff9c0675a3>] copy_process+0x3f3/0x1550 [27273.119308] softirqs last enabled at (0): [<ffffffff9c0675a3>] copy_process+0x3f3/0x1550 [27273.129243] softirqs last disabled at (0): [<0000000000000000>] 0x0 [27273.130557] CPU: 0 PID: 20046 Comm: fsx Tainted: G D 5.13.0-rc1-default+ #1463 [27273.132460] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba527-rebuilt.opensuse.org 04/01/2014 [27273.135049] Call Trace: [27273.135710] dump_stack+0x6d/0x89 [27273.136549] ___might_sleep.cold+0xf2/0x132 [27273.137575] exit_signals+0x1d/0x350 [27273.138451] do_exit+0xa6/0x4a0 [27273.139238] rewind_stack_do_exit+0x17/0x17 [27273.140270] RIP: 0033:0x7fb0f0b5716a [27273.144797] RSP: 002b:00007fff6503e0c8 EFLAGS: 00000246 ORIG_RAX: 000000000000011d [27273.146353] RAX: ffffffffffffffda RBX: 0000000000007909 RCX: 00007fb0f0b5716a [27273.147736] RDX: 000000000002956d RSI: 0000000000000010 RDI: 0000000000000003 [27273.149157] RBP: 000000000002956d R08: 0000000000007909 R09: 000000000002956d [27273.150620] R10: 0000000000007909 R11: 0000000000000246 R12: 0000000000000000 [27273.152094] R13: 0000000000030e76 R14: 0000000000000010 R15: 000000000002956d