2024-01-30 07:10:25

by Matthew Wilcox

[permalink] [raw]
Subject: [PATCH 3/3] ext4: Convert to buffered_write_operations

Pass the appropriate buffered_write_operations to filemap_perform_write().
Saves a lot of page<->folio conversions.

Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
---
fs/ext4/ext4.h | 8 ++++--
fs/ext4/file.c | 10 ++++++-
fs/ext4/inline.c | 15 ++++------
fs/ext4/inode.c | 73 ++++++++++++++++++++++++------------------------
4 files changed, 58 insertions(+), 48 deletions(-)

diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index a5d784872303..3491d5c279c7 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -3021,6 +3021,10 @@ extern void ext4_da_update_reserve_space(struct inode *inode,
extern int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk,
ext4_fsblk_t pblk, ext4_lblk_t len);

+extern const struct buffered_write_operations ext4_bw_ops;
+extern const struct buffered_write_operations ext4_journalled_bw_ops;
+extern const struct buffered_write_operations ext4_da_bw_ops;
+
/* indirect.c */
extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
struct ext4_map_blocks *map, int flags);
@@ -3549,13 +3553,13 @@ int ext4_readpage_inline(struct inode *inode, struct folio *folio);
extern int ext4_try_to_write_inline_data(struct address_space *mapping,
struct inode *inode,
loff_t pos, unsigned len,
- struct page **pagep);
+ struct folio **foliop);
int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,
unsigned copied, struct folio *folio);
extern int ext4_da_write_inline_data_begin(struct address_space *mapping,
struct inode *inode,
loff_t pos, unsigned len,
- struct page **pagep,
+ struct folio **foliop,
void **fsdata);
extern int ext4_try_add_inline_entry(handle_t *handle,
struct ext4_filename *fname,
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 6aa15dafc677..1bca5f47cb5f 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -287,16 +287,24 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
{
ssize_t ret;
struct inode *inode = file_inode(iocb->ki_filp);
+ const struct buffered_write_operations *ops;

if (iocb->ki_flags & IOCB_NOWAIT)
return -EOPNOTSUPP;

+ if (ext4_inode_journal_mode(inode))
+ ops = &ext4_journalled_bw_ops;
+ else if (test_opt(inode->i_sb, DELALLOC))
+ ops = &ext4_da_bw_ops;
+ else
+ ops = &ext4_bw_ops;
+
inode_lock(inode);
ret = ext4_write_checks(iocb, from);
if (ret <= 0)
goto out;

- ret = generic_perform_write(iocb, from);
+ ret = filemap_perform_write(iocb, from, ops);

out:
inode_unlock(inode);
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index d5bd1e3a5d36..0d3fc5c14ad5 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -658,9 +658,8 @@ static int ext4_convert_inline_data_to_extent(struct address_space *mapping,
* to the page make it update and let the later codes create extent for it.
*/
int ext4_try_to_write_inline_data(struct address_space *mapping,
- struct inode *inode,
- loff_t pos, unsigned len,
- struct page **pagep)
+ struct inode *inode, loff_t pos, unsigned len,
+ struct folio **foliop)
{
int ret;
handle_t *handle;
@@ -708,7 +707,7 @@ int ext4_try_to_write_inline_data(struct address_space *mapping,
goto out;
}

- *pagep = &folio->page;
+ *foliop = folio;
down_read(&EXT4_I(inode)->xattr_sem);
if (!ext4_has_inline_data(inode)) {
ret = 0;
@@ -889,10 +888,8 @@ static int ext4_da_convert_inline_data_to_extent(struct address_space *mapping,
* normal ext4_da_write_end).
*/
int ext4_da_write_inline_data_begin(struct address_space *mapping,
- struct inode *inode,
- loff_t pos, unsigned len,
- struct page **pagep,
- void **fsdata)
+ struct inode *inode, loff_t pos, unsigned len,
+ struct folio **foliop, void **fsdata)
{
int ret;
handle_t *handle;
@@ -954,7 +951,7 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping,
goto out_release_page;

up_read(&EXT4_I(inode)->xattr_sem);
- *pagep = &folio->page;
+ *foliop = folio;
brelse(iloc.bh);
return 1;
out_release_page:
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 5af1b0b8680e..4f532870c388 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1113,8 +1113,7 @@ static int ext4_block_write_begin(struct folio *folio, loff_t pos, unsigned len,
* ext4_write_begin() is the right place.
*/
static int ext4_write_begin(struct file *file, struct address_space *mapping,
- loff_t pos, unsigned len,
- struct page **pagep, void **fsdata)
+ loff_t pos, size_t len, struct folio **foliop, void **fsdata)
{
struct inode *inode = mapping->host;
int ret, needed_blocks;
@@ -1139,7 +1138,7 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping,

if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
ret = ext4_try_to_write_inline_data(mapping, inode, pos, len,
- pagep);
+ foliop);
if (ret < 0)
return ret;
if (ret == 1)
@@ -1239,7 +1238,7 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping,
folio_put(folio);
return ret;
}
- *pagep = &folio->page;
+ *foliop = folio;
return ret;
}

@@ -1264,12 +1263,10 @@ static int write_end_fn(handle_t *handle, struct inode *inode,
* ext4 never places buffers on inode->i_mapping->i_private_list. metadata
* buffers are managed internally.
*/
-static int ext4_write_end(struct file *file,
- struct address_space *mapping,
- loff_t pos, unsigned len, unsigned copied,
- struct page *page, void *fsdata)
+static int ext4_write_end(struct file *file, struct address_space *mapping,
+ loff_t pos, size_t len, size_t copied, struct folio *folio,
+ void **fsdata)
{
- struct folio *folio = page_folio(page);
handle_t *handle = ext4_journal_current_handle();
struct inode *inode = mapping->host;
loff_t old_size = inode->i_size;
@@ -1284,7 +1281,7 @@ static int ext4_write_end(struct file *file,
return ext4_write_inline_data_end(inode, pos, len, copied,
folio);

- copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
+ copied = block_write_end(file, mapping, pos, len, copied, &folio->page, *fsdata);
/*
* it's important to update i_size while still holding folio lock:
* page writeout could otherwise come in and zero beyond i_size.
@@ -1369,11 +1366,9 @@ static void ext4_journalled_zero_new_buffers(handle_t *handle,
}

static int ext4_journalled_write_end(struct file *file,
- struct address_space *mapping,
- loff_t pos, unsigned len, unsigned copied,
- struct page *page, void *fsdata)
+ struct address_space *mapping, loff_t pos, size_t len,
+ size_t copied, struct folio *folio, void **fsdata)
{
- struct folio *folio = page_folio(page);
handle_t *handle = ext4_journal_current_handle();
struct inode *inode = mapping->host;
loff_t old_size = inode->i_size;
@@ -2856,9 +2851,9 @@ static int ext4_nonda_switch(struct super_block *sb)
return 0;
}

-static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
- loff_t pos, unsigned len,
- struct page **pagep, void **fsdata)
+static int ext4_da_write_begin(struct file *file,
+ struct address_space *mapping, loff_t pos, size_t len,
+ struct folio **foliop, void **fsdata)
{
int ret, retries = 0;
struct folio *folio;
@@ -2873,14 +2868,14 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
if (ext4_nonda_switch(inode->i_sb) || ext4_verity_in_progress(inode)) {
*fsdata = (void *)FALL_BACK_TO_NONDELALLOC;
return ext4_write_begin(file, mapping, pos,
- len, pagep, fsdata);
+ len, foliop, fsdata);
}
*fsdata = (void *)0;
trace_ext4_da_write_begin(inode, pos, len);

if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
ret = ext4_da_write_inline_data_begin(mapping, inode, pos, len,
- pagep, fsdata);
+ foliop, fsdata);
if (ret < 0)
return ret;
if (ret == 1)
@@ -2918,7 +2913,7 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
return ret;
}

- *pagep = &folio->page;
+ *foliop = folio;
return ret;
}

@@ -2945,9 +2940,8 @@ static int ext4_da_should_update_i_disksize(struct folio *folio,
return 1;
}

-static int ext4_da_do_write_end(struct address_space *mapping,
- loff_t pos, unsigned len, unsigned copied,
- struct folio *folio)
+static int ext4_da_do_write_end(struct address_space *mapping, loff_t pos,
+ size_t len, size_t copied, struct folio *folio)
{
struct inode *inode = mapping->host;
loff_t old_size = inode->i_size;
@@ -3007,18 +3001,16 @@ static int ext4_da_do_write_end(struct address_space *mapping,
return copied;
}

-static int ext4_da_write_end(struct file *file,
- struct address_space *mapping,
- loff_t pos, unsigned len, unsigned copied,
- struct page *page, void *fsdata)
+static int ext4_da_write_end(struct file *file, struct address_space *mapping,
+ loff_t pos, size_t len, size_t copied, struct folio *folio,
+ void **fsdata)
{
struct inode *inode = mapping->host;
- int write_mode = (int)(unsigned long)fsdata;
- struct folio *folio = page_folio(page);
+ int write_mode = (int)(unsigned long)*fsdata;

if (write_mode == FALL_BACK_TO_NONDELALLOC)
return ext4_write_end(file, mapping, pos,
- len, copied, &folio->page, fsdata);
+ len, copied, folio, fsdata);

trace_ext4_da_write_end(inode, pos, len, copied);

@@ -3556,8 +3548,6 @@ static const struct address_space_operations ext4_aops = {
.read_folio = ext4_read_folio,
.readahead = ext4_readahead,
.writepages = ext4_writepages,
- .write_begin = ext4_write_begin,
- .write_end = ext4_write_end,
.dirty_folio = ext4_dirty_folio,
.bmap = ext4_bmap,
.invalidate_folio = ext4_invalidate_folio,
@@ -3573,8 +3563,6 @@ static const struct address_space_operations ext4_journalled_aops = {
.read_folio = ext4_read_folio,
.readahead = ext4_readahead,
.writepages = ext4_writepages,
- .write_begin = ext4_write_begin,
- .write_end = ext4_journalled_write_end,
.dirty_folio = ext4_journalled_dirty_folio,
.bmap = ext4_bmap,
.invalidate_folio = ext4_journalled_invalidate_folio,
@@ -3590,8 +3578,6 @@ static const struct address_space_operations ext4_da_aops = {
.read_folio = ext4_read_folio,
.readahead = ext4_readahead,
.writepages = ext4_writepages,
- .write_begin = ext4_da_write_begin,
- .write_end = ext4_da_write_end,
.dirty_folio = ext4_dirty_folio,
.bmap = ext4_bmap,
.invalidate_folio = ext4_invalidate_folio,
@@ -3611,6 +3597,21 @@ static const struct address_space_operations ext4_dax_aops = {
.swap_activate = ext4_iomap_swap_activate,
};

+const struct buffered_write_operations ext4_bw_ops = {
+ .write_begin = ext4_write_begin,
+ .write_end = ext4_write_end,
+};
+
+const struct buffered_write_operations ext4_journalled_bw_ops = {
+ .write_begin = ext4_write_begin,
+ .write_end = ext4_journalled_write_end,
+};
+
+const struct buffered_write_operations ext4_da_bw_ops = {
+ .write_begin = ext4_da_write_begin,
+ .write_end = ext4_da_write_end,
+};
+
void ext4_set_aops(struct inode *inode)
{
switch (ext4_inode_journal_mode(inode)) {
--
2.43.0



2024-01-30 07:32:16

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH 3/3] ext4: Convert to buffered_write_operations

On Tue, Jan 30, 2024 at 05:54:13AM +0000, Matthew Wilcox (Oracle) wrote:
> +++ b/fs/ext4/file.c
> @@ -287,16 +287,24 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
> {
> ssize_t ret;
> struct inode *inode = file_inode(iocb->ki_filp);
> + const struct buffered_write_operations *ops;
>
> if (iocb->ki_flags & IOCB_NOWAIT)
> return -EOPNOTSUPP;
>
> + if (ext4_inode_journal_mode(inode))

I forgot to commit --amend. This line should have been:

+ if (ext4_should_journal_data(inode))

> + ops = &ext4_journalled_bw_ops;
> + else if (test_opt(inode->i_sb, DELALLOC))
> + ops = &ext4_da_bw_ops;
> + else
> + ops = &ext4_bw_ops;
> +
> inode_lock(inode);
> ret = ext4_write_checks(iocb, from);
> if (ret <= 0)
> goto out;
>
> - ret = generic_perform_write(iocb, from);
> + ret = filemap_perform_write(iocb, from, ops);
>
> out:
> inode_unlock(inode);

2024-01-30 08:13:40

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH 3/3] ext4: Convert to buffered_write_operations

Given that an ext4 conversion to iomap is pending on the list I wonder
if this is the best example. But the conversion itself looks sensible
to me with the fixup.

2024-02-01 15:13:23

by Oliver Sang

[permalink] [raw]
Subject: Re: [PATCH 3/3] ext4: Convert to buffered_write_operations



Hello,

kernel test robot noticed "kernel_BUG_at_fs/ext4/inode.c" on:

commit: 06094684ce207c4f2ce3f0d0f541361158579818 ("[PATCH 3/3] ext4: Convert to buffered_write_operations")
url: https://github.com/intel-lab-lkp/linux/commits/Matthew-Wilcox-Oracle/fs-Introduce-buffered_write_operations/20240130-135555
base: https://github.com/kleikamp/linux-shaggy jfs-next
patch link: https://lore.kernel.org/all/[email protected]/
patch subject: [PATCH 3/3] ext4: Convert to buffered_write_operations

in testcase: fxmark
version: fxmark-x86_64-0ce9491-1_20220601
with following parameters:

disk: 1SSD
media: ssd
test: DWAL
fstype: ext4_no_jnl
directio: bufferedio
cpufreq_governor: performance



compiler: gcc-12
test machine: 128 threads 2 sockets Intel(R) Xeon(R) Platinum 8358 CPU @ 2.60GHz (Ice Lake) with 128G memory

(please refer to attached dmesg/kmsg for entire log/backtrace)



If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-lkp/[email protected]


[ 68.790992][ T6736] ------------[ cut here ]------------
[ 68.790993][ T6738] ------------[ cut here ]------------
[ 68.790995][ T6738] kernel BUG at fs/ext4/inode.c:1385!
[ 68.790998][ T6824] ------------[ cut here ]------------
[ 68.791001][ T6680] ------------[ cut here ]------------
[ 68.791001][ T6738] invalid opcode: 0000 [#1] SMP NOPTI
[ 68.791003][ T6680] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791004][ T6738] CPU: 31 PID: 6738 Comm: fxmark Tainted: G S 6.8.0-rc2-00004-g06094684ce20 #1
[ 68.791006][ T6738] Hardware name: Intel Corporation M50CYP2SB1U/M50CYP2SB1U, BIOS SE5C620.86B.01.01.0003.2104260124 04/26/2021
[ 68.791007][ T6738] RIP: 0010:ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791014][ T6738] Code: 48 8b 05 c1 5e bf 01 48 85 c0 74 11 48 8b 78 08 48 8b 54 24 10 48 89 de e8 d3 36 02 00 48 81 fd ff 0f 00 00 0f 87 25 fe ff ff <0f> 0b 66 83 bb f2 02 00 00 00 0f 84 27 fe ff ff 4c 8b 44 24 18 48
All code
========
0: 48 8b 05 c1 5e bf 01 mov 0x1bf5ec1(%rip),%rax # 0x1bf5ec8
7: 48 85 c0 test %rax,%rax
a: 74 11 je 0x1d
c: 48 8b 78 08 mov 0x8(%rax),%rdi
10: 48 8b 54 24 10 mov 0x10(%rsp),%rdx
15: 48 89 de mov %rbx,%rsi
18: e8 d3 36 02 00 callq 0x236f0
1d: 48 81 fd ff 0f 00 00 cmp $0xfff,%rbp
24: 0f 87 25 fe ff ff ja 0xfffffffffffffe4f
2a:* 0f 0b ud2 <-- trapping instruction
2c: 66 83 bb f2 02 00 00 cmpw $0x0,0x2f2(%rbx)
33: 00
34: 0f 84 27 fe ff ff je 0xfffffffffffffe61
3a: 4c 8b 44 24 18 mov 0x18(%rsp),%r8
3f: 48 rex.W

Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 66 83 bb f2 02 00 00 cmpw $0x0,0x2f2(%rbx)
9: 00
a: 0f 84 27 fe ff ff je 0xfffffffffffffe37
10: 4c 8b 44 24 18 mov 0x18(%rsp),%r8
15: 48 rex.W
[ 68.791016][ T6738] RSP: 0018:ffa000000d65fd28 EFLAGS: 00010293
[ 68.791019][ T6738] RAX: 0000000000000000 RBX: ff1100011001d870 RCX: 0000000000001000
[ 68.791020][ T6738] RDX: 0000000000000000 RSI: ff1100011001d9e8 RDI: ff110001088edf00
[ 68.791021][ T6738] RBP: 0000000000000001 R08: 0000000000001000 R09: ffd4000006a4ac00
[ 68.791022][ T6738] R10: ff110001097e0548 R11: ffd4000006a4ac00 R12: 0000000000001000
[ 68.791023][ T6738] R13: 0000000000001000 R14: ffffffff8245b350 R15: ffa000000d65fe68
[ 68.791023][ T6738] FS: 00007f540d431600(0000) GS:ff1100103f9c0000(0000) knlGS:0000000000000000
[ 68.791025][ T6738] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 68.791026][ T6738] CR2: 000055b84bf3f000 CR3: 00000001e7bd0002 CR4: 0000000000771ef0
[ 68.791027][ T6738] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 68.791027][ T6738] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 68.791028][ T6738] PKRU: 55555554
[ 68.791029][ T6738] Call Trace:
[ 68.791029][ T6853] ------------[ cut here ]------------
[ 68.791031][ T6738] <TASK>
[ 68.791031][ T6853] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791033][ T6738] ? die (arch/x86/kernel/dumpstack.c:421 arch/x86/kernel/dumpstack.c:434 arch/x86/kernel/dumpstack.c:447)
[ 68.791038][ T6738] ? do_trap (arch/x86/kernel/traps.c:113 arch/x86/kernel/traps.c:154)
[ 68.791040][ T6820] ------------[ cut here ]------------
[ 68.791040][ T6738] ? ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791041][ T6820] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791043][ T6738] ? do_error_trap (arch/x86/include/asm/traps.h:58 arch/x86/kernel/traps.c:175)
[ 68.791044][ T6823] ------------[ cut here ]------------
[ 68.791045][ T6674] ------------[ cut here ]------------
[ 68.791045][ T6738] ? ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791047][ T6755] ------------[ cut here ]------------
[ 68.791047][ T6823] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791048][ T6674] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791049][ T6755] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791048][ T6738] ? exc_invalid_op (arch/x86/kernel/traps.c:266)
[ 68.791053][ T6738] ? ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791054][ T6793] ------------[ cut here ]------------
[ 68.791056][ T6763] ------------[ cut here ]------------
[ 68.791056][ T6793] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791057][ T6763] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791059][ T6669] ------------[ cut here ]------------
[ 68.791055][ T6738] ? asm_exc_invalid_op (arch/x86/include/asm/idtentry.h:568)
[ 68.791061][ T6669] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791062][ T6738] ? ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791063][ T6774] ------------[ cut here ]------------
[ 68.791064][ T6774] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791065][ T6738] filemap_perform_write (mm/filemap.c:3951)
[ 68.791068][ T6765] ------------[ cut here ]------------
[ 68.791070][ T6765] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791072][ T6777] ------------[ cut here ]------------
[ 68.791072][ T6809] ------------[ cut here ]------------
[ 68.791073][ T6777] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791070][ T6738] ? generic_update_time (fs/inode.c:1907)
[ 68.791073][ T6809] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791074][ T6828] ------------[ cut here ]------------
[ 68.791076][ T6841] ------------[ cut here ]------------
[ 68.791076][ T6671] ------------[ cut here ]------------
[ 68.791077][ T6828] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791077][ T6841] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791078][ T6786] ------------[ cut here ]------------
[ 68.791078][ T6738] ext4_buffered_write_iter (include/linux/fs.h:807 fs/ext4/file.c:310)
[ 68.791081][ T6786] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791081][ T6671] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791082][ T6738] vfs_write (include/linux/fs.h:2085 fs/read_write.c:497 fs/read_write.c:590)
[ 68.791086][ T6738] ksys_write (fs/read_write.c:643)
[ 68.791087][ T6807] ------------[ cut here ]------------
[ 68.791088][ T6807] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791089][ T6738] do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
[ 68.791093][ T6737] ------------[ cut here ]------------
[ 68.791094][ T6804] ------------[ cut here ]------------
[ 68.791094][ T6737] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791094][ T6705] ------------[ cut here ]------------
[ 68.791094][ T6738] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:129)
[ 68.791098][ T6738] RIP: 0033:0x7f540d33a473
[ 68.791100][ T6804] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791100][ T6738] Code: 8b 15 21 2a 0e 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b7 0f 1f 00 64 8b 04 25 18 00 00 00 85 c0 75 14 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 55 c3 0f 1f 40 00 48 83 ec 28 48 89 54 24 18
All code
========
0: 8b 15 21 2a 0e 00 mov 0xe2a21(%rip),%edx # 0xe2a27
6: f7 d8 neg %eax
8: 64 89 02 mov %eax,%fs:(%rdx)
b: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax
12: eb b7 jmp 0xffffffffffffffcb
14: 0f 1f 00 nopl (%rax)
17: 64 8b 04 25 18 00 00 mov %fs:0x18,%eax
1e: 00
1f: 85 c0 test %eax,%eax
21: 75 14 jne 0x37
23: b8 01 00 00 00 mov $0x1,%eax
28: 0f 05 syscall
2a:* 48 3d 00 f0 ff ff cmp $0xfffffffffffff000,%rax <-- trapping instruction
30: 77 55 ja 0x87
32: c3 retq
33: 0f 1f 40 00 nopl 0x0(%rax)
37: 48 83 ec 28 sub $0x28,%rsp
3b: 48 89 54 24 18 mov %rdx,0x18(%rsp)

Code starting with the faulting instruction
===========================================
0: 48 3d 00 f0 ff ff cmp $0xfffffffffffff000,%rax
6: 77 55 ja 0x5d
8: c3 retq
9: 0f 1f 40 00 nopl 0x0(%rax)
d: 48 83 ec 28 sub $0x28,%rsp
11: 48 89 54 24 18 mov %rdx,0x18(%rsp)
[ 68.791103][ T6738] RSP: 002b:00007ffe5f9adbb8 EFLAGS: 00000246
[ 68.791103][ T6684] ------------[ cut here ]------------
[ 68.791105][ T6738] ORIG_RAX: 0000000000000001
[ 68.791105][ T6684] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791106][ T6738] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f540d33a473
[ 68.791106][ T6705] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791107][ T6738] RDX: 0000000000001000 RSI: 000055b84bf3f000 RDI: 0000000000000003
[ 68.791109][ T6738] RBP: 00007f540d424000 R08: 000055b84bf3f000 R09: 00007f540d41dbe0
[ 68.791109][ T6700] ------------[ cut here ]------------
[ 68.791110][ T6738] R10: fffffffffffffa2e R11: 0000000000000246 R12: 000055b84bf3f000
[ 68.791110][ T6700] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791111][ T6738] R13: 0000000000000003 R14: 00007f540d42dfc0 R15: 0000000000000000
[ 68.791113][ T6738] </TASK>
[ 68.791114][ T6738] Modules linked in: loop btrfs blake2b_generic xor
[ 68.791117][ T6718] ------------[ cut here ]------------
[ 68.791118][ T6673] ------------[ cut here ]------------
[ 68.791118][ T6688] ------------[ cut here ]------------
[ 68.791118][ T6738] raid6_pq
[ 68.791120][ T6718] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791121][ T6673] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791122][ T6688] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791122][ T6738] libcrc32c sd_mod t10_pi
[ 68.791126][ T6715] ------------[ cut here ]------------
[ 68.791126][ T6850] ------------[ cut here ]------------
[ 68.791126][ T6738] crc64_rocksoft_generic
[ 68.791127][ T6715] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791129][ T6738] crc64_rocksoft
[ 68.791129][ T6850] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791131][ T6822] ------------[ cut here ]------------
[ 68.791131][ T6738] crc64
[ 68.791133][ T6799] ------------[ cut here ]------------
[ 68.791134][ T6738] sg
[ 68.791134][ T6822] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791136][ T6799] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791137][ T6738] intel_rapl_msr
[ 68.791138][ T6805] ------------[ cut here ]------------
[ 68.791140][ T6738] intel_rapl_common
[ 68.791140][ T6805] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791142][ T6738] x86_pkg_temp_thermal
[ 68.791143][ T6761] ------------[ cut here ]------------
[ 68.791144][ T6738] intel_powerclamp
[ 68.791145][ T6761] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791147][ T6738] coretemp
[ 68.791147][ T6692] ------------[ cut here ]------------
[ 68.791149][ T6738] kvm_intel kvm
[ 68.791150][ T6692] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791151][ T6710] ------------[ cut here ]------------
[ 68.791152][ T6722] ------------[ cut here ]------------
[ 68.791151][ T6738] irqbypass
[ 68.791154][ T6710] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791155][ T6738] crct10dif_pclmul
[ 68.791155][ T6722] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791158][ T6738] crc32_pclmul crc32c_intel
[ 68.791160][ T6780] ------------[ cut here ]------------
[ 68.791161][ T6716] ------------[ cut here ]------------
[ 68.791161][ T6738] ghash_clmulni_intel
[ 68.791162][ T6685] ------------[ cut here ]------------
[ 68.791163][ T6767] ------------[ cut here ]------------
[ 68.791163][ T6780] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791164][ T6732] ------------[ cut here ]------------
[ 68.791165][ T6738] ipmi_ssif
[ 68.791165][ T6857] ------------[ cut here ]------------
[ 68.791165][ T6672] ------------[ cut here ]------------
[ 68.791165][ T6716] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791166][ T6811] ------------[ cut here ]------------
[ 68.791166][ T6689] ------------[ cut here ]------------
[ 68.791165][ T6795] ------------[ cut here ]------------
[ 68.791167][ T6816] ------------[ cut here ]------------
[ 68.791165][ T6677] ------------[ cut here ]------------
[ 68.791168][ T6667] ------------[ cut here ]------------
[ 68.791169][ T6732] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791170][ T6746] ------------[ cut here ]------------
[ 68.791170][ T6757] ------------[ cut here ]------------
[ 68.791171][ T6845] ------------[ cut here ]------------
[ 68.791170][ T6848] ------------[ cut here ]------------
[ 68.791172][ T6749] ------------[ cut here ]------------
[ 68.791173][ T6670] ------------[ cut here ]------------
[ 68.791172][ T6816] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791173][ T6790] ------------[ cut here ]------------
[ 68.791174][ T6751] ------------[ cut here ]------------
[ 68.791172][ T6753] ------------[ cut here ]------------
[ 68.791172][ T6758] ------------[ cut here ]------------
[ 68.791174][ T6682] ------------[ cut here ]------------
[ 68.791174][ T6760] ------------[ cut here ]------------
[ 68.791175][ T6746] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791171][ T6725] ------------[ cut here ]------------
[ 68.791172][ T6839] ------------[ cut here ]------------
[ 68.791173][ T6696] ------------[ cut here ]------------
[ 68.791174][ T6723] ------------[ cut here ]------------
[ 68.791172][ T6668] ------------[ cut here ]------------
[ 68.791174][ T6833] ------------[ cut here ]------------
[ 68.791177][ T6689] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791178][ T6848] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791179][ T6723] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791182][ T6685] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791181][ T6725] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791182][ T6672] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791183][ T6790] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791184][ T6749] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791186][ T6758] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791186][ T6767] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791187][ T6795] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791189][ T6682] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791187][ T6757] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791190][ T6670] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791191][ T6839] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791190][ T6668] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791194][ T6751] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791195][ T6811] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791196][ T6760] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791196][ T6753] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791197][ T6857] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791200][ T6833] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791200][ T6667] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791201][ T6677] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791203][ T6696] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791204][ T6738] sha512_ssse3
[ 68.791205][ T6845] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791206][ T6738] rapl
[ 68.791210][ T6703] ------------[ cut here ]------------
[ 68.791214][ T6738] ahci
[ 68.791214][ T6703] kernel BUG at fs/ext4/inode.c:1385!
[ 68.791219][ T6738] ast intel_cstate acpi_ipmi mei_me libahci drm_shmem_helper ioatdma intel_uncore i2c_i801 ipmi_si dax_hmem libata drm_kms_helper mei joydev i2c_smbus intel_pch_thermal dca wmi ipmi_devintf ipmi_msghandler acpi_pad acpi_power_meter drm fuse ip_tables
[ 68.791234][ T6680] invalid opcode: 0000 [#2] SMP NOPTI
[ 68.791237][ T6680] CPU: 9 PID: 6680 Comm: fxmark Tainted: G S D 6.8.0-rc2-00004-g06094684ce20 #1
[ 68.791239][ T6680] Hardware name: Intel Corporation M50CYP2SB1U/M50CYP2SB1U, BIOS SE5C620.86B.01.01.0003.2104260124 04/26/2021
[ 68.791242][ T6738] ---[ end trace 0000000000000000 ]---
[ 68.791240][ T6680] RIP: 0010:ext4_journalled_write_end (fs/ext4/inode.c:1385)
[ 68.791244][ T6680] Code: 48 8b 05 c1 5e bf 01 48 85 c0 74 11 48 8b 78 08 48 8b 54 24 10 48 89 de e8 d3 36 02 00 48 81 fd ff 0f 00 00 0f 87 25 fe ff ff <0f> 0b 66 83 bb f2 02 00 00 00 0f 84 27 fe ff ff 4c 8b 44 24 18 48
All code
========
0: 48 8b 05 c1 5e bf 01 mov 0x1bf5ec1(%rip),%rax # 0x1bf5ec8
7: 48 85 c0 test %rax,%rax
a: 74 11 je 0x1d
c: 48 8b 78 08 mov 0x8(%rax),%rdi
10: 48 8b 54 24 10 mov 0x10(%rsp),%rdx
15: 48 89 de mov %rbx,%rsi
18: e8 d3 36 02 00 callq 0x236f0
1d: 48 81 fd ff 0f 00 00 cmp $0xfff,%rbp
24: 0f 87 25 fe ff ff ja 0xfffffffffffffe4f
2a:* 0f 0b ud2 <-- trapping instruction
2c: 66 83 bb f2 02 00 00 cmpw $0x0,0x2f2(%rbx)
33: 00
34: 0f 84 27 fe ff ff je 0xfffffffffffffe61
3a: 4c 8b 44 24 18 mov 0x18(%rsp),%r8
3f: 48 rex.W

Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 66 83 bb f2 02 00 00 cmpw $0x0,0x2f2(%rbx)
9: 00
a: 0f 84 27 fe ff ff je 0xfffffffffffffe37
10: 4c 8b 44 24 18 mov 0x18(%rsp),%r8
15: 48 rex.W


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20240201/[email protected]



--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki