[GIT PULL] ext4 updates for 6.5

From: Theodore Ts'o
Date: Tue Jun 27 2023 - 11:36:39 EST


The following changes since commit f451fd97dd2b78f286379203a47d9d295c467255:

ext4: drop the call to ext4_error() from ext4_get_group_info() (2023-06-14 22:24:05 -0400)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git tags/ext4_for_linus

for you to fetch changes up to 2ef6c32a914b85217b44a0a2418e830e520b085e:

ext4: avoid updating the superblock on a r/o mount if not needed (2023-06-26 19:36:45 -0400)


Note: there are some minor merge conflicts; see below for the merge
fixup I used before doing my final regression tests.


----------------------------------------------------------------
Various cleanups and bug fixes in ext4's extent status tree,
journalling, and block allocator subsystems. Also improve performance
for parallel DIO overwrites.

----------------------------------------------------------------
Baokun Li (14):
ext4: only update i_reserved_data_blocks on successful block allocation
ext4: add a new helper to check if es must be kept
ext4: factor out __es_alloc_extent() and __es_free_extent()
ext4: use pre-allocated es in __es_insert_extent()
ext4: use pre-allocated es in __es_remove_extent()
ext4: using nofail preallocation in ext4_es_remove_extent()
ext4: using nofail preallocation in ext4_es_insert_delayed_block()
ext4: using nofail preallocation in ext4_es_insert_extent()
ext4: make ext4_es_remove_extent() return void
ext4: make ext4_es_insert_delayed_block() return void
ext4: make ext4_es_insert_extent() return void
ext4: make ext4_zeroout_es() return void
ext4: turn quotas off if mount failed after enabling quotas
ext4: refactoring to use the unified helper ext4_quotas_off()

Brian Foster (1):
ext4: allow concurrent unaligned dio overwrites

Chao Yu (1):
ext4: fix to check return value of freeze_bdev() in ext4_shutdown()

Kemeng Shi (11):
ext4: fix wrong unit use in ext4_mb_normalize_request
ext4: fix unit mismatch in ext4_mb_new_blocks_simple
ext4: fix wrong unit use in ext4_mb_find_by_goal
ext4: treat stripe in block unit
ext4: add EXT4_MB_HINT_GOAL_ONLY test in ext4_mb_use_preallocated
ext4: remove ext4_block_group and ext4_block_group_offset declaration
ext4: try all groups in ext4_mb_new_blocks_simple
ext4: get block from bh in ext4_free_blocks for fast commit replay
ext4: remove unused parameter from ext4_mb_new_blocks_simple()
ext4: fix wrong unit use in ext4_mb_clear_bb
ext4: fix wrong unit use in ext4_mb_new_blocks

Matthew Wilcox (1):
ext4: Call fsverity_verify_folio()

Ojaswin Mujoo (9):
ext4: Convert mballoc cr (criteria) to enum
ext4: Add per CR extent scanned counter
ext4: Add counter to track successful allocation of goal length
ext4: Avoid scanning smaller extents in BG during CR1
ext4: Don't skip prefetching BLOCK_UNINIT groups
ext4: Ensure ext4_mb_prefetch_fini() is called for all prefetched BGs
ext4: Abstract out logic to search average fragment list
ext4: Add allocation criteria 1.5 (CR1_5)
ext4: Give symbolic names to mballoc criterias

Ritesh Harjani (6):
ext4: kill unused function ext4_journalled_write_inline_data
ext4: Change remaining tracepoints to use folio
ext4: Make mpage_journal_page_buffers use folio
ext4: Make ext4_write_inline_data_end() use folio
ext4: mballoc: Remove useless setting of ac_criteria
ext4: Remove unused extern variables declaration

Theodore Ts'o (2):
ext4: clean up mballoc criteria comments
ext4: avoid updating the superblock on a r/o mount if not needed

Zhang Yi (8):
jbd2: remove unused feature macros
jbd2: switch to check format version in superblock directly
jbd2: factor out journal initialization from journal_get_superblock()
jbd2: remove j_format_version
jbd2: continue to record log between each mount
ext4: add journal cycled recording support
ext4: update doc about journal superblock description
jbd2: skip reading super block if it has been verified

Zhihao Cheng (2):
ext4: Fix reusing stale buffer heads from last failed mounting
ext4: ext4_put_super: Remove redundant checking for 'sbi->s_journal_bdev'

Documentation/filesystems/ext4/journal.rst | 7 +-
fs/ext4/ext4.h | 89 +++--
fs/ext4/extents.c | 49 +--
fs/ext4/extents_status.c | 207 +++++++-----
fs/ext4/extents_status.h | 14 +-
fs/ext4/file.c | 86 ++---
fs/ext4/indirect.c | 8 +
fs/ext4/inline.c | 39 +--
fs/ext4/inode.c | 114 +++----
fs/ext4/ioctl.c | 5 +-
fs/ext4/mballoc.c | 644 ++++++++++++++++++++++++------------
fs/ext4/mballoc.h | 16 +-
fs/ext4/readpage.c | 2 +-
fs/ext4/super.c | 86 +++--
fs/ext4/sysfs.c | 2 +
fs/jbd2/journal.c | 78 ++---
fs/jbd2/recovery.c | 22 +-
include/linux/jbd2.h | 42 +--
include/trace/events/ext4.h | 44 ++-
19 files changed, 939 insertions(+), 615 deletions(-)


commit 4b50c2604f922d0cdd4940d338506ecf817cba14
Merge: 1ef6663a587b 2ef6c32a914b
Author: Theodore Ts'o <tytso@xxxxxxx>
Date: Tue Jun 27 00:23:58 2023 -0400

Merge branch 'dev' into test

diff --cc fs/ext4/ioctl.c
index 961284cc9b65,55be1b8a6360..331859511f80
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@@ -793,10 -793,18 +793,11 @@@ static int ext4_ioctl_setproject(struc
}
#endif

-static int ext4_shutdown(struct super_block *sb, unsigned long arg)
+int ext4_force_shutdown(struct super_block *sb, u32 flags)
{
struct ext4_sb_info *sbi = EXT4_SB(sb);
- __u32 flags;
+ int ret;

- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
-
- if (get_user(flags, (__u32 __user *)arg))
- return -EFAULT;
-
if (flags > EXT4_GOING_FLAGS_NOLOGFLUSH)
return -EINVAL;

diff --cc fs/ext4/super.c
index eaa5858d5285,c638b0db3b2b..c94ebf704616
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@@ -1133,7 -1128,13 +1133,13 @@@ static void ext4_blkdev_remove(struct e
struct block_device *bdev;
bdev = sbi->s_journal_bdev;
if (bdev) {
+ /*
+ * Invalidate the journal device's buffers. We don't want them
+ * floating about in memory - the physical journal device may
+ * hotswapped, and it breaks the `ro-after' testing code.
+ */
+ invalidate_bdev(bdev);
- ext4_blkdev_put(bdev);
+ blkdev_put(bdev, sbi->s_sb);
sbi->s_journal_bdev = NULL;
}
}