Re: store a pointer to the block_device in struct bio (again)

Qian Cai
2020-12-07T18:58:24Z

On Tue, 2020-12-01 at 17:54 +0100, Christoph Hellwig wrote:
> Hi Jens,
>
> this series switches back from storing the gendisk + partno to storing
> a block_device pointer in struct bio. The reason is two fold: for one
> the new struct block_device actually is always available, removing the
> need to avoid originally. Second the merge struct block_device is much
> more useful than the old one, as storing it avoids the need for looking
> up what used to be hd_struct during partition remapping and I/O
> accounting.
>
> Note that this series depends on the posted but not merged
> "block tracepoint cleanups" series.

Reverting this patchset on the top of today's linux-next fixed data corruptions
everywhere, i.e.,

$ git revert --no-edit a54895fa057c..4498a8536c81
(with a trivial conflict resolution with the commit "block: move
blk_rq_bio_prep() to linux/blk-mq.h")

.config (if ever matters and also happened on POWER9 NV):
https://cailca.coding.net/public/linux/mm/git/files/master/x86.config

== XFS failed to mount ==
[ 55.116279][ T1507] XFS (dm-0): Mounting V5 Filesystem
[ 55.144671][ T1507] XFS (dm-0): Corruption warning: Metadata has LSN (3:70242) ahead of current LSN (3:66504). Please unmount and run xfs_repair (>= v4.3) to resolve.
[ 55.159965][ T1507] XFS (dm-0): log mount/recovery failed: error -22
[ 55.288632][ T1507] XFS (dm-0): log mount failed

In this case, it is not possible to mount the XFS rootfs anymore, and it can be
repaired with "-L". However, we could lost vital files. Then, I have to re-
install the system.

systemd[1]: System cannot boot: Missing /etc/machine-id and /etc is mounted read-only.
systemd[1]: Booting up is supported only when:
systemd[1]: 1) /etc/machine-id exists and is populated.
systemd[1]: 2) /etc/machine-id exists and is empty.
systemd[1]: 3) /etc/machine-id is missing and /etc is writable.
lvm2-activation-generator: lvmconfig failed
systemd[1]: Failed to populate /etc with preset unit settings, ignoring: No such file or directory

== systemd core dump ==
[ 46.124485][ T1028] Process 1028(systemd-coredum) has RLIMIT_CORE set to 1
[ 46.131434][ T1028] Aborting core
[ 46.143366][ T1027] systemd-cgroups (1027) used greatest stack depth: 23512 bytes left
[ 46.384430][ T1] printk: systemd: 20 output lines suppressed due to ratelimiting
[ 46.447620][ T1] traps: systemd[1] trap invalid opcode ip:7f44c485fee6 sp:7ffee96e6960 error:0 in libm-2.28.so[7f44c481a000+181000]
[ 46.492643][ T1029] traps: systemd-coredum[1029] trap invalid opcode ip:7f2f60471ee6 sp:7ffd58f76e00 error:0 in libm-2.28.so[7f2f6042c000+181000]
[ 46.505968][ T1029] Process 1029(systemd-coredum) has RLIMIT_CORE set to 1
[ 46.512900][ T1029] Aborting core
[ 46.520024][ T1] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000084
[ 46.528437][ T1] CPU: 32 PID: 1 Comm: systemd Not tainted 5.10.0-rc6-next-20201207 #1
[ 46.536581][ T1] Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019
[ 46.545860][ T1] Call Trace:
[ 46.549038][ T1] dump_stack+0x99/0xcb
[ 46.553082][ T1] panic+0x20c/0x48b
[ 46.556860][ T1] ? print_oops_end_marker.cold.10+0x10/0x10
[ 46.562739][ T1] ? do_signal_stop+0x690/0x690
[ 46.567478][ T1] ? do_exit+0x226/0x2410
[ 46.571690][ T1] do_exit.cold.38+0x1de/0x1e5
[ 46.576346][ T1] ? rcu_read_lock_sched_held+0xa1/0xd0
[ 46.581782][ T1] ? rcu_read_lock_bh_held+0xb0/0xb0
[ 46.586955][ T1] ? mm_update_next_owner+0x750/0x750
[ 46.592215][ T1] ? get_signal+0x80f/0x1f90
[ 46.596688][ T1] do_group_exit+0xf0/0x2e0
[ 46.601076][ T1] get_signal+0x35a/0x1f90
[ 46.605380][ T1] ? finish_task_switch+0x1bb/0xa80
[ 46.610468][ T1] arch_do_signal_or_restart+0x1d8/0x690
[ 46.615993][ T1] ? __setup_rt_frame.isra.15+0x1830/0x1830
[ 46.621781][ T1] ? __sched_text_start+0x8/0x8
[ 46.626521][ T1] ? asm_exc_invalid_op+0xa/0x20
[ 46.631347][ T1] exit_to_user_mode_prepare+0xde/0x170
[ 46.636782][ T1] irqentry_exit_to_user_mode+0x5/0x30
[ 46.642129][ T1] asm_exc_invalid_op+0x12/0x20
[ 46.646868][ T1] RIP: 0033:0x7f44c485fee6
[ 46.651171][ T1] Code: 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 0a 00 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a <61> 62 63 64 65 66 67 68 6a 69 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
[ 46.670757][ T1] RSP: 002b:00007ffee96e6960 EFLAGS: 00010202
[ 46.676719][ T1] RAX: 00007f44c481c780 RBX: 00007f44c4825e78 RCX: 0000000000000000
[ 46.684600][ T1] RDX: 00007ffee96e6a90 RSI: 0000000000000000 RDI: 00007f44c481c780
[ 46.692480][ T1] RBP: 00007ffee96e6a90 R08: 00007f44c85d88a8 R09: 00007f44c85d88a8
[ 46.700360][ T1] R10: 00007f44ca38e4f0 R11: 00007f44c481a000 R12: 00007f44c481c780
[ 46.708241][ T1] R13: 00007f44c4826088 R14: 00007f44c4b9b128 R15: 00007f44ca38e4f0
[ 46.716523][ T1] Kernel Offset: 0x11000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 46.728244][ T1] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000084 ]---

