Hi Christoph, On 08.03.2022 07:15, Christoph Hellwig wrote: > Remove the magic autofree semantics and require the callers to explicitly > call bio_init to initialize the bio. > > This allows bio_free to catch accidental bio_put calls on bio_init()ed > bios as well. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> This patch, which landed in today's next-20220331 as commit 57c47b42f454 ("block: turn bio_kmalloc into a simple kmalloc wrapper"), breaks badly all my test systems, which use squashfs initrd: RAMDISK: squashfs filesystem found at block 0 RAMDISK: Loading 2489KiB [1 disk] into ram disk... done. using deprecated initrd support, will be removed in 2021. ------------[ cut here ]------------ WARNING: CPU: 4 PID: 1 at block/bio.c:229 bio_free+0x6c/0x70 Modules linked in: CPU: 4 PID: 1 Comm: swapper/0 Not tainted 5.17.0-next-20220331 #4767 Hardware name: Samsung Exynos (Flattened Device Tree) unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x58/0x70 dump_stack_lvl from __warn+0xc8/0x218 __warn from warn_slowpath_fmt+0x5c/0xb4 warn_slowpath_fmt from bio_free+0x6c/0x70 bio_free from squashfs_read_data+0x118/0x748 squashfs_read_data from squashfs_read_table+0xdc/0x144 squashfs_read_table from squashfs_fill_super+0x100/0x9ec squashfs_fill_super from get_tree_bdev+0x154/0x248 get_tree_bdev from vfs_get_tree+0x24/0xe4 vfs_get_tree from path_mount+0x3d0/0xb14 path_mount from init_mount+0x54/0x80 init_mount from do_mount_root+0x78/0x104 do_mount_root from mount_block_root+0xf0/0x1fc mount_block_root from initrd_load+0xec/0x294 initrd_load from prepare_namespace+0xdc/0x18c prepare_namespace from kernel_init+0x18/0x12c kernel_init from ret_from_fork+0x14/0x2c Exception stack(0xf0835fb0 to 0xf0835ff8) ... irq event stamp: 398271 hardirqs last enabled at (398279): [<c019c984>] __up_console_sem+0x50/0x60 hardirqs last disabled at (398338): [<c019c970>] __up_console_sem+0x3c/0x60 softirqs last enabled at (398352): [<c0101680>] __do_softirq+0x348/0x610 softirqs last disabled at (398347): [<c012f048>] __irq_exit_rcu+0x144/0x1ec ---[ end trace 0000000000000000 ]--- 8<--- cut here --- Unable to handle kernel NULL pointer dereference at virtual address 00000004 [00000004] *pgd=00000000 Internal error: Oops: 5 [#1] PREEMPT SMP ARM Modules linked in: CPU: 4 PID: 1 Comm: swapper/0 Tainted: G W 5.17.0-next-20220331 #4767 Hardware name: Samsung Exynos (Flattened Device Tree) PC is at bio_free+0x24/0x70 LR is at bio_free+0x24/0x70 pc : [<c0502d28>] lr : [<c0502d28>] psr: 80000113 sp : f0835cf0 ip : 00000000 fp : c28cae80 r10: ef0a95c0 r9 : c2805cc0 r8 : 00000060 r7 : 00000060 r6 : 00000060 r5 : 00000000 r4 : c2804a80 r3 : c2804ac8 r2 : 00000001 r1 : c2804ac8 r0 : 00000074 Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 10c5387d Table: 4000406a DAC: 00000051 Register r0 information: non-paged memory Register r1 information: slab kmalloc-128 start c2804a80 pointer offset 72 size 128 Register r2 information: non-paged memory Register r3 information: slab kmalloc-128 start c2804a80 pointer offset 72 size 128 Register r4 information: slab kmalloc-128 start c2804a80 pointer offset 0 size 128 Register r5 information: NULL pointer Register r6 information: non-paged memory Register r7 information: non-paged memory Register r8 information: non-paged memory Register r9 information: slab kmalloc-192 start c2805cc0 pointer offset 0 size 192 Register r10 information: non-slab/vmalloc memory Register r11 information: slab kmalloc-64 start c28cae80 pointer offset 0 size 64 Register r12 information: NULL pointer Process swapper/0 (pid: 1, stack limit = 0x(ptrval)) Stack: (0xf0835cf0 to 0xf0836000) ... bio_free from squashfs_read_data+0x118/0x748 squashfs_read_data from squashfs_read_table+0xdc/0x144 squashfs_read_table from squashfs_fill_super+0x100/0x9ec squashfs_fill_super from get_tree_bdev+0x154/0x248 get_tree_bdev from vfs_get_tree+0x24/0xe4 vfs_get_tree from path_mount+0x3d0/0xb14 path_mount from init_mount+0x54/0x80 init_mount from do_mount_root+0x78/0x104 do_mount_root from mount_block_root+0xf0/0x1fc mount_block_root from initrd_load+0xec/0x294 initrd_load from prepare_namespace+0xdc/0x18c prepare_namespace from kernel_init+0x18/0x12c kernel_init from ret_from_fork+0x14/0x2c Exception stack(0xf0835fb0 to 0xf0835ff8) ... ---[ end trace 0000000000000000 ]--- Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b Reverting it on top of linux next-20220331 (together with commit 1292fb59f283 ("pktcdvd: stop using bio_reset")) fixes (or hides?) the issue. > --- > block/bio.c | 47 ++++++++++++------------------ > block/blk-crypto-fallback.c | 14 +++++---- > block/blk-map.c | 42 ++++++++++++++++---------- > drivers/block/pktcdvd.c | 25 ++++++++-------- > drivers/md/bcache/debug.c | 10 ++++--- > drivers/md/dm-bufio.c | 9 +++--- > drivers/md/raid1.c | 12 +++++--- > drivers/md/raid10.c | 21 ++++++++----- > drivers/target/target_core_pscsi.c | 10 +++---- > fs/squashfs/block.c | 9 +++--- > include/linux/bio.h | 2 +- > 11 files changed, 108 insertions(+), 93 deletions(-) > [...] Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland