Skip to content

Conversation

@blktests-ci
Copy link

@blktests-ci blktests-ci bot commented Jul 10, 2025

Pull request for series with
subject: add static PMD zero page support
version: 2
url: https://patchwork.kernel.org/project/linux-block/list/?series=979706

@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 10, 2025

Upstream branch: 8c2e52e
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 10, 2025

Upstream branch: bc9ff19
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 44c7b00 to 2505b82 Compare July 10, 2025 17:11
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from 9a69d4f to e311dd9 Compare July 11, 2025 01:13
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 11, 2025

Upstream branch: bc9ff19
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 2505b82 to 1b65682 Compare July 11, 2025 01:20
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from e311dd9 to b6b569e Compare July 11, 2025 07:05
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 11, 2025

Upstream branch: bc9ff19
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 1b65682 to 544160c Compare July 11, 2025 07:12
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from b6b569e to ef2c9cd Compare July 11, 2025 17:45
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 11, 2025

Upstream branch: 40f92e7
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 544160c to a1a6bb1 Compare July 11, 2025 17:53
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from ef2c9cd to 198825c Compare July 11, 2025 23:25
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 11, 2025

Upstream branch: 40f92e7
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from a1a6bb1 to 1d4249f Compare July 11, 2025 23:34
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from 198825c to 341e7ed Compare July 14, 2025 02:27
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from 341e7ed to 81f31a4 Compare July 23, 2025 02:05
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 23, 2025

Upstream branch: 89be9a8
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 1d4249f to b473a25 Compare July 23, 2025 02:14
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from 81f31a4 to 87bbbbc Compare July 24, 2025 05:40
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 24, 2025

Upstream branch: 25fae0b
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from b473a25 to 087021c Compare July 24, 2025 08:33
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch 2 times, most recently from 6637119 to f092a9b Compare July 31, 2025 04:25
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 31, 2025

Upstream branch: 260f6f4
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from 087021c to 46df619 Compare July 31, 2025 04:36
Use largest_zero_folio() in __blkdev_issue_zero_pages().

On systems with CONFIG_STATIC_PMD_ZERO_PAGE enabled, we will end up
sending larger bvecs instead of multiple small ones.

Noticed a 4% increase in performance on a commercial NVMe SSD which does
not support OP_WRITE_ZEROES. The device's MDTS was 128K. The performance
gains might be bigger if the device supports bigger MDTS.

Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 31, 2025

Upstream branch: cbbf0a7
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

@blktests-ci blktests-ci bot force-pushed the series/979706=>linus-master branch from ffd4f6f to e98863d Compare July 31, 2025 21:05
@blktests-ci blktests-ci bot force-pushed the linus-master_base branch from 3851b3f to 28b3384 Compare July 31, 2025 23:42
@blktests-ci
Copy link
Author

blktests-ci bot commented Jul 31, 2025

Upstream branch: 6a68cec
series: https://patchwork.kernel.org/project/linux-block/list/?series=979706
version: 2

Pull request is NOT updated. Failed to apply https://patchwork.kernel.org/project/linux-block/list/?series=979706
error message:

Cmd('git') failed due to: exit code(128)
  cmdline: git am --3way
  stdout: 'Applying: mm: move huge_zero_page declaration from huge_mm.h to mm.h
Using index info to reconstruct a base tree...
M	include/linux/huge_mm.h
M	include/linux/mm.h
Falling back to patching base and 3-way merge...
Auto-merging include/linux/mm.h
Auto-merging include/linux/huge_mm.h
CONFLICT (content): Merge conflict in include/linux/huge_mm.h
Patch failed at 0001 mm: move huge_zero_page declaration from huge_mm.h to mm.h'
  stderr: 'error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"'

conflict:

diff --cc include/linux/huge_mm.h
index 7748489fde1b,3e887374892c..000000000000
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@@ -472,29 -473,11 +472,32 @@@ static inline bool folio_test_pmd_mappa
  	return folio_order(folio) >= HPAGE_PMD_ORDER;
  }
  
 -struct page *follow_devmap_pmd(struct vm_area_struct *vma, unsigned long addr,
 -		pmd_t *pmd, int flags, struct dev_pagemap **pgmap);
 -
  vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf);
  
