diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c index a4b7e4bc32d4..523b23303cab 100644 --- a/fs/ext4/inline.c +++ b/fs/ext4/inline.c @@ -232,6 +232,10 @@ static void ext4_write_inline_data(struct inode *inode, struct ext4_iloc *iloc, return; BUG_ON(!EXT4_I(inode)->i_inline_off); + if (pos + len > EXT4_I(inode)->i_inline_size) + ext4_warning(inode->i_sb, "inode #%lu: pos %llu, len %u, " + "i_inline_size %u", inode->i_ino, + pos, len, EXT4_I(inode)->i_inline_size); BUG_ON(pos + len > EXT4_I(inode)->i_inline_size); raw_inode = ext4_raw_inode(iloc); @@ -687,6 +691,10 @@ int ext4_try_to_write_inline_data(struct address_space *mapping, } ret = ext4_prepare_inline_data(handle, inode, pos + len); + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu len %u " + "prepare_inline_data returns %d", + inode->i_ino, pos, len, ret); if (ret && ret != -ENOSPC) goto out; @@ -913,6 +921,10 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping, } ret = ext4_prepare_inline_data(handle, inode, pos + len); + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu len %u " + "prepare_inline_data returns %d", + inode->i_ino, pos, len, ret); if (ret && ret != -ENOSPC) goto out_journal; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 43be684dabcb..f150b205d73e 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1117,6 +1117,17 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping, if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) return -EIO; + if (ext4_has_inline_data(inode) || + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu, len %u, " + "has_inline_data %d, " + "may_inline_data %d i_inline_size %u", + inode->i_ino, pos, len, + ext4_has_inline_data(inode), + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA), + EXT4_I(inode)->i_inline_size); + } trace_ext4_write_begin(inode, pos, len); /* * Reserve one block more for addition to orphan list in case @@ -1269,6 +1280,17 @@ static int ext4_write_end(struct file *file, trace_ext4_write_end(inode, pos, len, copied); + if (ext4_has_inline_data(inode) || + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu, len %u, " + "has_inline_data %d, " + "may_inline_data %d i_inline_size %u", + inode->i_ino, pos, len, + ext4_has_inline_data(inode), + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA), + EXT4_I(inode)->i_inline_size); + } if (ext4_has_inline_data(inode) && ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) return ext4_write_inline_data_end(inode, pos, len, copied, @@ -1379,6 +1401,17 @@ static int ext4_journalled_write_end(struct file *file, BUG_ON(!ext4_handle_valid(handle)); + if (ext4_has_inline_data(inode) || + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu, len %u, " + "has_inline_data %d, " + "may_inline_data %d i_inline_size %u", + inode->i_ino, pos, len, + ext4_has_inline_data(inode), + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA), + EXT4_I(inode)->i_inline_size); + } if (ext4_has_inline_data(inode)) return ext4_write_inline_data_end(inode, pos, len, copied, folio); @@ -2860,6 +2893,17 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping, if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) return -EIO; + if (ext4_has_inline_data(inode) || + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) { + ext4_warning(inode->i_sb, + "inode #%lu: pos %llu, len %u, " + "has_inline_data %d, " + "may_inline_data %d i_inline_size %u", + inode->i_ino, pos, len, + ext4_has_inline_data(inode), + ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA), + EXT4_I(inode)->i_inline_size); + } index = pos >> PAGE_SHIFT; if (ext4_nonda_switch(inode->i_sb) || ext4_verity_in_progress(inode)) {