Many files:
Checked in e2fsprogs 1.06
diff --git a/ChangeLog b/ChangeLog
index 4694ae3..face968 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Mon Oct 7 08:22:31 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Makefile.in (all): Don't run "make check" by default. User
+ should manually run "make check" if they wish to test
+ things out.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Sat Aug 31 10:55:45 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* configure.in (AC_CHECK_FUNCS): Add fchown to list of functions
diff --git a/INSTALL b/INSTALL
index a6feeb3..0c3d463 100644
--- a/INSTALL
+++ b/INSTALL
@@ -20,11 +20,15 @@
make
-5) Install the programs
+5) Check to make sure the installation built correctly:
+
+ make check
+
+6) Install the programs
Run `make install'
-6) Install the include files and libraries
+7) Install the include files and libraries
You can run `make install-libs' to install the include files and
libraries. Please note that this installation is not needed for the
@@ -32,7 +36,7 @@
programs using the libraries or if you want to compile other program
using these libraries (like the 4.4BSD dump and restore port).
-7) Remove any pre-formatted man pages.
+8) Remove any pre-formatted man pages.
Some distributions will have pre-formatted manual pages which
will always be displayed in preference to newer man pages in /usr/man.
@@ -40,7 +44,7 @@
see the correct manual pages. The shell script in
install-utils/remove_preformat_manpages may be helpful in doing so.
-8) Make sure your /etc/fstab file is correct.
+9) Make sure your /etc/fstab file is correct.
Some distributions install an /etc/fstab which is missing the
fifth and sixth field of filesystem entry, which are the dump
diff --git a/Makefile.in b/Makefile.in
index 1d78c63..ad96438 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -13,7 +13,7 @@
SUBS= include/linux/types.h
-all:: $(SUBS) libs progs check
+all:: $(SUBS) libs progs
progs: $(SUBS) all-progs-recursive
libs: $(SUBS) all-libs-recursive
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 1fa079f..511cd63 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,3 +1,55 @@
+
+E2fsprogs 1.06 (October 7, 1996)
+================================
+
+Fixed serious bug in e2fsck: if the block descriptors are bad, don't
+smash the backup copies in ext2fs_close(). (The problem was that when
+e2fsck -p discovered the problem, while it was closing the filesystem
+and exiting, it was also blowing away the backup superblocks on the
+disk, which was less than friendly.) We now make it the case that we
+only write out the backup superblock and the back block descriptors if
+the filesystem is completely free from problems.
+
+Fixed a bug in block_interate in the lib/ext2fs library which caused
+e2fsck to fail on GNU Hurd-created filesystems.
+
+Add support for Linux/FT's bootloader, which actually uses
+EXT2_BOOT_LOADER, and sets its mode bits which caused e2fsck to want
+to clear the inode.
+
+Add support for the "A" (no atime update) attribute. (Note: this
+attribute is not yet in production kernels.)
+
+The test suite is not automatically run when doing a "make all" from
+the top level directory. Users should manually run "make check" if
+they wish to run the test suite.
+
+Upon a preenhalt(), make the printed message more explicit that
+running e2fsck "MANAULLY" means without the -p or -a options.
+
+In e2fsck, if a disconnected inode is zero-length, offer to clear it
+instead of offering to connect it to lost+found.
+
+In e2fsck, if a filesystem was just unmounted uncleanly, and needs
+e2fsck to be run over it, change e2fsck to explicitly display this
+fact.
+
+For dumpe2fs and e2fsck, cause the -V option to print out which
+version of the ext2fs library is actually getting used. (This will
+help detect mismatches of using a 1.06 utility with a 1.05 library,
+etc.)
+
+Programmers' notes:
+-------------------
+
+EXT2_SWAP_BYTES was changed to EXT2_FLAG_SWAP_BYTES, which better fits
+the naming convention.
+
+In ext2fs_initialize(), make sure the description for the inode bitmap
+is correctly initialize.
+
+Fixed minor type typo in ext2fs_allocate_generic_bitmap();
+
E2fsprogs 1.05 (September 7, 1996)
==================================
diff --git a/debugfs/ChangeLog b/debugfs/ChangeLog
index a1b4125..74cf840 100644
--- a/debugfs/ChangeLog
+++ b/debugfs/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Mon Sep 9 23:05:11 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* debugfs.c (unlink_file_by_name): If unlinking a file with a
diff --git a/e2fsck/ChangeLog b/e2fsck/ChangeLog
index fcab1e6..f69dc08 100644
--- a/e2fsck/ChangeLog
+++ b/e2fsck/ChangeLog
@@ -1,3 +1,39 @@
+Mon Oct 7 00:45:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * e2fsck.c (main): Print out the version number of the shared
+ library when using the -V option.
+
+ * swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
+ consistency's sake.
+
+ * e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
+ out the backup superblocks when we know we have a valid
+ filesystem.
+
+Tue Oct 1 22:00:29 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * util.c (preenhalt): Make it explicit on preenhalt that running
+ e2fsck manually means without the -a or -p flag.
+
+Fri Sep 27 14:41:08 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
+ (Linux/FT actually sets the mode bits, so we have to
+ handle it specially.)
+
+ * e2fsck.c (check_if_skip): Print a message if the filesystem is
+ just dirty, so that the user knows that it's about to be
+ checked (since this will take a while).
+
+Mon Sep 16 17:00:01 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * pass4.c: If a disconnected inode is zero-length, prompt to
+ delete it instead of connecting it to lost+found.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Fri Aug 30 20:24:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* pass4.c (pass4): If the user refuses to connect an unattached
diff --git a/e2fsck/e2fsck.8.in b/e2fsck/e2fsck.8.in
index cb71505..7750b18 100644
--- a/e2fsck/e2fsck.8.in
+++ b/e2fsck/e2fsck.8.in
@@ -151,7 +151,7 @@
.br
\ 128\ \-\ Shared library error
.br
-.SH BUGS
+.SH REPORTING BUGS
Almost any piece of software will have bugs. If you manage to find a
filesystem which causes
.B e2fsck
diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c
index 9048298..f081d66 100644
--- a/e2fsck/e2fsck.c
+++ b/e2fsck/e2fsck.c
@@ -421,19 +421,19 @@
time(0) >= (fs->super->s_lastcheck +
fs->super->s_checkinterval))
reason = "has gone too long without being checked";
+ else if ((fs->super->s_state & EXT2_VALID_FS) == 0)
+ reason = "was not cleanly unmounted";
if (reason) {
printf("%s %s, check forced.\n", device_name, reason);
return;
}
- if (fs->super->s_state & EXT2_VALID_FS) {
- printf("%s: clean, %d/%d files, %d/%d blocks\n", device_name,
- fs->super->s_inodes_count - fs->super->s_free_inodes_count,
- fs->super->s_inodes_count,
- fs->super->s_blocks_count - fs->super->s_free_blocks_count,
- fs->super->s_blocks_count);
- ext2fs_close(fs);
- exit(FSCK_OK);
- }
+ printf("%s: clean, %d/%d files, %d/%d blocks\n", device_name,
+ fs->super->s_inodes_count - fs->super->s_free_inodes_count,
+ fs->super->s_inodes_count,
+ fs->super->s_blocks_count - fs->super->s_free_blocks_count,
+ fs->super->s_blocks_count);
+ ext2fs_close(fs);
+ exit(FSCK_OK);
}
#define PATH_SET "PATH=/sbin"
@@ -606,8 +606,11 @@
E2FSPROGS_VERSION, E2FSPROGS_DATE,
EXT2FS_VERSION, EXT2FS_DATE);
- if (show_version_only)
+ if (show_version_only) {
+ fprintf(stderr, "\tUsing %s\n",
+ error_message(EXT2_ET_BASE));
exit(0);
+ }
check_mount();
@@ -671,6 +674,12 @@
if (superblock && rwflag)
ext2fs_mark_super_dirty(fs);
+ /*
+ * Don't overwrite the backup superblock and block
+ * descriptors, until we're sure the filesystem is OK....
+ */
+ fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
+
ehandler_init(fs->io);
invalid_inode_bitmap = allocate_memory(sizeof(int) *
@@ -691,7 +700,8 @@
test_disk(fs);
if (normalize_swapfs) {
- if ((fs->flags & EXT2_SWAP_BYTES) == ext2fs_native_flag()) {
+ if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ==
+ ext2fs_native_flag()) {
fprintf(stderr, "%s: Filesystem byte order "
"already normalized.\n", device_name);
fatal_error(0);
@@ -733,7 +743,9 @@
exit_value = FSCK_REBOOT;
}
}
- if (!ext2fs_test_valid(fs))
+ if (ext2fs_test_valid(fs))
+ fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
+ else
exit_value = FSCK_UNCORRECTED;
if (rwflag) {
if (ext2fs_test_valid(fs)) {
diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
index 27ceecd..0c86096 100644
--- a/e2fsck/pass1.c
+++ b/e2fsck/pass1.c
@@ -300,6 +300,11 @@
ext2fs_unmark_valid(fs);
}
}
+ if (ino == EXT2_BOOT_LOADER_INO) {
+ ext2fs_mark_inode_bitmap(inode_used_map, ino);
+ check_blocks(fs, ino, &inode, block_buf);
+ goto next;
+ }
if ((ino != EXT2_ROOT_INO) &&
(ino < EXT2_FIRST_INODE(fs->super))) {
ext2fs_mark_inode_bitmap(inode_used_map, ino);
@@ -755,7 +760,8 @@
* get called with BLOCK_FLAG_HOLE
*/
printf("process_block() called with blk == 0, "
- "inode %lu???", p->ino);
+ "blockcnt=%d, inode %lu???\n",
+ blockcnt, p->ino);
return 0;
}
if (blockcnt < 0)
diff --git a/e2fsck/pass4.c b/e2fsck/pass4.c
index f167d15..9733643 100644
--- a/e2fsck/pass4.c
+++ b/e2fsck/pass4.c
@@ -8,6 +8,63 @@
#include "e2fsck.h"
+/*
+ * This routine is called when an inode is not connected to the
+ * directory tree.
+ *
+ * This subroutine returns 1 then the caller shouldn't bother with the
+ * rest of the pass 4 tests.
+ */
+int disconnect_inode(ext2_filsys fs, ino_t i)
+{
+ struct ext2_inode inode;
+
+ e2fsck_read_inode(fs, i, &inode, "pass4: disconnect_inode");
+ if (!inode.i_blocks && (LINUX_S_ISREG(inode.i_mode) ||
+ LINUX_S_ISDIR(inode.i_mode))) {
+ /*
+ * This is a zero-length file; prompt to delete it...
+ */
+ printf("Unattached zero-length inode %lu\n", i);
+ if (ask("Clear", 1)) {
+ inode_link_info[i] = 0;
+ inode.i_links_count = 0;
+ inode.i_dtime = time(0);
+ e2fsck_write_inode(fs, i, &inode,
+ "disconnect_inode");
+ /*
+ * Fix up the bitmaps...
+ */
+ read_bitmaps(fs);
+ ext2fs_unmark_inode_bitmap(inode_used_map, i);
+ ext2fs_unmark_inode_bitmap(inode_dir_map, i);
+ ext2fs_unmark_inode_bitmap(fs->inode_map, i);
+ ext2fs_mark_ib_dirty(fs);
+ return 0;
+ }
+ }
+
+ /*
+ * Prompt to reconnect.
+ */
+ printf("Unattached inode %lu\n", i);
+ preenhalt(fs);
+ if (ask("Connect to /lost+found", 1)) {
+ if (reconnect_file(fs, i))
+ ext2fs_unmark_valid(fs);
+ } else {
+ /*
+ * If we don't attach the inode, then skip the
+ * i_links_test since there's no point in trying to
+ * force i_links_count to zero.
+ */
+ ext2fs_unmark_valid(fs);
+ return 1;
+ }
+ return 0;
+}
+
+
void pass4(ext2_filsys fs)
{
ino_t i;
@@ -29,25 +86,8 @@
if (!(ext2fs_test_inode_bitmap(inode_used_map, i)))
continue;
if (inode_count[i] == 0) {
- /*
- * Inode isn't attached to the filesystem;
- * prompt to reconnect.
- */
- printf("Unattached inode %lu\n", i);
- preenhalt(fs);
- if (ask("Connect to /lost+found", 1)) {
- if (reconnect_file(fs, i))
- ext2fs_unmark_valid(fs);
- } else {
- /*
- * If we don't attach the inode, then
- * skip the i_links_test since there's
- * no point in trying to force
- * i_links_count to zero.
- */
- ext2fs_unmark_valid(fs);
+ if (disconnect_inode(fs, i))
continue;
- }
}
if (inode_count[i] != inode_link_info[i]) {
e2fsck_read_inode(fs, i, &inode, "pass4");
diff --git a/e2fsck/swapfs.c b/e2fsck/swapfs.c
index 291fcb3..96f4ae3 100644
--- a/e2fsck/swapfs.c
+++ b/e2fsck/swapfs.c
@@ -126,7 +126,7 @@
}
inode = (struct ext2_inode *) buf;
for (i=0; i < fs->super->s_inodes_per_group; i++, ino++) {
- if (fs->flags & EXT2_SWAP_BYTES_READ)
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES_READ)
ext2fs_swap_inode(fs, inode, inode, 0);
stashed_ino = ino;
stashed_inode = inode;
@@ -137,7 +137,7 @@
LINUX_S_ISDIR(inode->i_mode))
swap_inode_blocks(fs, ino, block_buf, inode);
- if (fs->flags & EXT2_SWAP_BYTES_WRITE)
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)
ext2fs_swap_inode(fs, inode, inode, 1);
inode++;
}
@@ -177,17 +177,19 @@
"byte-swap it.\n", device_name);
fatal_error(0);
}
- if (fs->flags & EXT2_SWAP_BYTES) {
- fs->flags &= ~(EXT2_SWAP_BYTES|EXT2_SWAP_BYTES_WRITE);
- fs->flags |= EXT2_SWAP_BYTES_READ;
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
+ fs->flags &= ~(EXT2_FLAG_SWAP_BYTES|
+ EXT2_FLAG_SWAP_BYTES_WRITE);
+ fs->flags |= EXT2_FLAG_SWAP_BYTES_READ;
} else {
- fs->flags &= ~EXT2_SWAP_BYTES_READ;
- fs->flags |= EXT2_SWAP_BYTES_WRITE;
+ fs->flags &= ~EXT2_FLAG_SWAP_BYTES_READ;
+ fs->flags |= EXT2_FLAG_SWAP_BYTES_WRITE;
}
swap_inodes(fs);
- if (fs->flags & EXT2_SWAP_BYTES_WRITE)
- fs->flags |= EXT2_SWAP_BYTES;
- fs->flags &= ~(EXT2_SWAP_BYTES_READ|EXT2_SWAP_BYTES_WRITE);
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)
+ fs->flags |= EXT2_FLAG_SWAP_BYTES;
+ fs->flags &= ~(EXT2_FLAG_SWAP_BYTES_READ|
+ EXT2_FLAG_SWAP_BYTES_WRITE);
ext2fs_flush(fs);
if (tflag > 1) {
diff --git a/e2fsck/util.c b/e2fsck/util.c
index e12ff36..b099e66 100644
--- a/e2fsck/util.c
+++ b/e2fsck/util.c
@@ -160,7 +160,8 @@
{
if (!preen)
return;
- fprintf(stderr, "\n\n%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n",
+ fprintf(stderr, "\n\n%s: UNEXPECTED INCONSISTENCY; "
+ "RUN fsck MANUALLY.\n\t(i.e., without -a or -p options)\n",
device_name);
if (fs != NULL) {
fs->super->s_state |= EXT2_ERROR_FS;
diff --git a/e2fsprogs-1.05.spec b/e2fsprogs-1.06.spec
similarity index 95%
rename from e2fsprogs-1.05.spec
rename to e2fsprogs-1.06.spec
index 8643092..31d520d 100644
--- a/e2fsprogs-1.05.spec
+++ b/e2fsprogs-1.06.spec
@@ -1,10 +1,10 @@
Description: Tools for the second extended (ext2) filesystem
Name: e2fsprogs
-Version: 1.05
+Version: 1.06
Release: 0
Copyright: GPL
Group: Utilities/System
-Source: tsx-11.mit.edu:/pub/linux/packages/ext2fs/e2fsprogs-1.05.tar.gz
+Source: tsx-11.mit.edu:/pub/linux/packages/ext2fs/e2fsprogs-1.06.tar.gz
%package devel
Description: e2fs static libs and headers
diff --git a/include/linux/ChangeLog b/include/linux/ChangeLog
index 9b41222..eeaa07b 100644
--- a/include/linux/ChangeLog
+++ b/include/linux/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Thu May 16 11:12:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* Release of E2fsprogs version 1.04
diff --git a/install-utils/ChangeLog b/install-utils/ChangeLog
index f87005d..d17f54f 100644
--- a/install-utils/ChangeLog
+++ b/install-utils/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Thu May 16 11:12:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* Release of E2fsprogs version 1.04
diff --git a/lib/ChangeLog b/lib/ChangeLog
index fe60daf..2c53f25 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,6 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
Wed Aug 28 15:20:26 1996 Miles Bader <miles@gnu.ai.mit.edu>
* Makefile.elf-lib (installdirs-elf-lib): Renamed from installdirs
diff --git a/lib/e2p/ChangeLog b/lib/e2p/ChangeLog
index fe4fa5e..a9a8f41 100644
--- a/lib/e2p/ChangeLog
+++ b/lib/e2p/ChangeLog
@@ -1,3 +1,11 @@
+Sun Sep 22 16:20:12 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * pf.c: Add support for the 'A' (no atime) flag.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Sat Sep 7 14:48:35 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* ls.c (interval_string): Pretty print the check interval.
diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
index ec18dcb..8ef00b8 100644
--- a/lib/e2p/pf.c
+++ b/lib/e2p/pf.c
@@ -32,6 +32,9 @@
#ifdef EXT2_NODUMP_FL
EXT2_NODUMP_FL,
#endif
+#ifdef EXT2_NOATIME_FL
+ EXT2_NOATIME_FL,
+#endif
0};
static const char * short_flags[] = {
@@ -48,6 +51,9 @@
#ifdef EXT2_NODUMP_FL
"d",
#endif
+#ifdef EXT2_NOATIME_FL
+ "A",
+#endif
NULL};
static const char * long_flags[] = {
@@ -64,6 +70,9 @@
#ifdef EXT2_NODUMP_FL
"No_Dump, ",
#endif
+#ifdef EXT2_NOATIME_FL
+ "No_Atime, ",
+#endif
NULL};
void print_flags (FILE * f, unsigned long flags, int long_format)
diff --git a/lib/et/ChangeLog b/lib/et/ChangeLog
index 22bb8b4..e34d345 100644
--- a/lib/et/ChangeLog
+++ b/lib/et/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Thu May 16 11:12:30 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* Release of E2fsprogs version 1.04
diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog
index 41c9c54..d8dad46 100644
--- a/lib/ext2fs/ChangeLog
+++ b/lib/ext2fs/ChangeLog
@@ -1,3 +1,30 @@
+Mon Oct 7 00:44:17 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * ext2fs.h, block.c, closefs.c, dirblock.c, inode.c, native.c,
+ open.c: Change EXT2_SWAP to EXT2_FLAG_SWAP for
+ consistency's sake.
+
+ * closefs.c (ext2fs_flush): If the flag EXT2_MASTER_SB_ONLY is
+ set, then only write out the master superblock.
+
+Sun Oct 6 21:45:26 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * block.c (ext2fs_block_iterate): Fixed bug which caused
+ block_iterate to fail to handle HURD created filesystems;
+ it tested the inode translator field before the inode was
+ loaded.
+
+Tue Sep 17 14:08:24 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * initialize.c (ext2fs_initialize): Make sure the description for
+ the inode bitmap is set correctly.
+
+ * bitmaps.c (ext2fs_allocate_generic_bitmap): Fix minor type typo.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Sat Sep 7 07:36:03 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* initialize.c: Override the kernel's idea of default
diff --git a/lib/ext2fs/bitmaps.c b/lib/ext2fs/bitmaps.c
index 7aaf549..7250c80 100644
--- a/lib/ext2fs/bitmaps.c
+++ b/lib/ext2fs/bitmaps.c
@@ -28,7 +28,7 @@
const char *descr,
ext2fs_generic_bitmap *ret)
{
- ext2fs_inode_bitmap bitmap;
+ ext2fs_generic_bitmap bitmap;
int size;
bitmap = malloc(sizeof(struct ext2fs_struct_generic_bitmap));
diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
index 5138534..b7f0aa3 100644
--- a/lib/ext2fs/block.c
+++ b/lib/ext2fs/block.c
@@ -58,8 +58,8 @@
return ret;
}
limit = ctx->fs->blocksize >> 2;
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_READ)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_READ)) {
block_nr = (blk_t *) ctx->ind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -89,8 +89,8 @@
}
}
if (changed & BLOCK_CHANGED) {
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_WRITE)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)) {
block_nr = (blk_t *) ctx->ind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -133,8 +133,8 @@
return ret;
}
limit = ctx->fs->blocksize >> 2;
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_READ)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_READ)) {
block_nr = (blk_t *) ctx->dind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -162,8 +162,8 @@
}
}
if (changed & BLOCK_CHANGED) {
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_WRITE)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)) {
block_nr = (blk_t *) ctx->dind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -206,8 +206,8 @@
return ret;
}
limit = ctx->fs->blocksize >> 2;
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_READ)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_READ)) {
block_nr = (blk_t *) ctx->tind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -235,8 +235,8 @@
}
}
if (changed & BLOCK_CHANGED) {
- if ((ctx->fs->flags & EXT2_SWAP_BYTES) ||
- (ctx->fs->flags & EXT2_SWAP_BYTES_WRITE)) {
+ if ((ctx->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (ctx->fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)) {
block_nr = (blk_t *) ctx->tind_buf;
for (i = 0; i < limit; i++, block_nr++)
*block_nr = ext2fs_swab32(*block_nr);
@@ -298,16 +298,17 @@
* Iterate over the HURD translator block (if present)
*/
if ((fs->super->s_creator_os == EXT2_OS_HURD) &&
- !(flags & BLOCK_FLAG_DATA_ONLY) &&
- inode.osd1.hurd1.h_i_translator) {
+ !(flags & BLOCK_FLAG_DATA_ONLY)) {
ctx.errcode = ext2fs_read_inode(fs, ino, &inode);
if (ctx.errcode)
goto abort;
got_inode = 1;
- ret |= (*func)(fs, &inode.osd1.hurd1.h_i_translator,
- BLOCK_COUNT_TRANSLATOR, private);
- if (ret & BLOCK_ABORT)
- goto abort;
+ if (inode.osd1.hurd1.h_i_translator) {
+ ret |= (*func)(fs, &inode.osd1.hurd1.h_i_translator,
+ BLOCK_COUNT_TRANSLATOR, private);
+ if (ret & BLOCK_ABORT)
+ goto abort;
+ }
}
/*
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index d8b796e..18a93db 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -20,7 +20,7 @@
errcode_t ext2fs_flush(ext2_filsys fs)
{
- int i,j;
+ int i,j,maxgroup;
int group_block;
errcode_t retval;
char *group_ptr;
@@ -34,7 +34,7 @@
fs_state = fs->super->s_state;
fs->super->s_wtime = time(NULL);
- if (fs->flags & EXT2_SWAP_BYTES) {
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
retval = ENOMEM;
if (!(super_shadow = malloc(SUPERBLOCK_SIZE)))
goto errout;
@@ -75,7 +75,7 @@
* we exit.)
*/
fs->super->s_state &= ~EXT2_VALID_FS;
- if (fs->flags & EXT2_SWAP_BYTES) {
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
*super_shadow = *fs->super;
ext2fs_swap_super(super_shadow);
}
@@ -85,7 +85,9 @@
* superblocks and group descriptors.
*/
group_block = fs->super->s_first_data_block;
- for (i = 0; i < fs->group_desc_count; i++) {
+ maxgroup = (fs->flags & EXT2_FLAG_MASTER_SB_ONLY) ? 1 :
+ fs->group_desc_count;
+ for (i = 0; i < maxgroup; i++) {
if (i !=0 ) {
retval = io_channel_write_blk(fs->io, group_block,
-SUPERBLOCK_SIZE,
@@ -120,7 +122,7 @@
retval = 0;
errout:
fs->super->s_state = fs_state;
- if (fs->flags & EXT2_SWAP_BYTES) {
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
if (super_shadow)
free(super_shadow);
if (group_shadow)
diff --git a/lib/ext2fs/dirblock.c b/lib/ext2fs/dirblock.c
index 3d5dbb2..0f56617 100644
--- a/lib/ext2fs/dirblock.c
+++ b/lib/ext2fs/dirblock.c
@@ -27,7 +27,8 @@
retval = io_channel_read_blk(fs->io, block, 1, buf);
if (retval)
return retval;
- if ((fs->flags & (EXT2_SWAP_BYTES|EXT2_SWAP_BYTES_READ)) == 0)
+ if ((fs->flags & (EXT2_FLAG_SWAP_BYTES|
+ EXT2_FLAG_SWAP_BYTES_READ)) == 0)
return 0;
p = buf;
end = (char *) buf + fs->blocksize;
@@ -49,8 +50,8 @@
char *buf = 0;
struct ext2_dir_entry *dirent;
- if ((fs->flags & EXT2_SWAP_BYTES) ||
- (fs->flags & EXT2_SWAP_BYTES_WRITE)) {
+ if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)) {
write_buf = buf = malloc(fs->blocksize);
if (!buf)
return ENOMEM;
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index f385770..de74681 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -71,9 +71,10 @@
#define EXT2_FLAG_VALID 0x08
#define EXT2_FLAG_IB_DIRTY 0x10
#define EXT2_FLAG_BB_DIRTY 0x20
-#define EXT2_SWAP_BYTES 0x40
-#define EXT2_SWAP_BYTES_READ 0x80
-#define EXT2_SWAP_BYTES_WRITE 0x100
+#define EXT2_FLAG_SWAP_BYTES 0x40
+#define EXT2_FLAG_SWAP_BYTES_READ 0x80
+#define EXT2_FLAG_SWAP_BYTES_WRITE 0x100
+#define EXT2_FLAG_MASTER_SB_ONLY 0x200
/*
* Special flag in the ext2 inode i_flag field that means that this is
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index 4108093..4349244 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -227,7 +227,7 @@
goto cleanup;
sprintf(buf, "inode bitmap for %s", fs->device_name);
- retval = ext2fs_allocate_inode_bitmap(fs, 0, &fs->inode_map);
+ retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map);
if (retval)
goto cleanup;
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
index 7d25ae1..8743476 100644
--- a/lib/ext2fs/inode.c
+++ b/lib/ext2fs/inode.c
@@ -149,15 +149,15 @@
scan->ptr += scan->inode_size - extra_bytes;
scan->bytes_left -= scan->inode_size - extra_bytes;
- if ((scan->fs->flags & EXT2_SWAP_BYTES) ||
- (scan->fs->flags & EXT2_SWAP_BYTES_READ))
+ if ((scan->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (scan->fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
ext2fs_swap_inode(scan->fs, inode,
(struct ext2_inode *) scan->temp_buffer, 0);
else
*inode = *((struct ext2_inode *) scan->temp_buffer);
} else {
- if ((scan->fs->flags & EXT2_SWAP_BYTES) ||
- (scan->fs->flags & EXT2_SWAP_BYTES_READ))
+ if ((scan->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (scan->fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
ext2fs_swap_inode(scan->fs, inode,
(struct ext2_inode *) scan->ptr, 0);
else
@@ -266,8 +266,8 @@
} else
memcpy((char *) inode, ptr, length);
- if ((fs->flags & EXT2_SWAP_BYTES) ||
- (fs->flags & EXT2_SWAP_BYTES_READ))
+ if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
ext2fs_swap_inode(fs, inode, inode, 0);
/* Update the inode cache */
@@ -322,8 +322,8 @@
inode_buffer_size = fs->blocksize;
inode_buffer_block = 0;
}
- if ((fs->flags & EXT2_SWAP_BYTES) ||
- (fs->flags & EXT2_SWAP_BYTES_WRITE))
+ if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
+ (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
ext2fs_swap_inode(fs, &temp_inode, inode, 1);
else
memcpy(&temp_inode, inode, sizeof(struct ext2_inode));
diff --git a/lib/ext2fs/native.c b/lib/ext2fs/native.c
index aa371ce..2f84bf7 100644
--- a/lib/ext2fs/native.c
+++ b/lib/ext2fs/native.c
@@ -24,7 +24,7 @@
{
if (i386_byteorder())
return 0;
- return EXT2_SWAP_BYTES;
+ return EXT2_FLAG_SWAP_BYTES;
}
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index 74bf279..389bfc7 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -89,8 +89,8 @@
goto cleanup;
if ((fs->super->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC)) ||
- (fs->flags & EXT2_SWAP_BYTES)) {
- fs->flags |= EXT2_SWAP_BYTES;
+ (fs->flags & EXT2_FLAG_SWAP_BYTES)) {
+ fs->flags |= EXT2_FLAG_SWAP_BYTES;
ext2fs_swap_super(fs->super);
}
@@ -156,7 +156,7 @@
if (retval)
goto cleanup;
group_block++;
- if (fs->flags & EXT2_SWAP_BYTES) {
+ if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
gdp = (struct ext2_group_desc *) dest;
groups_per_block = fs->blocksize /
sizeof(struct ext2_group_desc);
diff --git a/lib/ss/ChangeLog b/lib/ss/ChangeLog
index 96b3612..2aca3d9 100644
--- a/lib/ss/ChangeLog
+++ b/lib/ss/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Fri Aug 30 22:36:48 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* invocation.c (ss_create_invocation): Change function prototype
diff --git a/lib/ss/test_ss.c b/lib/ss/test_ss.c
index 3eddbab..a4601f6 100644
--- a/lib/ss/test_ss.c
+++ b/lib/ss/test_ss.c
@@ -9,8 +9,8 @@
* $Locker$
*
* $Log$
- * Revision 1.8 1997/04/29 14:52:31 tytso
- * Checked in e2fsprogs 1.05
+ * Revision 1.9 1997/04/29 15:29:28 tytso
+ * Checked in e2fsprogs 1.06
*
* Revision 1.1 1993/06/03 12:31:25 tytso
* Initial revision
diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog
index 8803ded..b276ddb 100644
--- a/lib/uuid/ChangeLog
+++ b/lib/uuid/ChangeLog
@@ -1,3 +1,7 @@
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Tue Aug 27 16:50:43 1996 Miles Bader <miles@gnu.ai.mit.edu>
* uuid/gen_uuid.c [HAVE_NET_IF_H] <net/if.h>: Include guarded.
diff --git a/misc/ChangeLog b/misc/ChangeLog
index d521773..11f7c04 100644
--- a/misc/ChangeLog
+++ b/misc/ChangeLog
@@ -1,3 +1,18 @@
+Mon Oct 7 00:56:24 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * chattr.1.in: Documented the 'A' (noatime) attribute.
+
+ * dumpe2fs.c (main): Change EXT2_SWAP to EXT2_FLAG_SWAP for
+ consistency's sake.
+
+Sun Sep 22 16:18:47 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * chattr.c (decode_arg): Add support for the 'A' (noatime) flag.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Sat Sep 7 07:34:11 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* tune2fs.c (main): Add support for new option -C, which sets the
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
index cfd4ff7..ad38443 100644
--- a/misc/chattr.1.in
+++ b/misc/chattr.1.in
@@ -62,13 +62,18 @@
When a file with the `u' attribute set is deleted, its contents is saved.
This allows the user to ask for its undeletion.
+
+When a file with the 'A' attribute set is modified, its atime record is
+not modified. This avoid a certain amount of disk I/O for laptop
+systems.
.SH AUTHOR
.B chattr
has been written by Remy Card <card@masi.ibp.fr>, the developer and maintainer
of the ext2 fs.
.SH BUGS AND LIMITATIONS
As of ext2 fs 0.5a, the `c' and `u' attribute are not honoured by the kernel
-code.
+code. As of the Linux 2.0 kernel, the 'A' attribute is not yet supported by
+the kernel code. (The noatime code is still in testing.)
.PP
These attributes will be implemented in a future ext2 fs version.
.SH AVAILABILITY
diff --git a/misc/chattr.c b/misc/chattr.c
index b359248..45e2c8f 100644
--- a/misc/chattr.c
+++ b/misc/chattr.c
@@ -89,6 +89,12 @@
rem = 1;
break;
#endif
+#ifdef EXT2_NOATIME_FL
+ case 'A':
+ rf |= EXT2_NOATIME_FL;
+ rem = 1;
+ break;
+#endif
case 'c':
rf |= EXT2_COMPR_FL;
rem = 1;
@@ -145,6 +151,11 @@
af |= EXT2_APPEND_FL;
break;
#endif
+#ifdef EXT2_NOATIME_FL
+ case 'A':
+ af |= EXT2_NOATIME_FL;
+ break;
+#endif
case 'c':
af |= EXT2_COMPR_FL;
break;
@@ -181,6 +192,11 @@
sf |= EXT2_APPEND_FL;
break;
#endif
+#ifdef EXT2_NOATIME_FL
+ case 'A':
+ sf |= EXT2_NOATIME_FL;
+ break;
+#endif
case 'c':
sf |= EXT2_COMPR_FL;
break;
diff --git a/misc/dumpe2fs.8.in b/misc/dumpe2fs.8.in
index 0dc1922..28fa320 100644
--- a/misc/dumpe2fs.8.in
+++ b/misc/dumpe2fs.8.in
@@ -7,6 +7,12 @@
dumpe2fs \- dump filesystem information
.SH SYNOPSIS
.B dumpe2fs
+[
+.B -b
+]
+[
+.B -V
+]
device
.SH DESCRIPTION
.BI dumpe2fs
@@ -18,6 +24,13 @@
is similar to Berkeley's
.BI dumpfs
program for the BSD Fast File System.
+.SH OPTIONS
+.TP
+.I -b
+print the blocks which are reserved as bad in the filesystem.
+.TP
+.I -V
+print the version number of dumpe2fs and exit.
.SH BUGS
You need to know the physical filesystem structure to understand the
output.
diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index 740f01b..069ad64 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -39,7 +39,7 @@
static volatile void usage (void)
{
- fprintf (stderr, "usage: %s device\n", program_name);
+ fprintf (stderr, "usage: %s [-bV] device\n", program_name);
exit (1);
}
@@ -166,17 +166,23 @@
int big_endian;
char c;
+ initialize_ext2_error_table();
fprintf (stderr, "dumpe2fs %s, %s for EXT2 FS %s, %s\n",
E2FSPROGS_VERSION, E2FSPROGS_DATE,
EXT2FS_VERSION, EXT2FS_DATE);
if (argc && *argv)
program_name = *argv;
- while ((c = getopt (argc, argv, "b")) != EOF) {
+ while ((c = getopt (argc, argv, "bV")) != EOF) {
switch (c) {
case 'b':
print_badblocks++;
break;
+ case 'V':
+ /* Print version number and exit */
+ fprintf(stderr, "\tUsing %s\n",
+ error_message(EXT2_ET_BASE));
+ exit(0);
default:
usage ();
}
@@ -184,7 +190,6 @@
if (optind > argc - 1)
usage ();
device_name = argv[optind++];
- initialize_ext2_error_table();
retval = ext2fs_open (device_name, 0, 0, 0, unix_io_manager, &fs);
if (retval) {
com_err (program_name, retval, "while trying to open %s",
@@ -203,7 +208,7 @@
ext2fs_close (fs);
exit (1);
}
- big_endian = ((fs->flags & EXT2_SWAP_BYTES) != 0);
+ big_endian = ((fs->flags & EXT2_FLAG_SWAP_BYTES) != 0);
if (!i386_byteorder())
big_endian = !big_endian;
if (big_endian)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 11367d8..9c89fe7 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,20 @@
+Mon Oct 7 07:52:41 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * f_preen: New test case which makes sure that e2fsck -p won't
+ bash the backup superblock in case of a corrupted master
+ superblock.
+
+ * test_script.in: Let the environment variable TEST_CONFIG to
+ override the location of the test_config file. Move
+ definition of TMP_DIR to test_config.
+
+ * test_config: Add new defnitions for mke2fs, dumpe2fs, tune2fs,
+ lsattr, and chattr.
+
+Thu Sep 12 15:23:07 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * Release of E2fsprogs version 1.05
+
Mon Sep 9 23:09:47 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* Makefile.in (check): Add explicit ./ to test_script invokation,
diff --git a/tests/f_expand/expect.1 b/tests/f_expand/expect.1
index aca5ee4..e6ff784 100644
--- a/tests/f_expand/expect.1
+++ b/tests/f_expand/expect.1
@@ -1,11 +1,8 @@
-Filesystem did not have a UUID; generating one.
-
Pass 1: Checking inodes, blocks, and sizes
-Deleted inode 2 has zero dtime.
-Set dtime? yes
+Root inode is not a directory. Clear? yes
Pass 2: Checking directory structure
-Entry '..' in /lost+found (11) has deleted/unused inode 2.
+Entry '..' in ??? (11) has deleted/unused inode 2.
Clear? yes
Pass 3: Checking directory connectivity
@@ -556,6 +553,12 @@
Inode 100 has ref count 2, expecting 1.
Set i_nlinks to count? yes
+Unattached inode 101
+Connect to /lost+found? yes
+
+Inode 101 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
Unattached inode 102
Connect to /lost+found? yes
@@ -574,16 +577,57 @@
Inode 104 has ref count 2, expecting 1.
Set i_nlinks to count? yes
+Unattached inode 105
+Connect to /lost+found? yes
+
+Inode 105 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 106
+Connect to /lost+found? yes
+
+Inode 106 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 107
+Connect to /lost+found? yes
+
+Inode 107 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 108
+Connect to /lost+found? yes
+
+Inode 108 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 109
+Connect to /lost+found? yes
+
+Inode 109 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 110
+Connect to /lost+found? yes
+
+Inode 110 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
+Unattached inode 111
+Connect to /lost+found? yes
+
+Inode 111 has ref count 2, expecting 1.
+Set i_nlinks to count? yes
+
Pass 5: Checking group summary information
Fix summary information? yes
-Block bitmap differences: -33. FIXED
-Free blocks count wrong for group 0 (68, counted=67). FIXED
-Free blocks count wrong (68, counted=67). FIXED
-Free inodes count wrong for group #0 (1, counted=0). FIXED
+Free blocks count wrong for group 0 (56, counted=55). FIXED
+Free blocks count wrong (56, counted=55). FIXED
+Free inodes count wrong for group #0 (89, counted=88). FIXED
Directories count wrong for group #0 (2, counted=3). FIXED
-Free inodes count wrong (1, counted=0). FIXED
+Free inodes count wrong (89, counted=88). FIXED
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 104/104 files (0.0% non-contiguous), 33/100 blocks
+test_filesys: 112/200 files (0.0% non-contiguous), 145/200 blocks
Exit status is 1
diff --git a/tests/f_expand/expect.2 b/tests/f_expand/expect.2
index 4ded3c4..533d555 100644
--- a/tests/f_expand/expect.2
+++ b/tests/f_expand/expect.2
@@ -3,5 +3,5 @@
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 104/104 files (0.0% non-contiguous), 33/100 blocks
+test_filesys: 112/200 files (0.9% non-contiguous), 145/200 blocks
Exit status is 0
diff --git a/tests/f_expand/image.gz b/tests/f_expand/image.gz
index e79eb32..4e9ac84 100644
--- a/tests/f_expand/image.gz
+++ b/tests/f_expand/image.gz
Binary files differ
diff --git a/tests/f_mke2fs2b/expect.1 b/tests/f_mke2fs2b/expect.1
index 325b12e..0ec5728 100644
--- a/tests/f_mke2fs2b/expect.1
+++ b/tests/f_mke2fs2b/expect.1
@@ -12,19 +12,11 @@
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
-Unattached inode 15
-Connect to /lost+found? yes
-
-Inode 15 has ref count 2, expecting 1.
-Set i_nlinks to count? yes
+Unattached zero-length inode 15
+Clear? yes
Pass 5: Checking group summary information
-Fix summary information? yes
-
-Inode bitmap differences: +15. FIXED
-Free inodes count wrong for group #0 (17, counted=16). FIXED
-Free inodes count wrong (17, counted=16). FIXED
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 16/32 files (0.0% non-contiguous), 25/100 blocks
+test_filesys: 15/32 files (0.0% non-contiguous), 25/100 blocks
Exit status is 1
diff --git a/tests/f_mke2fs2b/expect.2 b/tests/f_mke2fs2b/expect.2
index 763dc47..10455d7 100644
--- a/tests/f_mke2fs2b/expect.2
+++ b/tests/f_mke2fs2b/expect.2
@@ -3,5 +3,5 @@
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 16/32 files (0.0% non-contiguous), 25/100 blocks
+test_filesys: 15/32 files (0.0% non-contiguous), 25/100 blocks
Exit status is 0
diff --git a/tests/f_noroot/expect.1 b/tests/f_noroot/expect.1
index 4c14638..9099902 100644
--- a/tests/f_noroot/expect.1
+++ b/tests/f_noroot/expect.1
@@ -29,22 +29,18 @@
Inode 12 has ref count 4, expecting 3.
Set i_nlinks to count? yes
-Unattached inode 15
-Connect to /lost+found? yes
-
-Inode 15 has ref count 2, expecting 1.
-Set i_nlinks to count? yes
+Unattached zero-length inode 15
+Clear? yes
Pass 5: Checking group summary information
Fix summary information? yes
Free blocks count wrong for group 0 (75, counted=74). FIXED
Free blocks count wrong (75, counted=74). FIXED
-Inode bitmap differences: +15. FIXED
-Free inodes count wrong for group #0 (17, counted=15). FIXED
+Free inodes count wrong for group #0 (17, counted=16). FIXED
Directories count wrong for group #0 (4, counted=5). FIXED
-Free inodes count wrong (17, counted=15). FIXED
+Free inodes count wrong (17, counted=16). FIXED
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 17/32 files (0.0% non-contiguous), 26/100 blocks
+test_filesys: 16/32 files (0.0% non-contiguous), 26/100 blocks
Exit status is 1
diff --git a/tests/f_noroot/expect.2 b/tests/f_noroot/expect.2
index b9c4e8a..5ea5bc7 100644
--- a/tests/f_noroot/expect.2
+++ b/tests/f_noroot/expect.2
@@ -3,5 +3,5 @@
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 17/32 files (0.0% non-contiguous), 26/100 blocks
+test_filesys: 16/32 files (0.0% non-contiguous), 26/100 blocks
Exit status is 0
diff --git a/tests/f_preen/expect.1 b/tests/f_preen/expect.1
new file mode 100644
index 0000000..7197232
--- /dev/null
+++ b/tests/f_preen/expect.1
@@ -0,0 +1,12 @@
+which require relocation, or one part of the inode table
+which must be moved, you may wish to try running e2fsck
+the '-b 8193' option first. The problem may lie only with
+the primary block group descriptor, and the backup block
+group descriptor may be OK.
+
+Block bitmap for group 0 is not in group. (block 0)
+
+
+test_filesys: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
+ (i.e., without -a or -p options)
+Exit status is 4
diff --git a/tests/f_preen/expect.2 b/tests/f_preen/expect.2
new file mode 100644
index 0000000..9d30709
--- /dev/null
+++ b/tests/f_preen/expect.2
@@ -0,0 +1,18 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Fix summary information? yes
+
+Free blocks count wrong for group 0 (8042, counted=7614). FIXED
+Free blocks count wrong for group 1 (170, counted=169). FIXED
+Free blocks count wrong (8212, counted=7783). FIXED
+Free inodes count wrong for group #0 (1053, counted=1052). FIXED
+Free inodes count wrong for group #1 (1064, counted=1063). FIXED
+Directories count wrong for group #1 (0, counted=1). FIXED
+Free inodes count wrong (2117, counted=2115). FIXED
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 13/2128 files (0.0% non-contiguous), 717/8500 blocks
+Exit status is 1
diff --git a/tests/f_preen/image.gz b/tests/f_preen/image.gz
new file mode 100644
index 0000000..3aa7ca0
--- /dev/null
+++ b/tests/f_preen/image.gz
Binary files differ
diff --git a/tests/f_preen/name b/tests/f_preen/name
new file mode 100644
index 0000000..35a5488
--- /dev/null
+++ b/tests/f_preen/name
@@ -0,0 +1 @@
+preen should't destroy backup superblocks
diff --git a/tests/f_preen/script b/tests/f_preen/script
new file mode 100644
index 0000000..40ed11c
--- /dev/null
+++ b/tests/f_preen/script
@@ -0,0 +1,4 @@
+FSCK_OPT=-pf
+SECOND_FSCK_OPT=-yfb8193
+
+. $cmd_dir/run_e2fsck
diff --git a/tests/test_config b/tests/test_config
index 5eb3627..5e3ebb2 100644
--- a/tests/test_config
+++ b/tests/test_config
@@ -3,8 +3,14 @@
#
FSCK=../e2fsck/e2fsck
+MKE2FS=../misc/mke2fs
+DUMPE2FS=../misc/dumpe2fs
+TUNE2FS=../misc/tune2fs
+CHATTR=../misc/chattr
+LSATTR=../misc/lsattr
DEBUGFS=../debugfs/debugfs
LD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss
+TMPFILE=./test.img
export LD_LIBRARY_PATH
TZ=GMT
export TZ
diff --git a/tests/test_script.in b/tests/test_script.in
index 38a0f45..b06e905 100644
--- a/tests/test_script.in
+++ b/tests/test_script.in
@@ -14,9 +14,12 @@
fi
cmd_dir=$SRCDIR
-TMPFILE=./test.img
-. $SRCDIR/test_config
+if test "$TEST_CONFIG"x = x; then
+ TEST_CONFIG=$SRCDIR/test_config
+fi
+
+. $TEST_CONFIG
for test_dir in $TESTS
do
diff --git a/version.h b/version.h
index f2aae1b..37c017a 100644
--- a/version.h
+++ b/version.h
@@ -6,6 +6,6 @@
* under the GNU Public License.
*/
-#define E2FSPROGS_VERSION "1.05"
-#define E2FSPROGS_DATE "9-Sep-96"
+#define E2FSPROGS_VERSION "1.06"
+#define E2FSPROGS_DATE "7-Oct-96"