++<<<<<<< HEAD
 +extern struct folio *huge_zero_folio;
 +extern unsigned long huge_zero_pfn;
 +
 +static inline bool is_huge_zero_folio(const struct folio *folio)
 +{
 +	return READ_ONCE(huge_zero_folio) == folio;
 +}
 +
 +static inline bool is_huge_zero_pfn(unsigned long pfn)
 +{
 +	return READ_ONCE(huge_zero_pfn) == (pfn & ~(HPAGE_PMD_NR - 1));
 +}
 +
 +static inline bool is_huge_zero_pmd(pmd_t pmd)
 +{
 +	return pmd_present(pmd) && is_huge_zero_pfn(pmd_pfn(pmd));
 +}
 +
 +struct folio *mm_get_huge_zero_folio(struct mm_struct *mm);
 +void mm_put_huge_zero_folio(struct mm_struct *mm);
 +
++=======
++>>>>>>> mm: move huge_zero_page declaration from huge_mm.h to mm.h
  static inline bool thp_migration_supported(void)
  {
  	return IS_ENABLED(CONFIG_ARCH_ENABLE_THP_MIGRATION);
@@@ -632,26 -615,6 +635,29 @@@ static inline vm_fault_t do_huge_pmd_nu
  	return 0;
  }
  
++<<<<<<< HEAD
 +static inline bool is_huge_zero_folio(const struct folio *folio)
 +{
 +	return false;
 +}
 +
 +static inline bool is_huge_zero_pfn(unsigned long pfn)
 +{
 +	return false;
 +}
 +
 +static inline bool is_huge_zero_pmd(pmd_t pmd)
 +{
 +	return false;
 +}
 +
 +static inline void mm_put_huge_zero_folio(struct mm_struct *mm)
 +{
 +	return;
 +}
 +
