E2fsprogs 1.46.0 (January 29, 2021)
===================================

Updates/Fixes since v1.45.7:

UI and Features
---------------

E2fsprogs now supports the fast_commit (COMPAT_FAST_COMMIT) feature.
This feature, first available in Linux version 5.10, adds a fine-grained
journalling which improves the latency of the fsync(2) system call.  It
should also improve the performance of ext4 file systems exported via
NFS.

E2fsprogs now supports the stable_inodes (COMPAT_STABLE_INODES) feature.
This needed to support fscrypt siphash algorithm, which calculates the
initial vector (IV) for encryption based on the UUID and the inode
number.  This means that we can't renumber inodes (for example, when
shrinking a file system) and the UUID can't be changed without breaking
the ability to decrypt the encryption.

E2fsprogs now supports file systems which have both file system
encryption and the casefold feature enabled.  This is used in some
Android handsets, but has not yet landed upstream yet.

E2fsck now will check file names on file systems with case folding
enabled to make sure the characters are valid UTF-8 characters.  This is
done for file systems which enforce strict encodings, and optionally if
the extended "check_encoding" option is requested.

The fuse2fs program now supports the "-o norecovery" option, which will
suppress any journal replay that might be necessary, and mounts the file
system read-only.

E2fsck will now find and fix file system corruptions when the encrypted
files have a different policy from their containing directory.

The "htree" command in debugfs now displays the metadata checksums for
hash tree index blocks.

Dumpe2fs will print the error code that Linux kernels newer than v5.6
will save to indicate the class of error which triggered the ext4_error
event.

E2fsprogs programs (in particular, fuse2fs) can now update htree
directories without clearing the htree index.

Mke2fs now sets the s_overhead_cluster field, so that the kernel doesn't
need to calculate it at mount time.  This speeds up mounting very large
file systems.


Fixes
-----

E2fsck will properly handle checking for duplicated file names when case
folding is enabled.

Fix various bugs where a maliciously corrupted file systems could case
e2fsck and other e2fsprogs programs to crash.

Tune2fs will properly recalculate directory block checksums when
clearing the dir_index feature.

Fix a bug in e2fsck directory rehashing which could fail with ENOSPC
because it doesn't take into account the space needed for the metadata
checksum, and doesn't create a sufficiently deep index tree.

Clarify the e2fsck messages when it resets the directory link count when
it is set to the overflow value but it is no longer needed.

The filefrag program can now request the kernel to display the extent
status cache by using "filefrag -E".  (This requires Linux version 5.4
or newer.)


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

Speed up mke2fs when creating large bigalloc file systems by optimizing
ext2fs_convert_subcluster_bitmap().

Bitmap blocks are now read using multiple threads (for systems with
pthread support).  This speeds up dumpe2fs, e2fsck, and debugfs for very
large file systems.

The dumpe2fs and tune2fs will now avoiding to read the block group
descriptors when they are not needed, which speeds up these program when
operating on very large file systems.

Drop use of the sysctl(2) system call, which is deprecated in Linux.

Add support for "configure --enable-developer-features" which enables
features only meant for developer.  The first such feature is "e2fsck -E
clear_all_uninit_bits", which clears the uninitialized bit on all
extents for all inodes.  Note that this can end up exposing uninitialized
data to userspace, and should only used in very specialized situations.

The e2fsck/revoke.c and e2fsck/recovery.c files are now kept idential
with the fs/jbd2 versions of these files in the kernel.

Fix various compiler and Coverity warnings.

Update to use gettext 0.19.8.  This also removes the built-in "intl"
directory as this is now considered deprecated by gettext.  This means
that if the system doesn't have gettext installed on the build system,
we will simply disable NLS support.

