Re: [PATCH v4 19/21] uio: replace deprecated mmap hook with mmap_prepare in uio_info
Shinichiro Kawasaki <[email protected]> Mon, 13 Apr 2026 05:14:08 +0000
| Newsgroups | org.kernel.vger.target-devel,dev.linux.lists.linux-staging,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mtd,org.kernel.vger.linux-doc,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-hyperv,org.kernel.vger.linux-kernel,org.kernel.vger.linux-scsi,org.kvack.linux-mm |
|---|---|
| Message-ID | <adx2ws5z0NMIe5Yj@shinmob> |
On Mar 20, 2026 / 22:39, Lorenzo Stoakes (Oracle) wrote: > The f_op->mmap interface is deprecated, so update uio_info to use its > successor, mmap_prepare. > > Therefore, replace the uio_info->mmap hook with a new > uio_info->mmap_prepare hook, and update its one user, target_core_user, > to both specify this new mmap_prepare hook and also to use the new > vm_ops->mapped() hook to continue to maintain a correct udev->kref > refcount. > > Then update uio_mmap() to utilise the mmap_prepare compatibility layer to > invoke this callback from the uio mmap invocation. > > Signed-off-by: Lorenzo Stoakes (Oracle) <[email protected]> Hello Lorenzo, since two weeks ago, I observe a failure during my kernel test set targeting Linux for-next branch. On failure, kernel reported a WARN at __vma_check_mmap_hook [1]. I bisected and found that this patch is the trigger. Here I share my observations of the failure. Actions or advices for fix will be appreciated. The failure happens when TCMU device is set up with targetcli. When tcmu-runner is running, the command lines below should successfully create a backstore for a TCMU device, but it fails. $ sudo targetcli targetcli shell version 3.0.1 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help'. /> cd /backstores/user:zbc /backstores/user:zbc> create name=test size=1M cfgstring=@/tmp/tmp.img UserBackedStorageObject creation failed. On failure, tcmu-runner reports mmap failures: 2026-04-13 12:23:49.271 1103 [CRIT] main:1302: Starting... 2026-04-13 12:23:49.461 1103 [INFO] load_our_module:575: Inserted module 'target_core_user' 2026-04-13 12:23:49.480 1103 [INFO] tcmur_register_handler:92: Handler fbo is registered 2026-04-13 12:23:49.486 1103 [INFO] tcmur_register_handler:92: Handler zbc is registered 2026-04-13 12:23:51.202 1103 [INFO] tcmur_register_handler:92: Handler rbd is registered 2026-04-13 12:27:24.522 1103 [ERROR] device_open_shm:523: could not mmap /dev/uio0 2026-04-13 12:27:24.550 1103 [ERROR] device_open_shm:523: could not mmap /dev/uio0 The failure was found with user:zbc handler. I confirmed that the failure is recreated with fbo handler also. Then, this failure looks common for all TCMU users. At the failrue, kernel reported the WARN at __vma_check_mmap_hook [1]. The line 1287 in mm/util.c reported the WARN: 1284 int __vma_check_mmap_hook(struct vm_area_struct *vma) 1285 { 1286 /* vm_ops->mapped is not valid if mmap() is specified. */ 1287 if (vma->vm_ops && WARN_ON_ONCE(vma->vm_ops->mapped)) 1288 return -EINVAL; 1289 1290 return 0; 1291 } 1292 EXPORT_SYMBOL(__vma_check_mmap_hook); When I reverted the commit from the kernel tag next-20260409, the failrue disappeared. If other information is required for fix, please let me know. Thanks in advance. [1] dmesg WARNING: mm/util.c:1287 at __vma_check_mmap_hook+0x61/0x90, CPU#0: tcmu-runner/1332 Modules linked in: target_core_pscsi target_core_file target_core_iblock xfs target_core_user target_core_mod rfkill nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat ip6table_nat ip6table_mangle ip6table_raw ip6table_security iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_mangle iptable_raw iptable_security nf_tables ip6table_filter ip6_tables iptable_filter ip_tables qrtr irdma intel_rapl_msr intel_rapl_common ice intel_uncore_frequency intel_uncore_frequency_common skx_edac skx_edac_common libie_fwlog nfit sunrpc gnss idpf libnvdimm x86_pkg_temp_thermal libeth_xdp intel_powerclamp libeth ib_core spi_nor mtd coretemp kvm_intel kvm i40e iTCO_wdt irqbypass intel_pmc_bxt rapl ses vfat intel_cstate libie fat intel_uncore libie_adminq enclosure i2c_i801 spi_intel_pci i2c_smbus spi_intel lpc_ich wmi joydev mei_me ioatdma acpi_power_meter acpi_pad mei intel_pch_thermal dca fuse loop dm_multipath nfnetlink zram lz4hc_compress lz4_compress zstd_compress ast drm_client_lib i2c_algo_bit drm_shmem_helper drm_kms_helper nvme drm mpi3mr nvme_core scsi_transport_sas nvme_keyring nvme_auth scsi_dh_rdac scsi_dh_emc scsi_dh_alua pkcs8_key_parser i2c_dev [last unloaded: null_blk] CPU: 0 UID: 0 PID: 1332 Comm: tcmu-runner Not tainted 7.0.0-rc6-next-20260401-kts #1 PREEMPT(lazy) Hardware name: Supermicro Super Server/X11SPi-TF, BIOS 3.5 05/18/2021 RIP: 0010:__vma_check_mmap_hook+0x61/0x90 Code: 00 00 00 00 fc ff df 48 8d 78 10 48 89 f9 48 c1 e9 03 80 3c 11 00 75 2a 48 83 78 10 00 75 0b 31 c0 48 83 c4 08 c3 cc cc cc cc <0f> 0b b8 ea ff ff ff eb ee 48 89 04 24 e8 6d 4c 1f 00 48 8b 04 24 RSP: 0018:ffff8881391f7488 EFLAGS: 00010282 RAX: ffffffffc2abca40 RBX: 0000000000000000 RCX: 1ffffffff855794a RDX: dffffc0000000000 RSI: 0000000000000000 RDI: ffffffffc2abca50 RBP: ffff8881391f76a0 R08: ffffffffa10016e9 R09: ffffed102723ee44 R10: ffffed102723ee45 R11: 0000000000000000 R12: ffff8881391f78e0 R13: ffff8881391f78f0 R14: ffff88810d1ec780 R15: ffff8881391f7a78 FS: 00007f154f1a9840(0000) GS:ffff888e9b440000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f5efd40fe88 CR3: 000000010cfbf005 CR4: 00000000007726f0 PKRU: 55555554 Call Trace: <TASK> __mmap_new_vma+0x116e/0x18d0 ? __pfx___mmap_new_vma+0x10/0x10 ? vma_merge_new_range+0x495/0xa00 ? __pfx_vma_merge_new_range+0x10/0x10 ? lock_acquire+0x126/0x140 __mmap_region+0x651/0xa00 ? __pfx_process_measurement+0x10/0x10 ? __pfx___mmap_region+0x10/0x10 ? __lock_acquire+0x55d/0xbd0 ? __lock_acquire+0x55d/0xbd0 ? lock_is_held_type+0x9a/0x110 ? mas_find+0xc9/0x690 ? arch_get_unmapped_area_topdown+0x2a7/0x890 mmap_region+0x3c2/0x4c0 ? __pfx_mmap_region+0x10/0x10 ? security_mmap_addr+0x54/0xd0 ? __get_unmapped_area+0x18c/0x300 ? __pfx_uio_mmap+0x10/0x10 do_mmap+0xa26/0x10f0 ? lock_acquire+0x126/0x140 ? __pfx_do_mmap+0x10/0x10 ? __pfx_down_write_killable+0x10/0x10 ? __lock_acquire+0x55d/0xbd0 vm_mmap_pgoff+0x218/0x3a0 ? __pfx_vm_mmap_pgoff+0x10/0x10 ? __fget_files+0x1b4/0x2f0 ksys_mmap_pgoff+0x229/0x570 ? clockevents_program_event+0x144/0x370 do_syscall_64+0xf4/0x1560 ? do_syscall_64+0x1d7/0x1560 ? __lock_release.isra.0+0x59/0x170 ? do_syscall_64+0x34/0x1560 ? lockdep_hardirqs_on_prepare.part.0+0x9b/0x140 ? do_syscall_64+0x34/0x1560 ? trace_hardirqs_on+0x19/0x1a0 ? do_syscall_64+0xab/0x1560 ? clear_bhb_loop+0x30/0x80 entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7f154f5728dc Code: 1e fa 41 f7 c1 ff 0f 00 00 75 33 55 48 89 e5 41 54 41 89 cc 53 48 89 fb 48 85 ff 74 41 45 89 e2 48 89 df b8 09 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7c 5b 41 5c 5d c3 0f 1f 80 00 00 00 00 48 8b RSP: 002b:00007ffeb6ac04f0 EFLAGS: 00000246 ORIG_RAX: 0000000000000009 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f154f5728dc RDX: 0000000000000003 RSI: 0000000040800000 RDI: 0000000000000000 RBP: 00007ffeb6ac0500 R08: 000000000000000c R09: 0000000000000000 R10: 0000000000000001 R11: 0000000000000246 R12: 0000000000000001 R13: 000000001ddac980 R14: 00007f154fa629c0 R15: 00007f154fa62940 </TASK> irq event stamp: 62665 hardirqs last enabled at (62679): [<ffffffff9e1cd23e>] __up_console_sem+0x5e/0x70 hardirqs last disabled at (62698): [<ffffffff9e1cd223>] __up_console_sem+0x43/0x70 softirqs last enabled at (62692): [<ffffffff9dfc5d01>] handle_softirqs+0x5c1/0x8b0 softirqs last disabled at (62721): [<ffffffff9dfc6152>] __irq_exit_rcu+0x152/0x280 ---[ end trace 0000000000000000 ]--- scsi host74: TCM_Loopback