== git coredump ==
# coredumpctl dump
PID: 1906 (git)
UID: 0 (root)
GID: 0 (root)
Signal: 11 (SEGV)
Timestamp: Mon 2020-12-07 10:10:36 EST (34s ago)
Boot ID: 5dd9e21b02e4487f96d2ffeed3140f22
Machine ID: 00f60cae470d4f54a377e935638619c5
Storage: /var/lib/systemd/coredump/core.git.0.5dd9e21b02e4487f96d2ffeed3140f22.1906.1607353836000000.lz4
Message: Process 1906 (git) of user 0 dumped core.

Stack trace of thread 1906:
#0 0x00007fff845af9dc _dl_relocate_object (/usr/lib64/ld-2.28.so)
#1 0x00007fff845a6664 dl_main (/usr/lib64/ld-2.28.so)
#2 0x00007fff845c0448 _dl_sysdep_start (/usr/lib64/ld-2.28.so)
#3 0x00007fff845a1cbc _dl_start_final (/usr/lib64/ld-2.28.so)
#4 0x00007fff845a2dbc _dl_start (/usr/lib64/ld-2.28.so)
#5 0x00007fff845a1458 _start (/usr/lib64/ld-2.28.so)

>
> A git tree is also available:
>
> git://git.infradead.org/users/hch/block.git bi_bdev
>
> Gitweb:
>
> http://git.infradead.org/users/hch/block.git/shortlog/refs/heads/bi_bdev
>
> Diffstat:
> arch/m68k/emu/nfblock.c | 2
> arch/xtensa/platforms/iss/simdisk.c | 2
> block/bio-integrity.c | 18 +-
> block/bio.c | 31 +---
> block/blk-cgroup.c | 7
> block/blk-core.c | 99 ++++++-------
> block/blk-crypto-fallback.c | 2
> block/blk-crypto.c | 2
> block/blk-merge.c | 17 +-
> block/blk-mq.c | 2
> block/blk-settings.c | 2
> block/blk-throttle.c | 2
> block/blk.h | 9 -
> block/bounce.c | 2
> block/genhd.c | 261 +++-------------------------------
> --
> block/partitions/core.c | 31 ----
> drivers/block/brd.c | 8 -
> drivers/block/drbd/drbd_int.h | 4
> drivers/block/drbd/drbd_req.c | 2
> drivers/block/null_blk_main.c | 2
> drivers/block/pktcdvd.c | 4
> drivers/block/ps3vram.c | 2
> drivers/block/rsxx/dev.c | 2
> drivers/block/umem.c | 2
> drivers/block/zram/zram_drv.c | 2
> drivers/lightnvm/pblk-init.c | 2
> drivers/md/bcache/debug.c | 2
> drivers/md/bcache/request.c | 39 +++--
> drivers/md/dm-bio-record.h | 9 -
> drivers/md/dm-raid1.c | 10 -
> drivers/md/dm.c | 14 -
> drivers/md/md-linear.c | 2
> drivers/md/md.c | 10 -
> drivers/md/md.h | 6
> drivers/md/raid1.c | 6
> drivers/md/raid10.c | 12 -
> drivers/md/raid5.c | 2
> drivers/nvdimm/blk.c | 4
> drivers/nvdimm/btt.c | 4
> drivers/nvdimm/pmem.c | 4
> drivers/nvme/host/core.c | 6
> drivers/nvme/host/lightnvm.c | 3
> drivers/nvme/host/multipath.c | 6
> drivers/nvme/host/rdma.c | 2
> drivers/s390/block/dasd.c | 26 ---
> drivers/s390/block/dcssblk.c | 6
> drivers/s390/block/xpram.c | 2
> fs/btrfs/check-integrity.c | 10 -
> fs/btrfs/raid56.c | 7
> fs/btrfs/scrub.c | 2
> fs/direct-io.c | 2
> fs/f2fs/data.c | 12 -
> include/linux/bio.h | 18 +-
> include/linux/blk_types.h | 3
> include/linux/blkdev.h | 20 --
> include/linux/genhd.h | 21 --
> kernel/trace/blktrace.c | 16 +-
> mm/page_io.c | 2
> 58 files changed, 251 insertions(+), 556 deletions(-)