E2fsprogs 1.47.3 (July 8, 2025)
===============================

Updates/Fixes since v1.47.2:

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

Mke2fs -d can now copy the fs-verity metadata and chattr flags into
newly created file system.

Add fuse2fs's support for the XATTR_CREATE and XATTR_REPLACE flags in
setxattr.

Add support for FALLOC_FL_ZERO_RANGE in fuse2fs.

Add support to fuse2fs for the setting file attributes via fsxattr,
including support for nanosecond timestamps.

Add support to fuse2fs to set newer chattr flags.

Add a lockfile command-line option to fuse2fs which is useful for
scripts that need to know when fuse2fs is done modifying the file system
after it is unmounted.

Add mke2fs.conf configuration settings to control whether the RAID
stripe or stride sizes from the storage device information depending on
whether the storage device is a rotational or non-rotational device.  By
default, don't set the RAID stripe size for non-rotational devices.

E2scrub no longer runs fstrim by default, since util-linux ships with a
fstrim.timer systemd file which will run fstrim on all mounted file
systems.  This can be re-enabled in /etc/e2scrub.conf if for some reason
it is desireable to run the fstrim out of e2scrub.


Fixes
-----

Fix "e2fsck -E unshare_blocks" to clear the shared_blocks flag when
there are no shared blocks to clear.

Fix "e2fsck -n" to not abort when it trips across an EA inode which
is not referenced by any inodes in the file system.

Fix debugfs's dump and rdump commands to avoid looping forever when
it runs across an I/O error or corupt filesystem metadata.

Fix debugfs's dirsearch command on big-endian systems.

Fix many fuse2fs bugs found by running fstests, including fixing
support for O_APPEND, O_TRUNC, POSIX ACLs, and the immutable flag.  Also
fix fuse2fs to correctly remove ea_inodes if the last reference to an
ea_inode is removed when an inode is removed, and to update timestamps
correctly after the mkdir(2) and symlink(2) operations.

Fix fuse2fs's error code handling for fallocate(), truncate() and
removexattr().

Fix an integer overflow bug which resulted in fuse2fs failing to delete
very large files.  (Addresses Debian Bug: #1106241)

Fix a (hard to reproduce) extent tree corruption bug which could be
triggered by resize2fs or fuse2fs if the extent tree was especially
complex

Improve fuse2fs's handling of corrupted file systems.

Fuse2fs doesn't support renameat2()'s RENAME_EXCHANGE or RENAME_WHITEOUT
flags, so return ENOSYS instead of incorrectly handling the renameat2()
request.

Fuse2fs will avoid clearning the setgid bit in op_chmod if the file's
group ownership is one of the calling process's group list (instead of
just the primary group id).

Change fuse2fs to align with kernel's behaviors by (a) clearing
post-EOF on truncation, (b) validating FITRIM's parameters consistently
with how the kernel does things, (c) how the "ro" mount option will
replay the journal, (d) only supporting the xattr namespaces supported
by the kernel, (e) clamping timestamps to the minimum and maximum value
supported by the on-disk format, and (e) optionally delegating access
control decisions to the kernel.

Prevent fuse2fs from mounting file systems which have features that
fuse2fs can't deal with.

Fix error path handling in fuse2fs when servicing an op_create request.

Fix spurious warnings from fuse2fs while servicing an op_fallocate request.

Fix fuse2fs to correctly translate system errors from libext2fs to the
negative error codes expected by the FUSE kernel driver.  There aren't
many; but in some cases, when the file system is corrupted, libext2fs
will return EOVERFLOW and we sent a nonsense error to the kernel.

Optimize ext2fs_extent_set_bmap() to avoid fragmenting the extent tree.
This fixes a problem where resize2fs is trying to relocate all of the
blocks in a file leading to the extent tree doubling in size, and
potentially leading to a corrupted extent tree.

Fix a bounding error in ext2fs_fallocate() which could cause it to
allocate far more blocks than was requested.  This caused a failure in
fuse2fs while formatting a loopback file system stored in a large sparse
file.

Fix potential livelock bug in the unix_io manager.

Fix invalidation support in the unix_io manager.

Various man page cleanups.


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

Improve performance in e2fsck when replaying a journal with a large
number of revoke blocks (which can be the case on Lustre servers).

Improve tune2fs's performance by avoiding scanning the file system to
update quota inodes in cases when it's not necessary.

Improve fuse2fs's performance by returning inode and type information in
readdir() and to use the actual inode numbers instead of asking fuse
to make up inode numbers.

Fix various Coverity and compiler warnings.

Add two new flags for ext2fs_link().  The EXT2FS_LINK_APPEND flag
causes ext2fs_link() to only search the last block in the directory,
which imrpoves the scalability of creating a large number of files in a
directory.  The EXT2FS_LINK_EXPAND() causes ext2fs_link() to
automatically expand the directory if there is no free space found to
create the requested directory entry.

Add a new function, ext2fs_mkdir2() which allows the flags parameter
to be passed to ext2fs_link(), allows the chattr flags to be set in the
newly created directory, and return the inode number for the newly
created directory.

Add new functions ext2fs_log2_u{32,64}() and ext2fs_log10_u{32,64}() so
we don't have multiple copies of these functions in various e2fsprogs
programs.
        
Improve debugging and logging in fuse2fs.

General code cleanups in fuse2fs.

Improve fuse2fs's performance by allowing a larger cache in unix_io and
using O_DIRECT to read and write the block device.

Fixed Windows portability problems introduced in 1.47.2.

Fix various FreeBSD compile warnings and test issues.

Fix MacOS build issues when compiling with libarchive and FUSE support.

To avoid warning messages on newer versions of GNU grep, use "grep -E"
instead of "egrep" when possible.

Fix test failure for m_rootdir_acl when the build tree is hosted on
btrfs.  (This was caused by btrfs returning extended attributes relating
to Posix ACL's in a different order than ext4 or xfs.)

Fixed potential races in the Makefiles which could show up when using
"make -j install".

Fixed build failures when libarchive is not available.

Fixed various Debian packaging issues.  (Addresses Debian Bugs:
#1106799, #1107595)

Update Czech, Chinese, Dutch, French, Malay, Portuguese, Polish,
Romainian, Serbian, Spanish, Swedish, and Ukrainian translations.
