+2001-08-30 Theodore Tso <tytso@thunk.org>
+
+ * Release of E2fsprogs 1.24
+
+2001-08-30 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c (e2fsck_pass1): For EXT2_RESIZE_INO, allow its i_mode to
+ either be zero or a regular file (for compatibility with
+ Andreas's on-line resizing programs).
+
+2001-08-27 Theodore Tso <tytso@valinux.com>
+
+ * unix.c (main): Remove EXT2FS_VERSION from the version display,
+ since it only confuses people.
+
+ * pass1.c (strnlen): Provide strnlen if libc doesn't.
+
+2001-08-15 Theodore Tso <tytso@valinux.com>
+
+ * Release of E2fsprogs 1.23
+
+2001-08-13 Theodore Tso <tytso@valinux.com>
+
+ * super.c (release_orphan_inodes): If the filesystem contains
+ errors, don't run the orphan * list, since the orphan list
+ can't be trusted.
+
+ * pass1.c (check_size): Fix logic in check_size; the previous code
+ only offered to clear the inode size fields if both size
+ and i_size_high were zero.
+ (e2fsck_pass1_check_device_inode): If i_blocks is
+ non-zero, then assume that the device/socket/fifo inode
+ is bogus.
+
+2001-08-09 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c, pass2.c, problem.c, problem.h: Fix bug introduced by
+ Andreas's symlink code; check_blocks() was unconditionally
+ testing inode_bad_map without checking to see if it
+ existed first. Fixed problem a different way; we now no
+ longer check inode_bad_map at all, since the file might
+ not get deleted in pass 2 anyway. We move the large file
+ feature reconciliation code to to e2fsck_pass2(), and in
+ deallocate_inode() in pass2.c, we decrement the large
+ files counter if we're about to delete a large file.
+
+ * unix.c (show_stats): Print the number of large files in verbose
+ mode.
+
+2001-08-07 Theodore Tso <tytso@valinux.com>
+
+ * journal.c (recover_ext3_journal): If s_errno is set in the
+ journal superblock, set the EXT2_ERROR_FS flag in the
+ filesystem superblock after the journal is run.
+
+2001-08-04 Andreas Dilger <root@lynx.adilger.int>
+
+ * message.c: Change comments for %D and %d expansion in e2fsck
+ problem codes. It was not consistent which was for dirent
+ expansion, and which was for directory number expansion.
+
+ * problem.c (PR_2_FINAL_RECLEN, PR_2_BAD_FILETYPE): Fix problem
+ codes which got caught by the confusion between %D and %d.
+
+2001-08-04 Theodore Tso <tytso@valinux.com>
+
+ * problem.c (PR_2_SYMLINK_SIZE): Change description to make it
+ more clear (and remove %s expansion). Also add missing
+ periods to the end of a number of problem descriptions.
+
+ * pass2.c (e2fsck_process_bad_inode): Remove unneeded problem
+ context string set now that the problem description for
+ PR_2_SYMLINK_SIZE has been changed.
+
+ * pass1.c (e2fsck_pass1_check_symlink): Consolidate some checks,
+ and check the validity of the symlink block here (so that
+ we detect this case here instead of later). Also use
+ sizeof(inode->i_block) instead EXT2_LINK_DIR.
+
+2001-07-30 Theodore Tso <tytso@valinux.com>
+
+ * unix.c (check_mount): Remove the code which tested for the root
+ filesystem being mounted read-only, and depend on the
+ results flags from ext2fs_check_if_mounted.
+
+2001-07-29 Theodore Tso <tytso@valinux.com>
+
+ * unix.c (check_if_skip): Free the e2fsck context structure on a
+ normal clean filesystem exit, to make it easier to find
+ real memory leaks.
+ (PRS): Only update the path to include /sbin at the
+ beginning if the -c option is given, again to make it
+ easier to find memory leaks.
+ (main): Move the final print_resource_track call after the
+ filesystem and the context are freed.
+
+ * journal.c (e2fsck_journal_init_dev): Avoid memory leak if we
+ need to search for the journal device.
+ (e2fsck_journal_release): Free the journal IO channel when
+ we release the journal handle, to avoid a memory leak.
+
+ * e2fsck.c (e2fsck_reset_context): Fix bug; only close the io
+ channel if it is *different* from the filesystem io
+ channel.
+
+2001-07-27 Theodore Tso <tytso@valinux.com>
+
+ * problem.c (PR_1_SET_IMMUTABLE): Clarify problem message.
+
+ * pass1.c (e2fsck_pass1): Check for symlinks that have the
+ immutable flag set (and offer to clear them).
+
+2001-07-26 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c (e2fsck_pass1): Free ctx->block_ea_map at the end of
+ pass 1.
+
+2001-07-25 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c (check_ext_attr): Skip zero-length EA entries.
+
+ * problem.c: PR_1_EA_ALLOC_COLLISION shouldn't abort, but should
+ prompt to clear the EA block.
+
+2001-07-22 Theodore Tso <tytso@valinux.com>
+
+ * journal.c (ll_rw_block): Use ctx->journal_io instead of the
+ filesystem's io_channel.
+ (e2fsck_journal_init_dev): New function which supports
+ initialization of the external journal.
+ (e2fsck_get_journal): Remove code which flagged an error
+ if the superblock reported the use of an external journal.
+ (ext3_journal_via_mount): Remove unsued, #ifdefed out function.
+
+ * problem.c, problem.h: Removed error codes no longer used
+ (PR_0_JOURNAL_UNSUPP_DEV, PR_0_JOURNAL_BAD_DEV,
+ PR_0_JOURNAL_UNSUPP_UUID) and replace them with new error
+ codes related with failures in loading the external
+ journal (PR_0_JOURNAL_UNSUPP_MULTIFS,
+ PR_0_CANT_FIND_JOURNAL, PR_0_EXT_JOURNAL_BAD_SUPER).
+ Also changed the text assocated with PR_0_JOURNAL_BAD_UUID
+ to reflect the case where the external journal isn't
+ correct for this filesystem.
+
+ * unix.c (PRS), e2fsck.8.in: Add new option -j which allows
+ the user to specify the pathname to find the external journal.
+
+ * e2fsck.c (e2fsck_reset_context): Close journal_io if it isn't
+ the same as the filesystem io_channel.
+
+ * e2fsck.h: Add new fields (journal_io and journal_name) in the
+ context structure to support external journals.
+
+2001-07-20 Theodore Tso <tytso@valinux.com>
+
+ * unix.c (main): Add an explicit warning when the filesystem is
+ left not completely fixed when e2fsck exits. (Addresses
+ Debian bug #104502.)
+
+2001-07-19 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c (check_ext_attr): The entire EA block is now checked to
+ make sure that parts of the EA block aren't being used for
+ multiple purposes.
+
+ * Makefile.in e2fsck.h, region.c: New file which is used to detect
+ collisions in extended attribute block.
+
+ * problem.h, problem.c (PR_1_EA_MULTI_BLOCK, PR_1_EA_ALLOC_REGION,
+ PR_1_EA_ALLOC_COLLISION, PR_1_EA_BAD_NAME,
+ PR_1_EA_BAD_VALUE): Add new problem codes.
+
+2001-07-10 Theodore Tso <tytso@valinux.com>
+
+ * journal.c (e2fsck_run_ext3_journal): Only call ext3_flush() if
+ the superblock is dirty.
+
+2001-07-07 Theodore Tso <tytso@valinux.com>
+
+ * pass1b.c (pass1b, process_pass1b_block): Change the num_bad
+ field calculation so that it only counts EA block entries
+ as a single multiply claimed block (since once we clone
+ the EA blocks for one inode, we fix the problem for all of
+ the other inodes). Also, I moved the num_bad calculation
+ from process_pass1b_block to the end of pass1b. This
+ fixes a *significant* performance bug in pass1b which hit
+ people who had to had a lot of multiply claimed blocks.
+ (Can you say O(n**3) boys and girls? I knew you could...
+ Fortunately, this case didn't happen that much in actual
+ practice.)
+
+ * pass1.c (e2fsck_pass1): Defer inodes which have an extended
+ attribute block for later processing to avoid extra seeks
+ across the disk.
+ (process_inode_cmp): If there is no indirect block, sort
+ by the extended attribute (i_file_acl) block.
+
+ * pass1b.c (clone_file_block): Fix bugs when cloning extended
+ attribute blocks. Moved free of block_buf to after the
+ code which clones the extattr block, and fixed logic for
+ changing pointers to the extended attribute field in the
+ inodes which were affected.
+ (decrement_badcount): New function which is used whenever
+ we need to decrement the number of files which claim a
+ particular bad block. Fixed bug where delete_file wasn't
+ checking check_if_fs_block() before clearing the entry in
+ block_dup_map. This could cause a block which was claimed
+ by multiple files as well as the filesystem metadata to
+ not be completely fixed.
+
+ * pass1.c (adjust_extattr_refcount): Add new function which
+ adjusts the reference counts of extended attribute blocks
+ if needed, both up and down.
+ (e2fsck_pass1): If the refcount or refcount_extra
+ structure are present, call adjust_extattr_refcount(),
+ and free it afterwards.
+
+ * problem.h, problem.c (PR_1_EXTATTR_READ_ABORT,
+ PR_1_EXTATTR_REFCOUNT, PR_1_EXTATTR_WRITE): Add new
+ problem codes.
+
+2001-07-02 Theodore Tso <tytso@valinux.com>
+
+ * pass1.c (e2fsck_pass1, check_ext_attr, check_blocks): Add
+ initial support for scanning extended attribute blocks.
+
+ * e2fsck.c (e2fsck_reset_context): free extended attribute
+ refcount structure.
+
+ * e2fsck.h: Add new fields for accounting for the extended
+ attribute blocks.
+
+ * Makefile.in, ea_refcount.c, e2fsck.h: Add new file which
+ implements a reference count abstraction.
+
+ * problem.c, problem.h: Add new problem codes PR_1_ALLOCATE_REFCOUNT,
+ PR_1_READ_EA_BLOCK, PR_1_BAD_EA_BLOCK, PR_2_FILE_ACL_BAD
+
+ * message.c: Add "@a" as an abbreviation for "extended attribute"
+
+ * pass1b.c (clone_file): Add code which handles cloning an
+ extended attribute block.
+
+ * pass1b.c (delete_file):
+ * pass2.c (deallocate_inode): If the inode contains an extended
+ attribute block in the file_acl field, clear it and
+ deallocate the block.
+
+2001-06-28 Theodore Tso <tytso@valinux.com>
+
+ * pass2.c (e2fsck_process_bad_inode): Deal with inodes which are
+ marked bad because of an invalid file_acl (either because
+ EXT2_FEATURE_COMPAT_EXT_ATTR is not set, or because the
+ block number in file_acl is bad.
+
+2001-06-29 Theodore Tso <tytso@valinux.com>
+
+ * unix.c (show_stats): Use long long to calculate the percentage
+ of the number of blocks in use in the filesystem.
+
+2001-06-23 Theodore Tso <tytso@valinux.com>
+
+ * Release of E2fsprogs 1.22
+
+2001-06-22 Theodore Tso <tytso@valinux.com>
+
+ * flushb.c: Use platform independent method of defining the
+ BLKFLSBUF ioctl. Also include sys/mount.h since on newer
+ platforms BLKFLSBUF is defined there.
+
+2001-06-19 Theodore Tso <tytso@valinux.com>
+
+ * super.c (release_inode_blocks): Don't try to release the blocks
+ if the orphaned inode is a device file, symlink, or some
+ other kind of special file that doesn't have a block list.
+
2001-06-15 Theodore Tso <tytso@valinux.com>
* Release of E2fsprogs 1.21