++=======
++>>>>>>> mm: move huge_zero_page declaration from huge_mm.h to mm.h
  static inline struct page *follow_devmap_pmd(struct vm_area_struct *vma,
  	unsigned long addr, pmd_t *pmd, int flags, struct dev_pagemap **pgmap)
  {

@blktests-ci blktests-ci bot force-pushed the linus-master_base branch 17 times, most recently from feb07b1 to de83e48 Compare August 8, 2025 00:30
@blktests-ci
Copy link
Author

blktests-ci bot commented Aug 8, 2025

At least one diff in series https://patchwork.kernel.org/project/linux-block/list/?series=979706 irrelevant now for [{'archived': False, 'project': 241}] search patterns

@blktests-ci blktests-ci bot closed this Aug 8, 2025
@blktests-ci blktests-ci bot deleted the series/979706=>linus-master branch August 20, 2025 12:14
blktests-ci bot pushed a commit that referenced this pull request Nov 5, 2025
When simulating an nvme device on qemu with both logical_block_size and
physical_block_size set to 8 KiB, an error trace appears during
partition table reading at boot time. The issue is caused by
inode->i_blkbits being larger than PAGE_SHIFT, which leads to a left
shift of -1 and triggering a UBSAN warning.

[    2.697306] ------------[ cut here ]------------
[    2.697309] UBSAN: shift-out-of-bounds in fs/crypto/inline_crypt.c:336:37
[    2.697311] shift exponent -1 is negative
[    2.697315] CPU: 3 UID: 0 PID: 274 Comm: (udev-worker) Not tainted 6.18.0-rc2+ #34 PREEMPT(voluntary)
[    2.697317] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
[    2.697320] Call Trace:
[    2.697324]  <TASK>
[    2.697325]  dump_stack_lvl+0x76/0xa0
[    2.697340]  dump_stack+0x10/0x20
[    2.697342]  __ubsan_handle_shift_out_of_bounds+0x1e3/0x390
[    2.697351]  bh_get_inode_and_lblk_num.cold+0x12/0x94
[    2.697359]  fscrypt_set_bio_crypt_ctx_bh+0x44/0x90
[    2.697365]  submit_bh_wbc+0xb6/0x190
[    2.697370]  block_read_full_folio+0x194/0x270
[    2.697371]  ? __pfx_blkdev_get_block+0x10/0x10
[    2.697375]  ? __pfx_blkdev_read_folio+0x10/0x10
[    2.697377]  blkdev_read_folio+0x18/0x30
[    2.697379]  filemap_read_folio+0x40/0xe0
[    2.697382]  filemap_get_pages+0x5ef/0x7a0
[    2.697385]  ? mmap_region+0x63/0xd0
[    2.697389]  filemap_read+0x11d/0x520
[    2.697392]  blkdev_read_iter+0x7c/0x180
[    2.697393]  vfs_read+0x261/0x390
[    2.697397]  ksys_read+0x71/0xf0
[    2.697398]  __x64_sys_read+0x19/0x30
[    2.697399]  x64_sys_call+0x1e88/0x26a0
[    2.697405]  do_syscall_64+0x80/0x670
[    2.697410]  ? __x64_sys_newfstat+0x15/0x20
[    2.697414]  ? x64_sys_call+0x204a/0x26a0
[    2.697415]  ? do_syscall_64+0xb8/0x670
[    2.697417]  ? irqentry_exit_to_user_mode+0x2e/0x2a0
[    2.697420]  ? irqentry_exit+0x43/0x50
[    2.697421]  ? exc_page_fault+0x90/0x1b0
[    2.697422]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[    2.697425] RIP: 0033:0x75054cba4a06
[    2.697426] Code: 5d e8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 75 19 83 e2 39 83 fa 08 75 11 e8 26 ff ff ff 66 0f 1f 44 00 00 48 8b 45 10 0f 05 <48> 8b 5d f8 c9 c3 0f 1f 40 00 f3 0f 1e fa 55 48 89 e5 48 83 ec 08
[    2.697427] RSP: 002b:00007fff973723a0 EFLAGS: 00000202 ORIG_RAX: 0000000000000000
[    2.697430] RAX: ffffffffffffffda RBX: 00005ea9a2c02760 RCX: 000075054cba4a06
[    2.697432] RDX: 0000000000002000 RSI: 000075054c190000 RDI: 000000000000001b
[    2.697433] RBP: 00007fff973723c0 R08: 0000000000000000 R09: 0000000000000000
[    2.697434] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000000
[    2.697434] R13: 00005ea9a2c027c0 R14: 00005ea9a2be5608 R15: 00005ea9a2be55f0
[    2.697436]  </TASK>
[    2.697436] ---[ end trace ]---

This situation can happen for block devices because when
CONFIG_TRANSPARENT_HUGEPAGE is enabled, the maximum logical_block_size
is 64 KiB. set_init_blocksize() then sets the block device
inode->i_blkbits to 13, which is within this limit.

File I/O does not trigger this problem because for filesystems that do
not support the FS_LBS feature, sb_set_blocksize() prevents
sb->s_blocksize_bits from being larger than PAGE_SHIFT. During inode
allocation, alloc_inode()->inode_init_always() assigns inode->i_blkbits
from sb->s_blocksize_bits. Currently, only xfs_fs_type has the FS_LBS
flag, and since xfs I/O paths do not reach submit_bh_wbc(), it does not
hit the left-shift underflow issue.

Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
Fixes: 47dd675 ("block/bdev: lift block size restrictions to 64k")
Cc: stable@vger.kernel.org
[EB: use folio_pos() and consolidate the two shifts by i_blkbits]
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
blktests-ci bot pushed a commit that referenced this pull request Nov 7, 2025
When simulating an nvme device on qemu with both logical_block_size and
physical_block_size set to 8 KiB, an error trace appears during
partition table reading at boot time. The issue is caused by
inode->i_blkbits being larger than PAGE_SHIFT, which leads to a left
shift of -1 and triggering a UBSAN warning.

[    2.697306] ------------[ cut here ]------------
[    2.697309] UBSAN: shift-out-of-bounds in fs/crypto/inline_crypt.c:336:37
[    2.697311] shift exponent -1 is negative
[    2.697315] CPU: 3 UID: 0 PID: 274 Comm: (udev-worker) Not tainted 6.18.0-rc2+ #34 PREEMPT(voluntary)
[    2.697317] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
[    2.697320] Call Trace:
[    2.697324]  <TASK>
[    2.697325]  dump_stack_lvl+0x76/0xa0
[    2.697340]  dump_stack+0x10/0x20
[    2.697342]  __ubsan_handle_shift_out_of_bounds+0x1e3/0x390
[    2.697351]  bh_get_inode_and_lblk_num.cold+0x12/0x94
[    2.697359]  fscrypt_set_bio_crypt_ctx_bh+0x44/0x90
[    2.697365]  submit_bh_wbc+0xb6/0x190
[    2.697370]  block_read_full_folio+0x194/0x270
[    2.697371]  ? __pfx_blkdev_get_block+0x10/0x10
[    2.697375]  ? __pfx_blkdev_read_folio+0x10/0x10
[    2.697377]  blkdev_read_folio+0x18/0x30
[    2.697379]  filemap_read_folio+0x40/0xe0
[    2.697382]  filemap_get_pages+0x5ef/0x7a0
[    2.697385]  ? mmap_region+0x63/0xd0
[    2.697389]  filemap_read+0x11d/0x520
[    2.697392]  blkdev_read_iter+0x7c/0x180
[    2.697393]  vfs_read+0x261/0x390
[    2.697397]  ksys_read+0x71/0xf0
[    2.697398]  __x64_sys_read+0x19/0x30
[    2.697399]  x64_sys_call+0x1e88/0x26a0
[    2.697405]  do_syscall_64+0x80/0x670
[    2.697410]  ? __x64_sys_newfstat+0x15/0x20
[    2.697414]  ? x64_sys_call+0x204a/0x26a0
[    2.697415]  ? do_syscall_64+0xb8/0x670
[    2.697417]  ? irqentry_exit_to_user_mode+0x2e/0x2a0
[    2.697420]  ? irqentry_exit+0x43/0x50
[    2.697421]  ? exc_page_fault+0x90/0x1b0
[    2.697422]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[    2.697425] RIP: 0033:0x75054cba4a06
[    2.697426] Code: 5d e8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 75 19 83 e2 39 83 fa 08 75 11 e8 26 ff ff ff 66 0f 1f 44 00 00 48 8b 45 10 0f 05 <48> 8b 5d f8 c9 c3 0f 1f 40 00 f3 0f 1e fa 55 48 89 e5 48 83 ec 08
[    2.697427] RSP: 002b:00007fff973723a0 EFLAGS: 00000202 ORIG_RAX: 0000000000000000
[    2.697430] RAX: ffffffffffffffda RBX: 00005ea9a2c02760 RCX: 000075054cba4a06
[    2.697432] RDX: 0000000000002000 RSI: 000075054c190000 RDI: 000000000000001b
[    2.697433] RBP: 00007fff973723c0 R08: 0000000000000000 R09: 0000000000000000
[    2.697434] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000000
[    2.697434] R13: 00005ea9a2c027c0 R14: 00005ea9a2be5608 R15: 00005ea9a2be55f0
[    2.697436]  </TASK>
[    2.697436] ---[ end trace ]---

This situation can happen for block devices because when
CONFIG_TRANSPARENT_HUGEPAGE is enabled, the maximum logical_block_size
is 64 KiB. set_init_blocksize() then sets the block device
inode->i_blkbits to 13, which is within this limit.

File I/O does not trigger this problem because for filesystems that do
not support the FS_LBS feature, sb_set_blocksize() prevents
sb->s_blocksize_bits from being larger than PAGE_SHIFT. During inode
allocation, alloc_inode()->inode_init_always() assigns inode->i_blkbits
from sb->s_blocksize_bits. Currently, only xfs_fs_type has the FS_LBS
flag, and since xfs I/O paths do not reach submit_bh_wbc(), it does not
hit the left-shift underflow issue.

Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
Fixes: 47dd675 ("block/bdev: lift block size restrictions to 64k")
Cc: stable@vger.kernel.org
[EB: use folio_pos() and consolidate the two shifts by i_blkbits]
Link: https://lore.kernel.org/r/20251105003642.42796-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants