E2fsprogs 1.44.0 (March 7, 2018)
================================

Updates/Fixes since v1.43.9:

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

E2fsprogs now supports the large_dir (INCOMPAT_LARGEDIR) feature.  This
feature allows larger directories to be created, both with directory
sizes over 2GB and and a maximum htree depth of 3 instead of the
current limit of 2.  These features are needed in order to exceed
the currently limit of approximately 10M entries in a single
directory for 4KB blocksize (~100k for 1KB).

E2fsprogs now supports the ea_inode (INCOMPAT_EA_INODE) feature, which
stores large extended attributes in an external inode instead of a
single data block.  This is backwards compatible with a Lustre file
system feature, but it has been extended to support deduplicating
extended attribute values which are used in multiple inodes.

The metadata_csum feature (RO_COMPAT_METADATA_CSUM) is now enabled by
default by mke2fs.

The resize2fs program will no longer complain about resizing bigalloc
file systems as being dangerous when doing an on-line resize (since this
is purely a kernel feature).

Debugfs's ls command will now print the high bits of the inode's mode
bits.

Fixes
-----

Fixed some potential buffer overrun bugs in the blkid library and in the
fsck program.

There were some corner cases which tune2fs wouldn't correctly handle
when operating on a file system which was not cleanly mounted and thus
required running the journal because it could be modified.  Tune2fs will
now run the journal before trying to change the superblock, and if the
file system needs to be checked after the journal has been replayed, it
will require it before proceeding.  Also if the file system is busy (for
example, because it is in use by Lustre), but is not present in the
/proc/mounts or /etc/mtab, tune2fs will not try to replay the journal,
since this could do real damage if it the file system is being actively
modified by the kernel.

The libss library (used by debugfs) now supports the version 7 of the
libreadline shared library.

The e2freefrag program will use the GETFSMAP ioctl if it is available
and the file system is mounted, so that the free space statistics will
be more accurate.

The consistency checks for symlinks (especially for encrypted and inline
data file sytems) in e2fsck are now much more careful/stringent.  Also
fixed a bug where creating a symlink using ext2fs_symlink() which was
exactly 60 bytes long when inline data was enabled would result in a
missing system.data xattr.


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

Mke2fs now uses io_channel_flush() instead of sync() for the sync_kludge
feature.

E2fsprogs now uses i_size as the primary way of determining whether a
symlink is a fast symlink.

Fix various compiler and UBSAN warnings.

Long running test are now skipped with "make check" and only run when
"make fullcheck".  The test runner will warn when potentially long
running tests are being run via "make check".

E2fsck is now much faster for bigalloc file systems when scanning
extents for bigalloc file systems.  (Addresses Google Bug #36886699)

Update Czech, Spanish, French, Malay, and Ukrainian translations.

