warning on flushing page cache on block device removal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I am running a basic test of block device driver unbind, bind while the fio is running random write IOs with direct=0.
The test hits the WARN_ON assert on:

void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to)
{
        int bsize = i_blocksize(inode);
        loff_t rounded_from;
        struct folio *folio;

        WARN_ON(to > inode->i_size);

This is because when the block device is removed during driver unbind, the driver flow is,

del_gendisk()
    __blk_mark_disk_dead()
            set_capacity((disk, 0);
                bdev_set_nr_sectors()
                    i_size_write() -> This will set the inode's isize to 0, while the page cache is yet to be flushed.

Below is the kernel call trace.

Can someone help to identify, where should be the fix?
Should block layer to not set the capacity to 0?
Or page catch to overcome this dynamic changing of the size?
Or?

WARNING: CPU: 58 PID: 9712 at mm/truncate.c:819 pagecache_isize_extended+0x186/0x2b0
Modules linked in: virtio_blk xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT nf_reject_ipv4 xt_set ip_set xt_tcpudp xt_addrtype nft_compat xfrm_user xfrm_algo nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables nfnetlink nfsv3 rpcsec_gss_krb5 nfsv4 nfs netfs nvme_fabrics nvme_core cuse overlay bridge stp llc binfmt_misc intel_rapl_msr intel_rapl_common intel_uncore_frequency intel_uncore_frequency_common skx_edac skx_edac_common nfit x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel ipmi_ssif kvm dell_pc dell_smbios platform_profile dcdbas rapl intel_cstate dell_wmi_descriptor wmi_bmof mei_me mei intel_pch_thermal ipmi_si acpi_power_meter acpi_ipmi nfsd sch_fq_codel auth_rpcgss nfs_acl ipmi_devintf ipmi_msghandler lockd grace dm_multipath msr scsi_dh_rdac scsi_dh_emc scsi_dh_alua parport_pc sunrpc ppdev lp parport efi_pstore ip_tables x_tables autofs4 raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor xor async_tx raid6_pq raid1 raid0 linear mlx5_core mgag200
 i2c_algo_bit drm_client_lib drm_shmem_helper drm_kms_helper mlxfw ghash_clmulni_intel psample sha512_ssse3 drm sha256_ssse3 i2c_i801 tls sha1_ssse3 ahci i2c_mux megaraid_sas tg3 pci_hyperv_intf i2c_smbus lpc_ich libahci wmi aesni_intel crypto_simd cryptd
CPU: 58 UID: 0 PID: 9712 Comm: fio Not tainted 6.15.0-rc7-vblk+ #21 PREEMPT(voluntary) 
Hardware name: Dell Inc. PowerEdge R740/0DY2X0, BIOS 2.11.2 004/21/2021
RIP: 0010:pagecache_isize_extended+0x186/0x2b0
Code: 04 00 00 00 e8 2b bc 1f 00 f0 41 ff 4c 24 34 75 08 4c 89 e7 e8 ab bd ff ff 48 83 c4 08 5b 41 5c 41 5d 41 5e 5d c3 cc cc cc cc <0f> 0b e9 04 ff ff ff 48 b8 00 00 00 00 00 fc ff df 49 8d 7c 24 20
RSP: 0018:ffff88819a16f428 EFLAGS: 00010287
RAX: dffffc0000000000 RBX: ffff88908380c738 RCX: 000000000000000c
RDX: 1ffff112107018f1 RSI: 000000002e47f000 RDI: ffff88908380c788
RBP: ffff88819a16f450 R08: 0000000000000001 R09: fffff94008933c86
R10: 000000002e47f000 R11: 0000000000000000 R12: 0000000000001000
R13: 0000000033956000 R14: 000000002e47f000 R15: ffff88819a16f690
FS:  00007f1be37fe640(0000) GS:ffff889069680000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f1c05205018 CR3: 000000115d00d001 CR4: 00000000007726f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
PKRU: 55555554
Call Trace:
 <TASK>
 iomap_file_buffered_write+0x763/0xa90
 ? aa_file_perm+0x37e/0xd40
 ? __pfx_iomap_file_buffered_write+0x10/0x10
 ? __kasan_check_read+0x15/0x20
 ? __pfx_down_read+0x10/0x10
 ? __kasan_check_read+0x15/0x20
 ? inode_needs_update_time.part.0+0x15c/0x1e0
 blkdev_write_iter+0x628/0xc90
 aio_write+0x2f9/0x6e0
 ? io_submit_one+0xc98/0x1c20
 ? __pfx_aio_write+0x10/0x10
 ? kasan_save_stack+0x40/0x60
 ? kasan_save_stack+0x2c/0x60
 ? kasan_save_track+0x18/0x40
 ? kasan_save_free_info+0x3f/0x60
 ? kasan_save_track+0x18/0x40
 ? kasan_save_alloc_info+0x3c/0x50
 ? __kasan_slab_alloc+0x91/0xa0
 ? fget+0x17c/0x250
 io_submit_one+0xb9c/0x1c20
 ? io_submit_one+0xb9c/0x1c20
 ? __pfx_aio_write+0x10/0x10
 ? __pfx_io_submit_one+0x10/0x10
 ? __kasan_check_write+0x18/0x20
 ? _raw_spin_lock_irqsave+0x96/0xf0
 ? __kasan_check_write+0x18/0x20
 __x64_sys_io_submit+0x14e/0x390
 ? __pfx___x64_sys_io_submit+0x10/0x10
 ? aio_read_events+0x489/0x800
 ? read_events+0xc1/0x2f0
 x64_sys_call+0x20ad/0x2150
 do_syscall_64+0x6f/0x120
 ? __pfx_read_events+0x10/0x10
 ? __x64_sys_io_submit+0x1c6/0x390
 ? __x64_sys_io_submit+0x1c6/0x390
 ? __pfx___x64_sys_io_submit+0x10/0x10
 ? __x64_sys_io_getevents+0x14c/0x2a0
 ? __kasan_check_read+0x15/0x20
 ? do_io_getevents+0xfa/0x220
 ? __x64_sys_io_getevents+0x14c/0x2a0
 ? __pfx___x64_sys_io_getevents+0x10/0x10
 ? fpregs_assert_state_consistent+0x25/0xb0
 ? __kasan_check_read+0x15/0x20
 ? fpregs_assert_state_consistent+0x25/0xb0
 ? syscall_exit_to_user_mode+0x5e/0x1d0
 ? do_syscall_64+0x7b/0x120
 ? __x64_sys_io_getevents+0x14c/0x2a0
 ? __pfx___x64_sys_io_getevents+0x10/0x10
 ? __kasan_check_read+0x15/0x20
 ? fpregs_assert_state_consistent+0x25/0xb0
 ? syscall_exit_to_user_mode+0x5e/0x1d0
 ? do_syscall_64+0x7b/0x120
 ? syscall_exit_to_user_mode+0x5e/0x1d0
 ? do_syscall_64+0x7b/0x120
 ? syscall_exit_to_user_mode+0x5e/0x1d0
 ? clear_bhb_loop+0x40/0x90
 ? clear_bhb_loop+0x40/0x90
 ? clear_bhb_loop+0x40/0x90
 ? clear_bhb_loop+0x40/0x90
 ? clear_bhb_loop+0x40/0x90
 entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f1c0431e88d
Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 73 b5 0f 00 f7 d8 64 89 01 48
RSP: 002b:00007f1be37f9628 EFLAGS: 00000246 ORIG_RAX: 00000000000000d1
RAX: ffffffffffffffda RBX: 00007f1be37fc7a8 RCX: 00007f1c0431e88d
RDX: 00007f1bd40032e8 RSI: 0000000000000001 RDI: 00007f1bfa545000
RBP: 00007f1bfa545000 R08: 00007f1af0512010 R09: 0000000000000718
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
R13: 0000000000000000 R14: 00007f1bd40032e8 R15: 00007f1bd4000b70
 </TASK>
---[ end trace 0000000000000000 ]---

fio: attempt to access beyond end of device
vda: rw=2049, sector=0, nr_sectors = 8 limit=0
Buffer I/O error on dev vda, logical block 0, lost async page write







[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux