resolved conflicts for merge of 5ea5bedd to master

Change-Id: I3238fb8cf7fcf6a20c53b59e27bcb68af7d44060
diff --git a/.hgtags b/.hgtags
deleted file mode 100644
index d79a4db..0000000
--- a/.hgtags
+++ /dev/null
@@ -1,76 +0,0 @@
-eed1bd163c2bbe64492dfc2c30c91273f4eb8fde E2FSPROGS-0_5B
-002ccb5ae1bf2d9ab32405594b40c92f17b3a782 E2FSPROGS-0_5C
-cf2ddbcce70598dbdd38031d8877a5e6d9b20622 E2FSPROGS-1_01
-e09e1d42565d2981df8db11f03f774ac0b1760d3 E2FSPROGS-1_02
-a5ba1d4fdb208a87143f543509ab1bada29c81aa E2FSPROGS-1_03
-8396c2d7c2d08948628b87259cb6aedd3c4e854e E2FSPROGS-1_04
-791c3ec9726cf8cd55d21196fba1737b787a8a45 E2FSPROGS-1_05
-0ae294a9a498a560baa07467c47eaa10bfaa046c E2FSPROGS-1_06
-1c5bfd8bac0814c6b7ef6a76fc6842bb22083ec7 E2FSPROGS-1_07
-288182d41028ad52fb876838bb95ff40fd302eff E2FSPROGS-1_09
-2fc3b268def26733210e4ca189de981c4e55d33e E2FSPROGS-1_10
-3c16c4f2f39ba3ec732817d5f2a0c3f587dae3d5 E2FSPROGS-1_11
-24fbb672c409f8bb3f52d5e6b70df7791036e716 PQ_SNAPSHOT_971103
-7de311bac88d3b280d3cc7e921e9ee89ab94e1f8 E2FSPROGS-1_12
-49bc583d005ce8865abf0fd3c550db3837e12784 RESIZE2FS-1_03
-b985a88877fff6cf8a9d6a1d7222391278e85cf5 E2FSPROGS-1_13
-b9ab3ad2237018ab0638a18a1bac7cd8584f9125 E2FSPROGS-1_15
-e54e2ffa66f56f11028ac8e802b9b9029d564868 E2FSPROGS-1_16
-d4b8ef7ebc7b25549abc39fa638fa3ec29be3f51 E2FSPROGS-1_17
-a92cf96f4ef106e34511fd60315a9d0d80107f66 E2FSPROGS-1_19
-1805b629c21c592f2c48b47ed71562f154fbc14a E2FSPROGS-1_20
-97ac969663130215bf42a6e9a5a8e4c2ec10e13d E2FSPROGS-1_21
-a37f5435ea9e68ab43c0ac9b27feaf34a50f2708 WIP-20010620
-cfdc7d809fc8b1962e393e9fb5f1212232b55575 E2FSPROGS-1_22
-b2ed462235c29d10c5f007ba465f0a21d3424ad5 E2FSPROGS-1_23-WIP-0720
-fc8081d26d1ac935e4e93f834a7afeebc3f3d44f E2FSPROGS-1_23-WIP-0722
-7d4bd37abc524d91911c75c91e19affbce4c8b5d E2FSPROGS-1_23-WIP-0727
-0197355d6350fc84a48eacb945e54a1ef23ec4ee E2FSPROGS-1_23-WIP-0727
-03705d00929aef695c1ce3d4f1f9c4bc8ecd012e E2FSPROGS-1_23-WIP-0727
-9c4c0f3980172838f631a5d94ce81b4a140d22af E2FSPROGS-1_23
-d7047e244df1bd3ffe42847d600118566c17df5f E2FSPROGS-1_24
-a106c02843b6aa8ddcb64855ece60e33a42ca0c3 E2FSPROGS-1_24a
-96e238040b05f76c0c79eb1f7921fdaf6a1c0231 E2FSPROGS-1.25
-fa6d2465cbe58ca0d204db0ac27e4d1eb87514e1 WIP-20011130
-a77661f0ff4afc77b1b1f1350bf1080b62f6213e E2FSPROGS-1_26-WIP-1224
-50a235ca176eb44286d9390d4755a50bd70335e4 E2FSPROGS-1_26
-24c9facc3012c76b332e847fc40e6e275e94a63b E2FSPROGS-1_26
-aacf0d2ab6158d3c3001d4ae393b28b1322ff2ee E2FSPROGS-1_26
-43372cec7b50a52f0403fa5ec0bb33a943cc0ffc E2FSPROGS-1.27-WIP-0305
-088edd484dda040294e38fa4b9753345f1d300b6 E2FSPROGS-1_27
-25faca6a70ced56c0e7ae500f684c610d9e7c9d8 E2FSPROGS-1_27
-bc393f509fad6f876a8300f3d74cc96327e81213 E2FSPROGS-1.28-WIP-0626
-b4ebc1586ad35e51a93aa7e73ba99f3dddbda29f E2FSPROGS-1.28-WIP-0817
-55d76b1b9f26a2d49a8180fd7caf1e3c403f48fb E2FSPROGS-1_28
-f560f2860e69a2c164db63d7239c8c7bf1470c0d E2FSPROGS-1_29
-ccfdc3d9f9722b242b78c1cf338aece56da1deda E2FSPROGS-1.30-WIP-0930
-503af9cbc489a5eff64d44616a6e8fb2ded887af E2FSPROGS-1_30
-aad2b766b799044d52c401a886abff9f8b856c06 E2FSPROGS-1_31
-80c78aa9c6170e1c929cf4cbb12115c3647ee8ce E2FSPROGS-1_32
-118febeaf5549f7f7452ff1589b8bbf65906943d E2FSPROGS-1_33-WIP-0306
-72a0ed9722d412fc6400cb2f10ddac7b79c7f518 E2FSPROGS-1_33-WIP-0314
-96dd92ae7152d160808dc937e4ab932737543d26 E2FSPROGS-1_33-WIP-0316
-df05b8c56d04b03909e9790d3ba0f67d672a9505 E2FSPROGS-1_33-WIP-0325
-00e2c359b3d0eeb21f24b3b2cb54bc5e1feb37e6 E2FSPROGS-1_33-WIP-0330
-8426f7cad2d1ce5553f39f7e333ac599ea5f48f4 E2FSPROGS-1_33-WIP-0414
-c245056f93eb220a875ecc1d72177eb21d31f13d E2FSPROGS-1_33
-86f66c1bdc2977bea19db3a2558837cf828e7ee6 E2FSPROGS-1_34-WIP-0521
-7b8945d1438b9c5f4225764bad9e3b07fd347877 E2FSPROGS-1_34
-98abec7dd493cbf64ca470a9e184a195c7607540 E2FSPROGS-1_35-WIP-0801
-22e8a84ebaa25c221bee1421a9866055badadc7e E2FSPROGS-1_35-WIP-0821
-06179dfc122afb97c3a89bb6c3b08f7664f0c901 E2FSPROGS-1_35-WIP-1207
-b254057535b5af57bba5c1c968e47d925793009e E2FSPROGS-1_35-WIP-0131
-80e538a1ae07e3f581aaeecd8652cec24156fd7a E2FSPROGS-1_35
-25b02e5aa1662ee16206f44b4f2ecfd8798f7739 APPLE_UUID_SNAP_1
-f1db1487ef3c2ed8013643e636a52f389515affe E2FSPROGS-1_36
-41f469aa7b40e7e610a8fdd66352a2c106c1f700 E2FSPROGS-1_37
-80496573dbce31c6cda3df95a5280a6fbae28e8e E2FSPROGS-1_38-WIP-0509
-d840a9257ffbeacb9dfd95292d9af48033da5d2b E2FSPROGS-1_38-WIP-0620
-a1d839755669d4c9b5e949fd87a359cca8f9c221 E2FSPROGS-1_38
-502cdad9110a8f5bec2ff7842a6e90a543d49840 E2FSPROGS-1.39-WIP-1210
-b3e5c52c10907a4488ded00fca596487643bddc4 E2FSPROGS-1.39-WIP-1231
-cc5d09c487b27487925fb34d8ccd50a19e801ec4 E2FSPROGS-1.39-WIP-0330
-a89eec026fc32ca7da786fbe3f76d892b6badb23 E2FSPROGS-1.39-WIP-0409
-7c019255c28099336f7bba454b9307c4bdeb94a4 E2FSPROGS-1_39
-20144d6af15c4d4efb0a74ef1ef27dcce79dc997 E2FSPROGS-1_40-WIP-1114
-097cd140ac3bd6ecacdf9a0123110fb712f58604 E2FSPROGS-1_40
diff --git a/.release-checklist b/.release-checklist
index 14e2b3e..414265c 100644
--- a/.release-checklist
+++ b/.release-checklist
@@ -4,14 +4,16 @@
 
 3)  Use "git log" to assemble release notes.
 
-4)  Update files which contain version information
+4)  Run "(cd po; make e2fsprogs.pot-update)" to update the translation template.
+
+5)  Update files which contain version information
 	version.h
 	README
 	RELEASE-NOTES
 	e2fsprogs.lsm
 	doc/libext2fs.texinfo (three places)
 
-5)  Make source distribution
+6)  Make source distribution
 
-6)  Adjust sizes in e2fsprogs-VER.lsm; rebuild source files; rebuild RPM files
+7)  Adjust sizes in e2fsprogs-VER.lsm; rebuild source files; rebuild RPM files
 
diff --git a/Android.mk b/Android.mk
index f9bd91c..ba2c728 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,5 +1,4 @@
 ifneq ($(TARGET_SIMULATOR),true)
-ifeq ($(TARGET_ARCH),x86)
+use_e2fsprogs_module_tags := optional
 include $(call all-subdir-makefiles)
 endif
-endif
diff --git a/INSTALL b/INSTALL
index d410469..b5afd2f 100644
--- a/INSTALL
+++ b/INSTALL
@@ -15,6 +15,11 @@
 --enable-elf-shlibs.  If you wish to build profiling libraries, add
 the option --enable-profile.
 
+	Note that if you are building on an older system (i.e., a 2.4
+kernel and/or glibc 2.2), the use of thread local storage will probably
+cause programs that use the uuid library to core dump.  To disable
+thread local storage, use the configure option --disable-tls.
+
 4)  Compile the programs
 
 	make
diff --git a/MCONFIG.in b/MCONFIG.in
index 8cd2ccf..fba2208 100644
--- a/MCONFIG.in
+++ b/MCONFIG.in
@@ -32,6 +32,20 @@
 
 @SET_MAKE@
 
+@ifGNUmake@ V =
+@ifGNUmake@ ifeq ($(strip $(V)),)
+@ifGNUmake@ #  E = @echo
+@ifGNUmake@ #  Q = @
+@ifGNUmake@    E = @E@
+@ifGNUmake@    Q = @Q@
+@ifGNUmake@ else
+@ifGNUmake@    E = @\#
+@ifGNUmake@    Q =
+@ifGNUmake@ endif
+
+@ifNotGNUmake@ E = @E@
+@ifNotGNUmake@ Q = @Q@
+
 CC = @CC@
 BUILD_CC = @BUILD_CC@
 DEFS = -DLOCALEDIR=\"$(localedir)\" -DROOT_SYSCONFDIR=\"$(root_sysconfdir)\" @DEFS@
@@ -41,7 +55,8 @@
 ALL_CFLAGS = $(CPPFLAGS) $(DEFS) $(USE_WFLAGS) $(CFLAGS) $(XTRA_CFLAGS) \
 	$(INTL_FLAGS) $(LINUX_INCLUDE) 
 LDFLAGS = @LDFLAGS@
-ALL_LDFLAGS = $(LDFLAGS)
+ALL_LDFLAGS = $(LDFLAGS) @LDFLAG_DYNAMIC@
+LDFLAGS_STATIC = $(LDFLAGS) @LDFLAG_STATIC@
 BUILD_CFLAGS = @BUILD_CFLAGS@
 BUILD_LDFLAGS = @BUILD_LDFLAGS@
 RM = @RM@
@@ -68,37 +83,40 @@
 #
 # Library definitions
 #
-DEVMAPPER_LIBS = @DEVMAPPER_LIBS@
-STATIC_DEVMAPPER_LIBS = @STATIC_DEVMAPPER_LIBS@
-
 LIB = $(top_builddir)/lib
-LIBSS = $(LIB)/libss@LIB_EXT@
-LIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@
+LIBSS = $(LIB)/libss@LIB_EXT@ @PRIVATE_LIBS_CMT@ @DLOPEN_LIB@
+LIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@ @PRIVATE_LIBS_CMT@ @SEM_INIT_LIB@
 LIBE2P = $(LIB)/libe2p@LIB_EXT@
 LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@
-LIBUUID = $(LIB)/libuuid@LIB_EXT@ @SOCKET_LIB@
-LIBBLKID = $(LIB)/libblkid@LIB_EXT@ @STATIC_BLKID_DEVMAPPER_LIBS@
+LIBUUID = @LIBUUID@ @SOCKET_LIB@
+LIBBLKID = @LIBBLKID@ @PRIVATE_LIBS_CMT@ $(LIBUUID)
 LIBINTL = @LIBINTL@
-DEPLIBUUID = $(LIB)/libuuid@LIB_EXT@
-DEPLIBBLKID = $(LIB)/libblkid@LIB_EXT@
+DEPLIBSS = $(LIB)/libss@LIB_EXT@
+DEPLIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@
+DEPLIBUUID = @DEPLIBUUID@
+DEPLIBBLKID = @DEPLIBBLKID@ @PRIVATE_LIBS_CMT@ $(DEPLIBUUID)
 
-STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@
-STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@
+STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@ @DLOPEN_LIB@
+STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@ @SEM_INIT_LIB@
 STATIC_LIBE2P = $(LIB)/libe2p@STATIC_LIB_EXT@
 STATIC_LIBEXT2FS = $(LIB)/libext2fs@STATIC_LIB_EXT@
-STATIC_LIBUUID = $(LIB)/libuuid@STATIC_LIB_EXT@ @SOCKET_LIB@ 
-STATIC_LIBBLKID = $(LIB)/libblkid@STATIC_LIB_EXT@ $(STATIC_DEVMAPPER_LIBS)
-DEPSTATIC_LIBUUID = $(LIB)/libuuid@STATIC_LIB_EXT@
-DEPSTATIC_LIBBLKID = $(LIB)/libblkid@STATIC_LIB_EXT@
+STATIC_LIBUUID = @STATIC_LIBUUID@ @SOCKET_LIB@
+STATIC_LIBBLKID = @STATIC_LIBBLKID@ $(STATIC_LIBUUID)
+DEPSTATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@
+DEPSTATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@
+DEPSTATIC_LIBUUID = @DEPSTATIC_LIBUUID@
+DEPSTATIC_LIBBLKID = @DEPSTATIC_LIBBLKID@ $(STATIC_LIBUUID)
 
-PROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@
-PROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@
+PROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@ @DLOPEN_LIB@
+PROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@ @SEM_INIT_LIB@
 PROFILED_LIBE2P = $(LIB)/libe2p@PROFILED_LIB_EXT@
 PROFILED_LIBEXT2FS = $(LIB)/libext2fs@PROFILED_LIB_EXT@
-PROFILED_LIBUUID = $(LIB)/libuuid@PROFILED_LIB_EXT@ @SOCKET_LIB@ 
-PROFILED_LIBBLKID = $(LIB)/libblkid@PROFILED_LIB_EXT@
-DEPPROFILED_LIBUUID = $(LIB)/libuuid@PROFILED_LIB_EXT@
-DEPPROFILED_LIBBLKID = $(LIB)/libblkid@PROFILED_LIB_EXT@
+PROFILED_LIBUUID = @PROFILED_LIBUUID@ @SOCKET_LIB@
+PROFILED_LIBBLKID = @PROFILED_LIBBLKID@ $(PROFILED_LIBUUID)
+DEPPROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@
+DEPPROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@
+DEPPROFILED_LIBUUID = @PROFILED_LIBUUID@
+DEPPROFILED_LIBBLKID = @PROFILED_LIBBLKID@ $(PROFILED_LIBUUID)
 
 # An include directive pointing to a directory holding enough linux-like
 # include files to satisfy some programs here
diff --git a/Makefile.in b/Makefile.in
index 0f7aba3..45f2972 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -7,10 +7,14 @@
 
 @MCONFIG@
 
+% : %.sh
+
 @RESIZER_CMT@RESIZE_DIR= resize
 @DEBUGFS_CMT@DEBUGFS_DIR= debugfs
+@UUID_CMT@UUID_LIB_SUBDIR= lib/uuid
+@BLKID_CMT@BLKID_LIB_SUBDIR= lib/blkid
 
-LIB_SUBDIRS=lib/et lib/ss lib/e2p lib/ext2fs lib/uuid lib/blkid intl
+LIB_SUBDIRS=lib/et lib/ss lib/e2p $(UUID_LIB_SUBDIR) lib/ext2fs $(BLKID_LIB_SUBDIR) intl
 PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po
 SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
 
@@ -23,8 +27,11 @@
 	$(MAKE) progs
 	$(MAKE) docs
 
-subs:
-	@for i in $(SUBS) ; do if test -d `dirname $$i` ; then $(MAKE) $$i ; fi ; done
+subs: $(DEP_SUBSTITUTE)
+	@for i in $(SUBS) ; do if test -d `dirname $$i` ; \
+		then $(MAKE) $$i || exit $$? ; fi ; done
+	@(if test -d lib/et ; then cd lib/et && $(MAKE) compile_et; fi)
+	@(if test -d lib/ext2fs ; then cd lib/ext2fs && $(MAKE) ext2_err.h; fi)
 
 progs: subs all-progs-recursive
 libs: subs all-libs-recursive
diff --git a/README b/README
index de01d1e..81bb755 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-	This is the new version (1.40.7) of the second extended file
+	This is the new version (1.41.11) of the second extended file
 system management programs.
 
 	From time to time, I release new versions of e2fsprogs, to fix
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 8d59250..3e6ac3f 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,3 +1,1439 @@
+E2fsprogs 1.41.11 (March 14, 2010)
+==================================
+
+E2fsck will no longer give a fatal error and abort if the physical
+device has been resized beyond 2**32 blocks.  (Addresses Launchpad
+Bug: #521648)
+
+Debugfs has a bug fixed so that "logdump -b <blk>" now properly shows
+the allocation status of the block <blk>.  (Addresses Debian Bug:
+#564084)
+    
+E2fsck now prints a much more emphatic and hopefully scary message
+when a file system is detected as mounted while doing a read/write
+check of the filesystem.  Hopefully this will dissuade users from
+thinking, "surely that message doesn't apply to *me*" :-(
+
+E2fsck -n will now always open the file system read-only.  We now
+disallow certain combination of options which previously were manual
+exceptions; this is bad because it causes users to think they are
+smarter than they really are.  So "-n -c", "-n -l", "-n -L", and "-n
+-D" are no longer supported.  (Addresses Launchpad Bug: #537483)
+    
+In e2fsprogs 1.41.10, mke2fs would ask for confirmation to proceed if
+it detected a badly aligned partition.  Unfortunately, this broke some
+distribution installation scripts, so it now just prints the warning
+message and proceeds.  (Addresses Red Hat Bug: #569021. Addresses
+Launchpad Bug: #530071)
+    
+Mke2fs would take a long time to create very large journal files for
+ext4.  This was caused by a bug in ext2fs_block_iterate2(), which is
+now fixed.
+
+E2fsck now understands the EOFBLOCKS_FL flag which will be used in
+2.6.34 kernels to make e2fsck not complain about blocks deliberately
+fallocated() beyond an inode's i_size.
+
+E2fsprogs 1.41.10 introduced a regression (in commit b71e018) where
+e2fsck -fD can corrupt non-indexed directories when are exists one or
+more file names which alphabetically sort before ".".  This can happen
+with ext2 filesystems or for small directories (take less than a lock)
+which contain filenames that begin with a space or some other
+punctuation mark.  (Addresses Debian Bug: #573923, Addresses Launchpad
+Bug: #525114)
+
+
+Programmer's Notes
+------------------
+
+Add new test, f_rehash_dir, which checks to make sure e2fsck -D works
+correctly.
+    
+The libcom_err function now has support for Heimdal's com_right_r
+function().  (Addresses Sourceforge Bug: #2963865, Addresses Debian
+Bug: #558910)
+    
+
+E2fsprogs 1.41.10 (February 7, 2010)
+====================================
+
+Fix resize2fs bug which causes it to access invalid memory.
+
+Add libss support for libreadline.so.6.
+    
+Fix e2fsck's check for extent-mapped directory with an incorrect file
+type.
+
+Add new e2fsck.conf configuration option, default/broken_system_clock
+to support systems with broken CMOS hardware clocks.  Also, since too
+many distributions seem to have broken virtualization scripts now,
+e2fsck will by default accept dates which are off by up to 24 hours by
+default.  (Addresses Debian Bugs: #559776, #557636)
+
+Fix a bug where mke2fs may not use the best placement of the inode
+table when there is only room for a single block group in the last
+flex_bg.
+
+E2fsck is now smarter when it needs to allocate blocks in the course
+of fixing file system problems.  This reduces the number of spurious
+differences found in pass #5.
+
+E2fsck will no longer rehash directories which fit in a single
+directory block.
+
+E2fsck now correctly handles holes in extent-mapped directories (i.e.,
+sparse directories which use extents).
+
+Fix big-endian problems with ext2fs_bmap() and ext2fs_bmap2().
+
+Fix a bug in filefrag where on platforms which can allow file systems
+with 8k blocks, that it doesn't core dump when it sees a file system
+with 8k block sizes.  (Thanks to Mikulas Patocka for pointing this
+out.)
+
+E2fsck will correctly fix directories that are have an inaccurate
+i_size as well as other problems in a single pass, instead of
+requiring two e2fsck runs before the file system is fully fixed.
+
+Fix e2fsck so it will correctly find and detect duplicate directory
+entries for non-indexed directories.  ( Addresses Sourceforge Bug:
+#2862551)
+    
+Mke2fs will use BLKDISCARD to pre-discard all blocks on an SSD or
+thinly-provisioned storage device.  This can be disabled using the -K
+option.
+
+Enhance libext2fs so it works around bug in Linux version 2.6.19
+and earlier where the /proc/swaps file was missing the header on
+the first line.
+
+Fix bug in Linux version 2.6.19 and earlier where the /proc/swaps file
+was missing the header on the first line.
+
+Fix some big-endian bugs in e2fsck and libext2fs.
+
+Fix resize2fs so it works correctly on file systems with external
+journals instead of failing early with the error "Illegal inode
+number".
+
+Fix libss so that it does not seg fault when using a readline library
+which does not supply a readline_shutdown() function.
+
+Updated dumpe2fs's usage message so it correctly gives the right
+arguments summary for "-o superblock=<num>" and "-o blocksize=<num>".
+(Addresses Launchpad Bug: #448099)
+   
+Teach libext2fs to ignore the high 32 bits of the i_blocks field
+when huge_file file system feature is set, but the inode does not
+have the HUGE_FILE_FL flag set.
+
+Fix e2fsck's handling of 64-bit i_blocks fields.
+
+E2fsck will now print "Illegal indirect block", "Illegal
+double-indirect block", etc., instead of "Illegal block #-1" or
+"Illegal block #-2", etc.  This makes it easier for users to
+understand what has gone wrong.  (Addresses SourceForge Bug: #2871782)
+
+Mke2fs now will obtain get device topology information from blkid and
+use it to populate the superblock stride and stripe sizes.  It will
+also warn if the block device is misaligned
+
+Fix file descriptor leaks in fsck and debugfs.  (Addresses Novell Bug:
+##524526)
+
+Fix the libext2fs library code to round up the bitmap size to a 4-byte
+boundary, to prevent spurious seg faults caused by the x86
+architecture.  This doesn't affect Linux systems, but was a major
+problem on a number of *BSD systems.  (Addresses Sourceforge Bug:
+#2328708)
+
+Fix resize2fs's minimum size required for a file system so it doesn't
+fail when "resize2fs -M" is run.  (Addresses RedHat Bugzilla: #519131)
+    
+Dumpe2fs now prints summary information about the contents of the
+journal.
+    
+Avoid printing scary error messages when e2fsck starts running
+problems on low-memory systems, as it tends to panic and mislead the
+user.  (Addresses Debian Bug: #509529)
+
+Fix blkid's modules.dep parser so it handles compressed (.ko.gz)
+modules files.  (Address Red Hat Bug: #518572)
+    
+Fix tune2fs so it can add a journal when an extent-enabled file system
+is mounted.  (Addresses Launchpad bug: #416648)
+
+Update Czech, Indonesian, Polish and Vietnamese translations (from the
+Translation Project).
+    
+Update/clarify man pages.  (Addresses Sourceforge Bug: #2822186)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #540111)
+
+Programmer's Notes
+------------------
+
+The configure script supports the --with-cc, --with-ccopts, and
+--with-ldopts options.  Instead, the more standard use of CC=,
+CCFLAGS=, and LDFLAGS= in the configure command line is used instead.
+Also, --with-ld, which never worked, was also removed.
+(Addresses Sourceforge Bug: #2843248)
+
+The in-tree header files are only used if the in-tree uuid or blkid
+libraries are used.  Otherwise, use the system-provided uuid or blkid
+header files if using the system-provided libraries.
+
+Fix some build failures caused by --disable-* configure options.
+
+Work around a bug in autoconf 2.64.
+
+
+E2fsprogs 1.41.9 (August 22, 2009)
+==================================
+
+Fix a bug in e2fsck routines for reallocating an inode table which
+could cause it to loop forever on an ext4 filesystem with the FLEX_BG
+filesystem feature with a relatively rare (and specific) filesystem
+corruption.  This fix causes e2fsck to try to find space for a new
+portion of the inode table in the containing flex_bg, and if that
+fails, the new portion of the inode table will be allocated in any
+free space available in the filesystem.
+
+Make e2fsck less annoying by only asking for permission to relocate a
+block group's inode table once, instead of for every overlapping
+block.  Similarly, only ask once to recompute the block group
+checksums, instead of once for each corrupted block group's checksum.
+
+Fix filefrag to avoid print the extent header if the FIEMAP ioctl is
+not present, and it needs to fall back to using the FIBMAP ioctl.
+
+Fix filefrag to correctly print the number of extents for zero-length
+files.  (Addresses Debian Bug: #540376)
+
+Filefrag now has a -B option which forces the use of the FIBMAP ioctl
+to more easily debug the FIBMAP code.
+
+Fixed filefrag for non-extent based files.
+
+Add a new program, e2freefrag, which displays information about the
+free space fragmentation in an ext2/3/4 filesystem.
+
+Fix inode resizing via tune2fs -I so that it works correctly in the
+face of non-empty bad blocks inodes, and if the filesystem was
+formatted using the "mke2fs -E stride=N" option for RAID arrays.
+
+Fix regression in ext2fs_extent_set_bmap() caused e2fsck -fD to fail
+and corrupt large directories if the directory needs to shrink by more
+than one block.  (Addresses Debian Bug: #537510)
+    
+Fix e2fsck's buggy_init_scritps=1 so that the if the last write and/or
+last mount times are in the future, they are corrected even if
+buggy_init_scripts is set.  This is needed because otherwise resize2fs
+will refuse to resize the filesystem, even after running "e2fsck -f".
+(Addresses Launchpad bug: #373409)
+
+E2fsck will now print much fuller information when the last mount time
+or last written time is in the future, since most people can't seem to
+believe their distribution has buggy init scripts, or they have a
+failed CMOS/RTS clock battery.
+
+Enhance dumpe2fs to dump the extent information via the 'stat'
+command, and more detailed extent information via the new command
+'dump_extents'.
+    
+Update French, Polish, Czech, and Sweedish translation from the
+Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Programmer's Notes
+------------------
+
+Fixed miscellaneous gcc -Wall warnings.
+
+Fixed memory leak in error path in ext2fs_block_iterate2()
+
+Fixed non-Linux build of the intl directory by adding support for the
+E/Q/V macros.
+
+The bitmap read/write functions now treat uninitialized bitmaps as
+unallocated; this fixes a number of problems in all e2fsprogs for ext4
+filesystems when there is a need to allocate new blocks or inodes, and
+there aren't any free blocks or inodes in the already-used block
+groups.
+
+Improve ext2fs_extent_set_bmap() to avoid creating new extents which
+get inserted into the extent tree when they are not needed.
+    
+
+E2fsprogs 1.41.8 (July 11, 2009)
+================================
+
+Fix resize2fs's online resizing, fixing a regression which in
+e2fpsrogs 1.41.7.   (Addresses Debian Bug: #535452)
+
+Fix potential filesystem corruptions caused by using resize2fs to
+shrinking ext4 filesystems with extents enabled.  (Addresses Red Hat
+Bug: #510379)
+
+Optimize uuid_generate() to avoid running uuidd if it is not setuid or
+setgid and the currently running program doesn't have write access to
+the uuidd work directory.
+
+Add safety checks (for non-Linux systems) so that uuidd isn't run with
+file descriptors 0, 1, and 2 closed; and if they are closed, uuidd
+will be careful not to close the file descriptor for its unix domain
+socket when it detaches itself from the controlling tty.  Also add
+safety checks so that if the unix domain socket between the uuid
+library and uuidd program is closed for any reason, both the library
+and the uuidd will return an appropriate error code instead of looping
+in an infinite loop.
+
+The e2croncheck script, which creates an LVM snapshot and then checks
+the ext3/4 filesystem via the LVM snapshot, has been added to the
+contrib directory.
+
+Fix filefrag program for files that have more than 144 extents.
+
+Update French, Polish, Czech, Indonsian, and Sweedish translation from
+the Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bug #535530)
+
+Update/clarify man pages.
+
+Programmer's Notes
+------------------
+
+Fix compilation problem when configured with --disable-uuid.
+
+Don't build uuidgen if configured with --disable-uuid.
+
+Add the new library function ext2fs_test_inode_bitmap_range(), and
+optimized ext2fs_test_block_bitmap_range(), which will be needed for
+future optimizations for e2fsck.
+
+Fix makefile dependencies for libcom_err so that the Makefiles work
+well on non-GNU make program.  (Addresses Sourceforge Patches: #2813809)
+
+Enhance the build system so that the full set of commands executed by
+the Makefiles are displayed, instead of the Linux kernel summary
+output, if the build was configured with --enable-verbose-makecmds, or
+if GNU make is in use and the V variable is non-null, i.e., via "make
+V=1".
+
+
+E2fsprogs 1.41.7 (June 29, 2009)
+================================
+
+Fix a bug in libext2fs which can cause e2fsck and resize2fs to write
+uninitalized data into the portion of the inode beyond the first 128
+bytes when operating on inodes mapped via extents; potentially
+corrupting filesystems.
+
+Fix memory leaks in e2fsprogs, including a very large memory leak
+which can cause e2fsck to run out of memory when checking very large
+filesystems using extents.
+
+The logsave program will now filter out the ^A and ^B characters when
+writing to the console.
+
+Harden ext2fs_validate_entry() so that lsdel will not read beyond the
+end of the block even if the directory block is corrupted.
+
+Fix debugfs from core dumping if the logdump command fails to open the
+output file.
+
+Enhance badblocks to print the currently tested block number when
+interrupted with ^C.
+
+Fix lsattr to exit with a non-zero status when it encounters errors.
+(Addresses RedHat Bugzilla #489841)
+
+Fix e2fsprogs to use the same encoding for rec_len in 64k (and larger)
+filesystems as the kernel when encoding rec_len >= 64k.  For 64k
+filesystems (currently all that is supported by e2fsprogs, this is
+only a minor corner case).
+
+Resize2fs will now update the journal backup fileds in the sup0erblock
+if the journal is moved; this avoids an unnecessary full fsck after
+resizing the filesystem.  (Addresses RedHat Bugzilla: #505339)
+    
+Fix libext2fs to properly initialize i_extra_size when creating the
+journal and resize inodes.
+
+Change badblocks to allow block sizes larger than 4k.
+
+Fix filefrag progam so it correctly checks for errors from the fiemap ioctl.
+
+Update Chinese and Czech translation from the Translation Project.
+
+Clean up various man pages.  (Addresses Debian Bug #531385 and #523063)
+
+
+Programmer's Notes
+------------------
+
+Add --disable-libuuid option to configure which uses an in-system
+installed version of libuuid; the private version is enabled by
+default.
+
+Add --valgrind-leakcheck option to the test_script program which runs
+valgrind with the appropriate options to find memory leaks.
+
+
+E2fsprogs 1.41.6 (May 30, 2009)
+===============================
+
+Fix a critical regression in e2fsck introduced version 1.41.5 which
+can undo updates to the block group descriptors after a journal replay.
+
+If e2fsck receives an I/O error while replaying the journal, prompt
+the user whether they want to ignore the error or not; if e2fsck is
+run in preen mode, force fsck to abort the preen pass.
+
+Fix a bug which would cause e2fsck to core dump if the filesystem
+contains a corrupt extent header, and the user declines to clear the
+inode.  (Addresses Sourceforge Bug: #2791794)
+    
+Fix e2fsck to restart only once in the case of multiple block groups
+which inodes in use that are in the uninitialized part of the block
+group's inode table.
+
+To reduce user confusion, if the /etc/mtab file is missing
+ext2fs_check_mount_point and ext2fs_check_if_mounted will return a
+new, explicit error code to indicate this case.  This will cause
+e2fsck to give a clearer error message when the user is using buggy
+rescue CD's that don't properly set up /etc/mtab.  (Addresses Debian
+Bug: #527859)
+    
+Fix e2fsck so that if the primary group descriptors are corrupted, but
+the backup superblock is entirely invalid, to go back to using (and
+fixing) the priary group descriptors instead of completely giving up
+on the filesystem.  (Addresses Debian Bug: #516820)
+    
+Change e2fsck to not abort a preen pass if an inode is found to have
+i_file_acl_hi non-zero.  Ext3 filesystems don't care, and newer
+kernels (post 2.6.29) will ignore this field.  So let's fix it
+automatically during the preen pass instead of forcing the user to fix
+this up manually.  (Addresses Debian Bug: #526524)
+    
+Add resource tracking for e2fsck passes 1b through 1d.
+
+Speed up e2fsck by eliminating unnecessary journal checks if the
+filesystem is already mounted and doesn't need recovery (since the
+kernel would have run the journal when the filesystem was mounted.)
+Also speed up e2fsck by avoiding unnecessary block group descriptor
+updates in ext2fs_close().
+
+Add support to chattr to migrate inodes from using direct/indirect
+blocks to extents.
+
+Avoid corrupting the filesystem if there is an attempt to shrink a
+filesystem using resize2fs smaller than posible by making
+ext2fs_set_bmap() more careful not to delete the old block until the
+new block can be inserted.  In addition, fix a bug in how the minimum
+size of the filesystem (plus a safety margin) is calculated, and
+modify resize2fs to refuse to shrink the filesystem below that minimum
+size without the force flag.
+
+Teach blkid to try to figure out DM device names using take advantage
+of information in sysfs when running on kernels (2.6.29 and later)
+which provide this information in /sys/block/dm-<N>/dm/name; this is
+much faster than scanning for the devncie number in /dev/mapper.
+
+Fix blkid to prefer /dev/mapper/<name> device names instad of the
+private /dev/dm-X names.
+
+Add an -a option to debugfs's close_filesys command which writes any
+changes to the superblock or block group descriptors to all of the
+backup superblock locations.
+    
+Add support to the filefrag program to use the FIEMAP ioctl.
+
+Update Chinese translation from the Translation Project.
+
+Clean up various man pages.  (Addresses Red Hat Bugzilla: #502971 and
+Launchpad Bug: #381854)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bug #506064)
+
+
+Programmer's Notes
+------------------
+
+Add test code to make sure e2fsck's problem.c doesn't have two problem
+codes assigned to duplicate values.
+
+Avoid using a hard-coded path for /bin/rm in block's test_probe.in.
+(Addresses Sourceforge Bug: #2780205)
+
+Clean up e2fsck by removing #ifdef RESOURCE_TRACK by adding an empty
+function declaration for init_resource_track() and
+print_resource_track() when RESOURCE_TRACK is not defined.
+
+The test code which is used to build the tst_csum progam has been
+moved from from tst_csum.c into csum.c under an #ifdef DEBUG to to
+avoid compile problems caused by not having a prototype for
+ext2fs_group_desc_csum().  (Addresses Sourceforge Bug #2484331)
+
+Update the config.guess and config.sub file to the latest from the
+FSF, to allow e2fsprogs to build on the avr32 platform.  (Addresses
+Debian Bug: #528330)
+
+Add a new function, ext2fs_extent_open2(), which behaves like
+pext2fs_extent_open(), but uses the user-supplied inode structure
+when opening an extent instead of reading the inode from disk.
+
+
+E2fsprogs 1.41.5 (April 23, 2009)
+=================================
+
+Fix a number of filesystem corruption bugs in resize2fs when growing
+or shrinking ext4 filesystems off-line (i.e., when the ext4 filesystem
+is not mounted).
+
+Debugfs can now set i_file_acl_high via the set_inodes_field command,
+and print a 64-bit file acl.  This is useful for debugging filesystem
+corruptions where the high bits of i_file_acl_high are set.  E2fsck
+will detect and fix non-zero i_file_acl_high on 32-bit filesystems
+since some Linux kernel versions pay attention to this field even when
+they shouldn't.
+
+Speed up e2fsck when checking clean filesystems by avoiding
+unnecessary block reads, and coalescing the block group descriptor
+blocks so they are read using a single read operation.
+
+The libuuid library will now close all file descriptors before running
+uuidd.  This avoids problems when the calling program has open sockets
+which then never get closed because uuidd is a long-running helper
+daeomn.  (Addresses Launchpad bug: #305057)
+
+In order to avoid unnecessary full filesystem checks by e2fsck after
+an on-line resize, e2fsck will ignore the NEEDS_RECOVERY flag set on
+the backup superblocks.  (Addresses Red Hat Bugzilla: #471925)
+
+Mke2fs will avoid trying to create the journal when run in
+superblock-only mode (mke2fs -S), since the left-over journal in the
+inode table will cause mke2fs to fail.
+
+Fix a bug in libext2fs functions that check to see if a particular
+device or filesystem image is mounted, which would cause these
+functions to report that a file identical to the (relative) pathname
+used by a pseudo-filesystem was mounted when in fact it was not.
+
+Update Czech translation from the Translation Project.
+
+Add Chinese (simplified) translation from the Translation Project.
+
+Fix support for external journals (which was broken in e2fsprogs
+1.41.4).
+
+Fix a regression in debugfs where the "stat" command when no
+filesystem was open would cause debugfs to crash with a segmentation
+violation.
+
+Starting in the 2.6.29 linux kernel, the ext4 filesystem driver can be
+used to support filesystems without a journal.  Update the blkid
+library so it understands this.
+
+The blkid library will remove an entry from the blkid cache
+representing the entire disk if partitions are found, since presuambly
+the device previously had no partition table, but has now transitioned
+to using a partition table.
+
+Add a check to mke2fs and tune2fs that the argument to the -m option
+(which specifies the reserved ratio) must be greater than zero.
+(Addresses Debian Bug: #517015)
+
+Add support for tracking the number kilobytes written to the
+filesystem via the superblock field s_kbytes_written.  It will be
+updated by the kernel as well as by e2fsprogs programs which write to
+the filesystem.  This is useful for tracking the wear to filesystems
+on Solid Sstate Drives.
+
+Fix compatibility issue in the libext2fs info file and makeinfo
+version 4.12.  (Addresses Red Hat Bugzilla: #481620)
+
+Update/clarify man pages.  (Addresses Debian Bug: #515693, #365619)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bug: #506279)
+
+Programmer's Notes
+------------------
+
+Fix Hurd compilation problem in e2fsck and tune2fs (Addresses Debian
+Bug: #521602)
+
+Fix various gcc compilation warnings and other programming cleanups.
+(Addresses Red Hat Bugzilla: #486997)
+
+Add support for building the blkid command statically.
+
+Add support for disabling the built-in blkid library in favor of a
+system-installed blkid implementation via the configure option
+--disable-libblkid.
+
+
+E2fsprogs 1.41.4 (January 27, 2009)
+===================================
+
+Fixed a bug which could sometimes cause blkid to return an exit value
+of zero for a non-existent device (Addresses Debian Bug: #502541)
+
+Blkid will now recognize ext3 filesystems that have the test_fs flag
+set as ext3 filesystems.
+
+The blkid library will now recognize btrfs filesystems and swap
+devices currently used by user-level software suspend.
+
+Tune2fs now updates the block group checksums when changing the UUID
+to avoid causing e2fsck to complain vociferously at the next reboot.
+
+Tune2fs's inode size resizing algorithms have been fixed so it is not
+vastly inefficient for moderate-to-large filesystems, due to some
+O(n**2) and O(n*m) algorithms that didn't scale well at all.
+
+Fix tune2fs's inode resizing algorithm so it will not corrupt
+filesystems laid out for RAID filesystems; in addition, tune2fs will
+refuse to change the inode size for filesystems that have the flex_bg
+feature enabled.  (This is a limitation in the current implementation
+of tune2fs -I.)
+
+E2fsprogs 1.41 broke debugfs's logdump command for normal ext3/4
+filesystems with 32-bit block numbers, when the headers for 64-bit
+block numbers was added.  This regression has been fixed.
+
+Debugfs's ncheck command has been fixed to avoid printing garbage
+characters at the end of file names.
+
+Fix resize2fs for ext4 filesystems.  Some blocks that that need moving
+when shrinking filesystems with uninit_bg feature would not be moved.
+In addition, blocks and inode table blocks were not being correctly
+freed when shrinking filesystems with the flex_bg feable, which caused
+resize2fs -M to fail.  Finally, when blocks are moved, make sure the
+uninitialized flag in extents is preserved.
+
+Fix bug which caused dumpe2fs to abort with an error if run on a
+filesystem that contained an external journal.
+
+Some distributions used "mke3fs" as an alias for "mkfs.ext3"; check
+for this in argv[0] to provide better legacy support for these
+distributions.  This is a practice that should NOT be continued,
+however.
+
+Mke2fs now has a new option -U, which allows the user to specify the
+UUID that should be used for the new filesystem.
+
+Mke2fs will treat devices that are exactly 16TB as if they were 16TB
+minus one block.  This allows users who have read that ext3 supports
+up to 16TB filesystems and who create a 16TB LVM to not get confused,
+since the true limit is really 16TB minus one block.
+
+E2fsck will no longer abort an fsck run if block group has an errant
+INODE_UNINIT flag.
+
+E2fsck now distinguishes between fragmented directories and fragmented
+files in verbose mode statistics and in the fragcheck report.
+
+Fix a bug in e2fsck which casued it double count non-contiguous
+extent-based inodes.
+
+E2fsck will leave some slack space when repacking directories to allow
+room for a few directory entries to be added without causing leaf
+nodes to be split right away.
+
+Fix a bug which caused e2fsck to crash when it comes across a
+corrupted interior node in an extent tree with the error message:
+"Error1: Corrupt extent header on inode XXXXXX"
+
+E2fsck problem descriptions involving the journal are no longer
+referred to as "ext3" problems, since ext4 filesystems also have
+journals.
+
+Fix a long-standing bug in e2fsck which would cause it to crash when
+replying journals for filesystems with block sizes greater than 8k.
+
+Update Catalan translation from the Translation Project.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bugs: #503057, #502323, #511207)
+
+Programmer's Notes
+------------------
+
+Fix build of e2fsck.profiled, and add support for building profiled
+binaries in the misc directory if configured with --enable-profile.
+
+The ext2fs_open() function now performs more sanity checks on the
+superblock to avoid potential divide by zero errors by other parts of
+library.
+
+The ext2fs_read_inode_full() function now has a safety check to avoid
+a segmentation fault on corrupted filesystems.
+
+The ext2fs_new_inode() function now has a sanity check so that if the
+s_first_inode field in the superblock is insane, it will return
+EXT2_ET_INODE_ALLOC_FAIL instead of returning an invalid inode number.
+
+To avoid segmentation faults, ext2fs_block_alloc_stats() and
+ext2fs_inode_alloc_stats() now validates the passed inode or block
+number to avoid overrunning an array boundary.
+
+Various signed/unsigned errors for variables containing block numbers
+have been fixed.
+
+Accomodations for gcc's stupidity in not realizing that constant
+strings that do not contain a '%' character are safe to use in format
+strings have been made so that distributions that want to compile
+e2fsprogs with -Werror=format-security have an easier time doing so.
+
+Added a new 64-bit getsize interface, ext2fs_get_device_size2().
+
+Added the utility make-sparse.c to the contrib directory.
+
+The ext2fs_block_iterate2() function now reflects errors from
+ext2fs_extent_set_bmap() to the caller, if the callback tries to
+change a block on an extent-based file, and ext2fs_extent_set_bmap()
+fails for some reason (for example, there isn't enough disk space to
+split a node and expand the extent tree.
+
+The ext2fs_block_iterate2() function will preserve the uninit flag in
+extents when the callback function modifies a block in an extent-based
+file.
+
+E2fsck will now flag filesystems that have an insane s_first_ino field
+in their superblock, and attempt to use a backup superblock to repair
+the filesystem.
+
+
+E2fsprogs 1.41.3 (October 12, 2008)
+===================================
+
+E2fsck has been fixed so it prints the correct inode number for
+uinit_bg related problems.
+
+E2fsck will now offer to clear the test_fs flag if the ext4 filesystem
+is available on linux.  This can be disabled via a configuration
+option in /etc/e2fsck.conf.
+
+Fix a file descriptor leak in libblkid when checking to see if an ext4
+or ext4dev module exists.
+
+Fix a bug in e2fsck where in preen mode, if there are disk I/O errors
+while trying to close a filesystem can lead to infinite loops.
+(Addresses Red Hat Bugzilla #465679)
+    
+Fix a bug in resize2fs where passing in a bogus new size of 0 blocks
+will cause resize2fs to drop into an infinite loop.  (Addresses Red
+Hat Bugzilla: #465984)
+    
+Add a check in the Unix I/O functions in libext2fs so that when a
+device is opened read/write, return an error if the device is
+read-only using the BLKROGET ioctl.
+
+Fix debugfs's ncheck command so that it prints all of the names of
+hardlinks in the same directory.
+
+Fix a bug in libblkid so it correctly detects whether the ext4 and
+ext4dev filesystems are available, so that the ext4dev->ext4
+fallback code works correctly.
+
+Programmer's Notes
+------------------
+
+Fix a parallel build problem by making sure util/subst is built before
+trying to build the lib/et directory.  (Addresses Sourceforge Bug:
+#2143281)
+
+Updated "make depend" information for crc16.o
+    
+
+E2fsprogs 1.41.2 (October 2, 2008)
+==================================
+
+Fix e2fsck's automatic blocksize detection.  This fixes a regression
+from e2fsprogs 1.40.7 which caused e2fsck to fail if the user
+specifies a block number using the -b option if the blocksize option
+isn't also specified using -B.  Unfortunately, users very commonly
+invoke e2fsck using "e2fsck -b 32768 /dev/hdXXX" to use the backup
+superblock; in fack e2fsck will often suggest this kind of command
+line.  Oops.
+
+Enhance the debugfs's "ncheck" command so it will print all of the
+pathnames for the specified inodes.  (Previously, in some cases ncheck
+might not print a pathname for an inode at all if some of the other
+inodes had multiple hard links.)
+
+Enhance debugfs's "hash" command so the hash seed can be specified via
+a command-line option.  In addition, allow the hash algorithm to be
+specified by name instead of just by number.
+
+Fix e2fsck so that we don't accidentally print the translation file's
+header when asking the user a custom question so there is no prompt
+defined for a particular problem record.  For example, the question
+"Run journal anyway" will get the PO header tacked on because e2fsck
+erroneously passed the null string to _().  (Addresses Launchpad Bug:
+#246892)
+
+Enhance badblocks so that it can test a normal file which is greater
+than 2GB.
+
+Enhance the badblocks command so that it displays the time and
+percentage complete when in verbose mode.  (Addresses Debian Bug:
+#429739)
+
+Fix a potential memory leak in a error handling path in debugfs's
+ncheck function.
+
+Fix a potential memory corruption problem if a memory allocation fails
+in resize2fs.
+
+Fix the usage message for debugfs's logdump command to be consistent
+with its man manpage.
+
+Update Polish, French, Vietnamese, Dutch, Indonesian, German, Czech,
+and Sweedish translation from the Translation Project.
+
+Add documentation for the file I/O functions to the libext2fs.texinfo
+file.  (Addresses Debian Bug: #484877)
+    
+Update and clarified various man pages.  (Addresses Launchpad Bug
+#275272; Addresses Debian Bugs: #498100, #498101, #498102, #498103)
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details. (Addresses Debian Bug: #497619)
+
+Programmer's Notes
+------------------
+
+Fix a potential file descriptor leack in libcom_err by setting the
+close-on-exec flag for a fd used for debugging.  (Addresses Red Hat
+Bugzilla #464689)
+
+Fix a potential race in libcom_err by using sem_post/sem_init.  SuSE
+has been carrying a patch for a long time to prevent a largely
+theoretical race condition if a multi-threaded application adds and
+removes error tables in multiple threads.  Unfortunately SuSE's
+approach breaks compatibility by forcing applications to link and
+compile with the -pthread option; using pthread mutexes has
+historically been problematic.  We fix this by using sem_post/sem_init
+instead.
+
+Fix e2fsprogs-libs build failure due to 'subs' target.  (Addresses
+Sourceforge Bug: #2087502)
+
+Avoid linking e2initrd_helper, debugfs, blkid, and fsck with unneeded
+libraries when using ELF shared libraries.
+
+Fix ELF shared library when building on systems that don't already
+have the e2fsprogs shared libraries already installed.  (Addresses
+Sourceforge Bug: #2088537)
+
+Fix the pkg-config files so they work correctly when linking with
+static libraries and fix the include directory so programs don't have
+to use #include <ext2fs/ext2fs.h>, but can use #include <ext2fs.h>
+instead.  (Addresses Sourceforge Bug: #2089537)
+    
+Make sure ext2fs_swab64() is compiled for all platforms, and not just
+for x86.  (Addresses Debian Bug: #497515)
+    
+Remove the unused ext2fs_find_{first,ext}_bit_set() functions for all
+non-x86 platforms.  (They had been removed for x86 earlier.)
+
+Fix diet libc compilation support, which had bitrotted due to lack of
+TLC.  Fixing this improves general portability.
+
+When installing the link library when using ELF shared libraries,
+avoid using absolute pathnames if the link library and the shared
+library are installed in the same directory.  (Addresses Sourceforge
+Bug: #1782913)
+
+Fix gen-tarball so it will work even if the top-level directory has
+been renamed to something other than "e2fsprogs".  Also make
+gen-tarball print the size of the resulting tar.gz file.
+
+
+E2fsprogs 1.41.1 (September 1, 2008)
+====================================
+
+Many people are forgetting to update their mke2fs.conf file, and this
+causes ext3, ext4, and ext4dev filesystems won't get created with the
+proper features enabled.  We address this in two ways.  First, mke2fs
+will issue a warning if there is not definition for an ext3, ext4, or
+ext4dev filesystem and the user is trying to create such a filesystem
+type.  Secondly, when installing from a source build, "make install"
+will provide basic configuration file handling for /etc/mke2fs.conf.
+If it exists, and does not mention ext4dev, it will be moved aside to
+/etc/mke2fs.conf.e2fpsrogs-old and the new /etc/mke2fs.conf file will
+be installed.  If the existing /etc/mke2fs.conf file does mention
+ext4dev, then "make install" will install official mke2fs.conf file as
+/etc/mke2fs.conf.e2fsprogs-new and issue a message to the user that
+they should look to see if any changes need to be merged.
+
+The mke2fs program will now create the journal in the middle of the
+filesystem, since this minimizes seek times on average for fsync-heavy
+workloads.  In addition, mke2fs will now create journals using extents
+for filesystems that support them.  This results in a more efficient
+encoding for the journal since it eliminates the need for using
+indirect blocks.
+
+The mke2fs program will avoid allocating an extra block to the
+journal.  (Addresses Sourceforge Bug: #1483791)
+
+Mke2fs will correctly enforce the prohibition against features
+(specifically read-only features) in revision 0 filesystems.  (Thanks
+to Benno Schulenberg for noticing this problem.)
+
+Mke2fs previously would occasionaly create some slightly non-optimally
+placed inode tables; this bug has been fixed.
+
+The mke2fs and tune2fs programs now print the correct usage message
+describing the maximum journal size.  (Addresses Debian Bug: #491620)
+
+Add support for setting the default hash algorithm used in b-tree
+directories in tune2fs (from a command-line option) or mke2fs (via
+mke2fs.conf).  In addition, change the default hash algorithm to
+half_md4, since it is faster and better.
+
+The blkid library will now recognize MacOS hfsx filesystems, and
+correctly extract the label and uuid for hfs, hfsx, and hfsplus
+filesystems.  (Addresses Sourceforge Feature Requests: #2060292)
+
+The blkid library has improved detection of JFS and HPFS filesystems.
+(Addresses Launchpad Bug: #255255)
+
+The blkid library is now much more efficiently handling devicemapper
+devices, mainly by no longer using the devicemapper library.  This can
+speed up access for systems with a large number of device mapper
+devices.
+
+Blkid had a number of cache validation bugs in libblkid that have been
+fixed.   (Addresses Debian Bug: #493216)
+
+Resize2fs will now properly close out the "updating inode references"
+progress bar so there is a newline printed before printing the final
+"resize is successful" message.
+
+Resize2fs will now correctly handle filesystems with extents and/o
+uninitialized block groups correctly when file/directory blocks need
+to relocated (i.e., when shrinking a filesystem or if the resize_inode
+is not present).  To support this, the ext2fs library now supports
+initializing inode and block bitmaps that are not yet initialized when
+allocating them using ext2fs_new_block() and ext2fs_new_inode().  In
+addition, e2fs_block_iterate2() can now support changing the location
+of interior nodes of an extent tree, and ext2fs_extent_set_bmap() has
+been optimized to avoid creating unnecessary new extents when updating
+the location of blocks in the extent tree.  This will also help out
+e2fsck's recovery of obscurely corrupted filesystems with extents,
+when blocks are claimed by multiple inodes.
+
+Add support for on-line resizing ext4 filesystem with the flex_bg
+filesystem feature.  The method for doing so is not optimal, but to do
+a better job will require kernel support.
+
+E2fsprogs 1.41.0 intrduced a bug in libext2fs which casued e2image and
+debugfs programs to not be able to read e2image files; the signed
+vs. unsigned bug in the code which read bitmaps from the e2image has
+been fixed.   (Addresses Debian Bug: #495830)
+
+Resize2fs is now correctly managing the directory in-use counts when
+shrinking filesystems and directory inodes needed to be moved from one
+block group to another.  This bug has been around since e2fsprogs
+1.26, and is largely harmless, but does cause a filesystem corruption
+which will be flagged by e2fsck after the filesystem has been shrunk.
+ 
+E2fsck will no longer issue spurious complaints about the inode size
+caused by very large extent-based files, and by blocks reallocated
+using fallocate() with the FALLOC_FL_KEEP_SIZE option.  (Addresses
+Kernel Bugzilla: #11341)
+
+Mke2fs will now set the creation timestamp on the lost+found directory
+and the root directory.  (More generally, all new inodes created using
+the ext2fs library will correctly set the creation timestamp.)
+
+E2fsck now correctly calculates ind/dind/tind statistics in the
+presence of extent-based files.  In addition, "e2fsck -v" will report
+statistics of the depth of extent trees in the filesystem.  E2fsck can
+also give an inode fragmentation report using "e2fsck -E fragcheck"
+which can be useful when debugging the kernel block allocation
+routines.
+
+Fix support for empty directory blocks in ext4 filesystems with 64k
+blocksize filesystems.
+
+E2fsck will now print the depth of corrupt htree directories.
+
+Debugfs's htree command now correctly understands extent-based
+directories.  It will also print out the minor hash as well as the
+major hash.
+
+Debugfs has a new command which will print the supported features of
+e2fsprogs, to enable scripts to know whether the installed version of
+e2fsprogs can support a specific feature.
+
+Debugfs will now write files using extents for filesystems that
+support them.
+
+The error message printed by "tune2fs -I" if the inode size was too
+small was rather confusing, so it has been improved.  Also, we won't
+try to create an undo log until we know that command-line-specified
+parameters such as "tune2fs -I <inode size>" are valid.
+
+Given some filesystems found "in the wild" that had non-zero block
+group checksums even though the uninit_bg/gdt_sum feature was not
+enabled, e2fsck would issue spurious error messages.  Teach
+ext2fs_group_desc_csum_verify() to ignore the block group checksum
+entirely if the feature flag is not set.  (Addresses Debian Bug:
+#490637)
+
+The blkid program will now print out a user-friendly listing of all of
+the block devices in the system and what they contain when given the
+-L option.  (Addresses Debian Bug: #490527)
+
+The filefrag program now has a more accurate calculation for the
+number of ideal extents.  (Addresses Debian Bug: #458306)
+
+The test I/O manager is now enabled by default, but its overhead is
+only incurred when it would be enabled via the TEST_IO_FLAGS or
+TEST_IO_BLOCK environment variables.
+
+Typographical errors in various program strings and usage messages
+have been fixed; most of these were pointed out by the e2fsprogs
+message catalog translators.  (Thanks, translators!)
+
+Update and clarified various man pages, as well as some typographical
+errors in the libext2fs texinfo file.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Add Indonesian and update French, Polish, Dutch, German, Sweedish,
+Czech, and Vietnamese Translations.  (Addresses Debian Bugs: #313697,
+#401092)
+
+Programmer's Notes
+------------------
+
+Fix portability problem with the badblocks group; for systems that
+don't have nanosleep(), try using usleep() instead.
+
+The "make check" target in the e2fsck directory now sets
+LD_LIBRARY_PATH before running the various e2fsck internal library
+regression tests.
+
+The crc32 regression test in the e2fsck library is now portable to
+greater varienty of environments, including big-endian systems and
+when cross-building e2fsprogs for embedded systems.  (Addresses
+Sourceforge Bug: #2019287)
+
+The ext2fs_extent_set_bmap() had some bugs when setting the first
+block in a file, or when replacing a single block extent.  Those cases
+fortunately were came up relatively rarely when e2fsck was checking
+files, but caused some problems when resize2fs was shrinking
+extent-based files.
+
+Fix a potential core-dumping bug in libe2p's iterate_on_dir()
+function.
+
+Various ext2fs library functions --- ext2fs_block_iterate2(),
+ext2fs_initialize() and ext2fs_extent_open() --- now correctly free
+allocated memory to avoid memory leaks in all of their error return
+paths.
+
+Ext2ed was failing to build because masix support had been removed in
+the rest of e2fsprogs, so ext2ed no longer has masix support, either.
+
+The configure script now respects the LDFLAGS environment variable if
+it is set when configure is called.  (Addresses Sourceforge Feature
+Request: #1937287)
+
+Libuuid is now more portable to the Windows platform.  (Addresses
+Sourceforge Feature Request: #1937287)
+
+The configure script now uses AC_MSG_{RESULT,WARN,ERROR} instead of
+bare echo commands so that configure flags such as --quiet work
+correctly.  (Addresses Sourceforge Patches: #2058794)
+
+A few uses of sprintf have been removed from the ext2fs library to
+make life easier for bootloaders with a limited libc environment.
+(Addresses Sourceforge Bug: #2049120)
+
+The ext2fs_read_inode() checks the validity of the inode number passed
+to it earlier, to avoid doing some needless work when it would fail
+anyway.
+
+The ext2fs_open() checks the validity of the blocksize parameter
+passed to it earlier, to avoid doing some needless work when it would
+fail anyway.
+
+Disable a very annoying automatic "%.sh -> %" GNU make rule in the
+top-level Makefile.  That automatic rule is used to better support
+SCCS, but it caused problems for a particular niche distribution which
+likes to use configure.sh files to store the configure options used to
+build a package.  Unfortuntaely GNU make will use the configure.sh to
+replace the configure script, resulting in a self-inflicted fork bomb
+leading to an out-of-memory crash.
+
+To support old GNU C compilers don't use C99/C++ comments, but only
+K&R style comments, and don't try to use __builtin_expect if __GNUC__
+is less than 3.  (__builtin_expect is only supported for gcc versions
+2.96 and up, and it's tricky to check for gcc 2.95 vs gcc 2.96; since
+this is an optimization, we only try to use __builtin_expect for gcc 3
+and up.)
+
+In e2fsck's crc routines, make sure we use WORDS_BIGENDIAN instead of
+__LITTLE_ENDIAN, which are only defined by glibc's header files and
+hence isn't portable.
+
+For the convenience for some distributions that need a static tune2fs,
+the Makefile for misc/ now has a tune2fs.static target.
+
+The ext2fs_block_iterate2() function now supports BLOCK_FLAG_APPEND
+for extent-based files
+
+The ext2fs_bmap() function now supports BMAP_ALLOC for extent-based
+files.
+
+All source files no longer have any trailing white space.
+
+The io_channel_read_blk64() and io_channel_write_blk64() functions are
+now functions instead of C preprocessor macros to provide better
+forward compatibility.
+
+The e2fpsrogs translation template now expands the @x abbrevation.
+
+Various namespace leackages in libblkid, libe2p, and libext2fs have
+been fixed.
+
+Fix a parallel build problem in e2fsprogs.
+
+E2fsprogs is now more portable to Solaris.
+  * blkid no longer assumes that the TIOCGSIZE and TIOCGWINSZ ioctl's
+    are always present.
+  * Scripts do not assume that /bin/true is always in /bin
+  * Don't use __FUNCTION__ since Solaris's C99 doesn't support it.
+  * Flush stdio handles before calling setbuf(), since Solaris will
+    discard any pending output to the stream.
+  * Define _XOPEN_SOURCE to 600 since Solaris's header files are very
+    picky about which C compiler can beused for SUSv3 conformance.
+    Use of C99 is not compatible with SUSv2 (_XOPEN_SOURCE=500),
+    and C89 is not compatible with SUSv3 (_XOPEN_SOURCE=600).
+    Since we need some SUSv3 functions, consistently use SUSv3 so
+    that e2fsprogs will build on Solaris using c99.
+  * Solaris C99 does not support varargs C preprocessor macros
+  * Solaris header files pollute the C namespace if in/netinet.h
+    is included, which conflicts with e2fsprogs' use of the kmem_cache_t
+    typedef.
+  * Solaris ships with a pathetically ancient shell in /bin/sh so we
+    avoid the use of various more avanced shell constructs such as $().
+
+The "make rpm" command will now take some extra configure optiosn from
+the build environment without needing to patch the source tree.
+
+The ext2fs_add_dir_block() function will now grow the dblist more
+aggressively as an optimization to avoid copying the array too often.
+
+The e2fsck_write_bitmaps() will write the block and inode bitmaps
+together instead of in two passes.
+
+
+E2fsprogs 1.41 (July 10, 2008)
+==============================
+
+Add support for ext4 filesystem features, in particular extents,
+uninit_bg, flex_bg, huge_file, and dir_nlink features.  Also add
+support for checking journal checksums.  Debugfs will print new
+superblock and inode fields that were defined for ext4.  For example,
+the nanosecond and i_version fields of an inode, and the
+s_min_extra_isize and s_wanted_extra_isize fields from the superblock.
+Note: Resize2fs doesn't currently support the combination of flex_bg
+and !resize_inode.  (Addresses Debian Bug: #388452, #425477)
+
+Tune2fs can support migrating a filesystem from using 128 byte inodes
+to 256 byte inodes, so it can take advantage of the full features of
+ext4.
+
+Add support for "undo" support.  E2fsck and mke2fs can optionally
+record an undo log which can replayed by the program e2undo.
+
+E2fsck could damage a filesystem by trying to relocate inode tables
+due to corrupted block group descriptors, where the attempted inode
+table relocation would do far more harm than good.  E2fsck has been
+fixed to detect this these sorts of corrupted block group descriptors
+much earlier in e2fsck processing, so it can try to use the backup
+superblock and block group descriptors first.  This should be a much
+better strategy for recovering these types of corrupted filesystems.
+(Addresses Sourceforge Bug: #1840291)
+
+E2fsck will display a more understandable message when the last check
+field in the superblock is in the future.  (Addresses Debian Bug:
+#446005).
+
+E2fsck now performs more extensive and careful checks of extended
+attributes stored in the inode.
+
+Enhance mke2fs to print a more explanatory error message when
+ext2fs_get_device_size() returns EFBIG.  (Addresses Debian Bug:
+#488663)
+
+Fix mke2fs to use a default block size of 4k when formatting an
+external journal device.  This is done by using a fixed filesystem
+type list that consists only of the single filesystem type "journal"
+when looking up configuration keys in /etc/mke2fs.conf.  (Addresses
+Debian Bug: #488663)
+
+Speed up how mke2fs writes the journal data blocks by writing the disk
+blocks in larger chunks.
+
+Fix blkid handling of stale devices.  Fix a bug which could cause a
+core dump while garbage collecting the blkid cache, and assure that
+blkid_find_dev_with_tag() never returns a non-existent device.  Also,
+if a filesystem is found at a new /dev location, eliminate any
+duplicate stale entries which can not be verified.
+(Addresses Debian Bugs: #487758, #487783)
+    
+Add more paranoid checks for LVM volumes and swap partitions in
+blkid's probe function, to reduce the chances of false positives.
+
+The mke2fs program now has a much more sophisticated system for
+controlling configuration parameters of a newly created filesystem
+based on a split filesystem and usage type system.  The -t option to
+mke2fs was a deprecated alias to -c; it now specifies a filesystem
+type (ext2, ext3, ext4, etc.), while the -T option can now be a comma
+separated usage list.  The filesystem type information and type
+information is used to extract configuration parameters from the
+/etc/mke2fs.conf file.
+
+The mke2fs program will no longer complain and request the -f option
+when the user tries to create a filesystem with greater than 2**31
+blocks.
+
+When creating a filesystem for the GNU Hurd use a fs-type of Hurd and
+adjust the mke2fs.conf file so filesystems for the Hurd are created
+with a blocksize of 4096 and inode size of 128, which is all it knows
+how to handle.  (Addresses Debian Bug: #471977)
+    
+Mke2fs will always make sure that lost+found always has at least 2
+blocks, even for filesystems with very large blocksizes (i.e., 64kb).
+
+Resize2fs will now print the minimum needed filesystem size if given
+the -P option, and will resize the filesystem to the smallest possible
+size if given the -M option.
+
+Fix resize2fs to clean up the resize_inode if all of the reserved gdt
+blocks are consumed during an off-line resize.
+
+The "ls" command in debugfs now supports the -p option, which causes
+it to quote the filenames so that spaces or tabs in directory entries
+are easily visible.  (Addresses Red Hat Bugzilla: #149480; Addresses
+Sourceforge Feature Request: #1201667)
+
+Fix a potential off-by-one buffer oveflow in the fs_device_name in an
+e2image file.
+
+The chattr program will return a non-zero exit code in case of
+failures, and error messages can be suppressed with the -f option.
+(Addresses Red Hat Bugzilla: #180596)
+
+Fix a bug in badblocks which caused it to overrun an array and likely
+crash if more than 8 test patterns are specified using the -t option.
+(Addresses Debian Bug: #487298)
+    
+Add support to badblocks to limit how quickly it reads from the disk
+drive (so it can be used for background scrubbing), and so it will
+abort after finding a given number of errors.
+
+Remove support for the legacy big-endian filesystem format which only
+existed on extremely long-dead PowerPC kernels almost a decade ago.
+
+Remove MASIX support from e2fsprogs.
+
+Add I/O statistics reporting to e2fsck.
+
+Update Vietnamese, Polish, French, Spanish, German, Catalan, Dutch,
+Czech translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #487443, #487675, #490003)
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bugs: #393313, #487849, #440983, #440981)
+
+Programmer's Notes
+------------------
+
+Factor out bitmap code in preparation for adding 64-bit new-style
+bitmaps.
+
+Fix gcc -Wall warnings
+
+Fix the pkg-config files so that private librares are specified in
+"Libs.private:".
+
+Fix the libext2fs.texinfo manual so it builds with modern versions of
+texinfo.
+
+Silence the makefile from showing the awk command used to build the
+
+Clean up the badblocks group so to make it more portable and robust.
+
+Avoid using predictable filenames in /tmp in blkid's regression test
+suite.  Also remove bashism's in the regression test script.
+
+If the configure script is given --with-diet-libc, don't use thread
+local storage, since diet libc doesn't support TLS.  (Addresses
+Sourceforge Bug: #2000654)
+    
+Fix the blkid regression test suite to tolerate older versions of
+mkswap that don't support the -U option.
+
+A few library routines have been converted to support 64-bit block
+numbers; in particular, the I/O manager functions, the test_io,
+inode_io, and unix_io managers have all be converted to support 64-bit
+operation.
+
+Debugfs can now be extended for use by test programs.  See
+lib/ext2fs/extents.c for an example for how it can be used.  The test
+program links against the debugfs object files, and provides
+additional commands by defining an auxiliary libss command table.
+
+The lazy_bg filesystem feature, which was only used by developer's
+testing, has been removed since it has been largely supplanted by
+uninit_bg.  This also simplifies the code.
+
+
+E2fsprogs 1.40.11 (June 17, 2008)
+=================================
+
+Mke2fs, tune2fs, and resize2fs now use floating point to calculate the
+percentage of reserved blocks.  (Addresses Debian Bug: #452639)
+
+Updated Spanish and Catalan translations.
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.  (Addresses Debian Bugs: #483962, #483023)
+
+Add detection for ZFS volumes to the libblkid library.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+(Addresses Debian Bug: #486463)
+
+Programmer's notes:
+-------------------
+
+Fix marginal C code in probe_lvm2() function to the blkid library more
+portable for older compilers.
+
+Fix build problems on MacOS X.  (Addresses Sourceforge Bug: #1972473)
+
+Fix ext2fs_swap{16,32,64} functions so they can be used by external
+applications on big-endian machines.  (Addresses Debian Bug: #484879)
+    
+
+E2fsprogs 1.40.10 (May 21, 2008)
+================================
+
+When deciding whether or not to revalidate a blkid cache entry, if the
+device's mtime is newer than the last time the cached entry was
+validated, force a revalidation.
+
+Fix a potential data corruption bug in e2fsck in the journal replay.
+The chances of this is happening is extremely remote, especially the
+default data=ordered or data=writeback modes.  However, if a block
+which has been journalled starts with the first four bytes 0xc03b3998,
+when e2fsck replays the journal, those four bytes will be replaced
+with zero's.  Fortunately, it is highly, highly unlikely for e2fsck
+metadata to begin with those fatal 4 byte sequence, and unless
+data=ordered mode is in use, data blocks are never journaled.
+
+Updated German, Dutch, Sweedish, and Vietnamese translations.
+
+Programmer's notes:
+-------------------
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Remove default sizes of types when cross compiling, since autoconf
+2.50 can figure this out automatically now.
+
+
+E2fsprogs 1.40.9 (April 27, 2008)
+=================================
+
+SuSE's security team audited uuidd and came up with a few minor
+issues.  None of them are serious given that uuidd runs setuid as a
+unprivileged user which has no special access other than libuuid
+directory, but it's good to get them fixed.
+
+One additional fix in ext2fs_swap_inode_full() needed for resize2fs to
+work correctly with in-inode extended attributes.
+
+Updated German, Czech, Dutch, French, Polish, Sweedish, and Vietnamese
+translations.
+
+Debugfs will avoid using a pager if the standard output is not a tty.
+
+Fix debugfs and tune2fs to correctly handle daylight savings time when
+parsing a time string.
+
+Fixed spelling mistakes, typos, and otherwise clarified man pages.
+
+Fix fsck completion bars when multiple filesystems were being checked
+in parallel.  (Addresses Debian Bug: #432865, Addresses Launchpad Bug:
+#203323, Addresses Sourceforge Bug: #1926023)
+
+Fix fsck so that progress information is sent back correctly when
+multiple filesystems are being check and the output of fsck is being
+redirected to a file descriptor.  Also, include the device name (w/o
+spaces) in the progress information sent back via a file descriptor.
+(Addresses Launchpad Bug: #203323, Addresses Sourceforge Bug:
+#1926023)
+
+Teach fsck to treat "ext4" and "ext4dev" as ext* filesystems.
+
+If logsave receives a SIGTERM or SIGINT signal, it will now pass that
+signal to its child process.
+
+Fix mke2fs's creation of are resize inode when there is a non-standard
+s_first_data_block setting.
+
+Fix bug in blkid when run by an unprivileged user; most devices were
+not reported correctly.  9Addresses Launchpad Bug: #220275)
+
+Mke2fs will not allow the logically incorect combination of
+resize_inode and meta_bg, which had previously caused mke2fs to create
+a corrupt fileystem.
+
+Fix fsck in German locales so that a 'j' means yes.
+(Addresses Sourceforge Bug: #1947683)
+
+
+Programmer's notes:
+-------------------
+
+Fixed various Debian packaging issues --- see debian/changelog for
+details.
+
+Update valgrind options in test_script to work with valgrind 3.2.3
+
+Update texinfo.tex to a much newer version from the FSF.
+
+Remove bashism for configure script and from the lib/ss Makefile.
+Addresses Sourceforge Bug: 1921969
+
+Fix some silently broken tests: m_no_opt, m_meta_bg, and m_raid_opt.
+
+Fix build system so that if texinfo is not installed, it won't print a
+(harmless) error message.
+
+
 E2fsprogs 1.40.8 (March 13, 2008)
 =================================
 
diff --git a/aclocal.m4 b/aclocal.m4
index 3c32c83..6fd4652 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -2694,3 +2694,84 @@
                
 fi[]dnl
 ])# PKG_PROG_PKG_CONFIG
+# ===========================================================================
+#         http://www.nongnu.org/autoconf-archive/check_gnu_make.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   CHECK_GNU_MAKE()
+#
+# DESCRIPTION
+#
+#   This macro searches for a GNU version of make. If a match is found, the
+#   makefile variable `ifGNUmake' is set to the empty string, otherwise it
+#   is set to "#". This is useful for including a special features in a
+#   Makefile, which cannot be handled by other versions of make. The
+#   variable _cv_gnu_make_command is set to the command to invoke GNU make
+#   if it exists, the empty string otherwise.
+#
+#   Here is an example of its use:
+#
+#   Makefile.in might contain:
+#
+#       # A failsafe way of putting a dependency rule into a makefile
+#       $(DEPEND):
+#               $(CC) -MM $(srcdir)/*.c > $(DEPEND)
+#
+#       @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
+#       @ifGNUmake@ include $(DEPEND)
+#       @ifGNUmake@ endif
+#
+#   Then configure.in would normally contain:
+#
+#       CHECK_GNU_MAKE()
+#       AC_OUTPUT(Makefile)
+#
+#   Then perhaps to cause gnu make to override any other make, we could do
+#   something like this (note that GNU make always looks for GNUmakefile
+#   first):
+#
+#       if  ! test x$_cv_gnu_make_command = x ; then
+#               mv Makefile GNUmakefile
+#               echo .DEFAULT: > Makefile ;
+#               echo \  $_cv_gnu_make_command \$@ >> Makefile;
+#       fi
+#
+#   Then, if any (well almost any) other make is called, and GNU make also
+#   exists, then the other make wraps the GNU make.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 John Darrington <j.darrington@elvis.murdoch.edu.au>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+#
+# Note: Modified by Ted Ts'o to add @ifNotGNUMake@
+
+AC_DEFUN(
+        [CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
+                _cv_gnu_make_command='' ;
+dnl Search all the common names for GNU make
+                for a in "$MAKE" make gmake gnumake ; do
+                        if test -z "$a" ; then continue ; fi ;
+                        if  ( sh -c "$a --version" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then
+                                _cv_gnu_make_command=$a ;
+                                break;
+                        fi
+                done ;
+        ) ;
+dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise
+        if test  "x$_cv_gnu_make_command" != "x"  ; then
+                ifGNUmake='' ;
+                ifNotGNUmake='#' ;
+        else
+                ifGNUmake='#' ;
+                ifNotGNUmake='' ;
+                AC_MSG_RESULT("Not found");
+        fi
+        AC_SUBST(ifGNUmake)
+        AC_SUBST(ifNotGNUmake)
+] )
diff --git a/config/config.guess b/config/config.guess
index c38553d..da83314 100755
--- a/config/config.guess
+++ b/config/config.guess
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
 
-timestamp='2006-02-23'
+timestamp='2009-04-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -55,8 +56,8 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -160,6 +161,7 @@
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
@@ -210,7 +212,7 @@
 	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
 	exit ;;
     macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
@@ -322,14 +324,30 @@
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
@@ -530,7 +548,7 @@
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[45])
+    *:AIX:*:[456])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -770,6 +788,8 @@
 	case ${UNAME_MACHINE} in
 	    pc98)
 		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
 		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
@@ -777,10 +797,7 @@
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
-    i*:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:MSYS_NT-*:*:*)
+    *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
     i*:windows32*:*)
@@ -790,12 +807,18 @@
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    x86:Interix*:[345]*)
-	echo i586-pc-interix${UNAME_RELEASE}
-	exit ;;
-    EM64T:Interix*:[345]*)
-	echo x86_64-unknown-interix${UNAME_RELEASE}
-	exit ;;
+    *:Interix*:[3456]*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    EM64T | authenticamd | genuineintel)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
@@ -829,6 +852,16 @@
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
     arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
@@ -918,6 +951,9 @@
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
 	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -947,6 +983,9 @@
     x86_64:Linux:*:*)
 	echo x86_64-unknown-linux-gnu
 	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
 	# first see if it will tell us. cd to the root directory to prevent
@@ -965,9 +1004,6 @@
 	  a.out-i386-linux)
 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
 		exit ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit ;;
 	  "")
 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
 		# one that does not give us useful --help.
@@ -989,7 +1025,7 @@
 	LIBC=gnulibc1
 	# endif
 	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
 	LIBC=gnu
 	#else
 	LIBC=gnuaout
@@ -1082,8 +1118,11 @@
     pc:*:*:*)
 	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
+        # the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
         exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
@@ -1121,6 +1160,16 @@
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
           && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
@@ -1196,6 +1245,9 @@
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
 	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1205,6 +1257,15 @@
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1295,6 +1356,9 @@
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
 	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1455,9 +1519,9 @@
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff --git a/config/config.sub b/config/config.sub
index ad9f395..a39437d 100755
--- a/config/config.sub
+++ b/config/config.sub
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
 
-timestamp='2006-02-23'
+timestamp='2009-04-17'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -71,8 +72,8 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -121,6 +122,7 @@
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
   uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -240,20 +242,24 @@
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
+	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
+	| mips64octeon | mips64octeonel \
 	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
@@ -266,6 +272,7 @@
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| moxie \
 	| mt \
 	| msp430 \
 	| nios | nios2 \
@@ -274,19 +281,17 @@
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 	| pyramid \
-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
 	| v850 | v850e \
 	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-	| z8k)
-		basic_machine=$basic_machine-unknown
-		;;
-	m32c)
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
 	m6811 | m68hc11 | m6812 | m68hc12)
@@ -318,25 +323,28 @@
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
+	| avr-* | avr32-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
+	| mips64octeon-* | mips64octeonel-* \
 	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
@@ -358,22 +366,24 @@
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 	| pyramid-* \
 	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
 	| tron-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
 	| ymp-* \
-	| z8k-*)
+	| z8k-* | z80-*)
 		;;
-	m32c-*)
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
 		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -437,6 +447,10 @@
 		basic_machine=m68k-apollo
 		os=-bsd
 		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -445,10 +459,22 @@
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
+        cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -477,8 +503,8 @@
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16c)
-		basic_machine=cr16c-unknown
+	cr16)
+		basic_machine=cr16-unknown
 		os=-elf
 		;;
 	crds | unos)
@@ -516,6 +542,10 @@
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
 	djgpp)
 		basic_machine=i586-pc
 		os=-msdosdjgpp
@@ -670,6 +700,14 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	m88k-omron*)
 		basic_machine=m88k-omron
 		;;
@@ -685,6 +723,10 @@
 		basic_machine=i386-pc
 		os=-mingw32
 		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -811,6 +853,14 @@
 		basic_machine=i860-intel
 		os=-osf
 		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	pbd)
 		basic_machine=sparc-tti
 		;;
@@ -912,6 +962,10 @@
 	sb1el)
 		basic_machine=mipsisa64sb1el-unknown
 		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
 	sei)
 		basic_machine=mips-sei
 		os=-seiux
@@ -923,6 +977,9 @@
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
 	sh64)
 		basic_machine=sh64-unknown
 		;;
@@ -1012,6 +1069,10 @@
 		basic_machine=tic6x-unknown
 		os=-coff
 		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
 	tx39)
 		basic_machine=mipstx39-unknown
 		;;
@@ -1087,6 +1148,10 @@
 		basic_machine=z8k-unknown
 		os=-sim
 		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -1125,10 +1190,10 @@
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1197,8 +1262,9 @@
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
+	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
@@ -1207,7 +1273,7 @@
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
@@ -1217,7 +1283,7 @@
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1347,6 +1413,9 @@
 	-zvmoe)
 		os=-zvmoe
 		;;
+	-dicos*)
+		os=-dicos
+		;;
 	-none)
 		;;
 	*)
@@ -1369,6 +1438,12 @@
 # system, and we'll never get to this point.
 
 case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
 	*-acorn)
 		os=-riscix1.2
 		;;
@@ -1378,9 +1453,9 @@
 	arm*-semi)
 		os=-aout
 		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
 		os=-tops20
@@ -1406,6 +1481,9 @@
 	m68*-cisco)
 		os=-aout
 		;;
+        mep-*)
+		os=-elf
+		;;
 	mips*-cisco)
 		os=-elf
 		;;
diff --git a/config/parse-types.sh b/config/parse-types.sh
index 8da34fd..d7cb9cc 100755
--- a/config/parse-types.sh
+++ b/config/parse-types.sh
@@ -8,8 +8,16 @@
 s/typedef \(.*\) __s\([1-9]*\);/#define __S\2_TYPEDEF \1/
 EOF
 
-echo '#include <asm/types.h>' | ${CPP-${CC-gcc} -E} - | \
-    sed -f sed.script | grep ^# > asm_types.h
+if test -z "$CC"; then
+    CC=gcc
+fi
+
+if test -z "$CPP"; then
+    CPP="$CC -E"
+fi
+
+echo '#include <asm/types.h>' | $CPP - | \
+    sed -f sed.script | grep '^#' > asm_types.h
 
 rm sed.script
 
@@ -99,8 +107,10 @@
 EOF
 
 ${BUILD_CC-${CC-gcc}} -o asm_types asm_types.c
-if ! ./asm_types 
+if ./asm_types
 then
+    true
+else
     echo "Problem detected with asm_types.h"
     echo "" > asm_types.h
 fi
diff --git a/configure b/configure
index 623788b..12d6a9f 100755
--- a/configure
+++ b/configure
@@ -1,60 +1,81 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61.
+# Generated by GNU Autoconf 2.64.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
 
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -63,20 +84,18 @@
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -87,32 +106,270 @@
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
-# Required to use basename.
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -126,13 +383,17 @@
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
 	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
@@ -147,294 +408,19 @@
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 
-if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-
-  if test $as_have_required = yes && 	 (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
-else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  case $as_dir in
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
-	   done;;
-       esac
-done
-IFS=$as_save_IFS
-
-
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		{ ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test "x$CONFIG_SHELL" != x; then
-  for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
-}
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -451,8 +437,7 @@
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -462,49 +447,40 @@
   exit
 }
 
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
 fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -512,7 +488,7 @@
 rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -529,12 +505,12 @@
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+	test -d "$1/.";
       else
-	case $1 in
-        -*)set "./$1";;
+	case $1 in #(
+	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -548,7 +524,6 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-
 exec 7<&0 </dev/null 6>&1
 
 # Name of the host.
@@ -567,7 +542,6 @@
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME=
@@ -575,6 +549,7 @@
 PACKAGE_VERSION=
 PACKAGE_STRING=
 PACKAGE_BUGREPORT=
+PACKAGE_URL=
 
 ac_unique_file="version.h"
 # Factoring default headers for most tests.
@@ -613,172 +588,224 @@
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-E2FSPROGS_YEAR
-E2FSPROGS_MONTH
-E2FSPROGS_DAY
-E2FSPROGS_VERSION
-E2FSPROGS_PKGVER
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-LD
-GREP
-EGREP
-LINUX_INCLUDE
-MAINTAINER_CMT
-HTREE_CMT
-ELF_CMT
-BSDLIB_CMT
-PROFILE_CMT
-CHECKER_CMT
-LIB_EXT
-STATIC_LIB_EXT
-PROFILED_LIB_EXT
-SWAPFS_CMT
-DEBUGFS_CMT
-IMAGER_CMT
-RESIZER_CMT
-FSCK_PROG
-FSCK_MAN
-E2INITRD_PROG
-E2INITRD_MAN
-PKG_CONFIG
-DEVMAPPER_REQ
-DEVMAPPER_PC_LIBS
-DEVMAPPER_LIBS
-STATIC_DEVMAPPER_LIBS
-STATIC_BLKID_DEVMAPPER_LIBS
-UUIDD_CMT
-GETTEXT_PACKAGE
-PACKAGE
-VERSION
-SET_MAKE
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-MKINSTALLDIRS
-USE_NLS
-MSGFMT
-GMSGFMT
-XGETTEXT
-MSGMERGE
-RANLIB
-ALLOCA
-GLIBC21
-HAVE_POSIX_PRINTF
-HAVE_ASPRINTF
-HAVE_SNPRINTF
-HAVE_WPRINTF
-LIBICONV
-LTLIBICONV
-INTLBISON
-BUILD_INCLUDED_LIBINTL
-USE_INCLUDED_LIBINTL
-CATOBJEXT
-DATADIRNAME
-INSTOBJEXT
-GENCAT
-INTLOBJS
-INTL_LIBTOOL_SUFFIX_PREFIX
-INTLLIBS
-LIBINTL
-LTLIBINTL
-POSUB
-BINARY_TYPE
-LN
-LN_S
-MV
-CP
-RM
-CHMOD
-AWK
-SED
-PERL
-LDCONFIG
-AR
-STRIP
-BUILD_CC
-SIZEOF_SHORT
-SIZEOF_INT
-SIZEOF_LONG
-SIZEOF_LONG_LONG
-SOCKET_LIB
-DLOPEN_LIB
-UNI_DIFF_OPTS
-LINUX_CMT
-CYGWIN_CMT
-UNIX_CMT
-root_prefix
-root_bindir
-root_sbindir
-root_libdir
-root_sysconfdir
-LDFLAG_STATIC
-SS_DIR
-ET_DIR
-DO_TEST_SUITE
-INTL_FLAGS
-BUILD_CFLAGS
-BUILD_LDFLAGS
+ac_subst_vars='LTLIBOBJS
 LIBOBJS
-LTLIBOBJS'
+BUILD_LDFLAGS
+BUILD_CFLAGS
+INTL_FLAGS
+DO_TEST_SUITE
+ET_DIR
+SS_DIR
+LDFLAG_STATIC
+root_sysconfdir
+root_libdir
+root_sbindir
+root_bindir
+root_prefix
+UNIX_CMT
+CYGWIN_CMT
+LINUX_CMT
+UNI_DIFF_OPTS
+SEM_INIT_LIB
+SOCKET_LIB
+SIZEOF_LONG_LONG
+SIZEOF_LONG
+SIZEOF_INT
+SIZEOF_SHORT
+BUILD_CC
+MAKEINFO
+STRIP
+AR
+LDCONFIG
+PERL
+SED
+AWK
+CHMOD
+RM
+CP
+MV
+LN_S
+LN
+ifNotGNUmake
+ifGNUmake
+BINARY_TYPE
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+INTL_LIBTOOL_SUFFIX_PREFIX
+INTLOBJS
+GENCAT
+INSTOBJEXT
+DATADIRNAME
+CATOBJEXT
+USE_INCLUDED_LIBINTL
+BUILD_INCLUDED_LIBINTL
+INTLBISON
+LTLIBICONV
+LIBICONV
+HAVE_WPRINTF
+HAVE_SNPRINTF
+HAVE_ASPRINTF
+HAVE_POSIX_PRINTF
+GLIBC21
+ALLOCA
+RANLIB
+MSGMERGE
+XGETTEXT
+GMSGFMT
+MSGFMT
+USE_NLS
+MKINSTALLDIRS
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+SET_MAKE
+VERSION
+PACKAGE
+GETTEXT_PACKAGE
+UUIDD_CMT
+E2INITRD_MAN
+E2INITRD_PROG
+FSCK_MAN
+FSCK_PROG
+RESIZER_CMT
+IMAGER_CMT
+DEBUGFS_CMT
+BLKID_CMT
+DEPPROFILED_LIBBLKID
+PROFILED_LIBBLKID
+DEPSTATIC_LIBBLKID
+STATIC_LIBBLKID
+DEPLIBBLKID
+LIBBLKID
+UUID_CMT
+DEPPROFILED_LIBUUID
+PROFILED_LIBUUID
+DEPSTATIC_LIBUUID
+STATIC_LIBUUID
+DEPLIBUUID
+LIBUUID
+PKG_CONFIG
+TEST_IO_CMT
+PRIVATE_LIBS_CMT
+LDFLAG_DYNAMIC
+PROFILED_LIB_EXT
+STATIC_LIB_EXT
+LIB_EXT
+CHECKER_CMT
+PROFILE_CMT
+BSDLIB_CMT
+ELF_CMT
+HTREE_CMT
+Q
+E
+MAINTAINER_CMT
+LINUX_INCLUDE
+EGREP
+GREP
+CPP
+DLOPEN_LIB
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+E2FSPROGS_PKGVER
+E2FSPROGS_VERSION
+E2FSPROGS_DAY
+E2FSPROGS_MONTH
+E2FSPROGS_YEAR
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
 ac_subst_files='MCONFIG
 MAKEFILE_ELF
 MAKEFILE_BSDLIB
 MAKEFILE_PROFILE
 MAKEFILE_CHECKER
 MAKEFILE_LIBRARY
-ASM_TYPES_HEADER'
+ASM_TYPES_HEADER
+PUBLIC_CONFIG_HEADER'
+ac_user_opts='
+enable_option_checking
+with_diet_libc
+with_cc
+with_ccopts
+with_ldopts
+with_root_prefix
+enable_maintainer_mode
+enable_verbose_makecmds
+enable_compression
+enable_htree
+enable_elf_shlibs
+enable_bsd_shlibs
+enable_profile
+enable_checker
+enable_jbd_debug
+enable_blkid_debug
+enable_testio_debug
+enable_libuuid
+enable_libblkid
+enable_debugfs
+enable_imager
+enable_resizer
+enable_fsck
+enable_e2initrd_helper
+enable_tls
+enable_uuidd
+enable_nls
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+with_included_gettext
+with_libintl_prefix
+'
       ac_precious_vars='build_alias
 host_alias
 target_alias
@@ -794,6 +821,8 @@
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -892,13 +921,20 @@
     datarootdir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=no ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
     ac_prev=docdir ;;
@@ -911,13 +947,20 @@
     dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=\$ac_optarg ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1108,22 +1151,36 @@
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=\$ac_optarg ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=no ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -1143,25 +1200,25 @@
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
+  -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
     ;;
 
   *=*)
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+    esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -1170,23 +1227,36 @@
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "missing argument to $ac_option"
 fi
 
-# Be sure to have absolute directory names.
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
 		libdir localedir mandir
 do
   eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
   case $ac_val in
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1200,7 +1270,7 @@
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
@@ -1216,23 +1286,21 @@
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  { echo "$as_me: error: Working directory cannot be determined" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { echo "$as_me: error: pwd does not report name of working directory" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -1259,13 +1327,11 @@
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
-   { (exit 1); exit 1; }; }
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1313,9 +1379,9 @@
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1325,25 +1391,25 @@
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR          info documentation [DATAROOTDIR/info]
-  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/PACKAGE]
-  --htmldir=DIR          html documentation [DOCDIR]
-  --dvidir=DIR           dvi documentation [DOCDIR]
-  --pdfdir=DIR           pdf documentation [DOCDIR]
-  --psdir=DIR            ps documentation [DOCDIR]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -1359,9 +1425,11 @@
   cat <<\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-maintainer-mode enable makefile rules useful for maintainers
+  --enable-verbose-makecmds  enable verbose make command output
   --enable-compression	  enable EXPERIMENTAL compression support
   --enable-htree      	  enable EXPERIMENTAL htree directory support
   --enable-elf-shlibs	  select ELF shared libraries
@@ -1370,14 +1438,14 @@
   --enable-checker	  build checker libraries
   --enable-jbd-debug  	  enable journal debugging
   --enable-blkid-debug    enable blkid debugging
-  --enable-testio-debug   enable the use of the test I/O manager for debugging
-  --disable-swapfs    	  disable support of legacy byte-swapped filesystems
+  --disable-testio-debug  disable the use of the test I/O manager for debugging
+  --disable-libuuid	  do not build private uuid library
+  --disable-libblkid	  do not build private blkid library
   --disable-debugfs   	  disable support of debugfs program
   --disable-imager   	  disable support of e2image program
   --disable-resizer   	  disable support of e2resize program
   --enable-fsck           build fsck wrapper program
   --enable-e2initrd-helper build e2initrd-helper program
-  --enable-blkid-devmapper  build with device-mapper support
   --disable-tls           disable use of thread local support
   --disable-uuidd         disable building the uuid daemon
   --disable-nls           do not use Native Language Support
@@ -1387,10 +1455,9 @@
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-diet-libc        use diet libc
-  --with-cc=COMPILER      select compiler to use
-  --with-linker=LINKER    select linker to use
-  --with-ccopts=CCOPTS    select compiler command line options
-  --with-ldopts=LDOPTS    select linker command line options
+  --with-cc               no longer supported, use CC= instead
+  --with-ccopts           no longer supported, use CFLAGS= instead
+  --with-ldopts           no longer supported, use LDFLAGS= instead
   --with-root-prefix=PREFIX override prefix variable for files to be placed in the root
   --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
@@ -1413,6 +1480,7 @@
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
+Report bugs to the package provider.
 _ACEOF
 ac_status=$?
 fi
@@ -1420,15 +1488,17 @@
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" || continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
     ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1464,7 +1534,7 @@
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1474,21 +1544,700 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.61
+generated by GNU Autoconf 2.64
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
   exit
 fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR
+# ------------------------------------
+# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5
+$as_echo_n "checking whether $2 is declared... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $2
+  (void) $2;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   $ $0 $@
 
@@ -1524,8 +2273,8 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
 IFS=$as_save_IFS
 
 } >&5
@@ -1559,12 +2308,12 @@
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
     2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      as_fn_append ac_configure_args1 " '$ac_arg'"
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1580,13 +2329,13 @@
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args '$ac_arg'"
+      as_fn_append ac_configure_args " '$ac_arg'"
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1611,12 +2360,13 @@
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -1645,9 +2395,9 @@
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      echo "$ac_var='\''$ac_val'\''"
+      $as_echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
@@ -1662,9 +2412,9 @@
       do
 	eval ac_val=\$$ac_var
 	case $ac_val in
-	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
 	esac
-	echo "$ac_var='\''$ac_val'\''"
+	$as_echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
@@ -1680,64 +2430,69 @@
       echo
     fi
     test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
+$as_echo "/* confdefs.h */" > confdefs.h
+
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  set x "$CONFIG_SITE"
+  ac_site_file1=$CONFIG_SITE
 elif test "x$prefix" != xNONE; then
-  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
 else
-  set x "$ac_default_prefix/share/config.site" \
-	"$ac_default_prefix/etc/config.site"
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-shift
-for ac_site_file
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
+  test "x$ac_site_file" = xNONE && continue
   if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file"
   fi
@@ -1747,16 +2502,16 @@
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
@@ -1770,60 +2525,56 @@
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -1835,24 +2586,16 @@
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -1896,7 +2639,8 @@
 Oct)	MONTH_NUM=10; E2FSPROGS_MONTH="October" ;;
 Nov)	MONTH_NUM=11; E2FSPROGS_MONTH="November" ;;
 Dec)	MONTH_NUM=12; E2FSPROGS_MONTH="December" ;;
-*)	echo "Unknown month $MONTH??" ;;
+*)	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown month $MONTH??" >&5
+$as_echo "$as_me: WARNING: Unknown month $MONTH??" >&2;} ;;
 esac
 
 base_ver=`echo $E2FSPROGS_VERSION | \
@@ -1906,8 +2650,7 @@
 
 case $E2FSPROGS_VERSION in
 *-WIP|pre-*)
-	pre_vers=`echo $base_ver 0.01 - p | dc`
-	E2FSPROGS_PKGVER="$pre_vers+${base_ver}_WIP_$date_spec"
+	E2FSPROGS_PKGVER="$base_ver~WIP-$E2FSPROGS_YEAR-$MONTH_NUM-$E2FSPROGS_DAY"
 	;;
 *)
 	E2FSPROGS_PKGVER="$base_ver"
@@ -1915,8 +2658,10 @@
 esac
 
 unset DATE MONTH YEAR base_ver pre_vers date_spec
-echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
-echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&5
+$as_echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&5
+$as_echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; }
 
 
 
@@ -1924,35 +2669,27 @@
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-echo "$as_me: error: invalid value of canonical build" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -1968,28 +2705,24 @@
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-echo "$as_me: error: invalid value of canonical host" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -2005,26 +2738,7 @@
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-
-# Check whether --with-diet-libc was given.
-if test "${with_diet_libc+set}" = set; then
-  withval=$with_diet_libc; CC="diet cc -nostdinc"
-{ echo "$as_me:$LINENO: result: CC=$CC" >&5
-echo "${ECHO_T}CC=$CC" >&6; }
-fi
-
-# Check whether --with-cc was given.
-if test "${with_cc+set}" = set; then
-  withval=$with_cc; { echo "$as_me:$LINENO: result: CC=$withval" >&5
-echo "${ECHO_T}CC=$withval" >&6; }
-CC=$withval
-else
-  if test -z "$CC" ; then CC=cc; fi
-{ echo "$as_me:$LINENO: result: CC defaults to $CC" >&5
-echo "${ECHO_T}CC defaults to $CC" >&6; }
-fi
-export CC
-
+DLOPEN_LIB=''
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2033,10 +2747,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2046,25 +2760,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2073,10 +2787,10 @@
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2086,25 +2800,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -2112,12 +2826,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2130,10 +2840,10 @@
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2143,25 +2853,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2170,10 +2880,10 @@
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2184,18 +2894,18 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -2214,11 +2924,11 @@
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2229,10 +2939,10 @@
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2242,25 +2952,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2273,10 +2983,10 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2286,25 +2996,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2316,12 +3026,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2331,98 +3037,82 @@
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
 
 # Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+#include <stdio.h>
 int
 main ()
 {
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
 ac_rmfiles=
 for ac_file in $ac_files
 do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     * ) ac_rmfiles="$ac_rmfiles $ac_file";;
   esac
 done
 rm -f $ac_rmfiles
 
-if { (ac_try="$ac_link_default"
+if { { ac_try="$ac_link_default"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -2432,14 +3122,14 @@
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
 	then :; else
 	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	fi
@@ -2458,78 +3148,75 @@
 else
   ac_file=''
 fi
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
-  echo "$as_me: failed program was:" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then :
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
 fi
-
 ac_exeext=$ac_cv_exeext
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
   if { ac_try='./$ac_file'
-  { (case "(($ac_try" in
+  { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
 	cross_compiling=yes
     else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+See \`config.log' for more details." "$LINENO" 5; }
     fi
   fi
 fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
 ac_clean_files=$ac_clean_files_save
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
 
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2537,37 +3224,31 @@
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
 rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2579,51 +3260,46 @@
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
+if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2637,54 +3313,34 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
    CFLAGS="-g"
-   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2695,34 +3351,11 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2733,35 +3366,12 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_compile "$LINENO"; then :
 
-	ac_c_werror_flag=$ac_save_c_werror_flag
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2772,42 +3382,18 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2823,18 +3409,14 @@
     CFLAGS=
   fi
 fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
@@ -2891,31 +3473,9 @@
 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+  if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_c89=$ac_arg
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
@@ -2926,17 +3486,630 @@
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
   xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  DLOPEN_LIB=-ldl
+$as_echo "#define HAVE_DLOPEN 1" >>confdefs.h
+
+fi
+
+
+WITH_DIET_LIBC=
+
+# Check whether --with-diet-libc was given.
+if test "${with_diet_libc+set}" = set; then :
+  withval=$with_diet_libc; CC="diet cc -nostdinc"
+WITH_DIET_LIBC=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CC=$CC" >&5
+$as_echo "CC=$CC" >&6; }
+fi
+
+# Check whether --with-cc was given.
+if test "${with_cc+set}" = set; then :
+  withval=$with_cc; as_fn_error "--with-cc no longer supported; use CC= instead" "$LINENO" 5
+fi
+
+
+# Check whether --with-ccopts was given.
+if test "${with_ccopts+set}" = set; then :
+  withval=$with_ccopts; as_fn_error "--with-ccopts no longer supported; use CFLAGS= instead" "$LINENO" 5
+fi
+
+
+# Check whether --with-ldopts was given.
+if test "${with_ldopts+set}" = set; then :
+  withval=$with_ldopts; as_fn_error "--with-ldopts no longer supported; use LDFLAGS= instead" "$LINENO" 5
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2949,15 +4122,15 @@
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -2971,11 +4144,7 @@
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -2984,76 +4153,34 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -3065,8 +4192,8 @@
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -3076,11 +4203,7 @@
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -3089,83 +4212,40 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+if $ac_preproc_ok; then :
+
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -3175,66 +4255,40 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-# Check whether --with-linker was given.
-if test "${with_linker+set}" = set; then
-  withval=$with_linker; { echo "$as_me:$LINENO: result: LD=$withval" >&5
-echo "${ECHO_T}LD=$withval" >&6; }
-LD=$withval
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test -z "$LD" ; then LD=$CC; fi
-{ echo "$as_me:$LINENO: result: LD defaults to $LD" >&5
-echo "${ECHO_T}LD defaults to $LD" >&6; }
-fi
-export LD
-
-
-# Check whether --with-ccopts was given.
-if test "${with_ccopts+set}" = set; then
-  withval=$with_ccopts; { echo "$as_me:$LINENO: result: CCOPTS is $withval" >&5
-echo "${ECHO_T}CCOPTS is $withval" >&6; }
-CFLAGS=$withval
-fi
-
-
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+  if test -z "$GREP"; then
   ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in grep ggrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-    # Check for GNU ac_path_GREP and select it if it is found.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'GREP' >> "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
     "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_GREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_GREP="$ac_path_GREP"
@@ -3246,77 +4300,61 @@
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_GREP_found && break 3
+      $ac_path_GREP_found && break 3
+    done
   done
-done
-
-done
+  done
 IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
   ac_cv_path_GREP=$GREP
 fi
 
-
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
 
 
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
    then ac_cv_path_EGREP="$GREP -E"
    else
-     # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+     if test -z "$EGREP"; then
   ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in egrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-    # Check for GNU ac_path_EGREP and select it if it is found.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'EGREP' >> "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP="$ac_path_EGREP"
@@ -3328,46 +4366,31 @@
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_EGREP_found && break 3
+      $ac_path_EGREP_found && break 3
+    done
   done
-done
-
-done
+  done
 IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
-
    fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
 
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3382,47 +4405,23 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3432,18 +4431,14 @@
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3453,14 +4448,10 @@
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -3487,113 +4478,36 @@
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
+if ac_fn_c_try_run "$LINENO"; then :
+
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -3601,132 +4515,8 @@
 done
 
 
-if test "${ac_cv_header_linux_fs_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for linux/fs.h" >&5
-echo $ECHO_N "checking for linux/fs.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_fs_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_fs_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_fs_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking linux/fs.h usability" >&5
-echo $ECHO_N "checking linux/fs.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <linux/fs.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking linux/fs.h presence" >&5
-echo $ECHO_N "checking linux/fs.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <linux/fs.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: linux/fs.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: linux/fs.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: linux/fs.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: linux/fs.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: linux/fs.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: linux/fs.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: linux/fs.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/fs.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: linux/fs.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for linux/fs.h" >&5
-echo $ECHO_N "checking for linux/fs.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_fs_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_linux_fs_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_fs_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_fs_h" >&6; }
-
-fi
-if test $ac_cv_header_linux_fs_h = yes; then
+ac_fn_c_check_header_mongrel "$LINENO" "linux/fs.h" "ac_cv_header_linux_fs_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_fs_h" = x""yes; then :
   linux_headers=yes
 else
   linux_headers=no
@@ -3737,8 +4527,8 @@
   LINUX_INCLUDE='-I$(top_builddir)/include'
 fi
 
-{ echo "$as_me:$LINENO: checking for additional special compiler flags" >&5
-echo $ECHO_N "checking for additional special compiler flags... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for additional special compiler flags" >&5
+$as_echo_n "checking for additional special compiler flags... " >&6; }
 if test "$GCC" = yes
 then
     case "$host_cpu" in
@@ -3747,104 +4537,126 @@
 fi
 if test "x$addcflags" != x
 then
-    { echo "$as_me:$LINENO: result: $addcflags" >&5
-echo "${ECHO_T}$addcflags" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $addcflags" >&5
+$as_echo "$addcflags" >&6; }
     CFLAGS="$addcflags $CFLAGS"
 else
-    { echo "$as_me:$LINENO: result: (none)" >&5
-echo "${ECHO_T}(none)" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5
+$as_echo "(none)" >&6; }
 fi
 LIB_EXT=.a
 STATIC_LIB_EXT=.a
-PROFILE_LIB_EXT=.a
-
-# Check whether --with-ldopts was given.
-if test "${with_ldopts+set}" = set; then
-  withval=$with_ldopts; { echo "$as_me:$LINENO: result: LDFLAGS is $withval" >&5
-echo "${ECHO_T}LDFLAGS is $withval" >&6; }
-LDFLAGS=$withval
-else
-  LDFLAGS=
-fi
-
+PROFILED_LIB_EXT=.a
 
 # Check whether --with-root-prefix was given.
-if test "${with_root_prefix+set}" = set; then
+if test "${with_root_prefix+set}" = set; then :
   withval=$with_root_prefix; root_prefix=$withval
 else
   root_prefix=NONE
 fi
 # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
+if test "${enable_maintainer_mode+set}" = set; then :
   enableval=$enable_maintainer_mode; if test "$enableval" = "no"
 then
 	MAINTAINER_CMT=#
-	echo "Disabling maintainer mode"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling maintainer mode" >&5
+$as_echo "Disabling maintainer mode" >&6; }
 else
 	MAINTAINER_CMT=
-	echo "Enabling maintainer mode"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling maintainer mode" >&5
+$as_echo "Enabling maintainer mode" >&6; }
 fi
 
 else
   MAINTAINER_CMT=#
-echo "Disabling maintainer mode by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling maintainer mode by default" >&5
+$as_echo "Disabling maintainer mode by default" >&6; }
 
 fi
 
 
+# Check whether --enable-verbose-makecmds was given.
+if test "${enable_verbose_makecmds+set}" = set; then :
+  enableval=$enable_verbose_makecmds; if test "$enableval" = "no"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling verbose make commands" >&5
+$as_echo "Disabling verbose make commands" >&6; }
+	E=@echo
+	Q=@
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling verbose make commands" >&5
+$as_echo "Enabling verbose make commands" >&6; }
+	E=@\\#
+	Q=
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling verbose make commands" >&5
+$as_echo "Disabling verbose make commands" >&6; }
+E=@echo
+Q=@
+
+fi
+
+
+
 # Check whether --enable-compression was given.
-if test "${enable_compression+set}" = set; then
+if test "${enable_compression+set}" = set; then :
   enableval=$enable_compression; if test "$enableval" = "no"
 then
-	echo "Disabling compression support"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling compression support" >&5
+$as_echo "Disabling compression support" >&6; }
 else
-	cat >>confdefs.h <<\_ACEOF
-#define ENABLE_COMPRESSION 1
-_ACEOF
+	$as_echo "#define ENABLE_COMPRESSION 1" >>confdefs.h
 
-	echo "Enabling compression support"
-	echo "WARNING: Compression support is experimental"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling compression support" >&5
+$as_echo "Enabling compression support" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Compression support is experimental" >&5
+$as_echo "$as_me: WARNING: Compression support is experimental" >&2;}
 fi
 
 else
-  echo "Disabling compression support by default"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling compression support by default" >&5
+$as_echo "Disabling compression support by default" >&6; }
 
 fi
 
 # Check whether --enable-htree was given.
-if test "${enable_htree+set}" = set; then
+if test "${enable_htree+set}" = set; then :
   enableval=$enable_htree; if test "$enableval" = "no"
 then
 	HTREE_CMT=#
-	echo "Disabling htree directory support"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling htree directory support" >&5
+$as_echo "Disabling htree directory support" >&6; }
 else
 	HTREE_CMT=
-	cat >>confdefs.h <<\_ACEOF
-#define ENABLE_HTREE 1
-_ACEOF
+	$as_echo "#define ENABLE_HTREE 1" >>confdefs.h
 
-	echo "Enabling htree directory support"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling htree directory support" >&5
+$as_echo "Enabling htree directory support" >&6; }
 fi
 
 else
   HTREE_CMT=
-cat >>confdefs.h <<\_ACEOF
-#define ENABLE_HTREE 1
-_ACEOF
+$as_echo "#define ENABLE_HTREE 1" >>confdefs.h
 
-echo "Enabling htree directory support by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling htree directory support by default" >&5
+$as_echo "Enabling htree directory support by default" >&6; }
 
 fi
 
 
 E2_PKG_CONFIG_STATIC=--static
+LDFLAG_DYNAMIC=
+PRIVATE_LIBS_CMT=
 # Check whether --enable-elf-shlibs was given.
-if test "${enable_elf_shlibs+set}" = set; then
+if test "${enable_elf_shlibs+set}" = set; then :
   enableval=$enable_elf_shlibs; if test "$enableval" = "no"
 then
 	ELF_CMT=#
 	MAKEFILE_ELF=/dev/null
-	echo "Disabling ELF shared libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ELF shared libraries" >&5
+$as_echo "Disabling ELF shared libraries" >&6; }
 else
 	E2_PKG_CONFIG_STATIC=
 	ELF_CMT=
@@ -3856,25 +4668,30 @@
 	esac
 	BINARY_TYPE=elfbin
 	LIB_EXT=.so
-	echo "Enabling ELF shared libraries"
+	PRIVATE_LIBS_CMT=#
+	LDFLAG_DYNAMIC='-Wl,-rpath-link,$(top_builddir)/lib'
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling ELF shared libraries" >&5
+$as_echo "Enabling ELF shared libraries" >&6; }
 fi
 
 else
   MAKEFILE_ELF=/dev/null
 ELF_CMT=#
-echo "Disabling ELF shared libraries by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ELF shared libraries by default" >&5
+$as_echo "Disabling ELF shared libraries by default" >&6; }
 
 fi
 
 
 
 # Check whether --enable-bsd-shlibs was given.
-if test "${enable_bsd_shlibs+set}" = set; then
+if test "${enable_bsd_shlibs+set}" = set; then :
   enableval=$enable_bsd_shlibs; if test "$enableval" = "no"
 then
 	BSDLIB_CMT=#
 	MAKEFILE_BSDLIB=/dev/null
-	echo "Disabling BSD shared libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling BSD shared libraries" >&5
+$as_echo "Disabling BSD shared libraries" >&6; }
 else
 	E2_PKG_CONFIG_STATIC=
 	BSDLIB_CMT=
@@ -3886,58 +4703,66 @@
 		LIB_EXT=.dylib
 	;;
 	esac
-	echo "Enabling BSD shared libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling BSD shared libraries" >&5
+$as_echo "Enabling BSD shared libraries" >&6; }
 fi
 
 else
   MAKEFILE_BSDLIB=/dev/null
 BSDLIB_CMT=#
-echo "Disabling BSD shared libraries by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling BSD shared libraries by default" >&5
+$as_echo "Disabling BSD shared libraries by default" >&6; }
 
 fi
 
 
 
 # Check whether --enable-profile was given.
-if test "${enable_profile+set}" = set; then
+if test "${enable_profile+set}" = set; then :
   enableval=$enable_profile; if test "$enableval" = "no"
 then
 	PROFILE_CMT=#
 	MAKEFILE_PROFILE=/dev/null
-	echo "Disabling profiling libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling profiling libraries" >&5
+$as_echo "Disabling profiling libraries" >&6; }
 else
 	PROFILE_CMT=
 	MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
 	PROFILED_LIB_EXT=_p.a
-	echo "Building profiling libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building profiling libraries" >&5
+$as_echo "Building profiling libraries" >&6; }
 fi
 
 else
   PROFILE_CMT=#
 MAKEFILE_PROFILE=/dev/null
-echo "Disabling profiling libraries by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling profiling libraries by default" >&5
+$as_echo "Disabling profiling libraries by default" >&6; }
 
 fi
 
 
 
 # Check whether --enable-checker was given.
-if test "${enable_checker+set}" = set; then
+if test "${enable_checker+set}" = set; then :
   enableval=$enable_checker; if test "$enableval" = "no"
 then
 	CHECKER_CMT=#
 	MAKEFILE_CHECKER=/dev/null
-	echo "Disabling checker libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling checker libraries" >&5
+$as_echo "Disabling checker libraries" >&6; }
 else
 	CHECKER_CMT=
 	MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
-	echo "Building checker libraries"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building checker libraries" >&5
+$as_echo "Building checker libraries" >&6; }
 fi
 
 else
   CHECKER_CMT=#
 MAKEFILE_CHECKER=/dev/null
-echo "Disabling checker libraries by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling checker libraries by default" >&5
+$as_echo "Disabling checker libraries by default" >&6; }
 
 fi
 
@@ -3946,200 +4771,70 @@
 
 
 
+
+
 # Check whether --enable-jbd-debug was given.
-if test "${enable_jbd_debug+set}" = set; then
+if test "${enable_jbd_debug+set}" = set; then :
   enableval=$enable_jbd_debug; if test "$enableval" = "no"
 then
-	echo "Disabling journal debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling journal debugging" >&5
+$as_echo "Disabling journal debugging" >&6; }
 else
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_JBD_DEBUG 1
-_ACEOF
+	$as_echo "#define CONFIG_JBD_DEBUG 1" >>confdefs.h
 
-	echo "Enabling journal debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling journal debugging" >&5
+$as_echo "Enabling journal debugging" >&6; }
 fi
 
 else
-  echo "Disabling journal debugging by default"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling journal debugging by default" >&5
+$as_echo "Disabling journal debugging by default" >&6; }
 
 fi
 
 # Check whether --enable-blkid-debug was given.
-if test "${enable_blkid_debug+set}" = set; then
+if test "${enable_blkid_debug+set}" = set; then :
   enableval=$enable_blkid_debug; if test "$enableval" = "no"
 then
-	echo "Disabling blkid debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling blkid debugging" >&5
+$as_echo "Disabling blkid debugging" >&6; }
 else
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_BLKID_DEBUG 1
-_ACEOF
+	$as_echo "#define CONFIG_BLKID_DEBUG 1" >>confdefs.h
 
-	echo "Enabling blkid debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling blkid debugging" >&5
+$as_echo "Enabling blkid debugging" >&6; }
 fi
 
 else
-  echo "Disabling blkid debugging by default"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling blkid debugging by default" >&5
+$as_echo "Disabling blkid debugging by default" >&6; }
 
 fi
 
 # Check whether --enable-testio-debug was given.
-if test "${enable_testio_debug+set}" = set; then
+if test "${enable_testio_debug+set}" = set; then :
   enableval=$enable_testio_debug; if test "$enableval" = "no"
 then
-	echo "Disabling testio debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling testio debugging" >&5
+$as_echo "Disabling testio debugging" >&6; }
+	TEST_IO_CMT="#"
 else
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_TESTIO_DEBUG 1
-_ACEOF
+	TEST_IO_CMT=
+	$as_echo "#define CONFIG_TESTIO_DEBUG 1" >>confdefs.h
 
-	echo "Enabling testio debugging"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling testio debugging" >&5
+$as_echo "Enabling testio debugging" >&6; }
 fi
 
 else
-  echo "Disabling testio debugging by default"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling testio debugging by default" >&5
+$as_echo "Enabling testio debugging by default" >&6; }
+$as_echo "#define CONFIG_TESTIO_DEBUG 1" >>confdefs.h
+
+TEST_IO_CMT=
 
 fi
 
-# Check whether --enable-swapfs was given.
-if test "${enable_swapfs+set}" = set; then
-  enableval=$enable_swapfs; if test "$enableval" = "no"
-then
-	SWAPFS_CMT=#
-	echo "Disabling swapfs support"
-else
-	SWAPFS_CMT=
-	cat >>confdefs.h <<\_ACEOF
-#define ENABLE_SWAPFS 1
-_ACEOF
-
-	echo "Enabling swapfs support"
-fi
-
-else
-  SWAPFS_CMT=
-echo "Enabling swapfs support by default"
-cat >>confdefs.h <<\_ACEOF
-#define ENABLE_SWAPFS 1
-_ACEOF
-
-
-fi
-
-
-# Check whether --enable-debugfs was given.
-if test "${enable_debugfs+set}" = set; then
-  enableval=$enable_debugfs; if test "$enableval" = "no"
-then
-	echo "Disabling debugfs support"
-	DEBUGFS_CMT="#"
-else
-	DEBUGFS_CMT=
-	echo "Enabling debugfs support"
-fi
-
-else
-  echo "Enabling debugfs support by default"
-DEBUGFS_CMT=
-
-fi
-
-
-# Check whether --enable-imager was given.
-if test "${enable_imager+set}" = set; then
-  enableval=$enable_imager; if test "$enableval" = "no"
-then
-	echo "Disabling e2image support"
-	IMAGER_CMT="#"
-else
-	IMAGER_CMT=
-	echo "Enabling e2image support"
-fi
-
-else
-  echo "Enabling e2image support by default"
-IMAGER_CMT=
-
-fi
-
-
-# Check whether --enable-resizer was given.
-if test "${enable_resizer+set}" = set; then
-  enableval=$enable_resizer; if test "$enableval" = "no"
-then
-	echo "Disabling e2resize support"
-	RESIZER_CMT="#"
-else
-	RESIZER_CMT=
-	echo "Enabling e2resize support"
-fi
-
-else
-  echo "Enabling e2resize support by default"
-RESIZER_CMT=
-
-fi
-
-
-# Check whether --enable-fsck was given.
-if test "${enable_fsck+set}" = set; then
-  enableval=$enable_fsck; if test "$enableval" = "no"
-then
-	FSCK_PROG='' FSCK_MAN=''
-	echo "Not building fsck wrapper"
-else
-	FSCK_PROG=fsck FSCK_MAN=fsck.8
-	echo "Building fsck wrapper"
-fi
-
-else
-  case "$host_os" in
-  gnu*)
-    FSCK_PROG='' FSCK_MAN=''
-    echo "Not building fsck wrapper by default"
-    ;;
-  *)
-    FSCK_PROG=fsck FSCK_MAN=fsck.8
-    echo "Building fsck wrapper by default"
-esac
-
-fi
-
-
-
-# Check whether --enable-e2initrd-helper was given.
-if test "${enable_e2initrd_helper+set}" = set; then
-  enableval=$enable_e2initrd_helper; if test "$enableval" = "no"
-then
-	E2INITRD_PROG='' E2INITRD_MAN=''
-	echo "Not building e2initrd helper"
-else
-	E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
-	echo "Building e2initrd helper"
-fi
-
-else
-  E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
-echo "Building e2initrd helper by default"
-
-fi
-
-
-
-STATIC_BLKID_DEVMAPPER_LIBS=''
-# Check whether --enable-blkid-devmapper was given.
-if test "${enable_blkid_devmapper+set}" = set; then
-  enableval=$enable_blkid_devmapper; if test "$enableval" = "no"
-then
-	echo "Disabling device-mapper support"
-	DEVMAPPER_REQ=''
-	DEVMAPPER_LIBS=''
-	STATIC_DEVMAPPER_LIBS=''
-else
-	cat >>confdefs.h <<\_ACEOF
-#define HAVE_DEVMAPPER 1
-_ACEOF
-
-	echo "Enabling device-mapper support"
 
 
 
@@ -4147,10 +4842,10 @@
         if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
@@ -4162,14 +4857,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -4177,11 +4872,11 @@
 fi
 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
 if test -n "$PKG_CONFIG"; then
-  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -4190,10 +4885,10 @@
   ac_pt_PKG_CONFIG=$PKG_CONFIG
   # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
@@ -4205,14 +4900,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -4220,11 +4915,11 @@
 fi
 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
 if test -n "$ac_pt_PKG_CONFIG"; then
-  { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
-echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_pt_PKG_CONFIG" = x; then
@@ -4232,12 +4927,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     PKG_CONFIG=$ac_pt_PKG_CONFIG
@@ -4249,36 +4940,41 @@
 fi
 if test -n "$PKG_CONFIG"; then
         _pkg_min_version=0.9.0
-        { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
-echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
         if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-                { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
         else
-                { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
                 PKG_CONFIG=""
         fi
 
 fi
-
+LIBUUID=
+DEPLIBUUID=
+STATIC_LIBUUID=
+DEPSTATIC_LIBUUID=
+PROFILED_LIBUUID=
+DEPPROFILED_LIBUUID=
+UUID_CMT=
+# Check whether --enable-libuuid was given.
+if test "${enable_libuuid+set}" = set; then :
+  enableval=$enable_libuuid; if test "$enableval" = "no"
+then
 	if test -z "$PKG_CONFIG"; then
-		echo "pkg-config not installed; please install it."
-		exit 1;
+		as_fn_error "pkg-config not installed; please install it." "$LINENO" 5
 	fi
 
-	{ echo "$as_me:$LINENO: checking for dm_tree_create in -ldevmapper" >&5
-echo $ECHO_N "checking for dm_tree_create in -ldevmapper... $ECHO_C" >&6; }
-if test "${ac_cv_lib_devmapper_dm_tree_create+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
+$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
+if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldevmapper $DEVMAPPER_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+LIBS="-luuid $LIBUUID $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -4287,75 +4983,267 @@
 #ifdef __cplusplus
 extern "C"
 #endif
-char dm_tree_create ();
+char uuid_generate ();
 int
 main ()
 {
-return dm_tree_create ();
+return uuid_generate ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_devmapper_dm_tree_create=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_uuid_uuid_generate=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_devmapper_dm_tree_create=no
+  ac_cv_lib_uuid_uuid_generate=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_devmapper_dm_tree_create" >&5
-echo "${ECHO_T}$ac_cv_lib_devmapper_dm_tree_create" >&6; }
-if test $ac_cv_lib_devmapper_dm_tree_create = yes; then
-  DEVMAPPER_LIBS=`$PKG_CONFIG --libs devmapper`;
-		 STATIC_DEVMAPPER_LIBS=`$PKG_CONFIG --static --libs devmapper`;
-		 DEVMAPPER_REQ="devmapper";
-		 DEVMAPPER_PC_LIBS="-ldevmapper"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
+$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
+  LIBUUID=`$PKG_CONFIG --libs uuid`;
+		 STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`
 else
-  { { echo "$as_me:$LINENO: error: device-mapper library not found" >&5
-echo "$as_me: error: device-mapper library not found" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "external uuid library not found" "$LINENO" 5
 fi
 
-	# work around stupid devmapper.pc bug in Debian
-	case "$STATIC_DEVMAPPER_LIBS" in
-	*pthread*)
-	    ;;
-	*)
-	    echo "Working around Debian bug #390243..."
-	    STATIC_DEVMAPPER_LIBS="-pthread $STATIC_DEVMAPPER_LIBS"
-	    ;;
-	esac
-	if test "$E2_PKG_CONFIG_STATIC" = "--static"; then
-	    DEVMAPPER_LIBS="$STATIC_DEVMAPPER_LIBS"
-	    STATIC_BLKID_DEVMAPPER_LIBS="$STATIC_DEVMAPPER_LIBS"
+	UUID_CMT=#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling private uuid library" >&5
+$as_echo "Disabling private uuid library" >&6; }
+else
+	LIBUUID='$(LIB)/libuuid'$LIB_EXT
+	DEPLIBUUID=$LIBUUID
+	STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+	DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+	PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+	DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private uuid library" >&5
+$as_echo "Enabling private uuid library" >&6; }
+fi
+
+else
+  LIBUUID='$(LIB)/libuuid'$LIB_EXT
+DEPLIBUUID=$LIBUUID
+STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private uuid library by default" >&5
+$as_echo "Enabling private uuid library by default" >&6; }
+
+fi
+
+
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+        if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+        _pkg_min_version=0.9.0
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+        if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        else
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                PKG_CONFIG=""
+        fi
+
+fi
+LIBBLKID=
+DEPLIBBLKID=
+STATIC_LIBBLKID=
+DEPSTATIC_LIBBLKID=
+PROFILED_LIBBLKID=
+DEPPROFILED_LIBBLKID=
+BLKID_CMT=
+# Check whether --enable-libblkid was given.
+if test "${enable_libblkid+set}" = set; then :
+  enableval=$enable_libblkid; if test "$enableval" = "no"
+then
+	if test -z "$PKG_CONFIG"; then
+		as_fn_error "pkg-config not installed; please install it." "$LINENO" 5
 	fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_get_cache in -lblkid" >&5
+$as_echo_n "checking for blkid_get_cache in -lblkid... " >&6; }
+if test "${ac_cv_lib_blkid_blkid_get_cache+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblkid $LIBBLKID $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char blkid_get_cache ();
+int
+main ()
+{
+return blkid_get_cache ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_blkid_blkid_get_cache=yes
+else
+  ac_cv_lib_blkid_blkid_get_cache=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_get_cache" >&5
+$as_echo "$ac_cv_lib_blkid_blkid_get_cache" >&6; }
+if test "x$ac_cv_lib_blkid_blkid_get_cache" = x""yes; then :
+  LIBBLKID=`$PKG_CONFIG --libs blkid`;
+		 STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`
+else
+  as_fn_error "external blkid library not found" "$LINENO" 5
+fi
+
+	BLKID_CMT=#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling private blkid library" >&5
+$as_echo "Disabling private blkid library" >&6; }
+else
+	LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+	DEPLIBBLKID=$LIBBLKID
+	STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+	DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+	PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+	DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+	$as_echo "#define CONFIG_BUILD_FINDFS 1" >>confdefs.h
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private blkid library" >&5
+$as_echo "Enabling private blkid library" >&6; }
 fi
 
 else
-  echo "Disabling device-mapper support by default"
+  LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+DEPLIBBLKID=$LIBBLKID
+STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+$as_echo "#define CONFIG_BUILD_FINDFS 1" >>confdefs.h
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private blkid library by default" >&5
+$as_echo "Enabling private blkid library by default" >&6; }
 
 fi
 
@@ -4364,30 +5252,157 @@
 
 
 
+
+
+# Check whether --enable-debugfs was given.
+if test "${enable_debugfs+set}" = set; then :
+  enableval=$enable_debugfs; if test "$enableval" = "no"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling debugfs support" >&5
+$as_echo "Disabling debugfs support" >&6; }
+	DEBUGFS_CMT="#"
+else
+	DEBUGFS_CMT=
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling debugfs support" >&5
+$as_echo "Enabling debugfs support" >&6; }
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling debugfs support by default" >&5
+$as_echo "Enabling debugfs support by default" >&6; }
+DEBUGFS_CMT=
+
+fi
+
+
+# Check whether --enable-imager was given.
+if test "${enable_imager+set}" = set; then :
+  enableval=$enable_imager; if test "$enableval" = "no"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e2image support" >&5
+$as_echo "Disabling e2image support" >&6; }
+	IMAGER_CMT="#"
+else
+	IMAGER_CMT=
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2image support" >&5
+$as_echo "Enabling e2image support" >&6; }
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2image support by default" >&5
+$as_echo "Enabling e2image support by default" >&6; }
+IMAGER_CMT=
+
+fi
+
+
+# Check whether --enable-resizer was given.
+if test "${enable_resizer+set}" = set; then :
+  enableval=$enable_resizer; if test "$enableval" = "no"
+then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e2resize support" >&5
+$as_echo "Disabling e2resize support" >&6; }
+	RESIZER_CMT="#"
+else
+	RESIZER_CMT=
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2resize support" >&5
+$as_echo "Enabling e2resize support" >&6; }
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2resize support by default" >&5
+$as_echo "Enabling e2resize support by default" >&6; }
+RESIZER_CMT=
+
+fi
+
+
+# Check whether --enable-fsck was given.
+if test "${enable_fsck+set}" = set; then :
+  enableval=$enable_fsck; if test "$enableval" = "no"
+then
+	FSCK_PROG='' FSCK_MAN=''
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building fsck wrapper" >&5
+$as_echo "Not building fsck wrapper" >&6; }
+else
+	FSCK_PROG=fsck FSCK_MAN=fsck.8
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building fsck wrapper" >&5
+$as_echo "Building fsck wrapper" >&6; }
+fi
+
+else
+  case "$host_os" in
+  gnu*)
+    FSCK_PROG='' FSCK_MAN=''
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building fsck wrapper by default" >&5
+$as_echo "Not building fsck wrapper by default" >&6; }
+    ;;
+  *)
+    FSCK_PROG=fsck FSCK_MAN=fsck.8
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building fsck wrapper by default" >&5
+$as_echo "Building fsck wrapper by default" >&6; }
+esac
+
+fi
+
+
+
+# Check whether --enable-e2initrd-helper was given.
+if test "${enable_e2initrd_helper+set}" = set; then :
+  enableval=$enable_e2initrd_helper; if test "$enableval" = "no"
+then
+	E2INITRD_PROG='' E2INITRD_MAN=''
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building e2initrd helper" >&5
+$as_echo "Not building e2initrd helper" >&6; }
+else
+	E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building e2initrd helper" >&5
+$as_echo "Building e2initrd helper" >&6; }
+fi
+
+else
+  E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building e2initrd helper by default" >&5
+$as_echo "Building e2initrd helper by default" >&6; }
+
+fi
+
+
+
 # Check whether --enable-tls was given.
-if test "${enable_tls+set}" = set; then
+if test "${enable_tls+set}" = set; then :
   enableval=$enable_tls; if test "$enableval" = "no"
 then
 	try_tls=""
-	echo "Disabling thread local support"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling thread local support" >&5
+$as_echo "Disabling thread local support" >&6; }
 else
 	try_tls="yes"
-	echo "Enabling thread local support"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling thread local support" >&5
+$as_echo "Enabling thread local support" >&6; }
 fi
 
 else
-  try_tls="yes"
-echo "Try using thread local support by default"
+  if test -n "$WITH_DIET_LIBC"
+then
+	try_tls=""
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Diet libc does not support thread local support" >&5
+$as_echo "Diet libc does not support thread local support" >&6; }
+else
+	try_tls="yes"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Try using thread local support by default" >&5
+$as_echo "Try using thread local support by default" >&6; }
+fi
 
 fi
 
 if test "$try_tls" = "yes"
 then
 
-  { echo "$as_me:$LINENO: checking for thread local storage (TLS) class" >&5
-echo $ECHO_N "checking for thread local storage (TLS) class... $ECHO_C" >&6; }
-  if test "${ac_cv_tls+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5
+$as_echo_n "checking for thread local storage (TLS) class... " >&6; }
+  if test "${ac_cv_tls+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
     ax_tls_keywords="__thread __declspec(thread) none"
@@ -4395,11 +5410,7 @@
        case $ax_tls_keyword in
           none) ac_cv_tls=none ; break ;;
           *)
-             cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
                  static void
@@ -4415,32 +5426,12 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_tls=$ax_tls_keyword ; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_tls=none
+  ac_cv_tls=none
 
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
           esac
     done
@@ -4455,32 +5446,31 @@
 _ACEOF
 
   fi
-  { echo "$as_me:$LINENO: result: $ac_cv_tls" >&5
-echo "${ECHO_T}$ac_cv_tls" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
 
 fi
 # Check whether --enable-uuidd was given.
-if test "${enable_uuidd+set}" = set; then
+if test "${enable_uuidd+set}" = set; then :
   enableval=$enable_uuidd; if test "$enableval" = "no"
 then
-	echo "Not building uuidd"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building uuidd" >&5
+$as_echo "Not building uuidd" >&6; }
 	UUIDD_CMT="#"
 else
-	cat >>confdefs.h <<\_ACEOF
-#define USE_UUIDD 1
-_ACEOF
+	$as_echo "#define USE_UUIDD 1" >>confdefs.h
 
 	UUIDD_CMT=""
-	echo "Building uuidd"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd" >&5
+$as_echo "Building uuidd" >&6; }
 fi
 
 else
-  cat >>confdefs.h <<\_ACEOF
-#define USE_UUIDD 1
-_ACEOF
+  $as_echo "#define USE_UUIDD 1" >>confdefs.h
 
 UUIDD_CMT=""
-echo "Building uuidd by default"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd by default" >&5
+$as_echo "Building uuidd by default" >&6; }
 
 fi
 
@@ -4503,11 +5493,12 @@
 
 
 
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
@@ -4524,12 +5515,12 @@
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
   SET_MAKE=
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -4546,22 +5537,23 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -4579,17 +5571,29 @@
 	    # program-specific install script used by HP pwplus--don't use.
 	    :
 	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
 	  fi
 	fi
       done
     done
     ;;
 esac
-done
+
+  done
 IFS=$as_save_IFS
 
+rm -rf conftest.one conftest.two conftest.dir
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
@@ -4602,8 +5606,8 @@
     INSTALL=$ac_install_sh
   fi
 fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -4627,17 +5631,17 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
     # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then
+if test "${enable_nls+set}" = set; then :
   enableval=$enable_nls; USE_NLS=$enableval
 else
   USE_NLS=yes
 fi
 
-  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
 
 
 
@@ -4674,10 +5678,10 @@
 
 # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGFMT" in
   [\\/]* | ?:[\\/]*)
@@ -4705,19 +5709,19 @@
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
 if test "$MSGFMT" != ":"; then
-  { echo "$as_me:$LINENO: result: $MSGFMT" >&5
-echo "${ECHO_T}$MSGFMT" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_GMSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $GMSGFMT in
   [\\/]* | ?:[\\/]*)
@@ -4729,14 +5733,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
@@ -4745,11 +5749,11 @@
 fi
 GMSGFMT=$ac_cv_path_GMSGFMT
 if test -n "$GMSGFMT"; then
-  { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -4785,10 +5789,10 @@
 
 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_XGETTEXT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$XGETTEXT" in
   [\\/]* | ?:[\\/]*)
@@ -4816,11 +5820,11 @@
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
 if test "$XGETTEXT" != ":"; then
-  { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
     rm -f messages.po
@@ -4856,10 +5860,10 @@
 
 # Extract the first word of "msgmerge", so it can be a program name with args.
 set dummy msgmerge; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MSGMERGE+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGMERGE" in
   [\\/]* | ?:[\\/]*)
@@ -4886,11 +5890,11 @@
 fi
 MSGMERGE="$ac_cv_path_MSGMERGE"
 if test "$MSGMERGE" != ":"; then
-  { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
-echo "${ECHO_T}$MSGMERGE" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -4900,8 +5904,8 @@
       : ;
     else
       GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
-      { echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
-echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
       GMSGFMT=":"
     fi
   fi
@@ -4911,8 +5915,8 @@
        (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
       : ;
     else
-      { echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
-echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5
+$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
       XGETTEXT=":"
     fi
         rm -f messages.po
@@ -4924,10 +5928,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -4937,25 +5941,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -4964,10 +5968,10 @@
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -4977,25 +5981,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -5003,12 +6007,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -5018,18 +6018,14 @@
 fi
 
 
-        { echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
-echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6; }
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror in -lcposix" >&5
+$as_echo_n "checking for strerror in -lcposix... " >&6; }
+if test "${ac_cv_lib_cposix_strerror+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcposix  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5047,54 +6043,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_cposix_strerror=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_cposix_strerror=no
+  ac_cv_lib_cposix_strerror=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6; }
-if test $ac_cv_lib_cposix_strerror = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cposix_strerror" >&5
+$as_echo "$ac_cv_lib_cposix_strerror" >&6; }
+if test "x$ac_cv_lib_cposix_strerror" = x""yes; then :
   LIBS="$LIBS -lcposix"
 fi
 
 
 
-{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
-if test "${ac_cv_c_const+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if test "${ac_cv_c_const+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5154,54 +6125,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_const=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_c_const=no
+  ac_cv_c_const=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-cat >>confdefs.h <<\_ACEOF
-#define const
-_ACEOF
+$as_echo "#define const /**/" >>confdefs.h
 
 fi
 
 
-  { echo "$as_me:$LINENO: checking for signed" >&5
-echo $ECHO_N "checking for signed... $ECHO_C" >&6; }
-if test "${bh_cv_c_signed+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signed" >&5
+$as_echo_n "checking for signed... " >&6; }
+if test "${bh_cv_c_signed+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5212,55 +6157,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   bh_cv_c_signed=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	bh_cv_c_signed=no
+  bh_cv_c_signed=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $bh_cv_c_signed" >&5
-echo "${ECHO_T}$bh_cv_c_signed" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bh_cv_c_signed" >&5
+$as_echo "$bh_cv_c_signed" >&6; }
   if test $bh_cv_c_signed = no; then
 
-cat >>confdefs.h <<\_ACEOF
-#define signed
-_ACEOF
+$as_echo "#define signed /**/" >>confdefs.h
 
   fi
 
-{ echo "$as_me:$LINENO: checking for inline" >&5
-echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
-if test "${ac_cv_c_inline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef __cplusplus
 typedef int foo_t;
@@ -5269,39 +6188,16 @@
 #endif
 
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_inline=$ac_kw
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   test "$ac_cv_c_inline" != no && break
 done
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6; }
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
 
 case $ac_cv_c_inline in
   inline | yes) ;;
@@ -5318,61 +6214,9 @@
     ;;
 esac
 
-{ echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_off_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef off_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_off_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = x""yes; then :
 
-	ac_cv_type_off_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
-if test $ac_cv_type_off_t = yes; then
-  :
 else
 
 cat >>confdefs.h <<_ACEOF
@@ -5381,61 +6225,9 @@
 
 fi
 
-{ echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_size_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef size_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_size_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = x""yes; then :
 
-	ac_cv_type_size_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
-if test $ac_cv_type_size_t = yes; then
-  :
 else
 
 cat >>confdefs.h <<_ACEOF
@@ -5445,16 +6237,12 @@
 fi
 
 
-  { echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long" >&5
+$as_echo_n "checking for long long... " >&6; }
+if test "${ac_cv_type_long_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 long long ll = 1LL; int i = 63;
 int
@@ -5466,59 +6254,32 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_type_long_long=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_long_long=no
+  ac_cv_type_long_long=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long" >&5
+$as_echo "$ac_cv_type_long_long" >&6; }
   if test $ac_cv_type_long_long = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LONG_LONG 1
-_ACEOF
+$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for long double" >&5
-echo $ECHO_N "checking for long double... $ECHO_C" >&6; }
-if test "${gt_cv_c_long_double+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
+$as_echo_n "checking for long double... " >&6; }
+if test "${gt_cv_c_long_double+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test "$GCC" = yes; then
        gt_cv_c_long_double=yes
      else
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
          /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
@@ -5534,55 +6295,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_c_long_double=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_c_long_double=no
+  gt_cv_c_long_double=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      fi
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_long_double" >&5
-echo "${ECHO_T}$gt_cv_c_long_double" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_long_double" >&5
+$as_echo "$gt_cv_c_long_double" >&6; }
   if test $gt_cv_c_long_double = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LONG_DOUBLE 1
-_ACEOF
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for wchar_t" >&5
-echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6; }
-if test "${gt_cv_c_wchar_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stddef.h>
        wchar_t foo = (wchar_t)'\0';
@@ -5594,54 +6329,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_c_wchar_t=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_c_wchar_t=no
+  gt_cv_c_wchar_t=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
-echo "${ECHO_T}$gt_cv_c_wchar_t" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
   if test $gt_cv_c_wchar_t = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WCHAR_T 1
-_ACEOF
+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for wint_t" >&5
-echo $ECHO_N "checking for wint_t... $ECHO_C" >&6; }
-if test "${gt_cv_c_wint_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <wchar.h>
        wint_t foo = (wchar_t)'\0';
@@ -5653,54 +6362,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_c_wint_t=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_c_wint_t=no
+  gt_cv_c_wint_t=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
-echo "${ECHO_T}$gt_cv_c_wint_t" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
   if test $gt_cv_c_wint_t = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WINT_T 1
-_ACEOF
+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
-if test "${jm_ac_cv_header_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
+$as_echo_n "checking for inttypes.h... " >&6; }
+if test "${jm_ac_cv_header_inttypes_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <inttypes.h>
@@ -5712,35 +6395,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   jm_ac_cv_header_inttypes_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	jm_ac_cv_header_inttypes_h=no
+  jm_ac_cv_header_inttypes_h=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $jm_ac_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$jm_ac_cv_header_inttypes_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $jm_ac_cv_header_inttypes_h" >&5
+$as_echo "$jm_ac_cv_header_inttypes_h" >&6; }
   if test $jm_ac_cv_header_inttypes_h = yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -5750,16 +6413,12 @@
   fi
 
 
-  { echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
-if test "${jm_ac_cv_header_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
+$as_echo_n "checking for stdint.h... " >&6; }
+if test "${jm_ac_cv_header_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <stdint.h>
@@ -5771,35 +6430,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   jm_ac_cv_header_stdint_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	jm_ac_cv_header_stdint_h=no
+  jm_ac_cv_header_stdint_h=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $jm_ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$jm_ac_cv_header_stdint_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $jm_ac_cv_header_stdint_h" >&5
+$as_echo "$jm_ac_cv_header_stdint_h" >&6; }
   if test $jm_ac_cv_header_stdint_h = yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -5811,16 +6450,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking for intmax_t" >&5
-echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6; }
-if test "${gt_cv_c_intmax_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
+$as_echo_n "checking for intmax_t... " >&6; }
+if test "${gt_cv_c_intmax_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <stddef.h>
@@ -5840,58 +6475,32 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_c_intmax_t=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_c_intmax_t=no
+  gt_cv_c_intmax_t=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
-echo "${ECHO_T}$gt_cv_c_intmax_t" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
+$as_echo "$gt_cv_c_intmax_t" >&6; }
   if test $gt_cv_c_intmax_t = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_INTMAX_T 1
-_ACEOF
+$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
 
   fi
 
 
 
-  { echo "$as_me:$LINENO: checking whether printf() supports POSIX/XSI format strings" >&5
-echo $ECHO_N "checking whether printf() supports POSIX/XSI format strings... $ECHO_C" >&6; }
-if test "${gt_cv_func_printf_posix+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5
+$as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; }
+if test "${gt_cv_func_printf_posix+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
-      if test "$cross_compiling" = yes; then
+      if test "$cross_compiling" = yes; then :
 
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
@@ -5900,7 +6509,7 @@
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "notposix" >/dev/null 2>&1; then
+  $EGREP "notposix" >/dev/null 2>&1; then :
   gt_cv_func_printf_posix="guessing no"
 else
   gt_cv_func_printf_posix="guessing yes"
@@ -5909,11 +6518,7 @@
 
 
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <stdio.h>
@@ -5928,65 +6533,35 @@
   return (strcmp (buf, "55 33") != 0);
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   gt_cv_func_printf_posix=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-gt_cv_func_printf_posix=no
+  gt_cv_func_printf_posix=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
 
-
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_printf_posix" >&5
-echo "${ECHO_T}$gt_cv_func_printf_posix" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5
+$as_echo "$gt_cv_func_printf_posix" >&6; }
   case $gt_cv_func_printf_posix in
     *yes)
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_POSIX_PRINTF 1
-_ACEOF
+$as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h
 
       ;;
   esac
 
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
-{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
-if test "${ac_cv_working_alloca_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <alloca.h>
 int
@@ -5998,55 +6573,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_working_alloca_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_working_alloca_h=no
+  ac_cv_working_alloca_h=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
 if test $ac_cv_working_alloca_h = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA_H 1
-_ACEOF
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
 
 fi
 
-{ echo "$as_me:$LINENO: checking for alloca" >&5
-echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
-if test "${ac_cv_func_alloca_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __GNUC__
 # define alloca __builtin_alloca
@@ -6078,43 +6626,20 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_func_alloca_works=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_alloca_works=no
+  ac_cv_func_alloca_works=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
 
 if test $ac_cv_func_alloca_works = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ALLOCA 1
-_ACEOF
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
 
 else
   # The SVR3 libPW and SVR4 libucb both contain incompatible functions
@@ -6124,21 +6649,15 @@
 
 ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
 
-cat >>confdefs.h <<\_ACEOF
-#define C_ALLOCA 1
-_ACEOF
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
-if test "${ac_cv_os_cray+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if test "${ac_cv_os_cray+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined CRAY && ! defined CRAY2
 webecray
@@ -6148,7 +6667,7 @@
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then
+  $EGREP "webecray" >/dev/null 2>&1; then :
   ac_cv_os_cray=yes
 else
   ac_cv_os_cray=no
@@ -6156,94 +6675,14 @@
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
-echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
 if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define CRAY_STACKSEG_END $ac_func
@@ -6255,19 +6694,15 @@
   done
 fi
 
-{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
-if test "${ac_cv_c_stack_direction+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_c_stack_direction=0
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
@@ -6290,43 +6725,18 @@
   return find_stack_direction () < 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_c_stack_direction=1
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_c_stack_direction=-1
+  ac_cv_c_stack_direction=-1
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
 cat >>confdefs.h <<_ACEOF
 #define STACK_DIRECTION $ac_cv_c_stack_direction
 _ACEOF
@@ -6334,254 +6744,40 @@
 
 fi
 
-
-
 for ac_header in stdlib.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-
 for ac_func in getpagesize
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_GETPAGESIZE 1
 _ACEOF
 
 fi
 done
 
-{ echo "$as_me:$LINENO: checking for working mmap" >&5
-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+$as_echo_n "checking for working mmap... " >&6; }
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_mmap_fixed_mapped=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 /* malloc might have been renamed as rpl_malloc. */
@@ -6710,62 +6906,32 @@
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_mmap_fixed_mapped=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_mmap_fixed_mapped=no
+  ac_cv_func_mmap_fixed_mapped=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MMAP 1
-_ACEOF
+$as_echo "#define HAVE_MMAP 1" >>confdefs.h
 
 fi
 rm -f conftest.mmap
 
 
-    { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
-echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6; }
-if test "${ac_cv_gnu_library_2_1+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5
+$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; }
+if test "${ac_cv_gnu_library_2_1+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <features.h>
@@ -6777,7 +6943,7 @@
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then :
   ac_cv_gnu_library_2_1=yes
 else
   ac_cv_gnu_library_2_1=no
@@ -6787,21 +6953,21 @@
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
-echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
 
     GLIBC21="$ac_cv_gnu_library_2_1"
 
 
 
 
-  { echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5
-echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6; }
-if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5
+$as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; }
+if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
-      if test "$cross_compiling" = yes; then
+      if test "$cross_compiling" = yes; then :
 
           # Guess based on the CPU.
           case "$host_cpu" in
@@ -6812,11 +6978,7 @@
           esac
 
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <stdlib.h>
@@ -6856,43 +7018,19 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   gt_cv_int_divbyzero_sigfpe=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-gt_cv_int_divbyzero_sigfpe=no
+  gt_cv_int_divbyzero_sigfpe=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
 
-
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5
-echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5
+$as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; }
   case "$gt_cv_int_divbyzero_sigfpe" in
     *yes) value=1;;
     *) value=0;;
@@ -6904,16 +7042,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking for unsigned long long" >&5
-echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_unsigned_long_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5
+$as_echo_n "checking for unsigned long long... " >&6; }
+if test "${ac_cv_type_unsigned_long_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 unsigned long long ull = 1ULL; int i = 63;
 int
@@ -6925,42 +7059,19 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_type_unsigned_long_long=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_unsigned_long_long=no
+  ac_cv_type_unsigned_long_long=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long" >&5
+$as_echo "$ac_cv_type_unsigned_long_long" >&6; }
   if test $ac_cv_type_unsigned_long_long = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UNSIGNED_LONG_LONG 1
-_ACEOF
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>confdefs.h
 
   fi
 
@@ -6979,24 +7090,18 @@
 
   else
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UINTMAX_T 1
-_ACEOF
+$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
-if test "${gt_cv_header_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
+$as_echo_n "checking for inttypes.h... " >&6; }
+if test "${gt_cv_header_inttypes_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <inttypes.h>
@@ -7008,36 +7113,16 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_header_inttypes_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_header_inttypes_h=no
+  gt_cv_header_inttypes_h=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_header_inttypes_h" >&5
+$as_echo "$gt_cv_header_inttypes_h" >&6; }
   if test $gt_cv_header_inttypes_h = yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -7049,17 +7134,13 @@
 
 
   if test $gt_cv_header_inttypes_h = yes; then
-    { echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
-echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6; }
-if test "${gt_cv_inttypes_pri_broken+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
+$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <inttypes.h>
 #ifdef PRId32
@@ -7074,36 +7155,16 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   gt_cv_inttypes_pri_broken=no
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_inttypes_pri_broken=yes
+  gt_cv_inttypes_pri_broken=yes
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
-echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
+$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
   fi
   if test "$gt_cv_inttypes_pri_broken" = yes; then
 
@@ -7114,154 +7175,22 @@
   fi
 
 
-
-for ac_header in stdint.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STDINT_H 1
 _ACEOF
 
 fi
 
 done
 
-    { echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
-echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
+$as_echo_n "checking for SIZE_MAX... " >&6; }
   result=
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <limits.h>
@@ -7274,948 +7203,35 @@
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Found it" >/dev/null 2>&1; then
+  $EGREP "Found it" >/dev/null 2>&1; then :
   result=yes
 fi
 rm -f conftest*
 
   if test -z "$result"; then
-                    if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 / 10) >= 0)];
-test_array [0] = 0
+                    if ac_fn_c_compute_int "$LINENO" "~(size_t)0 / 10" "res_hi"        "#include <stddef.h>"; then :
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
+  result=?
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
+
+    if ac_fn_c_compute_int "$LINENO" "~(size_t)0 % 10" "res_lo"        "#include <stddef.h>"; then :
+
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 / 10) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 / 10) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
+  result=?
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
+
+    if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"; then :
+
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
+  result=?
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) res_hi=$ac_lo;;
-'') result=? ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-static long int longval () { return ~(size_t)0 / 10; }
-static unsigned long int ulongval () { return ~(size_t)0 / 10; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if ((~(size_t)0 / 10) < 0)
-    {
-      long int i = longval ();
-      if (i != (~(size_t)0 / 10))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != (~(size_t)0 / 10))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  res_hi=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-result=?
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-
-    if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 % 10) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 % 10) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 % 10) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) res_lo=$ac_lo;;
-'') result=? ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-static long int longval () { return ~(size_t)0 % 10; }
-static unsigned long int ulongval () { return ~(size_t)0 % 10; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if ((~(size_t)0 % 10) < 0)
-    {
-      long int i = longval ();
-      if (i != (~(size_t)0 % 10))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != (~(size_t)0 % 10))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  res_lo=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-result=?
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-
-    if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-int
-main ()
-{
-static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) fits_in_uint=$ac_lo;;
-'') result=? ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-static long int longval () { return sizeof (size_t) <= sizeof (unsigned int); }
-static unsigned long int ulongval () { return sizeof (size_t) <= sizeof (unsigned int); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if ((sizeof (size_t) <= sizeof (unsigned int)) < 0)
-    {
-      long int i = longval ();
-      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  fits_in_uint=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-result=?
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
 
     if test "$fits_in_uint" = 1; then
-                  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stddef.h>
         extern size_t foo;
@@ -8229,31 +7245,9 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   fits_in_uint=0
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     fi
     if test -z "$result"; then
@@ -8266,8 +7260,8 @@
             result='~(size_t)0'
     fi
   fi
-  { echo "$as_me:$LINENO: result: $result" >&5
-echo "${ECHO_T}$result" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5
+$as_echo "$result" >&6; }
   if test "$result" != yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -8278,140 +7272,12 @@
 
 
 
-
-for ac_header in stdint.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STDINT_H 1
 _ACEOF
 
 fi
@@ -8437,7 +7303,7 @@
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
+if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
   with_gnu_ld=no
@@ -8459,8 +7325,8 @@
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -8489,14 +7355,14 @@
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
 else
-  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${acl_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "${acl_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
@@ -8523,19 +7389,17 @@
 
 LD="$acl_cv_path_LD"
 if test -n "$LD"; then
-  { echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
-if test "${acl_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
 case `$LD -v 2>&1 </dev/null` in
@@ -8545,16 +7409,16 @@
   acl_cv_prog_gnu_ld=no ;;
 esac
 fi
-{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
 
-                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
-echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
-if test "${acl_cv_rpath+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
@@ -8564,8 +7428,8 @@
     acl_cv_rpath=done
 
 fi
-{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
-echo "${ECHO_T}$acl_cv_rpath" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
   wl="$acl_cv_wl"
   libext="$acl_cv_libext"
   shlibext="$acl_cv_shlibext"
@@ -8574,7 +7438,7 @@
   hardcode_direct="$acl_cv_hardcode_direct"
   hardcode_minus_L="$acl_cv_hardcode_minus_L"
     # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then
+if test "${enable_rpath+set}" = set; then :
   enableval=$enable_rpath; :
 else
   enable_rpath=yes
@@ -8602,7 +7466,7 @@
 
 
 # Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then
+if test "${with_libiconv_prefix+set}" = set; then :
   withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -8970,334 +7834,42 @@
 
 
 
-  { echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
-echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_ptrdiff_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef ptrdiff_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_ptrdiff_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = x""yes; then :
 
-	ac_cv_type_ptrdiff_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
-echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; }
-if test $ac_cv_type_ptrdiff_t = yes; then
-  :
 else
 
-cat >>confdefs.h <<\_ACEOF
-#define ptrdiff_t long
-_ACEOF
+$as_echo "#define ptrdiff_t long" >>confdefs.h
 
 
 fi
 
-
-
-
-
-
-
-
-
-
-
-for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+  for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
 stdlib.h string.h unistd.h sys/param.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \
+  for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \
 mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
 strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
 __fsetlocking
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -9305,16 +7877,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
-echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl__snprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snprintf is declared" >&5
+$as_echo_n "checking whether _snprintf is declared... " >&6; }
+if test "${ac_cv_have_decl__snprintf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -9329,35 +7897,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_have_decl__snprintf=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl__snprintf=no
+  ac_cv_have_decl__snprintf=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
-echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snprintf" >&5
+$as_echo "$ac_cv_have_decl__snprintf" >&6; }
   if test $ac_cv_have_decl__snprintf = yes; then
     gt_value=1
   else
@@ -9370,16 +7918,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether _snwprintf is declared" >&5
-echo $ECHO_N "checking whether _snwprintf is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl__snwprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snwprintf is declared" >&5
+$as_echo_n "checking whether _snwprintf is declared... " >&6; }
+if test "${ac_cv_have_decl__snwprintf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -9394,35 +7938,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_have_decl__snwprintf=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl__snwprintf=no
+  ac_cv_have_decl__snwprintf=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snwprintf" >&5
-echo "${ECHO_T}$ac_cv_have_decl__snwprintf" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snwprintf" >&5
+$as_echo "$ac_cv_have_decl__snwprintf" >&6; }
   if test $ac_cv_have_decl__snwprintf = yes; then
     gt_value=1
   else
@@ -9436,16 +7960,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
-echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether feof_unlocked is declared" >&5
+$as_echo_n "checking whether feof_unlocked is declared... " >&6; }
+if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -9460,35 +7980,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_have_decl_feof_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_feof_unlocked=no
+  ac_cv_have_decl_feof_unlocked=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_feof_unlocked" >&5
+$as_echo "$ac_cv_have_decl_feof_unlocked" >&6; }
   if test $ac_cv_have_decl_feof_unlocked = yes; then
     gt_value=1
   else
@@ -9501,16 +8001,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
-echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fgets_unlocked is declared" >&5
+$as_echo_n "checking whether fgets_unlocked is declared... " >&6; }
+if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -9525,35 +8021,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_have_decl_fgets_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_fgets_unlocked=no
+  ac_cv_have_decl_fgets_unlocked=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_fgets_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fgets_unlocked" >&6; }
   if test $ac_cv_have_decl_fgets_unlocked = yes; then
     gt_value=1
   else
@@ -9566,16 +8042,12 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getc_unlocked is declared" >&5
+$as_echo_n "checking whether getc_unlocked is declared... " >&6; }
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -9590,35 +8062,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_have_decl_getc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_getc_unlocked=no
+  ac_cv_have_decl_getc_unlocked=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_getc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; }
   if test $ac_cv_have_decl_getc_unlocked = yes; then
     gt_value=1
   else
@@ -9685,19 +8137,15 @@
   done
 
 
-  { echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
-if test "${am_cv_func_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <iconv.h>
@@ -9711,42 +8159,15 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_func_iconv=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
       LIBS="$LIBS $LIBICONV"
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <iconv.h>
@@ -9760,53 +8181,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ICONV 1
-_ACEOF
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
-    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -9816,17 +8212,13 @@
 
 
   if test "$am_cv_func_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking for iconv declaration" >&5
-echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
-    if test "${am_cv_proto_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+$as_echo_n "checking for iconv declaration... " >&6; }
+    if test "${am_cv_proto_iconv+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
 
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <stdlib.h>
@@ -9849,39 +8241,19 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   am_cv_proto_iconv_arg1=""
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	am_cv_proto_iconv_arg1="const"
+  am_cv_proto_iconv_arg1="const"
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { echo "$as_me:$LINENO: result: ${ac_t:-
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:-
          }$am_cv_proto_iconv" >&5
-echo "${ECHO_T}${ac_t:-
+$as_echo "${ac_t:-
          }$am_cv_proto_iconv" >&6; }
 
 cat >>confdefs.h <<_ACEOF
@@ -9891,16 +8263,12 @@
   fi
 
 
-  { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
-echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
-if test "${am_cv_langinfo_codeset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <langinfo.h>
 int
@@ -9911,58 +8279,31 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_langinfo_codeset=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	am_cv_langinfo_codeset=no
+  am_cv_langinfo_codeset=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
-echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
   if test $am_cv_langinfo_codeset = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LANGINFO_CODESET 1
-_ACEOF
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
 
   fi
 
   if test $ac_cv_header_locale_h = yes; then
 
-  { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
-echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; }
-if test "${am_cv_val_LC_MESSAGES+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
+$as_echo_n "checking for LC_MESSAGES... " >&6; }
+if test "${am_cv_val_LC_MESSAGES+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <locale.h>
 int
@@ -9973,42 +8314,19 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_val_LC_MESSAGES=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	am_cv_val_LC_MESSAGES=no
+  am_cv_val_LC_MESSAGES=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
-echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5
+$as_echo "$am_cv_val_LC_MESSAGES" >&6; }
   if test $am_cv_val_LC_MESSAGES = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LC_MESSAGES 1
-_ACEOF
+$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
 
   fi
 
@@ -10018,10 +8336,10 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_INTLBISON+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_INTLBISON+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$INTLBISON"; then
   ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
@@ -10031,25 +8349,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_INTLBISON="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 INTLBISON=$ac_cv_prog_INTLBISON
 if test -n "$INTLBISON"; then
-  { echo "$as_me:$LINENO: result: $INTLBISON" >&5
-echo "${ECHO_T}$INTLBISON" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5
+$as_echo "$INTLBISON" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -10059,8 +8377,8 @@
   if test -z "$INTLBISON"; then
     ac_verc_fail=yes
   else
-        { echo "$as_me:$LINENO: checking version of bison" >&5
-echo $ECHO_N "checking version of bison... $ECHO_C" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5
+$as_echo_n "checking version of bison... " >&6; }
     ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
     case $ac_prog_version in
       '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -10068,8 +8386,8 @@
          ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
       *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
     esac
-    { echo "$as_me:$LINENO: result: $ac_prog_version" >&5
-echo "${ECHO_T}$ac_prog_version" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
+$as_echo "$ac_prog_version" >&6; }
   fi
   if test $ac_verc_fail = yes; then
     INTLBISON=:
@@ -10090,17 +8408,17 @@
 
 
 
-  { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
     # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then
+if test "${enable_nls+set}" = set; then :
   enableval=$enable_nls; USE_NLS=$enableval
 else
   USE_NLS=yes
 fi
 
-  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
 
 
 
@@ -10115,18 +8433,18 @@
     if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
 
-      { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
-echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5
+$as_echo_n "checking whether included gettext is requested... " >&6; }
 
 # Check whether --with-included-gettext was given.
-if test "${with_included_gettext+set}" = set; then
+if test "${with_included_gettext+set}" = set; then :
   withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval
 else
   nls_cv_force_use_gnu_gettext=no
 fi
 
-      { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
-echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5
+$as_echo "$nls_cv_force_use_gnu_gettext" >&6; }
 
       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
@@ -10136,16 +8454,12 @@
 
 
 
-        { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
-echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
-if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if test "${gt_cv_func_gnugettext1_libc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -10159,37 +8473,16 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   gt_cv_func_gnugettext1_libc=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_func_gnugettext1_libc=no
+  gt_cv_func_gnugettext1_libc=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc" >&5
+$as_echo "$gt_cv_func_gnugettext1_libc" >&6; }
 
         if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
 
@@ -10210,7 +8503,7 @@
 
 
 # Check whether --with-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then
+if test "${with_libintl_prefix+set}" = set; then :
   withval=$with_libintl_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -10571,20 +8864,16 @@
     done
   fi
 
-          { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
-echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
-if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
             gt_save_LIBS="$LIBS"
             LIBS="$LIBS $LIBINTL"
-                        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -10602,41 +8891,16 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   gt_cv_func_gnugettext1_libintl=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	gt_cv_func_gnugettext1_libintl=no
+  gt_cv_func_gnugettext1_libintl=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
                         if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
-              cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -10654,43 +8918,20 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   LIBINTL="$LIBINTL $LIBICONV"
                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                 gt_cv_func_gnugettext1_libintl=yes
 
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl" >&5
+$as_echo "$gt_cv_func_gnugettext1_libintl" >&6; }
         fi
 
                                         if test "$gt_cv_func_gnugettext1_libc" = "yes" \
@@ -10727,22 +8968,20 @@
     if test "$gt_use_preinstalled_gnugettext" = "yes" \
        || test "$nls_cv_use_gnu_gettext" = "yes"; then
 
-cat >>confdefs.h <<\_ACEOF
-#define ENABLE_NLS 1
-_ACEOF
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
 
     else
       USE_NLS=no
     fi
   fi
 
-  { echo "$as_me:$LINENO: checking whether to use NLS" >&5
-echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
-  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
   if test "$USE_NLS" = "yes"; then
-    { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
-echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
         gt_source="external libintl"
@@ -10752,18 +8991,18 @@
     else
       gt_source="included intl directory"
     fi
-    { echo "$as_me:$LINENO: result: $gt_source" >&5
-echo "${ECHO_T}$gt_source" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
   fi
 
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
-        { echo "$as_me:$LINENO: checking how to link with libintl" >&5
-echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
-        { echo "$as_me:$LINENO: result: $LIBINTL" >&5
-echo "${ECHO_T}$LIBINTL" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
 
   for element in $INCINTL; do
     haveit=
@@ -10790,14 +9029,10 @@
       fi
 
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
 
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DCGETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
     fi
 
@@ -10842,11 +9077,12 @@
 
 
 
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
@@ -10863,21 +9099,50 @@
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
   SET_MAKE=
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5
+$as_echo_n "checking for GNU make... " >&6; }
+if test "${_cv_gnu_make_command+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  _cv_gnu_make_command='' ;
+                for a in "$MAKE" make gmake gnumake ; do
+                        if test -z "$a" ; then continue ; fi ;
+                        if  ( sh -c "$a --version" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then
+                                _cv_gnu_make_command=$a ;
+                                break;
+                        fi
+                done ;
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gnu_make_command" >&5
+$as_echo "$_cv_gnu_make_command" >&6; } ;
+        if test  "x$_cv_gnu_make_command" != "x"  ; then
+                ifGNUmake='' ;
+                ifNotGNUmake='#' ;
+        else
+                ifGNUmake='#' ;
+                ifNotGNUmake='' ;
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"Not found\"" >&5
+$as_echo "\"Not found\"" >&6; };
+        fi
+
+
+
 # Extract the first word of "ln", so it can be a program name with args.
 set dummy ln; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_LN+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_LN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $LN in
   [\\/]* | ?:[\\/]*)
@@ -10889,14 +9154,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_LN" && ac_cv_path_LN="ln"
@@ -10905,31 +9170,31 @@
 fi
 LN=$ac_cv_path_LN
 if test -n "$LN"; then
-  { echo "$as_me:$LINENO: result: $LN" >&5
-echo "${ECHO_T}$LN" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5
+$as_echo "$LN" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
 LN_S=$as_ln_s
 if test "$LN_S" = "ln -s"; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
 fi
 
 # Extract the first word of "mv", so it can be a program name with args.
 set dummy mv; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MV+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MV+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $MV in
   [\\/]* | ?:[\\/]*)
@@ -10941,14 +9206,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_MV" && ac_cv_path_MV="mv"
@@ -10957,20 +9222,20 @@
 fi
 MV=$ac_cv_path_MV
 if test -n "$MV"; then
-  { echo "$as_me:$LINENO: result: $MV" >&5
-echo "${ECHO_T}$MV" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5
+$as_echo "$MV" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 # Extract the first word of "cp", so it can be a program name with args.
 set dummy cp; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_CP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $CP in
   [\\/]* | ?:[\\/]*)
@@ -10982,14 +9247,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_CP" && ac_cv_path_CP="cp"
@@ -10998,20 +9263,20 @@
 fi
 CP=$ac_cv_path_CP
 if test -n "$CP"; then
-  { echo "$as_me:$LINENO: result: $CP" >&5
-echo "${ECHO_T}$CP" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5
+$as_echo "$CP" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 # Extract the first word of "rm", so it can be a program name with args.
 set dummy rm; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_RM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_RM+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $RM in
   [\\/]* | ?:[\\/]*)
@@ -11023,14 +9288,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_RM" && ac_cv_path_RM="rm"
@@ -11039,20 +9304,20 @@
 fi
 RM=$ac_cv_path_RM
 if test -n "$RM"; then
-  { echo "$as_me:$LINENO: result: $RM" >&5
-echo "${ECHO_T}$RM" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5
+$as_echo "$RM" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 # Extract the first word of "chmod", so it can be a program name with args.
 set dummy chmod; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_CHMOD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CHMOD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $CHMOD in
   [\\/]* | ?:[\\/]*)
@@ -11064,14 +9329,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_CHMOD" && ac_cv_path_CHMOD=":"
@@ -11080,11 +9345,11 @@
 fi
 CHMOD=$ac_cv_path_CHMOD
 if test -n "$CHMOD"; then
-  { echo "$as_me:$LINENO: result: $CHMOD" >&5
-echo "${ECHO_T}$CHMOD" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5
+$as_echo "$CHMOD" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -11092,10 +9357,10 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -11105,73 +9370,68 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AWK="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
   test -n "$AWK" && break
 done
 
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
    then ac_cv_path_EGREP="$GREP -E"
    else
-     # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+     if test -z "$EGREP"; then
   ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in egrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-    # Check for GNU ac_path_EGREP and select it if it is found.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'EGREP' >> "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP="$ac_path_EGREP"
@@ -11183,42 +9443,31 @@
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_EGREP_found && break 3
+      $ac_path_EGREP_found && break 3
+    done
   done
-done
-
-done
+  done
 IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
-
    fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
 
 # Extract the first word of "sed", so it can be a program name with args.
 set dummy sed; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_SED+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $SED in
   [\\/]* | ?:[\\/]*)
@@ -11230,14 +9479,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_SED" && ac_cv_path_SED="sed"
@@ -11246,20 +9495,20 @@
 fi
 SED=$ac_cv_path_SED
 if test -n "$SED"; then
-  { echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5
+$as_echo "$SED" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_PERL+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PERL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $PERL in
   [\\/]* | ?:[\\/]*)
@@ -11271,14 +9520,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="perl"
@@ -11287,20 +9536,20 @@
 fi
 PERL=$ac_cv_path_PERL
 if test -n "$PERL"; then
-  { echo "$as_me:$LINENO: result: $PERL" >&5
-echo "${ECHO_T}$PERL" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 # Extract the first word of "ldconfig", so it can be a program name with args.
 set dummy ldconfig; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_LDCONFIG+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_LDCONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   case $LDCONFIG in
   [\\/]* | ?:[\\/]*)
@@ -11312,14 +9561,14 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LDCONFIG="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_path_LDCONFIG" && ac_cv_path_LDCONFIG=":"
@@ -11328,21 +9577,21 @@
 fi
 LDCONFIG=$ac_cv_path_LDCONFIG
 if test -n "$LDCONFIG"; then
-  { echo "$as_me:$LINENO: result: $LDCONFIG" >&5
-echo "${ECHO_T}$LDCONFIG" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDCONFIG" >&5
+$as_echo "$LDCONFIG" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
@@ -11352,25 +9601,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -11379,10 +9628,10 @@
   ac_ct_AR=$AR
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
@@ -11392,25 +9641,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_AR="ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-echo "${ECHO_T}$ac_ct_AR" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_AR" = x; then
@@ -11418,12 +9667,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
@@ -11435,10 +9680,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -11448,25 +9693,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -11475,10 +9720,10 @@
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -11488,25 +9733,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -11514,12 +9759,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -11531,10 +9772,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
@@ -11544,25 +9785,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -11571,10 +9812,10 @@
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
@@ -11584,25 +9825,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -11610,12 +9851,8 @@
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
@@ -11624,85 +9861,58 @@
   STRIP="$ac_cv_prog_STRIP"
 fi
 
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_MAKEINFO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$MAKEINFO"; then
+  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MAKEINFO="makeinfo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
+  done
 IFS=$as_save_IFS
 
-
 fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
 fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
+MAKEINFO=$ac_cv_prog_MAKEINFO
+if test -n "$MAKEINFO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
+$as_echo "$MAKEINFO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+if test "_$MAKEINFO" = "_"; then
+    MAKEINFO="@echo Makeinfo is missing. Info documentation will not be built.;true"
+else
+    case "$MAKEINFO" in
+      */missing.*)
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+*** Makeinfo is missing. Info documentation will not be built." >&5
+$as_echo "$as_me: WARNING:
+*** Makeinfo is missing. Info documentation will not be built." >&2;}
+        ;;
+      *)
+        ;;
+    esac
+fi
 
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 # See if we need a separate native compiler.
 if test $cross_compiling = no; then
@@ -11713,10 +9923,10 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_BUILD_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_BUILD_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$BUILD_CC"; then
   ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
@@ -11726,25 +9936,25 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_BUILD_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 BUILD_CC=$ac_cv_prog_BUILD_CC
 if test -n "$BUILD_CC"; then
-  { echo "$as_me:$LINENO: result: $BUILD_CC" >&5
-echo "${ECHO_T}$BUILD_CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5
+$as_echo "$BUILD_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -11752,259 +9962,42 @@
 done
 
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_header in dirent.h errno.h getopt.h malloc.h mntent.h paths.h setjmp.h signal.h stdarg.h stdint.h stdlib.h termios.h unistd.h utime.h linux/fd.h linux/major.h net/if_dl.h netinet/in.h sys/disklabel.h sys/ioctl.h sys/mkdev.h sys/mman.h sys/prctl.h sys/queue.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h sys/sysmacros.h sys/time.h sys/types.h sys/un.h sys/wait.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+for ac_header in dirent.h errno.h getopt.h malloc.h mntent.h paths.h semaphore.h setjmp.h signal.h stdarg.h stdint.h stdlib.h termios.h termio.h unistd.h utime.h linux/fd.h linux/major.h net/if_dl.h netinet/in.h sys/disklabel.h sys/file.h sys/ioctl.h sys/mkdev.h sys/mman.h sys/prctl.h sys/queue.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h sys/sysmacros.h sys/time.h sys/types.h sys/un.h sys/wait.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-
-
 for ac_header in sys/disk.h sys/mount.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
 #if HAVE_SYS_QUEUE_H
 #include <sys/queue.h>
 #endif
 
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-
 for ac_header in net/if.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
+do :
+  ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -12012,225 +10005,28 @@
 #include <sys/socket.h>
 #endif
 
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+"
+if test "x$ac_cv_header_net_if_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_NET_IF_H 1
 _ACEOF
 
 fi
 
 done
 
-
 for ac_func in vprintf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
+if test "x$ac_cv_func_vprintf" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_VPRINTF 1
 _ACEOF
 
-{ echo "$as_me:$LINENO: checking for _doprnt" >&5
-echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; }
-if test "${ac_cv_func__doprnt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define _doprnt innocuous__doprnt
+ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = x""yes; then :
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char _doprnt (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef _doprnt
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char _doprnt ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub__doprnt || defined __stub____doprnt
-choke me
-#endif
-
-int
-main ()
-{
-return _doprnt ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func__doprnt=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func__doprnt=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
-echo "${ECHO_T}$ac_cv_func__doprnt" >&6; }
-if test $ac_cv_func__doprnt = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DOPRNT 1
-_ACEOF
+$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
 
 fi
 
@@ -12238,697 +10034,62 @@
 done
 
 
-{ echo "$as_me:$LINENO: checking for struct dirent.d_reclen" >&5
-echo $ECHO_N "checking for struct dirent.d_reclen... $ECHO_C" >&6; }
-if test "${ac_cv_member_struct_dirent_d_reclen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <dirent.h>
-
-int
-main ()
-{
-static struct dirent ac_aggr;
-if (ac_aggr.d_reclen)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_dirent_d_reclen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <dirent.h>
-
-int
-main ()
-{
-static struct dirent ac_aggr;
-if (sizeof ac_aggr.d_reclen)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_dirent_d_reclen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_member_struct_dirent_d_reclen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_dirent_d_reclen" >&5
-echo "${ECHO_T}$ac_cv_member_struct_dirent_d_reclen" >&6; }
-if test $ac_cv_member_struct_dirent_d_reclen = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_RECLEN_DIRENT 1
-_ACEOF
+ac_fn_c_check_member "$LINENO" "struct dirent" "d_reclen" "ac_cv_member_struct_dirent_d_reclen" "#include <dirent.h>
+"
+if test "x$ac_cv_member_struct_dirent_d_reclen" = x""yes; then :
+  $as_echo "#define HAVE_RECLEN_DIRENT 1" >>confdefs.h
 
 fi
 
-{ echo "$as_me:$LINENO: checking for ssize_t" >&5
-echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_ssize_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-
-typedef ssize_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_ssize_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_ssize_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
-echo "${ECHO_T}$ac_cv_type_ssize_t" >&6; }
-if test $ac_cv_type_ssize_t = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_TYPE_SSIZE_T 1
-_ACEOF
+ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "#include <sys/types.h>
+"
+if test "x$ac_cv_type_ssize_t" = x""yes; then :
+  $as_echo "#define HAVE_TYPE_SSIZE_T 1" >>confdefs.h
 
 fi
 
-{ echo "$as_me:$LINENO: checking whether llseek is declared" >&5
-echo $ECHO_N "checking whether llseek is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_llseek+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <unistd.h>
-
-int
-main ()
-{
-#ifndef llseek
-  (void) llseek;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_llseek=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_llseek=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_llseek" >&5
-echo "${ECHO_T}$ac_cv_have_decl_llseek" >&6; }
-if test $ac_cv_have_decl_llseek = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_LLSEEK_PROTOTYPE 1
-_ACEOF
+ac_fn_c_check_decl "$LINENO" "llseek" "ac_cv_have_decl_llseek" "#include <unistd.h>
+"
+if test "x$ac_cv_have_decl_llseek" = x""yes; then :
+  $as_echo "#define HAVE_LLSEEK_PROTOTYPE 1" >>confdefs.h
 
 fi
 
-{ echo "$as_me:$LINENO: checking whether lseek64 is declared" >&5
-echo $ECHO_N "checking whether lseek64 is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_lseek64+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#define _LARGEFILE_SOURCE
+ac_fn_c_check_decl "$LINENO" "lseek64" "ac_cv_have_decl_lseek64" "#define _LARGEFILE_SOURCE
 		 #define _LARGEFILE64_SOURCE
 		 #include <unistd.h>
-
-int
-main ()
-{
-#ifndef lseek64
-  (void) lseek64;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_lseek64=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_lseek64=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_lseek64" >&5
-echo "${ECHO_T}$ac_cv_have_decl_lseek64" >&6; }
-if test $ac_cv_have_decl_lseek64 = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_LSEEK64_PROTOTYPE 1
-_ACEOF
+"
+if test "x$ac_cv_have_decl_lseek64" = x""yes; then :
+  $as_echo "#define HAVE_LSEEK64_PROTOTYPE 1" >>confdefs.h
 
 fi
 
-if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
-  # if cross-compiling, with no cached values, just assume something common.
-  ac_cv_sizeof_short=2
-  ac_cv_sizeof_int=4
-  ac_cv_sizeof_long=4
-  ac_cv_sizeof_long_long=8
-  { echo "$as_me:$LINENO: WARNING: Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8" >&5
-echo "$as_me: WARNING: Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8" >&2;}
-fi
-{ echo "$as_me:$LINENO: checking for short" >&5
-echo $ECHO_N "checking for short... $ECHO_C" >&6; }
-if test "${ac_cv_type_short+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef short ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_short=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_short=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
-echo "${ECHO_T}$ac_cv_type_short" >&6; }
-
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of short" >&5
-echo $ECHO_N "checking size of short... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_short+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+$as_echo_n "checking size of short... " >&6; }
+if test "${ac_cv_sizeof_short+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_short=$ac_lo;;
-'') if test "$ac_cv_type_short" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_short=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef short ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_short=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_short" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+  if test "$ac_cv_type_short" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (short)
+See \`config.log' for more details." "$LINENO" 5; }; }
    else
      ac_cv_sizeof_short=0
    fi
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
 fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
-echo "${ECHO_T}$ac_cv_sizeof_short" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+$as_echo "$ac_cv_sizeof_short" >&6; }
 
 
 
@@ -12937,403 +10098,32 @@
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking for int" >&5
-echo $ECHO_N "checking for int... $ECHO_C" >&6; }
-if test "${ac_cv_type_int+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef int ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_int=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_int=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
-echo "${ECHO_T}$ac_cv_type_int" >&6; }
-
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of int" >&5
-echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_int=$ac_lo;;
-'') if test "$ac_cv_type_int" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_int=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef int ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_int=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_int" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (int)
+See \`config.log' for more details." "$LINENO" 5; }; }
    else
      ac_cv_sizeof_int=0
    fi
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
 fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
 
 
 
@@ -13342,403 +10132,32 @@
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking for long" >&5
-echo $ECHO_N "checking for long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_long=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
-echo "${ECHO_T}$ac_cv_type_long" >&6; }
-
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long" >&5
-echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long=$ac_lo;;
-'') if test "$ac_cv_type_long" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_long=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_long=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+  if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (long)
+See \`config.log' for more details." "$LINENO" 5; }; }
    else
      ac_cv_sizeof_long=0
    fi
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
 fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
 
 
 
@@ -13747,403 +10166,32 @@
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef long long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_long_long=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_long_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
-
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long long" >&5
-echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if test "${ac_cv_sizeof_long_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') if test "$ac_cv_type_long_long" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef long long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_long_long=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long_long" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (long long)
+See \`config.log' for more details." "$LINENO" 5; }; }
    else
      ac_cv_sizeof_long_long=0
    fi
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+
 fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
 
 
 
@@ -14160,439 +10208,262 @@
 
 
 
-{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  # See if sys/param.h defines the BYTE_ORDER macro.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/param.h>
+	     #include <sys/param.h>
 
 int
 main ()
 {
-#if  ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
-	&& BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
- bogus endian macros
-#endif
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   # It does; now see whether it defined to BIG_ENDIAN or not.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/param.h>
+		#include <sys/param.h>
 
 int
 main ()
 {
 #if BYTE_ORDER != BIG_ENDIAN
- not big endian
-#endif
+		 not big endian
+		#endif
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_c_bigendian=no
+  ac_cv_c_bigendian=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	# It does not; compile a test program.
-if test "$cross_compiling" = yes; then
-  # try to guess the endianness by grepping values into an object file
-  ac_cv_c_bigendian=unknown
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+#include <limits.h>
+
 int
 main ()
 {
- _ascii (); _ebcdic ();
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
-fi
-if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-  if test "$ac_cv_c_bigendian" = unknown; then
-    ac_cv_c_bigendian=no
-  else
-    # finding both strings is unlikely to happen, but who knows?
-    ac_cv_c_bigendian=unknown
-  fi
-fi
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
+  ac_cv_c_bigendian=no
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
 
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
 main ()
 {
 
-  /* Are we little or big endian?  From Harbison&Steele.  */
-  union
-  {
-    long int l;
-    char c[sizeof (long int)];
-  } u;
-  u.l = 1;
-  return u.c[sizeof (long int) - 1] == 1;
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_c_bigendian=no
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_c_bigendian=yes
+  ac_cv_c_bigendian=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
+    fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
-case $ac_cv_c_bigendian in
-  yes)
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
-cat >>confdefs.h <<\_ACEOF
-#define WORDS_BIGENDIAN 1
-_ACEOF
- ;;
-  no)
-     ;;
-  *)
-    { { echo "$as_me:$LINENO: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-echo "$as_me: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
-   { (exit 1); exit 1; }; } ;;
-esac
+     ;; #(
+   *)
+     as_fn_error "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
 
 BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh
 ASM_TYPES_HEADER=./asm_types.h
 
+echo "/* These defines are needed for the public ext2fs.h header file */" \
+     > public_config.h
+if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef HAVE_SYS_TYPES_H" >> public_config.h
+fi
+if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef WORDS_BIGENDIAN" >> public_config.h
+fi
+rm -f tmp_config.$$
+PUBLIC_CONFIG_HEADER=./public_config.h
 
 for ac_header in inttypes.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_INTTYPES_H 1
 _ACEOF
 
 fi
 
 done
 
-{ echo "$as_me:$LINENO: checking for intptr_t" >&5
-echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_intptr_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef intptr_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_intptr_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_intptr_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_intptr_t" >&6; }
-if test $ac_cv_type_intptr_t = yes; then
+ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_intptr_t" = x""yes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_INTPTR_T 1
@@ -14601,16 +10472,12 @@
 
 fi
 
-{ echo "$as_me:$LINENO: checking whether struct stat has a st_flags field" >&5
-echo $ECHO_N "checking whether struct stat has a st_flags field... $ECHO_C" >&6; }
-if test "${e2fsprogs_cv_struct_st_flags+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat has a st_flags field" >&5
+$as_echo_n "checking whether struct stat has a st_flags field... " >&6; }
+if test "${e2fsprogs_cv_struct_st_flags+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/stat.h>
 int
@@ -14621,47 +10488,23 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   e2fsprogs_cv_struct_st_flags=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	e2fsprogs_cv_struct_st_flags=no
+  e2fsprogs_cv_struct_st_flags=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-{ echo "$as_me:$LINENO: result: $e2fsprogs_cv_struct_st_flags" >&5
-echo "${ECHO_T}$e2fsprogs_cv_struct_st_flags" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $e2fsprogs_cv_struct_st_flags" >&5
+$as_echo "$e2fsprogs_cv_struct_st_flags" >&6; }
 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
-  { echo "$as_me:$LINENO: checking whether st_flags field is useful" >&5
-echo $ECHO_N "checking whether st_flags field is useful... $ECHO_C" >&6; }
-  if test "${e2fsprogs_cv_struct_st_flags_immut+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether st_flags field is useful" >&5
+$as_echo_n "checking whether st_flags field is useful... " >&6; }
+  if test "${e2fsprogs_cv_struct_st_flags_immut+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/stat.h>
 int
@@ -14672,141 +10515,25 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   e2fsprogs_cv_struct_st_flags_immut=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	e2fsprogs_cv_struct_st_flags_immut=no
+  e2fsprogs_cv_struct_st_flags_immut=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-  { echo "$as_me:$LINENO: result: $e2fsprogs_cv_struct_st_flags_immut" >&5
-echo "${ECHO_T}$e2fsprogs_cv_struct_st_flags_immut" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $e2fsprogs_cv_struct_st_flags_immut" >&5
+$as_echo "$e2fsprogs_cv_struct_st_flags_immut" >&6; }
   if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
-	  cat >>confdefs.h <<\_ACEOF
-#define HAVE_STAT_FLAGS 1
-_ACEOF
+	  $as_echo "#define HAVE_STAT_FLAGS 1" >>confdefs.h
 
   fi
 fi
-{ echo "$as_me:$LINENO: checking for struct sockaddr.sa_len" >&5
-echo $ECHO_N "checking for struct sockaddr.sa_len... $ECHO_C" >&6; }
-if test "${ac_cv_member_struct_sockaddr_sa_len+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
+ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include <sys/types.h>
 	 #include <sys/socket.h>
-
-int
-main ()
-{
-static struct sockaddr ac_aggr;
-if (ac_aggr.sa_len)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_sa_len=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-	 #include <sys/socket.h>
-
-int
-main ()
-{
-static struct sockaddr ac_aggr;
-if (sizeof ac_aggr.sa_len)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_sa_len=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_member_struct_sockaddr_sa_len=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_sa_len" >&5
-echo "${ECHO_T}$ac_cv_member_struct_sockaddr_sa_len" >&6; }
-if test $ac_cv_member_struct_sockaddr_sa_len = yes; then
+"
+if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_SA_LEN 1
@@ -14814,65 +10541,15 @@
 
 fi
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in chflags getrusage llseek lseek64 open64 fstat64 ftruncate64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime strdup sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl mmap utime setresuid setresgid
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if test -n "$BLKID_CMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing blkid_probe_all" >&5
+$as_echo_n "checking for library containing blkid_probe_all... " >&6; }
+if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
 
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
@@ -14880,75 +10557,70 @@
 #ifdef __cplusplus
 extern "C"
 #endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
+char blkid_probe_all ();
 int
 main ()
 {
-return $ac_func ();
+return blkid_probe_all ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
+for ac_lib in '' blkid; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_blkid_probe_all=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+  break
+fi
+done
+if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  ac_cv_search_blkid_probe_all=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_blkid_probe_all" >&5
+$as_echo "$ac_cv_search_blkid_probe_all" >&6; }
+ac_res=$ac_cv_search_blkid_probe_all
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-	eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+for ac_func in chflags getrusage llseek lseek64 open64 fstat64 ftruncate64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime strdup sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl mmap utime setresuid setresgid usleep nanosleep getdtablesize getrlimit blkid_probe_get_topology
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
 SOCKET_LIB=''
-{ echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
-echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_socket_socket+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+$as_echo_n "checking for socket in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_socket+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -14966,56 +10638,60 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_socket_socket=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_socket_socket=no
+  ac_cv_lib_socket_socket=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6; }
-if test $ac_cv_lib_socket_socket = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+$as_echo "$ac_cv_lib_socket_socket" >&6; }
+if test "x$ac_cv_lib_socket_socket" = x""yes; then :
   SOCKET_LIB=-lsocket
 fi
 
 
-DLOPEN_LIB=''
-{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5
+$as_echo_n "checking for optreset... " >&6; }
+if test "${ac_cv_have_optreset+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "optreset" >/dev/null 2>&1; then :
+  ac_cv_have_optreset=yes
+else
+  ac_cv_have_optreset=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_optreset" >&5
+$as_echo "$ac_cv_have_optreset" >&6; }
+if test $ac_cv_have_optreset = yes; then
+  $as_echo "#define HAVE_OPTRESET 1" >>confdefs.h
+
+fi
+SEM_INIT_LIB=''
+ac_fn_c_check_func "$LINENO" "sem_init" "ac_cv_func_sem_init"
+if test "x$ac_cv_func_sem_init" = x""yes; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lpthread" >&5
+$as_echo_n "checking for sem_init in -lpthread... " >&6; }
+if test "${ac_cv_lib_pthread_sem_init+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+LIBS="-lpthread  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -15024,102 +10700,133 @@
 #ifdef __cplusplus
 extern "C"
 #endif
-char dlopen ();
+char sem_init ();
 int
 main ()
 {
-return dlopen ();
+return sem_init ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_dl_dlopen=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_pthread_sem_init=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dl_dlopen=no
+  ac_cv_lib_pthread_sem_init=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
-if test $ac_cv_lib_dl_dlopen = yes; then
-  DLOPEN_LIB=-ldl
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DLOPEN 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_sem_init" >&5
+$as_echo "$ac_cv_lib_pthread_sem_init" >&6; }
+if test "x$ac_cv_lib_pthread_sem_init" = x""yes; then :
+  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
 
-fi
-
-
-{ echo "$as_me:$LINENO: checking for optreset" >&5
-echo $ECHO_N "checking for optreset... $ECHO_C" >&6; }
-if test "${ac_cv_have_optreset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  	SEM_INIT_LIB=-lpthread
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lrt" >&5
+$as_echo_n "checking for sem_init in -lrt... " >&6; }
+if test "${ac_cv_lib_rt_sem_init+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <unistd.h>
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sem_init ();
+int
+main ()
+{
+return sem_init ();
+  ;
+  return 0;
+}
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "optreset" >/dev/null 2>&1; then
-  ac_cv_have_optreset=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_rt_sem_init=yes
 else
-  ac_cv_have_optreset=no
+  ac_cv_lib_rt_sem_init=no
 fi
-rm -f conftest*
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sem_init" >&5
+$as_echo "$ac_cv_lib_rt_sem_init" >&6; }
+if test "x$ac_cv_lib_rt_sem_init" = x""yes; then :
+  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
 
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_optreset" >&5
-echo "${ECHO_T}$ac_cv_have_optreset" >&6; }
-if test $ac_cv_have_optreset = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_OPTRESET 1
+  	SEM_INIT_LIB=-lrt
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lposix4" >&5
+$as_echo_n "checking for sem_init in -lposix4... " >&6; }
+if test "${ac_cv_lib_posix4_sem_init+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix4  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sem_init ();
+int
+main ()
+{
+return sem_init ();
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_posix4_sem_init=yes
+else
+  ac_cv_lib_posix4_sem_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sem_init" >&5
+$as_echo "$ac_cv_lib_posix4_sem_init" >&6; }
+if test "x$ac_cv_lib_posix4_sem_init" = x""yes; then :
+  $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
+
+  	SEM_INIT_LIB=-lposix4
+fi
 
 fi
-{ echo "$as_me:$LINENO: checking for unified diff option" >&5
-echo $ECHO_N "checking for unified diff option... $ECHO_C" >&6; }
-if diff -u $0 $0 >& /dev/null ; then
+
+fi
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unified diff option" >&5
+$as_echo_n "checking for unified diff option... " >&6; }
+if diff -u $0 $0 > /dev/null 2>&1 ; then
    UNI_DIFF_OPTS=-u
 else
    UNI_DIFF_OPTS=-c
 fi
-{ echo "$as_me:$LINENO: result: $UNI_DIFF_OPTS" >&5
-echo "${ECHO_T}$UNI_DIFF_OPTS" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNI_DIFF_OPTS" >&5
+$as_echo "$UNI_DIFF_OPTS" >&6; }
 
 case "$host_os" in
 linux*)
-	cat >>confdefs.h <<\_ACEOF
-#define HAVE_EXT2_IOCTLS 1
-_ACEOF
+	$as_echo "#define HAVE_EXT2_IOCTLS 1" >>confdefs.h
 
 	;;
 esac
@@ -15142,7 +10849,8 @@
 linux* | gnu* | k*bsd*-gnu)
 	if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
 		root_prefix="";
-		echo "On $host_os systems, root_prefix defaults to ''"
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: On $host_os systems, root_prefix defaults to ''" >&5
+$as_echo "On $host_os systems, root_prefix defaults to ''" >&6; }
 	fi
 	;;
 esac
@@ -15150,9 +10858,11 @@
 linux* | gnu* | k*bsd*-gnu)
 	if test "$prefix" = NONE ; then
 		prefix="/usr";
-		echo "On $host_os systems, prefix defaults to /usr"
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: On $host_os systems, prefix defaults to /usr" >&5
+$as_echo "On $host_os systems, prefix defaults to /usr" >&6; }
 		if test "$mandir" = '${prefix}/man' ; then
-			echo "...and mandir defaults to /usr/share/man"
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ...and mandir defaults to /usr/share/man" >&5
+$as_echo "...and mandir defaults to /usr/share/man" >&6; }
 			mandir=/usr/share/man
 		fi
 	fi
@@ -15176,36 +10886,36 @@
 fi
 if test "$bindir" != '${exec_prefix}/bin'; then
     root_bindir=$bindir
-    echo "Setting root_bindir to $root_bindir"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_bindir to $root_bindir" >&5
+$as_echo "Setting root_bindir to $root_bindir" >&6; }
 fi
 if test "$sbindir" != '${exec_prefix}/sbin'; then
     root_sbindir=$sbindir
-    echo "Setting root_sbindir to $root_sbindir"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_sbindir to $root_sbindir" >&5
+$as_echo "Setting root_sbindir to $root_sbindir" >&6; }
 fi
 if test "$libdir" != '${exec_prefix}/lib'; then
     root_libdir=$libdir
-    echo "Setting root_libdir to $root_libdir"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_libdir to $root_libdir" >&5
+$as_echo "Setting root_libdir to $root_libdir" >&6; }
 fi
 if test "$sysconfdir" != '${prefix}/etc'; then
     root_sysconfdir=$sysconfdir
-    echo "Setting root_sysconfdir to $root_sysconfdir"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_sysconfdir to $root_sysconfdir" >&5
+$as_echo "Setting root_sysconfdir to $root_sysconfdir" >&6; }
 fi
 
 
 
 
 
-{ echo "$as_me:$LINENO: checking whether linker accepts -static" >&5
-echo $ECHO_N "checking whether linker accepts -static... $ECHO_C" >&6; }
-if test "${ac_cv_e2fsprogs_use_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker accepts -static" >&5
+$as_echo_n "checking whether linker accepts -static... " >&6; }
+if test "${ac_cv_e2fsprogs_use_static+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
@@ -15216,34 +10926,13 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_e2fsprogs_use_static=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_e2fsprogs_use_static=no
+  ac_cv_e2fsprogs_use_static=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LDFLAGS=$SAVE_LDFLAGS
 fi
 
@@ -15252,8 +10941,8 @@
 	ac_cv_e2fsprogs_use_static=no
 ;;
 esac
-{ echo "$as_me:$LINENO: result: $ac_cv_e2fsprogs_use_static" >&5
-echo "${ECHO_T}$ac_cv_e2fsprogs_use_static" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_e2fsprogs_use_static" >&5
+$as_echo "$ac_cv_e2fsprogs_use_static" >&6; }
 LDFLAG_STATIC=
 if test $ac_cv_e2fsprogs_use_static = yes; then
 	LDFLAG_STATIC=-static
@@ -15261,10 +10950,9 @@
 
 case "$host_os" in
 darwin*)
-	echo "Using Apple Darwin / GNU libintl workaround"
-	cat >>confdefs.h <<\_ACEOF
-#define _INTL_REDIRECT_MACROS 1
-_ACEOF
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Using Apple Darwin / GNU libintl workaround" >&5
+$as_echo "Using Apple Darwin / GNU libintl workaround" >&6; }
+	$as_echo "#define _INTL_REDIRECT_MACROS 1" >>confdefs.h
 
 	;;
 esac
@@ -15306,7 +10994,8 @@
 	lib/e2p/e2p.pc lib/blkid/blkid.pc lib/ext2fs/ext2fs.pc \
 	misc/Makefile ext2ed/Makefile e2fsck/Makefile \
 	debugfs/Makefile tests/Makefile tests/progs/Makefile \
-	resize/Makefile doc/Makefile intl/Makefile po/Makefile.in ; do
+	resize/Makefile doc/Makefile intl/Makefile \
+	intl/libgnuintl.h po/Makefile.in ; do
 	if test -d `dirname ${srcdir}/$i` ; then
 		outlist="$outlist $i"
 	fi
@@ -15340,12 +11029,13 @@
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -15353,8 +11043,8 @@
   (set) 2>&1 |
     case $as_nl`(ac_space=' '; set) 2>&1` in #(
     *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
@@ -15377,12 +11067,12 @@
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     test "x$cache_file" != "x/dev/null" &&
-      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
     cat confcache >$cache_file
   else
-    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -15399,6 +11089,12 @@
 # take arguments), then branch to the quote section.  Otherwise,
 # look for a macro that doesn't take arguments.
 ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
 t clear
 :clear
 s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
@@ -15428,11 +11124,11 @@
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -15440,12 +11136,15 @@
 
 
 
+
 : ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -15455,59 +11154,79 @@
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
 
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -15516,20 +11235,18 @@
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -15540,32 +11257,111 @@
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
-# Required to use basename.
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -15579,13 +11375,17 @@
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
 	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
@@ -15600,104 +11400,103 @@
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
 fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -15714,12 +11513,12 @@
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+	test -d "$1/.";
       else
-	case $1 in
-        -*)set "./$1";;
+	case $1 in #(
+	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -15734,13 +11533,19 @@
 
 
 exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-# Save the log message, to keep $[0] and so on meaningful, and to
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -15753,27 +11558,35 @@
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_commands="$ac_config_commands"
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
 
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
-  -q, --quiet      do not print progress messages
+  -q, --quiet, --silent
+                   do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
 
 Configuration files:
 $config_files
@@ -15781,27 +11594,28 @@
 Configuration commands:
 $config_commands
 
-Report bugs to <bug-autoconf@gnu.org>."
+Report bugs to the package provider."
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.61,
-  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.64,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
@@ -15823,25 +11637,27 @@
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    echo "$ac_cs_version"; exit ;;
+    $as_echo "$ac_cs_version"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
   --he | --h |  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit ;;
+    $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
 
-  *) ac_config_targets="$ac_config_targets $1"
+  *) as_fn_append ac_config_targets " $1"
      ac_need_defaults=false ;;
 
   esac
@@ -15856,27 +11672,29 @@
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  CONFIG_SHELL=$SHELL
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
-  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  exec "\$@"
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 exec 5>>config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  echo "$ac_log"
+  $as_echo "$ac_log"
 } >&5
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 # INIT-COMMANDS
 #
@@ -15890,7 +11708,7 @@
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 
 # Handling of arguments.
 for ac_config_target in $ac_config_targets
@@ -15899,9 +11717,7 @@
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "$outlist") CONFIG_FILES="$CONFIG_FILES $outlist" ;;
 
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -15927,7 +11743,7 @@
   trap 'exit_status=$?
   { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
 ' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  trap 'as_fn_exit 1' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
@@ -15938,300 +11754,174 @@
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
 
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
 if test -n "$CONFIG_FILES"; then
 
+if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
+  ac_cs_awk_getline=:
+  ac_cs_awk_pipe_init=
+  ac_cs_awk_read_file='
+      while ((getline aline < (F[key])) > 0)
+	print(aline)
+      close(F[key])'
+  ac_cs_awk_pipe_fini=
+else
+  ac_cs_awk_getline=false
+  ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
+  ac_cs_awk_read_file='
+      print "|#_!!_#|"
+      print "cat " F[key] " &&"
+      '$ac_cs_awk_pipe_init
+  # The final `:' finishes the AND list.
+  ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
+fi
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
 _ACEOF
 
-# Create sed commands to just substitute file output variables.
+# Create commands to substitute file output variables.
+{
+  echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
+  echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
+  echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
+  echo "_ACAWK" &&
+  echo "_ACEOF"
+} >conf$$files.sh &&
+. ./conf$$files.sh ||
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+rm -f conf$$files.sh
 
-# Remaining file output variables are in a fragment that also has non-file
-# output varibles.
-
-
-
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-E2FSPROGS_YEAR!$E2FSPROGS_YEAR$ac_delim
-E2FSPROGS_MONTH!$E2FSPROGS_MONTH$ac_delim
-E2FSPROGS_DAY!$E2FSPROGS_DAY$ac_delim
-E2FSPROGS_VERSION!$E2FSPROGS_VERSION$ac_delim
-E2FSPROGS_PKGVER!$E2FSPROGS_PKGVER$ac_delim
-build!$build$ac_delim
-build_cpu!$build_cpu$ac_delim
-build_vendor!$build_vendor$ac_delim
-build_os!$build_os$ac_delim
-host!$host$ac_delim
-host_cpu!$host_cpu$ac_delim
-host_vendor!$host_vendor$ac_delim
-host_os!$host_os$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-CPP!$CPP$ac_delim
-LD!$LD$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-LINUX_INCLUDE!$LINUX_INCLUDE$ac_delim
-MAINTAINER_CMT!$MAINTAINER_CMT$ac_delim
-HTREE_CMT!$HTREE_CMT$ac_delim
-ELF_CMT!$ELF_CMT$ac_delim
-BSDLIB_CMT!$BSDLIB_CMT$ac_delim
-PROFILE_CMT!$PROFILE_CMT$ac_delim
-CHECKER_CMT!$CHECKER_CMT$ac_delim
-LIB_EXT!$LIB_EXT$ac_delim
-STATIC_LIB_EXT!$STATIC_LIB_EXT$ac_delim
-PROFILED_LIB_EXT!$PROFILED_LIB_EXT$ac_delim
-SWAPFS_CMT!$SWAPFS_CMT$ac_delim
-DEBUGFS_CMT!$DEBUGFS_CMT$ac_delim
-IMAGER_CMT!$IMAGER_CMT$ac_delim
-RESIZER_CMT!$RESIZER_CMT$ac_delim
-FSCK_PROG!$FSCK_PROG$ac_delim
-_ACEOF
+  . ./conf$$subs.sh ||
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
 done
+rm -f conf$$subs.sh
 
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-/^[	 ]*@MCONFIG@[	 ]*$/{
-r $MCONFIG
-d
-}
-/^[	 ]*@MAKEFILE_ELF@[	 ]*$/{
-r $MAKEFILE_ELF
-d
-}
-/^[	 ]*@MAKEFILE_BSDLIB@[	 ]*$/{
-r $MAKEFILE_BSDLIB
-d
-}
-/^[	 ]*@MAKEFILE_PROFILE@[	 ]*$/{
-r $MAKEFILE_PROFILE
-d
-}
-/^[	 ]*@MAKEFILE_CHECKER@[	 ]*$/{
-r $MAKEFILE_CHECKER
-d
-}
-/^[	 ]*@MAKEFILE_LIBRARY@[	 ]*$/{
-r $MAKEFILE_LIBRARY
-d
-}
-/^[	 ]*@ASM_TYPES_HEADER@[	 ]*$/{
-r $ASM_TYPES_HEADER
-d
-}
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+  \$ac_cs_awk_pipe_init
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+  if (nfields == 3 && !substed) {
+    key = field[2]
+    if (F[key] != "" && line ~ /^[	 ]*@.*@[	 ]*$/) {
+      \$ac_cs_awk_read_file
+      next
+    }
+  }
+  print line
+}
+\$ac_cs_awk_pipe_fini
+_ACAWK
 _ACEOF
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-FSCK_MAN!$FSCK_MAN$ac_delim
-E2INITRD_PROG!$E2INITRD_PROG$ac_delim
-E2INITRD_MAN!$E2INITRD_MAN$ac_delim
-PKG_CONFIG!$PKG_CONFIG$ac_delim
-DEVMAPPER_REQ!$DEVMAPPER_REQ$ac_delim
-DEVMAPPER_PC_LIBS!$DEVMAPPER_PC_LIBS$ac_delim
-DEVMAPPER_LIBS!$DEVMAPPER_LIBS$ac_delim
-STATIC_DEVMAPPER_LIBS!$STATIC_DEVMAPPER_LIBS$ac_delim
-STATIC_BLKID_DEVMAPPER_LIBS!$STATIC_BLKID_DEVMAPPER_LIBS$ac_delim
-UUIDD_CMT!$UUIDD_CMT$ac_delim
-GETTEXT_PACKAGE!$GETTEXT_PACKAGE$ac_delim
-PACKAGE!$PACKAGE$ac_delim
-VERSION!$VERSION$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-MKINSTALLDIRS!$MKINSTALLDIRS$ac_delim
-USE_NLS!$USE_NLS$ac_delim
-MSGFMT!$MSGFMT$ac_delim
-GMSGFMT!$GMSGFMT$ac_delim
-XGETTEXT!$XGETTEXT$ac_delim
-MSGMERGE!$MSGMERGE$ac_delim
-RANLIB!$RANLIB$ac_delim
-ALLOCA!$ALLOCA$ac_delim
-GLIBC21!$GLIBC21$ac_delim
-HAVE_POSIX_PRINTF!$HAVE_POSIX_PRINTF$ac_delim
-HAVE_ASPRINTF!$HAVE_ASPRINTF$ac_delim
-HAVE_SNPRINTF!$HAVE_SNPRINTF$ac_delim
-HAVE_WPRINTF!$HAVE_WPRINTF$ac_delim
-LIBICONV!$LIBICONV$ac_delim
-LTLIBICONV!$LTLIBICONV$ac_delim
-INTLBISON!$INTLBISON$ac_delim
-BUILD_INCLUDED_LIBINTL!$BUILD_INCLUDED_LIBINTL$ac_delim
-USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim
-CATOBJEXT!$CATOBJEXT$ac_delim
-DATADIRNAME!$DATADIRNAME$ac_delim
-INSTOBJEXT!$INSTOBJEXT$ac_delim
-GENCAT!$GENCAT$ac_delim
-INTLOBJS!$INTLOBJS$ac_delim
-INTL_LIBTOOL_SUFFIX_PREFIX!$INTL_LIBTOOL_SUFFIX_PREFIX$ac_delim
-INTLLIBS!$INTLLIBS$ac_delim
-LIBINTL!$LIBINTL$ac_delim
-LTLIBINTL!$LTLIBINTL$ac_delim
-POSUB!$POSUB$ac_delim
-BINARY_TYPE!$BINARY_TYPE$ac_delim
-LN!$LN$ac_delim
-LN_S!$LN_S$ac_delim
-MV!$MV$ac_delim
-CP!$CP$ac_delim
-RM!$RM$ac_delim
-CHMOD!$CHMOD$ac_delim
-AWK!$AWK$ac_delim
-SED!$SED$ac_delim
-PERL!$PERL$ac_delim
-LDCONFIG!$LDCONFIG$ac_delim
-AR!$AR$ac_delim
-STRIP!$STRIP$ac_delim
-BUILD_CC!$BUILD_CC$ac_delim
-SIZEOF_SHORT!$SIZEOF_SHORT$ac_delim
-SIZEOF_INT!$SIZEOF_INT$ac_delim
-SIZEOF_LONG!$SIZEOF_LONG$ac_delim
-SIZEOF_LONG_LONG!$SIZEOF_LONG_LONG$ac_delim
-SOCKET_LIB!$SOCKET_LIB$ac_delim
-DLOPEN_LIB!$DLOPEN_LIB$ac_delim
-UNI_DIFF_OPTS!$UNI_DIFF_OPTS$ac_delim
-LINUX_CMT!$LINUX_CMT$ac_delim
-CYGWIN_CMT!$CYGWIN_CMT$ac_delim
-UNIX_CMT!$UNIX_CMT$ac_delim
-root_prefix!$root_prefix$ac_delim
-root_bindir!$root_bindir$ac_delim
-root_sbindir!$root_sbindir$ac_delim
-root_libdir!$root_libdir$ac_delim
-root_sysconfdir!$root_sysconfdir$ac_delim
-LDFLAG_STATIC!$LDFLAG_STATIC$ac_delim
-SS_DIR!$SS_DIR$ac_delim
-ET_DIR!$ET_DIR$ac_delim
-DO_TEST_SUITE!$DO_TEST_SUITE$ac_delim
-INTL_FLAGS!$INTL_FLAGS$ac_delim
-BUILD_CFLAGS!$BUILD_CFLAGS$ac_delim
-BUILD_LDFLAGS!$BUILD_LDFLAGS$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 83; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
-_ACEOF
-
-
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
 # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
@@ -16247,20 +11937,20 @@
 }'
 fi
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
 
-for ac_tag in  :F $CONFIG_FILES      :C $CONFIG_COMMANDS
+eval set X "  :F $CONFIG_FILES      :C $CONFIG_COMMANDS"
+shift
+for ac_tag
 do
   case $ac_tag in
   :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
-   { (exit 1); exit 1; }; };;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -16288,26 +11978,34 @@
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-   { (exit 1); exit 1; }; };;
+	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
-      ac_file_inputs="$ac_file_inputs $ac_f"
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
-    configure_input="Generated from "`IFS=:
-	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
     fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin";;
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -16317,7 +12015,7 @@
 	 X"$ac_file" : 'X\(//\)[^/]' \| \
 	 X"$ac_file" : 'X\(//\)$' \| \
 	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
+$as_echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -16335,55 +12033,15 @@
 	    q
 	  }
 	  s/.*/./; q'`
-  { as_dir="$ac_dir"
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+  as_dir="$ac_dir"; as_fn_mkdir_p
   ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -16423,12 +12081,12 @@
   esac
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
+ac_sed_dataroot='
+/datarootdir/ {
   p
   q
 }
@@ -16436,36 +12094,37 @@
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
   s&@datadir@&$datadir&g
   s&@docdir@&$docdir&g
   s&@infodir@&$infodir&g
   s&@localedir@&$localedir&g
   s&@mandir@&$mandir&g
-    s&\\\${datarootdir}&$datarootdir&g' ;;
+  s&\\\${datarootdir}&$datarootdir&g' ;;
 esac
 _ACEOF
 
 # Neutralize VPATH when `$srcdir' = `.'.
 # Shell code in configure.ac might set extrasub.
 # FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
+s|@configure_input@|$ac_sed_conf_input|;t t
 s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
 s&@srcdir@&$ac_srcdir&;t t
 s&@abs_srcdir@&$ac_abs_srcdir&;t t
 s&@top_srcdir@&$ac_top_srcdir&;t t
@@ -16475,26 +12134,34 @@
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
 $ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
+if $ac_cs_awk_getline; then
+  $AWK -f "$tmp/subs.awk"
+else
+  $AWK -f "$tmp/subs.awk" | $SHELL
+fi >$tmp/out \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out"; rm -f "$tmp/out";;
-  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
-  esac
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
  ;;
 
 
-  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
-echo "$as_me: executing $ac_file commands" >&6;}
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
 
@@ -16614,11 +12281,13 @@
 done # for ac_tag
 
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -16638,8 +12307,11 @@
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit $?
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
 if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi
-
diff --git a/configure.in b/configure.in
index 333d158..5077a97 100644
--- a/configure.in
+++ b/configure.in
@@ -36,7 +36,7 @@
 Oct)	MONTH_NUM=10; E2FSPROGS_MONTH="October" ;;
 Nov)	MONTH_NUM=11; E2FSPROGS_MONTH="November" ;;
 Dec)	MONTH_NUM=12; E2FSPROGS_MONTH="December" ;;
-*)	echo "Unknown month $MONTH??" ;;
+*)	AC_MSG_WARN([Unknown month $MONTH??]) ;;
 esac
 
 base_ver=`echo $E2FSPROGS_VERSION | \
@@ -46,8 +46,7 @@
 
 case $E2FSPROGS_VERSION in
 *-WIP|pre-*)
-	pre_vers=`echo $base_ver 0.01 - p | dc`
-	E2FSPROGS_PKGVER="$pre_vers+${base_ver}_WIP_$date_spec"
+	E2FSPROGS_PKGVER="$base_ver~WIP-$E2FSPROGS_YEAR-$MONTH_NUM-$E2FSPROGS_DAY"
 	;;
 *)
 	E2FSPROGS_PKGVER="$base_ver"
@@ -55,8 +54,8 @@
 esac
 
 unset DATE MONTH YEAR base_ver pre_vers date_spec
-echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
-echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
+AC_MSG_RESULT([Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION])
+AC_MSG_RESULT([Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}])
 AC_SUBST(E2FSPROGS_YEAR)
 AC_SUBST(E2FSPROGS_MONTH)
 AC_SUBST(E2FSPROGS_DAY)
@@ -64,44 +63,37 @@
 AC_SUBST(E2FSPROGS_PKGVER)
 AC_CANONICAL_HOST
 dnl
+dnl Check to see if libdl exists for the sake of dlopen
+dnl
+DLOPEN_LIB=''
+AC_CHECK_LIB(dl, dlopen, 
+[DLOPEN_LIB=-ldl
+AC_DEFINE(HAVE_DLOPEN)])
+AC_SUBST(DLOPEN_LIB)
+dnl
 dnl Use diet libc
 dnl 
+WITH_DIET_LIBC=
 AC_ARG_WITH([diet-libc],
 [  --with-diet-libc        use diet libc],
 CC="diet cc -nostdinc"
+WITH_DIET_LIBC=yes
 AC_MSG_RESULT(CC=$CC))dnl
 dnl
-dnl set $(CC) from --with-cc=value
-dnl
 AC_ARG_WITH([cc],
-[  --with-cc=COMPILER      select compiler to use],
-AC_MSG_RESULT(CC=$withval)
-CC=$withval,
-if test -z "$CC" ; then CC=cc; fi
-[AC_MSG_RESULT(CC defaults to $CC)])dnl
-export CC
-AC_SUBST([CC])
-AC_PROG_CC
-AC_PROG_CPP
-dnl
-dnl set $(LD) from --with-linker=value
-dnl
-AC_ARG_WITH([linker],
-[  --with-linker=LINKER    select linker to use],
-AC_MSG_RESULT(LD=$withval)
-LD=$withval,
-if test -z "$LD" ; then LD=$CC; fi
-[AC_MSG_RESULT(LD defaults to $LD)])dnl
-export LD
-AC_SUBST([LD])
-dnl
-dnl set $(CCOPTS) from --with-ccopts=value
+AC_HELP_STRING([--with-cc],[no longer supported, use CC= instead]),
+AC_MSG_ERROR([--with-cc no longer supported; use CC= instead]))
 dnl
 AC_ARG_WITH([ccopts],
-[  --with-ccopts=CCOPTS    select compiler command line options],
-AC_MSG_RESULT(CCOPTS is $withval)
-CFLAGS=$withval,
-)dnl
+AC_HELP_STRING([--with-ccopts],[no longer supported, use CFLAGS= instead]),
+AC_MSG_ERROR([--with-ccopts no longer supported; use CFLAGS= instead]))
+dnl
+AC_ARG_WITH([ldopts],
+AC_HELP_STRING([--with-ldopts],[no longer supported, use LDFLAGS= instead]),
+AC_MSG_ERROR([--with-ldopts no longer supported; use LDFLAGS= instead]))
+dnl
+AC_PROG_CC
+AC_PROG_CPP
 dnl
 dnl On systems without linux header files, we add an extra include directory
 dnl that holds enough to fake it (hopefully).  Note that the $(top_srcdir) here
@@ -135,16 +127,7 @@
 dnl
 LIB_EXT=.a
 STATIC_LIB_EXT=.a
-PROFILE_LIB_EXT=.a
-dnl
-dnl set $(LDFLAGS) from --with-ldopts=value
-dnl
-AC_ARG_WITH([ldopts],
-[  --with-ldopts=LDOPTS    select linker command line options],
-AC_MSG_RESULT(LDFLAGS is $withval)
-LDFLAGS=$withval,
-LDFLAGS=)dnl
-AC_SUBST(LDFLAGS)
+PROFILED_LIB_EXT=.a
 dnl
 dnl Allow separate `root_prefix' to be specified
 dnl
@@ -160,31 +143,53 @@
 if test "$enableval" = "no"
 then
 	MAINTAINER_CMT=#
-	echo "Disabling maintainer mode"
+	AC_MSG_RESULT([Disabling maintainer mode])
 else
 	MAINTAINER_CMT=
-	echo "Enabling maintainer mode"
+	AC_MSG_RESULT([Enabling maintainer mode])
 fi
 ,
 MAINTAINER_CMT=#
-echo "Disabling maintainer mode by default"
+AC_MSG_RESULT([Disabling maintainer mode by default])
 )
 AC_SUBST(MAINTAINER_CMT)
 dnl
+dnl handle --enable-verbose-makecmds
+dnl
+AC_ARG_ENABLE([verbose-makecmds],
+[  --enable-verbose-makecmds  enable verbose make command output],
+if test "$enableval" = "no"
+then
+	AC_MSG_RESULT([Disabling verbose make commands])
+	E=@echo
+	Q=@
+else
+	AC_MSG_RESULT([Enabling verbose make commands])
+	E=@\\#
+	Q= 
+fi
+,
+AC_MSG_RESULT([Disabling verbose make commands])
+E=@echo
+Q=@
+)
+AC_SUBST(E)
+AC_SUBST(Q)
+dnl
 dnl handle --enable-compression
 dnl
 AC_ARG_ENABLE([compression],
 [  --enable-compression	  enable EXPERIMENTAL compression support],
 if test "$enableval" = "no"
 then
-	echo "Disabling compression support"
+	AC_MSG_RESULT([Disabling compression support])
 else
 	AC_DEFINE(ENABLE_COMPRESSION)
-	echo "Enabling compression support"
-	echo "WARNING: Compression support is experimental"
+	AC_MSG_RESULT([Enabling compression support])
+	AC_MSG_WARN([Compression support is experimental])
 fi
 ,
-echo "Disabling compression support by default"
+AC_MSG_RESULT([Disabling compression support by default])
 )
 dnl
 dnl handle --enable-htree
@@ -194,22 +199,24 @@
 if test "$enableval" = "no"
 then
 	HTREE_CMT=#
-	echo "Disabling htree directory support"
+	AC_MSG_RESULT([Disabling htree directory support])
 else
 	HTREE_CMT=
 	AC_DEFINE(ENABLE_HTREE)
-	echo "Enabling htree directory support"
+	AC_MSG_RESULT([Enabling htree directory support])
 fi
 ,
 HTREE_CMT=
 AC_DEFINE(ENABLE_HTREE)
-echo "Enabling htree directory support by default"
+AC_MSG_RESULT([Enabling htree directory support by default])
 )
 AC_SUBST(HTREE_CMT)
 dnl
 dnl This needs to be before all of the --enable-*-shlibs options
 dnl
 E2_PKG_CONFIG_STATIC=--static
+LDFLAG_DYNAMIC=
+PRIVATE_LIBS_CMT=
 dnl
 dnl handle --enable-elf-shlibs
 dnl
@@ -219,7 +226,7 @@
 then
 	ELF_CMT=#
 	MAKEFILE_ELF=/dev/null
-	echo "Disabling ELF shared libraries"
+	AC_MSG_RESULT([Disabling ELF shared libraries])
 else
 	E2_PKG_CONFIG_STATIC=
 	ELF_CMT=
@@ -231,12 +238,14 @@
 	esac]
 	BINARY_TYPE=elfbin
 	LIB_EXT=.so
-	echo "Enabling ELF shared libraries"
+	PRIVATE_LIBS_CMT=#
+	LDFLAG_DYNAMIC=['-Wl,-rpath-link,$(top_builddir)/lib']
+	AC_MSG_RESULT([Enabling ELF shared libraries])
 fi
 ,
 MAKEFILE_ELF=/dev/null
 ELF_CMT=#
-echo "Disabling ELF shared libraries by default"
+AC_MSG_RESULT([Disabling ELF shared libraries by default])
 )
 AC_SUBST(ELF_CMT)
 AC_SUBST_FILE(MAKEFILE_ELF)
@@ -249,7 +258,7 @@
 then
 	BSDLIB_CMT=#
 	MAKEFILE_BSDLIB=/dev/null
-	echo "Disabling BSD shared libraries"
+	AC_MSG_RESULT([Disabling BSD shared libraries])
 else
 	E2_PKG_CONFIG_STATIC=
 	BSDLIB_CMT=
@@ -261,12 +270,12 @@
 		LIB_EXT=.dylib
 	;;
 	esac]
-	echo "Enabling BSD shared libraries"
+	AC_MSG_RESULT([Enabling BSD shared libraries])
 fi
 ,
 MAKEFILE_BSDLIB=/dev/null
 BSDLIB_CMT=#
-echo "Disabling BSD shared libraries by default"
+AC_MSG_RESULT([Disabling BSD shared libraries by default])
 )
 AC_SUBST(BSDLIB_CMT)
 AC_SUBST_FILE(MAKEFILE_BSDLIB)
@@ -279,17 +288,17 @@
 then
 	PROFILE_CMT=#
 	MAKEFILE_PROFILE=/dev/null
-	echo "Disabling profiling libraries"
+	AC_MSG_RESULT([Disabling profiling libraries])
 else
 	PROFILE_CMT=
 	MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
 	PROFILED_LIB_EXT=_p.a
-	echo "Building profiling libraries"
+	AC_MSG_RESULT([Building profiling libraries])
 fi
 ,
 PROFILE_CMT=#
 MAKEFILE_PROFILE=/dev/null
-echo "Disabling profiling libraries by default"
+AC_MSG_RESULT([Disabling profiling libraries by default])
 )
 AC_SUBST(PROFILE_CMT)
 AC_SUBST_FILE(MAKEFILE_PROFILE)
@@ -302,16 +311,16 @@
 then
 	CHECKER_CMT=#
 	MAKEFILE_CHECKER=/dev/null
-	echo "Disabling checker libraries"
+	AC_MSG_RESULT([Disabling checker libraries])
 else
 	CHECKER_CMT=
 	MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
-	echo "Building checker libraries"
+	AC_MSG_RESULT([Building checker libraries])
 fi
 ,
 CHECKER_CMT=#
 MAKEFILE_CHECKER=/dev/null
-echo "Disabling checker libraries by default"
+AC_MSG_RESULT([Disabling checker libraries by default])
 )
 AC_SUBST(CHECKER_CMT)
 AC_SUBST_FILE(MAKEFILE_CHECKER)
@@ -321,6 +330,8 @@
 AC_SUBST(LIB_EXT)
 AC_SUBST(STATIC_LIB_EXT)
 AC_SUBST(PROFILED_LIB_EXT)
+AC_SUBST(LDFLAG_DYNAMIC)
+AC_SUBST(PRIVATE_LIBS_CMT)
 dnl
 dnl handle --enable-jbd-debug
 dnl
@@ -328,13 +339,13 @@
 [  --enable-jbd-debug  	  enable journal debugging],
 if test "$enableval" = "no"
 then
-	echo "Disabling journal debugging"
+	AC_MSG_RESULT([Disabling journal debugging])
 else
 	AC_DEFINE(CONFIG_JBD_DEBUG)
-	echo "Enabling journal debugging"
+	AC_MSG_RESULT([Enabling journal debugging])
 fi
 ,
-echo "Disabling journal debugging by default"
+AC_MSG_RESULT([Disabling journal debugging by default])
 )
 dnl
 dnl handle --enable-blkid-debug
@@ -343,49 +354,138 @@
 [  --enable-blkid-debug    enable blkid debugging],
 if test "$enableval" = "no"
 then
-	echo "Disabling blkid debugging"
+	AC_MSG_RESULT([Disabling blkid debugging])
 else
 	AC_DEFINE(CONFIG_BLKID_DEBUG)
-	echo "Enabling blkid debugging"
+	AC_MSG_RESULT([Enabling blkid debugging])
 fi
 ,
-echo "Disabling blkid debugging by default"
+AC_MSG_RESULT([Disabling blkid debugging by default])
 )
 dnl
 dnl handle --enable-testio-debug
 dnl
 AC_ARG_ENABLE([testio-debug],
-[  --enable-testio-debug   enable the use of the test I/O manager for debugging],
+[  --disable-testio-debug  disable the use of the test I/O manager for debugging],
 if test "$enableval" = "no"
 then
-	echo "Disabling testio debugging"
+	AC_MSG_RESULT([Disabling testio debugging])
+	TEST_IO_CMT="#"
 else
+	TEST_IO_CMT=
 	AC_DEFINE(CONFIG_TESTIO_DEBUG)
-	echo "Enabling testio debugging"
+	AC_MSG_RESULT([Enabling testio debugging])
 fi
 ,
-echo "Disabling testio debugging by default"
+AC_MSG_RESULT([Enabling testio debugging by default])
+AC_DEFINE(CONFIG_TESTIO_DEBUG)
+TEST_IO_CMT=
 )
+AC_SUBST(TEST_IO_CMT)
 dnl
-dnl handle --enable-swapfs
+dnl handle --disable-libuuid
 dnl
-AC_ARG_ENABLE([swapfs],
-[  --disable-swapfs    	  disable support of legacy byte-swapped filesystems],
+PKG_PROG_PKG_CONFIG
+LIBUUID=
+DEPLIBUUID=
+STATIC_LIBUUID=
+DEPSTATIC_LIBUUID=
+PROFILED_LIBUUID=
+DEPPROFILED_LIBUUID=
+UUID_CMT=
+AC_ARG_ENABLE([libuuid],
+[  --disable-libuuid	  do not build private uuid library],
 if test "$enableval" = "no"
 then
-	SWAPFS_CMT=#
-	echo "Disabling swapfs support"
+	if test -z "$PKG_CONFIG"; then
+		AC_MSG_ERROR([pkg-config not installed; please install it.])
+	fi
+
+	AC_CHECK_LIB(uuid, uuid_generate,
+		[LIBUUID=`$PKG_CONFIG --libs uuid`;
+		 STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`],
+		[AC_MSG_ERROR([external uuid library not found])],
+		[$LIBUUID])
+	UUID_CMT=#
+	AC_MSG_RESULT([Disabling private uuid library])
 else
-	SWAPFS_CMT=
-	AC_DEFINE(ENABLE_SWAPFS)
-	echo "Enabling swapfs support"
+	LIBUUID='$(LIB)/libuuid'$LIB_EXT
+	DEPLIBUUID=$LIBUUID
+	STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+	DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+	PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+	DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+	AC_MSG_RESULT([Enabling private uuid library])
 fi
 ,
-SWAPFS_CMT=
-echo "Enabling swapfs support by default"
-AC_DEFINE(ENABLE_SWAPFS)
+LIBUUID='$(LIB)/libuuid'$LIB_EXT
+DEPLIBUUID=$LIBUUID
+STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+AC_MSG_RESULT([Enabling private uuid library by default])
 )
-AC_SUBST(SWAPFS_CMT)
+AC_SUBST(LIBUUID)
+AC_SUBST(DEPLIBUUID)
+AC_SUBST(STATIC_LIBUUID)
+AC_SUBST(DEPSTATIC_LIBUUID)
+AC_SUBST(PROFILED_LIBUUID)
+AC_SUBST(DEPPROFILED_LIBUUID)
+AC_SUBST(UUID_CMT)
+dnl
+dnl handle --disable-libblkid
+dnl
+PKG_PROG_PKG_CONFIG
+LIBBLKID=
+DEPLIBBLKID=
+STATIC_LIBBLKID=
+DEPSTATIC_LIBBLKID=
+PROFILED_LIBBLKID=
+DEPPROFILED_LIBBLKID=
+BLKID_CMT=
+AC_ARG_ENABLE([libblkid],
+[  --disable-libblkid	  do not build private blkid library],
+if test "$enableval" = "no"
+then
+	if test -z "$PKG_CONFIG"; then
+		AC_MSG_ERROR([pkg-config not installed; please install it.])
+	fi
+
+	AC_CHECK_LIB(blkid, blkid_get_cache,
+		[LIBBLKID=`$PKG_CONFIG --libs blkid`;
+		 STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`],
+		[AC_MSG_ERROR([external blkid library not found])],
+		[$LIBBLKID])
+	BLKID_CMT=#
+	AC_MSG_RESULT([Disabling private blkid library])
+else
+	LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+	DEPLIBBLKID=$LIBBLKID
+	STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+	DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+	PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+	DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+	AC_DEFINE(CONFIG_BUILD_FINDFS)
+	AC_MSG_RESULT([Enabling private blkid library])
+fi
+,
+LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+DEPLIBBLKID=$LIBBLKID
+STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+AC_DEFINE(CONFIG_BUILD_FINDFS)
+AC_MSG_RESULT([Enabling private blkid library by default])
+)
+AC_SUBST(LIBBLKID)
+AC_SUBST(DEPLIBBLKID)
+AC_SUBST(STATIC_LIBBLKID)
+AC_SUBST(DEPSTATIC_LIBBLKID)
+AC_SUBST(PROFILED_LIBBLKID)
+AC_SUBST(DEPPROFILED_LIBBLKID)
+AC_SUBST(BLKID_CMT)
 dnl
 dnl handle --enable-debugfs
 dnl
@@ -393,14 +493,14 @@
 [  --disable-debugfs   	  disable support of debugfs program],
 if test "$enableval" = "no"
 then
-	echo "Disabling debugfs support"
+	AC_MSG_RESULT([Disabling debugfs support])
 	DEBUGFS_CMT="#"
 else
 	DEBUGFS_CMT=
-	echo "Enabling debugfs support"
+	AC_MSG_RESULT([Enabling debugfs support])
 fi
 ,
-echo "Enabling debugfs support by default"
+AC_MSG_RESULT([Enabling debugfs support by default])
 DEBUGFS_CMT=
 )
 AC_SUBST(DEBUGFS_CMT)
@@ -411,14 +511,14 @@
 [  --disable-imager   	  disable support of e2image program],
 if test "$enableval" = "no"
 then
-	echo "Disabling e2image support"
+	AC_MSG_RESULT([Disabling e2image support])
 	IMAGER_CMT="#"
 else
 	IMAGER_CMT=
-	echo "Enabling e2image support"
+	AC_MSG_RESULT([Enabling e2image support])
 fi
 ,
-echo "Enabling e2image support by default"
+AC_MSG_RESULT([Enabling e2image support by default])
 IMAGER_CMT=
 )
 AC_SUBST(IMAGER_CMT)
@@ -429,14 +529,14 @@
 [  --disable-resizer   	  disable support of e2resize program],
 if test "$enableval" = "no"
 then
-	echo "Disabling e2resize support"
+	AC_MSG_RESULT([Disabling e2resize support])
 	RESIZER_CMT="#"
 else
 	RESIZER_CMT=
-	echo "Enabling e2resize support"
+	AC_MSG_RESULT([Enabling e2resize support])
 fi
 ,
-echo "Enabling e2resize support by default"
+AC_MSG_RESULT([Enabling e2resize support by default])
 RESIZER_CMT=
 )
 AC_SUBST(RESIZER_CMT)
@@ -448,20 +548,20 @@
 [if test "$enableval" = "no"
 then
 	FSCK_PROG='' FSCK_MAN=''
-	echo "Not building fsck wrapper"
+	AC_MSG_RESULT([Not building fsck wrapper])
 else
 	FSCK_PROG=fsck FSCK_MAN=fsck.8
-	echo "Building fsck wrapper"
+	AC_MSG_RESULT([Building fsck wrapper])
 fi]
 ,
 [case "$host_os" in
   gnu*)
     FSCK_PROG='' FSCK_MAN=''
-    echo "Not building fsck wrapper by default"
+    AC_MSG_RESULT([Not building fsck wrapper by default])
     ;;
   *)
     FSCK_PROG=fsck FSCK_MAN=fsck.8
-    echo "Building fsck wrapper by default"
+    AC_MSG_RESULT([Building fsck wrapper by default])
 esac]
 )
 AC_SUBST(FSCK_PROG)
@@ -474,68 +574,17 @@
 [if test "$enableval" = "no"
 then
 	E2INITRD_PROG='' E2INITRD_MAN=''
-	echo "Not building e2initrd helper"
+	AC_MSG_RESULT([Not building e2initrd helper])
 else
 	E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
-	echo "Building e2initrd helper"
+	AC_MSG_RESULT([Building e2initrd helper])
 fi]
 ,
 E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
-echo "Building e2initrd helper by default"
+AC_MSG_RESULT([Building e2initrd helper by default])
 )
 AC_SUBST(E2INITRD_PROG)
 AC_SUBST(E2INITRD_MAN)
-dnl handle --enable-blkid-devmapper
-dnl
-STATIC_BLKID_DEVMAPPER_LIBS=''
-AC_ARG_ENABLE([blkid-devmapper],
-[  --enable-blkid-devmapper  build with device-mapper support],
-[if test "$enableval" = "no"
-then
-	echo "Disabling device-mapper support"
-	DEVMAPPER_REQ=''
-	DEVMAPPER_LIBS=''
-	STATIC_DEVMAPPER_LIBS=''
-else
-	AC_DEFINE(HAVE_DEVMAPPER)
-	echo "Enabling device-mapper support"
-
-	PKG_PROG_PKG_CONFIG()
-
-	if test -z "$PKG_CONFIG"; then
-		echo "pkg-config not installed; please install it."
-		exit 1;
-	fi
- 
-	AC_CHECK_LIB(devmapper, dm_tree_create,
-		[DEVMAPPER_LIBS=`$PKG_CONFIG --libs devmapper`; 
-		 STATIC_DEVMAPPER_LIBS=`$PKG_CONFIG --static --libs devmapper`;
-		 DEVMAPPER_REQ="devmapper";
-		 DEVMAPPER_PC_LIBS="-ldevmapper"],
-		[AC_MSG_ERROR([device-mapper library not found])],
-		[$DEVMAPPER_LIBS])
-	# work around stupid devmapper.pc bug in Debian
-	case "$STATIC_DEVMAPPER_LIBS" in
-	*pthread*)
-	    ;;
-	*)
-	    echo "Working around Debian bug #390243..."
-	    STATIC_DEVMAPPER_LIBS="-pthread $STATIC_DEVMAPPER_LIBS"
-	    ;;
-	esac
-	if test "$E2_PKG_CONFIG_STATIC" = "--static"; then
-	    DEVMAPPER_LIBS="$STATIC_DEVMAPPER_LIBS"
-	    STATIC_BLKID_DEVMAPPER_LIBS="$STATIC_DEVMAPPER_LIBS"
-	fi
-fi]
-,
-echo "Disabling device-mapper support by default"
-)
-AC_SUBST(DEVMAPPER_REQ)
-AC_SUBST(DEVMAPPER_PC_LIBS)
-AC_SUBST(DEVMAPPER_LIBS)
-AC_SUBST(STATIC_DEVMAPPER_LIBS)
-AC_SUBST(STATIC_BLKID_DEVMAPPER_LIBS)
 dnl
 dnl
 dnl
@@ -544,14 +593,20 @@
 [if test "$enableval" = "no"
 then
 	try_tls=""
-	echo "Disabling thread local support"
+	AC_MSG_RESULT([Disabling thread local support])
 else
 	try_tls="yes"
-	echo "Enabling thread local support"
+	AC_MSG_RESULT([Enabling thread local support])
 fi]
 ,
-try_tls="yes"
-echo "Try using thread local support by default"
+if test -n "$WITH_DIET_LIBC"
+then
+	try_tls=""
+	AC_MSG_RESULT([Diet libc does not support thread local support])
+else
+	try_tls="yes"
+	AC_MSG_RESULT([Try using thread local support by default])
+fi
 )
 if test "$try_tls" = "yes"
 then
@@ -564,17 +619,17 @@
 [  --disable-uuidd         disable building the uuid daemon],
 [if test "$enableval" = "no"
 then
-	echo "Not building uuidd"
+	AC_MSG_RESULT([Not building uuidd])
 	UUIDD_CMT="#"
 else
 	AC_DEFINE(USE_UUIDD)
 	UUIDD_CMT=""
-	echo "Building uuidd"
+	AC_MSG_RESULT([Building uuidd])
 fi]
 ,
 AC_DEFINE(USE_UUIDD)
 UUIDD_CMT=""
-echo "Building uuidd by default"
+AC_MSG_RESULT([Building uuidd by default])
 )
 AC_SUBST(UUIDD_CMT)
 dnl
@@ -601,6 +656,7 @@
 dnl
 AC_SUBST(BINARY_TYPE)
 AC_PROG_MAKE_SET
+CHECK_GNU_MAKE
 AC_PATH_PROG(LN, ln, ln)
 AC_PROG_LN_S
 AC_PATH_PROG(MV, mv, mv)
@@ -615,6 +671,20 @@
 AC_CHECK_TOOL(AR, ar, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 AC_CHECK_TOOL(STRIP, strip, :)
+AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
+if test "_$MAKEINFO" = "_"; then
+    MAKEINFO="@echo Makeinfo is missing. Info documentation will not be built.;true"
+else
+    case "$MAKEINFO" in
+      */missing.*)
+        AC_MSG_WARN([
+*** Makeinfo is missing. Info documentation will not be built.])
+        ;;
+      *)
+        ;;
+    esac
+fi
+AC_SUBST(MAKEINFO)
 AC_PROG_INSTALL
 # See if we need a separate native compiler.
 if test $cross_compiling = no; then
@@ -623,7 +693,7 @@
 else
   AC_CHECK_PROGS(BUILD_CC, gcc cc)
 fi
-AC_CHECK_HEADERS(dirent.h errno.h getopt.h malloc.h mntent.h paths.h setjmp.h signal.h stdarg.h stdint.h stdlib.h termios.h unistd.h utime.h linux/fd.h linux/major.h net/if_dl.h netinet/in.h sys/disklabel.h sys/ioctl.h sys/mkdev.h sys/mman.h sys/prctl.h sys/queue.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h sys/sysmacros.h sys/time.h sys/types.h sys/un.h sys/wait.h)
+AC_CHECK_HEADERS(dirent.h errno.h getopt.h malloc.h mntent.h paths.h semaphore.h setjmp.h signal.h stdarg.h stdint.h stdlib.h termios.h termio.h unistd.h utime.h linux/fd.h linux/major.h net/if_dl.h netinet/in.h sys/disklabel.h sys/file.h sys/ioctl.h sys/mkdev.h sys/mman.h sys/prctl.h sys/queue.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h sys/sysmacros.h sys/time.h sys/types.h sys/un.h sys/wait.h)
 AC_CHECK_HEADERS(sys/disk.h sys/mount.h,,,
 [[
 #if HAVE_SYS_QUEUE_H
@@ -669,14 +739,6 @@
 dnl
 dnl Word sizes...
 dnl
-if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
-  # if cross-compiling, with no cached values, just assume something common. 
-  ac_cv_sizeof_short=2
-  ac_cv_sizeof_int=4
-  ac_cv_sizeof_long=4
-  ac_cv_sizeof_long_long=8
-  AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
-fi
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(long)
@@ -694,6 +756,25 @@
 ASM_TYPES_HEADER=./asm_types.h
 AC_SUBST_FILE(ASM_TYPES_HEADER)
 dnl
+dnl Save the configuration #defines needed for the public ext2fs.h
+dnl header file
+dnl
+echo "/* These defines are needed for the public ext2fs.h header file */" \
+     > public_config.h
+if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef HAVE_SYS_TYPES_H" >> public_config.h
+fi
+if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef WORDS_BIGENDIAN" >> public_config.h
+fi
+rm -f tmp_config.$$
+PUBLIC_CONFIG_HEADER=./public_config.h
+AC_SUBST_FILE(PUBLIC_CONFIG_HEADER)
+dnl
 dnl See if we have inttypes.h and if intptr_t is defined
 dnl
 AC_CHECK_HEADERS([inttypes.h])
@@ -729,7 +810,14 @@
 	[#include <sys/types.h>
 	 #include <sys/socket.h>])
 dnl
-AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 fstat64 ftruncate64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime strdup sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl mmap utime setresuid setresgid)
+dnl This will add -lblkid to the AC_CHECK_FUNCS search if we are using
+dnl the system-provided blkid library
+dnl
+if test -n "$BLKID_CMT"; then
+  AC_SEARCH_LIBS([blkid_probe_all], [blkid])
+fi
+dnl
+AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 fstat64 ftruncate64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime strdup sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl mmap utime setresuid setresgid usleep nanosleep getdtablesize getrlimit blkid_probe_get_topology)
 dnl
 dnl Check to see if -lsocket is required (solaris) to make something
 dnl that uses socket() to compile; this is needed for the UUID library
@@ -738,14 +826,6 @@
 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
 AC_SUBST(SOCKET_LIB)
 dnl
-dnl Check to see if libdl exists for the sake of dlopen
-dnl
-DLOPEN_LIB=''
-AC_CHECK_LIB(dl, dlopen, 
-[DLOPEN_LIB=-ldl
-AC_DEFINE(HAVE_DLOPEN)])
-AC_SUBST(DLOPEN_LIB)
-dnl
 dnl See if optreset exists
 dnl
 AC_MSG_CHECKING(for optreset)
@@ -757,10 +837,25 @@
   AC_DEFINE(HAVE_OPTRESET)
 fi
 dnl
+dnl Test for sem_init, and which library it might require:
+dnl
+SEM_INIT_LIB=''
+AC_CHECK_FUNC(sem_init, ,
+  AC_CHECK_LIB(pthread, sem_init,
+  	AC_DEFINE(HAVE_SEM_INIT)
+  	SEM_INIT_LIB=-lpthread,
+  AC_CHECK_LIB(rt, sem_init,
+  	AC_DEFINE(HAVE_SEM_INIT)
+  	SEM_INIT_LIB=-lrt,
+  AC_CHECK_LIB(posix4, sem_init,
+  	AC_DEFINE(HAVE_SEM_INIT)
+  	SEM_INIT_LIB=-lposix4))))dnl
+AC_SUBST(SEM_INIT_LIB)
+dnl
 dnl Check for unified diff
 dnl
 AC_MSG_CHECKING(for unified diff option)
-if diff -u $0 $0 >& /dev/null ; then
+if diff -u $0 $0 > /dev/null 2>&1 ; then
    UNI_DIFF_OPTS=-u
 else
    UNI_DIFF_OPTS=-c
@@ -800,7 +895,7 @@
 linux* | gnu* | k*bsd*-gnu)
 	if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
 		root_prefix="";
-		echo "On $host_os systems, root_prefix defaults to ''"
+		AC_MSG_RESULT([On $host_os systems, root_prefix defaults to ''])
 	fi
 	;;
 esac
@@ -811,9 +906,9 @@
 linux* | gnu* | k*bsd*-gnu)
 	if test "$prefix" = NONE ; then
 		prefix="/usr";
-		echo "On $host_os systems, prefix defaults to /usr"
+		AC_MSG_RESULT([On $host_os systems, prefix defaults to /usr])
 		if test "$mandir" = '${prefix}/man' ; then
-			echo "...and mandir defaults to /usr/share/man"
+			AC_MSG_RESULT([...and mandir defaults to /usr/share/man])
 			mandir=/usr/share/man
 		fi
 	fi
@@ -837,19 +932,19 @@
 fi
 if test "$bindir" != '${exec_prefix}/bin'; then
     root_bindir=$bindir
-    echo "Setting root_bindir to $root_bindir"
+    AC_MSG_RESULT([Setting root_bindir to $root_bindir])
 fi
 if test "$sbindir" != '${exec_prefix}/sbin'; then
     root_sbindir=$sbindir
-    echo "Setting root_sbindir to $root_sbindir"
+    AC_MSG_RESULT([Setting root_sbindir to $root_sbindir])
 fi
 if test "$libdir" != '${exec_prefix}/lib'; then
     root_libdir=$libdir
-    echo "Setting root_libdir to $root_libdir"
+    AC_MSG_RESULT([Setting root_libdir to $root_libdir])
 fi
 if test "$sysconfdir" != '${prefix}/etc'; then
     root_sysconfdir=$sysconfdir
-    echo "Setting root_sysconfdir to $root_sysconfdir"
+    AC_MSG_RESULT([Setting root_sysconfdir to $root_sysconfdir])
 fi
 AC_SUBST(root_prefix)
 AC_SUBST(root_bindir)
@@ -890,7 +985,7 @@
 dnl
 case "$host_os" in
 darwin*)
-	echo "Using Apple Darwin / GNU libintl workaround"
+	AC_MSG_RESULT([Using Apple Darwin / GNU libintl workaround])
 	AC_DEFINE(_INTL_REDIRECT_MACROS)
 	;;
 esac
@@ -948,11 +1043,11 @@
 	lib/e2p/e2p.pc lib/blkid/blkid.pc lib/ext2fs/ext2fs.pc \
 	misc/Makefile ext2ed/Makefile e2fsck/Makefile \
 	debugfs/Makefile tests/Makefile tests/progs/Makefile \
-	resize/Makefile doc/Makefile intl/Makefile po/Makefile.in ; do
+	resize/Makefile doc/Makefile intl/Makefile \
+	intl/libgnuintl.h po/Makefile.in ; do
 	if test -d `dirname ${srcdir}/$i` ; then
 		outlist="$outlist $i"
 	fi
 done
 AC_OUTPUT($outlist)
 if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi
-
diff --git a/contrib/build-rpm b/contrib/build-rpm
index c635097..0b06071 100644
--- a/contrib/build-rpm
+++ b/contrib/build-rpm
@@ -1,5 +1,10 @@
 #!/bin/sh
 
+# enable xtrace output if requested
+if [ -n ${ENABLE_XTRACE:-''} ]; then
+    set -x
+fi
+
 # Build an e2fsprogs RPM from cvs
 
 pwd=`pwd`
@@ -8,8 +13,11 @@
 pkgvers=`grep Version: e2fsprogs.spec | awk '{print $2;}'`
 builddir=${pkgname}-${pkgvers}
 
+# ensure that $TMP is set to something
+TMP=${TMP:-'/tmp'}
+
 cd ..
-tmpdir=`mktemp -d rpmtmp.XXXXXX`
+tmpdir=`mktemp -d ${RPM_TMPDIR:-$TMP}/rpmtmp.XXXXXX`
 
 # We need to build a tarball for the SRPM using $builddir as the 
 # directory name (since that's what RPM will expect it to unpack
@@ -25,10 +33,13 @@
 (cd $tmpdir && tar czfh ${builddir}.tar.gz $EXCLUDE $builddir)
 
 [ "`rpmbuild --version 2> /dev/null`" ] && RPM=rpmbuild || RPM=rpm
-$RPM --define "_sourcedir `pwd`/$tmpdir" -ba $currdir/e2fsprogs.spec
 
-ret=$?
+$RPM --define "_sourcedir $tmpdir" \
+     --define "_topdir ${RPM_TOPDIR:-$(rpm -E %_topdir)}" \
+     --define "_tmpdir ${RPM_TMPDIR:-$TMP}" \
+     --define "extra_config_flags ${EXTRA_CONFIG_FLAGS:-''}" \
+     -ba $currdir/e2fsprogs.spec
+
+rpm_exit=$?
 rm -rf $tmpdir
-exit $?
-
-
+exit $rpm_exit
diff --git a/contrib/e2croncheck b/contrib/e2croncheck
new file mode 100755
index 0000000..87204be
--- /dev/null
+++ b/contrib/e2croncheck
@@ -0,0 +1,47 @@
+#!/bin/sh
+#
+# e2croncheck -- run e2fsck automatically out of /etc/cron.weekly
+#
+# This script is intended to be run by the system administrator 
+# periodically from the command line, or to be run once a week
+# or so by the cron daemon to check a mounted filesystem (normally
+# the root filesystem, but it could be used to check other filesystems
+# that are always mounted when the system is booted).
+#
+# Make sure you customize "VG" so it is your LVM volume group name, 
+# "VOLUME" so it is the name of the filesystem's logical volume, 
+# and "EMAIL" to be your e-mail address
+#
+# Written by Theodore Ts'o, Copyright 2007, 2008, 2009.
+#
+# This file may be redistributed under the terms of the 
+# GNU Public License, version 2.
+#
+
+VG=ssd
+VOLUME=root
+SNAPSIZE=100m
+EMAIL=sysadmin@example.com
+
+TMPFILE=`mktemp -t e2fsck.log.XXXXXXXXXX`
+
+OPTS="-Fttv -C0"
+#OPTS="-Fttv -E fragcheck"
+
+set -e
+START="$(date +'%Y%m%d%H%M%S')"
+lvcreate -s -L ${SNAPSIZE} -n "${VOLUME}-snap" "${VG}/${VOLUME}"
+if nice logsave -as $TMPFILE e2fsck -p $OPTS "/dev/${VG}/${VOLUME}-snap" && \
+   nice logsave -as $TMPFILE e2fsck -fy $OPTS "/dev/${VG}/${VOLUME}-snap" ; then
+  echo 'Background scrubbing succeeded!'
+  tune2fs -C 0 -T "${START}" "/dev/${VG}/${VOLUME}"
+else
+  echo 'Background scrubbing failed! Reboot to fsck soon!'
+  tune2fs -C 16000 -T "19000101" "/dev/${VG}/${VOLUME}"
+  if test -n "$RPT-EMAIL"; then 
+    mail -s "E2fsck of /dev/${VG}/${VOLUME} failed!" $EMAIL < $TMPFILE
+  fi
+fi
+lvremove -f "${VG}/${VOLUME}-snap"
+rm $TMPFILE
+
diff --git a/contrib/make-sparse.c b/contrib/make-sparse.c
new file mode 100644
index 0000000..1b3d550
--- /dev/null
+++ b/contrib/make-sparse.c
@@ -0,0 +1,87 @@
+/*
+ * make-sparse.c --- make a sparse file from stdin
+ * 
+ * Copyright 2004 by Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+int full_read(int fd, char *buf, size_t count)
+{
+	int got, total = 0;
+	int pass = 0;
+
+	while (count > 0) {
+		got = read(fd, buf, count);
+		if (got == -1) {
+			if ((errno == EINTR) || (errno == EAGAIN)) 
+				continue;
+			return total ? total : -1;
+		}
+		if (got == 0) {
+			if (pass++ >= 3)
+				return total;
+			continue;
+		}
+		pass = 0;
+		buf += got;
+		total += got;
+		count -= got;
+	}
+	return total;
+}
+
+int main(int argc, char **argv)
+{
+	int fd, got, i;
+	int zflag = 0;
+	char buf[1024];
+
+	if (argc != 2) {
+		fprintf(stderr, "Usage: make-sparse out-file\n");
+		exit(1);
+	}
+	fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0777);
+	if (fd < 0) {
+		perror(argv[1]);
+		exit(1);
+	}
+	while (1) {
+		got = full_read(0, buf, sizeof(buf));
+		if (got == 0)
+			break;
+		if (got == sizeof(buf)) {
+			for (i=0; i < sizeof(buf); i++) 
+				if (buf[i])
+					break;
+			if (i == sizeof(buf)) {
+				lseek(fd, sizeof(buf), SEEK_CUR);
+				zflag = 1;
+				continue;
+			}
+		}
+		zflag = 0;
+		write(fd, buf, got);
+	}
+	if (zflag) {
+		lseek(fd, -1, SEEK_CUR);
+		buf[0] = 0;
+		write(fd, buf, 1);
+	}
+	return 0;
+}
+		
diff --git a/debian/changelog b/debian/changelog
index b42bf20..22533ff 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,661 @@
+e2fsprogs (1.41.11-1) unstable; urgency=medium
+
+  * New upstream release
+  * Add Heimdal function com_right_r() to libcom_err (Closes: #558910)
+  * Allow e2fsck to run even if the physical device has more than 2**32 blocks
+  * Debugfs's "logdump -b <blk>" now properly shows the allocation status
+    of the block <blk>.  (Closes: #564084)
+  * Make e2fsck's "the filesystem is mounted" message is now more scary
+    to hopefully dissuade users from thinking, "surely that message
+    doesn't apply to *me*"  :-(
+  * e2fsck -n will now always open the file system read-only.   We now
+    disallow certain combination of options which previously were manual
+    exceptions; this is bad because it causes users to think they are
+    smarter than they really are.   So "-n -c", "-n -l", "-n -L", and
+    "-n -D" are no longer supported.
+  * If the partition is badly aligned, have mke2fs just print a warning
+    message and continue.  Previously mke2fs would ask to confirm, and
+    this broke distro installation scripts.
+  * Fix a bug in libext2fs caused the creation of very large journals
+    for ext4 to be _very_ slow.
+  * E2fsck now understands the EOFBLOCKS_FL flag which will be used in
+    2.6.34 kernels to make e2fsck not complain about blocks deliberately
+    fallocated() beyond an inode's i_size.
+  * Fix a bug in e2fsck which could cause e2fsck -D to corrupt
+    non-indexed directories.  (Closes: #572453)
+  * debian/rules: can be compiled statically with stack protector now.
+    (Closes: #573923)
+  * Update debian policy compliance to 3.8.4
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 15 Mar 2010 00:16:35 -0400
+
+e2fsprogs (1.41.10-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix resize2fs bug which causes it to access invalid memory
+  * Add libss support for libreadline.so.6
+  * Fix e2fsck's check for extent-mapped directory with an incorrect file type
+  * Add new e2fsck.conf configuration option:
+    default/broken_system_clock for system with broken CMOS hardware
+    clocks.  (Closes: #559776)
+  * Fix flex_bg inode table placement algorithm used by mke2fs for
+    certain specific file system sizes
+  * Add source lintian overrids for weak-library-dev-dependency
+  * Fix FTBFS problem caused by texi2html changing (again) its output
+    location.  (Closes: #552934)
+  * Make e2fsck to avoid rehashing directories which can fit in a
+    single directory block.
+  * Fix how e2fsck fixes sparse directories which are extent-mapped.
+  * Fix some big-endian bugs in e2fsck and libext2fs
+  * Teach e2fsck to detect and fix sparse extent-mapped directories
+  * Fix filefrag from core dumping on file systems with 8k block sizes
+  * E2fsck was depending on i_size to be correct to detect and fix
+    certain directory problems before actually fixing the
+    directory's i_size.  This caused certain rare corruptions to
+    require two runs of e2fsck to address.
+  * Update Czech, Indonesian, Polish and Vietnamese translations
+    (from the Translation Project)
+  * Fix e2fsck to find and correct duplicate directory entries in
+    non-indexed directories.
+  * Add support for calling BLKDISCARD to mke2fs.
+  * Enhance libext2fs so it works around bug in Linux version 2.6.19
+    and earlier where the /proc/swaps file was missing the header on
+    the first line.
+  * Fix resize2fs so it works correctly on file systems with external journals
+  * Fix libss so that it does not seg fault when using a readline
+    library which does not supply a readline_shutdown() function.
+  * Add a pre-depends for util-linux-ng (Closes: #551795)
+  * Update and clarify various man pages.
+  * Corrected dumpe2fs's usage message
+  * Teach libext2fs to ignore the high 32 bits of the i_blocks field
+    when huge_file file system feature is set, but the inode does not
+    have the HUGE_FILE_FL flag set.
+  * Change e2fsck to accept superblock times to be fudged by up to 24
+    hours by default.  Most distributions have fixed their init scripts,
+    but apparently now they have buggy virtualization scripts.  :-(  I
+    give up, too many buggy user space set ups out there.  (Closes: #557636)
+  * Fix e2fsck to correctly print > 32-bit i_blocks numbers in problem reports
+  * Improve e2fsck so it prints "Illegal indirect block" instead of
+    "Illegal block #-1"
+  * Teach mke2fs to get device topology information from blkid and use
+    it to populate the superblock stride and stripe sizes and warn if
+    the block device is misaligned
+  * Fix a file descriptor leak in debugfs when sourcing a command file
+  * Fix a file descriptor leak in fsck
+  * Round up the bitmap size to prevent spurious segmentation faults on
+    BSD platforms.
+  * Fix resize2fs to correctly calculate the minimum size needed, when
+    flex_bg is enabled, to prevent resize2fs -M from failing.
+  * Dumpe2fs now displays more information about the contents of the journal
+  * Make sure the libblkid1 and libblkid1-dbg packags have changelogs
+  * On low memory systems, e2fsck can print some very scary looking
+    error messages.  Clean up them up to avoid user panic.  (Closes: #509529)
+  * Enhance blkid to support .ko.gz files in the modules.dep parser
+  * Fix tune2fs -j for mounted exted-enabled file systems
+  * Use the feature name "extent" instead of "extents" in mke2fs.conf.
+    Both work, but the latter is what is documented in the man page.
+    (Closes: #540111)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 07 Feb 2010 20:56:47 -0500
+
+e2fsprogs (1.41.9-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix tune2fs -I to work correctly in the face of bad blocks and
+    filesystems formatted for RAID arrays, and ENOSPC errors
+  * Require the user to only answer one question instead of multiple
+    ones for multiple bad block group checksums, or when an inode
+    table needs to be moved.
+  * Fix e2fsck to handle moving inode tables in FLEX_BG filesystems more
+    gracefully by looking in the entire flex_bg for space, instead of
+    just in the block group; if that doesn't work, try looking for
+    space in the entire filesystem.
+  * Fix the filefrag code to avoid printing the extent header if it
+    needs to fallback to using the FIBMAP ioctl.
+  * Fix filefrag to print the correct number of extents for zero-length
+    files when using FIBMAP.  (Closes: #540376)
+  * Add a filefrag -B option to make it easier to debug the FIBMAP
+    support.
+  * Allow e2fsprogs programs to allocate from uninitalized block groups.
+  * Add a new program, e2freefrag, which displays information about the
+    free space fragmentation in an ext2/3/4 filesystem.
+  * E2fsck will now print much fuller information when the last mount
+    time or last written time is in the future, since most people can't
+    seem to believe their distribution has buggy init scripts, or they
+    have a failed CMOS/RTS clock battery.
+  * Update French, Polish, Czech, and Sweedish translation from the
+    Translation Project.
+  * Enhance debugfs's 'stat' command to print basic extent information
+    for extent-mapped inodes, and add a new command, 'dump_extents'
+    which prints detailed information about an inode's extent tree.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 23 Aug 2009 10:08:52 -0400
+
+e2fsprogs (1.41.8-2) unstable; urgency=low
+
+  * Fix regression in ext2fs_extent_set_bmap() which caused e2fsck -fD
+    to fail on ext4 filesystems if the directory needs to shrink by more
+    than a block (Closes: #537510)
+  * Fixed filefrag for non-extent based files
+  * Fix use of apostrohe's in package descriptions
+  * Don't use dietlibc when building for mips and mipsel architectures
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 20 Jul 2009 09:38:21 -0400
+
+e2fsprogs (1.41.8-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix resize2fs bugs when shrinking ext4 filesystems
+  * Update debian policy compliance to 3.8.2
+  * Update package descriptions to mention ext3 and ext4 filesytems
+      (Closes: #535530)
+  * Update French, Polish, Czech, Indonesian, and Sweedish translation
+      from the Translation Project.
+  * If the resize2fs operation fails, the user will be told to fix up
+    the filesystem using e2fsck -fy.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 11 Jul 2009 17:26:16 -0400
+
+e2fsprogs (1.41.7-2) unstable; urgency=low
+
+  * Fix online resizing using resize2fs (Closes: #535452)
+  * Fix the filefrag program for files with more than 144 extents
+  * Update and clarify various man pages.
+  * Fix potential filesystem corruptions caused by using resize2fs to
+    shrink filesystems with extents enabled.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 07 Jul 2009 23:21:46 -0400
+
+e2fsprogs (1.41.7-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix memory leaks in e2fsprogs, including a very large memory leak
+    which can cause e2fsck to run out of memory when checking very large
+    filesystems using extents.
+  * Fix a bug in libext2fs which can cause e2fsck and resize2fs to write
+    uninitalized data into the portion of the inode beyond the first 128
+    bytes when operating on extents; potentially corrupting filesystems.
+  * The logsave program will now filter out the ^A and ^B characters when
+    writing to the console.
+  * Update/clarify man pages (Closes: #531385, #523063)
+  * Fix filefrag progam so it correctly checks for errors from the
+    fiemap ioctl.
+  * Change badblocks to allow block sizes larger than 4k.
+  * Fix libext2fs to properly initialize i_extra_size when creating the
+    journal and resize inodes.
+  * Resize2fs will now update the journal backup fileds in the
+    superblock if the journal is moved; this avoids an unnecessary full
+    fsck after resizing the filesystem.
+  * Use the same encoding as the kernel for rec_len == 64k in 64k block
+    filesystems.
+  * Fix lsattr to exit with a non-zero status when it encounters errors.
+  * Enhance badblocks to print the currently tested block number when
+    interrupted with ^C.
+  * Fix debugfs from core dumping if the logdump command fails to open the
+    output file.
+  * Harden ext2fs_validate_entry() so that lsdel will not read beyond the
+    end of the block even if the directory block is corrupted.
+  * Update Chinese and Czech translation from the Translation Project.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 29 Jun 2009 15:12:14 -0400
+
+e2fsprogs (1.41.6-1) unstable; urgency=low
+
+  * New upstream release
+  * Update and clarify man pages
+  * Fix a number of Lintian warnings, including to updating to debian
+    policy 3.8.1
+  * Update config.guess and config.sub to the latest (2009-04-17)
+    version so that e2fsprogs will build on the avr32 platform
+    (Closes: #528330)
+  * Add an explicit error message if the /etc/mtab file is missing
+    when running e2fsck or resize2fs (Closes: #527859)
+  * Enhance e2fsck to handle the case where the primary block group
+    descriptors need fixing, and the backup superblock is corrupt.
+    (Closes: #516820)
+  * Add an "-a" option to debugfs's close_filesys command
+  * e2fsck will no longer abort a preen operation if an inode's
+    i_file_acl_hi field is non-zero.  (Closes: #526524)
+  * The chattr program can now migrate inodes from using direct/indirect
+    blocks to extent trees.
+  * Speed up e2fsck if there are multiple block groups with inodes in
+    use in the unused portion of the block group's inode table.
+  * Update Chinese translation from the translation project
+  * Fix resize2fs so it won't corrupt ext4 filesystem when asked to
+    shrink a filesystem smaller than the minimum suggested size.
+  * Fix e2fsck regression which can corrupt ext4 filesystems when
+    replaying the journal.
+  * Add support to e2fsck for handling I/O errors while replaying the
+    journal
+  * Fix a bug in e2fsck which could cause it to crash if an inode has a
+    corrupt extent header, and the user declines to clear the inode.
+  * Fix blkid to prefer the /dev/mapper/<name> device names over the
+    private /dev/dm-N device names.
+  * Add support for the FIEMAP ioctl to the filefrag program
+  * Further speed up e2fsck by skipping journal checks if the filesystem
+    is mounted read-only and is marked as not needing journal replay.
+  * Add a build depends in the control file indicating that dietlibc
+    must be newer than version 0.30 (Closes: #506064)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 30 May 2009 13:26:23 -0400
+
+e2fsprogs (1.41.5-1) unstable; urgency=low
+
+  * New upstream release
+  * E2fsck will now detect and fix inodes that have a non-zero
+    i_file_acl_high field on 32-bit filesystems.
+  * Update build-depends to indicate that dietlibc 0.30 doesn't work.
+    (Closes: #506064)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 24 Apr 2009 08:52:47 -0400
+
+e2fsprogs (1.41.4-3) unstable; urgency=low
+
+  * Update/clarify man pages (Closes: #365619)
+  * Fix a problem where the 'device names' for pseudo-filesystems in
+    /proc/mounts could confuse the e2fsprogs into thinking that a
+    filesystem image stored in a regular file was mounted when it was not
+  * Remove whole-disk entries from the blkid cache when partitions are found
+  * Reduce the number of disk reads needed when the filesystem is clean
+  * Add Chinese (simplified) translation from the Translation Project
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 23 Apr 2009 01:35:22 -0400
+
+e2fsprogs (1.41.4-2) unstable; urgency=low
+
+  * Update the debian copyright files to point at the version-specific
+    GPL and LGPL files.
+  * Update the debhelper compat level to 7
+  * Fix a number of filesystem corruption bugs in resize2fs when growing
+    or shrinking ext4 filesystems off-line (i.e., when the ext4
+    filesystem is not mounted).
+  * Clarify tune2fs man page  (Closes: #515693)
+  * Add homepage field to the debian control file (Closes: #506279)
+  * Fix Hurd compilation problem (Closes: #521602)
+  * Debugfs can now set i_file_acl_high via the set_inodes_field command
+  * Debugfs will now display a 64-bit file acl block
+  * Fix various gcc compilation warnings and other programming cleanups
+  * Make sure libuuid closes all file descriptors before starting the
+    uuidd daemon.
+  * Avoid running e2fsck unnecessarily after doing an online resize
+  * Mke2fs -S will now avoid trying to create the journal
+  * Update the Czech translation from the translation project.
+  * Fix support for external journals (which was broken in e2fsprogs 1.41.4)
+  * Fix a compatibility issue with libext2fs info page and makeinfo 4.12
+  * Fix a segfault in debugfs when running stat without an open filesystem
+  * Teach the blkid library that starting in 2.6.29, ext4 can support
+    filesystems without journals.
+  * Add error check preventing the reserved_ratio argument to mke2fs and
+    tune2fs from being negative.  (Closes: #517015)
+  * Add support for tracking the number kilobytes written to the
+    filesystem via the superblock field s_kbytes_written
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 19 Apr 2009 23:05:53 -0400
+
+e2fsprogs (1.41.4-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix bug which could sometimes cause blkid to return an exit value of
+    zero for a non-existent device (Closes: #502541)
+  * Fix spelling mistake in Debian changelog (Closes: #502323)
+  * Fix blkid to deal with an ext3 filesystem with the test_fs flag
+  * Fix debugfs's ncheck output to suppress extra characters at the end
+    of the file name
+  * Tune2fs now updates the block group checksums after changing the
+    filesystem's UUID
+  * Speed up tune2fs's inode resizing code so it is no longer vastly
+    inefficient for moderate to large filesystems
+  * Fix dumpe2fs so it doesn't attempt to print the inline journal
+    information on filesystems with an external journal
+  * Update the Catalan translation
+  * Filter out linux-vdso.so lines when determining the library
+    dependencies while building the initial ramdisk (Closes: #503057)
+  * Fix e2fsck so an errant INODE_UNINIT flag set in a block group
+    doesn't cause e2fsck to abort.
+  * E2fsck now distinguishes between fragmented directories and
+    fragmented files in verbose mode statistics and in the fragcheck
+    report.
+  * Avoid double-counting non-contiguous extent-based inodes in the
+    verbose mode statistics.
+  * E2fsck now leaves slack space when repacking directories so that a
+    few new directory entries won't cause leaf nodes to become split
+    right away.
+  * E2fsck was previously not handling the case of a corrupted interior
+    node in the extent tree, and would crash in that case.  It now will
+    handle this and related failures robustly.
+  * E2fsck problem descriptions involving the journal are no longer
+    referred to as "ext3" problems, since ext4 filesystems also have
+    journals.
+  * Fix a long-standing bug in e2fsck which would cause it to crash when
+    replying journals for filesystems with block sizes greater than 8k.
+  * Fix a regression in debugfs's logdump command so it works for
+    filesystems with 32-bit block numbers.  This was accidentally broken
+    when the header files were changed to support the 64-bit block numbers.
+  * Fix resize2fs for ext4 filesystems.  Some blocks that that need moving
+    when shrinking filesystems with uninit_bg feature would not be
+    moved.  In addition, blocks and inode table blocks were not being
+    correctly freed when shrinking filesystems with the flex_bg feable,
+    which caused resize2fs -M to fail.  Finally, when blocks are moved,
+    make sure the uninitialized flag in extents is preserved.
+  * Add mkfs.ext4 symlink to the e2fsprogs-udeb package (Closes: #511207)
+  * Resize2fs now reserves some extra block when calculating the minimum
+    size to shrink the filesystem in case some extent allocation trees
+  * Add a "set -e" to uuid-runtime's prerm script to make Lintian happy
+  * The blkid library will now recognize btrfs filesystems and swap
+    devices currently used by user-level software suspend.
+  * tune2fs will not allow changing the inode size for filesystems that
+    have the flex_bg feature enabled, since the code currently assumes
+    the each block group's portion inode table is located in its own
+    block group.
+  * Fix tune2fs -I so it won't corrupt ext3/ext4 filesystem configured
+    for RAID storage devices.
+  * Mke2fs now understands a -U option which allows the UUID to be
+    specified for the new filesystem.
+  * Mke2fs will now treat devices with exactly 16TB as if they have 16TB
+    minus one block, since many users expect ext4 to support 16TB
+    devices, and the true maximum size is 16TB-1.
+  * E2fsck will now flag filesystems that have an insane s_first_ino
+    field in their superblock.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 27 Jan 2009 11:50:49 -0500
+
+e2fsprogs (1.41.3-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix e2fsck so it prints the correct inode number for uinit_bg
+    related problems.
+  * E2fsck will offer to clear the test_fs flag if the ext4 filesystem
+    is available.
+  * Fix a file descriptor leak in libblkid
+  * Avoid a potential infinite loop in e2fsck when there are disk I/O
+    errors while trying to close a filesystem.
+  * Fix a potential infinite loop in resize2fs when a bogus new size of
+    0 blocks is specified on the command line.
+  * Add an early check to see if a device is read-only to avoid lots of
+    confusing error messages.
+  * Fix debugfs's ncheck command so it prints all of the names of
+    hardlinks in the same directories.
+  * Fix a bug in libblkid so it correctly detects whether the ext4 and
+    ext4dev filesystems are available, so that the ext4dev->ext4
+    fallback code works correctly.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 12 Oct 2008 22:45:34 -0400
+
+e2fsprogs (1.41.2-1) unstable; urgency=low
+
+  * New upstream release
+  * Fix e2fsck's automatic blocksize detection.  This fixes a regression
+      added in e2fsprogs 1.40.7 where e2fsck's -b option would not
+      work if a blocksize wasn't also specified via the -B option.
+  * Fix a potential file descriptor leak in libcom_err if the
+      application exec's another program.
+  * Fixed badblocks output for "badblocks -sw"
+  * debugfs: Fix ncheck to print all pathnames for all of the specified inodes
+  * Use dietlibc when possible for building e2fsck.static, to reduce the
+      size of the static binary.
+  * debugfs: Add the ability to specify the hash seed and to specify the
+      hash algorithm by name to the "hash" command.
+  * Add documentation for the file I/O functions to libext2fs.texinfo.
+      (Closes: #484877)
+  * Fix a bug in e2fsck where if a translation file is being used and
+      e2fsck needs to print problem report with a custom question (such as
+      "Run journal anyway?"), the PO file's header would get spewed onto
+      the terminal.
+  * Update Swedish, Vietnamese, Dutch, Indonesian, German, Czech translations
+  * Fixed spelling mistakes in man pages  (Closes: #498100, #498101,
+      #498102, #498103)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 02 Oct 2008 08:54:16 -0400
+
+e2fsprogs (1.41.1-3) unstable; urgency=low
+
+  * badblocks -v will now display the time and percentage complete
+      (Closes: #429739)
+  * Reordered debian/rules when building udebs to avoid a Lintian warning
+  * Fixed dependencies fields in the udeb packages (Closes: #497619)
+  * Avoid linking various programs with unneeded libraries
+  * Fixed a typo'ed bold font specifier in mke2fs's man page
+  * Fixed the pkg-config files so the include directory needed by the
+      various libraries is included, and to use Requires.private to
+      avoid unnecessary linking of dynamic libraries.
+  * Add more historical information to the debian/*.symbol files
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 05 Sep 2008 11:11:03 -0400
+
+e2fsprogs (1.41.1-2) unstable; urgency=low
+
+  * Make sure ext4_swab64() is defined on all platforms (Closes: #497515)
+  * Badlocks: Use O_LARGEFILE so it will run on files greater than 2GB
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 02 Sep 2008 09:53:46 -0400
+
+e2fsprogs (1.41.1-1) unstable; urgency=low
+
+  * New upstream release
+  * mke2fs and tune2fs now use half-md4 as the default hash algorithm
+       In addition the default hash algorithm can be via mke2fs.conf for
+       mke2fs, and via a command-line option for tune2fs.
+  * Add support for on-line resizing of ext4 filesystems with the
+       flex_bg filesystem feature.
+  * e2fsck now creates the journal in the middle of the filesystem,
+       which can speed up fsync-heavy workloads.
+  * Make the blkid library more efficient for devicemapper devices,
+       mostly by no longer using the libdevmapper library.
+  * Fix various namespace leakages by the libblkid, libe2p and libext2fs
+       libraries.
+  * Fix support for empty directories in 64k blocksize filesystems.
+  * Add supported_features command to debugfs
+  * Improve libblkid detection of JFS and HPFS filesystems
+  * The test I/O manager is now compiled in by default, but to avoid its
+    overhead, it is only enabled when the TEST_IO_FLAGS or TEST_IO_BLOCK
+    environment variables are set.
+  * Fix filefrag's ideal extent calculation (Closes: #458306)
+  * Fix postinstall scripts when the user/group is in LDAP (Closes: #497010)
+  * Add Indonesian and update French, Polish, Dutch, German, Sweedish,
+       Czech, and Vietnamese Translations.  (Closes: #313697, #401092)
+  * Update/clarified man pages
+  * Add dpkg-gensymbols support to track ABI changes to the libraries
+  * Add lintian overrides for uuid-runtime and libuuid1
+  * Remove (no longer needed) lintian overrides for e2fsck-static
+  * Add debian/watch file
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 01 Sep 2008 11:30:21 -0400
+
+e2fsprogs (1.41.0-4) unstable; urgency=low
+
+  * mke2fs will issue a warning if mke2fs.conf hasn't been updated and
+    the user tries to create an ext3, ext4, or ext4dev filesystem,
+    since it depends on the mke2fs.conf file in order to create the
+    filesystem properly with the appropriate features.
+  * Fix the maximum journal size message in mke2fs and tune2fs to be
+    consistent/correct.  (Closes: #491620)
+  * Add detection for hfsx filesystem and add label and uuid detection
+    for hfs, hfsplus, and hfsx filesystems in libblkid.
+  * Fix cosmetic issue in resize2fs when a progress bar doesn't finish
+    with a newline for pass 4 (when the inode references are updated).
+  * Teach resize2fs to move blocks when extents are present (when
+    shrinking a filesystem and/or if resize_inode is not present).
+  * Teach resize2fs to work correctly with the uninit_bg when blocks
+    need to be moved or allocated.
+  * Fix and optimize extent manipulation in libext2fs for resize2fs.
+  * Fix "dumpe2fs -i" and "debugfs -i".  (Closes: #495830)
+  * Fix resize2fs incorrectly managing directory in-use counts when
+    shrinking filesystems and directory inodes need to be moved.
+  * Fix spurious e2fsck complaints with i_size with extents and large
+    files and preallocated blocks.
+  * Make sure the creation timestamp is set by mke2fs and by new inodes
+    created by the libext2fs in general.
+  * Fix ind/dind/tind statistics when extents are present, and add
+    extent tree depth statistics.
+  * Add a fragmentation report extended option to e2fsck.
+  * Fix blkid cache validation and some possible blkid crashes
+    (Closes: #493216)
+  * Teach debugfs's htree command to work with extent-based directories.
+  * Improve the error message for "tune2fs -I".
+  * Fix miscellaneous strings and usage messages pointed out by the
+    translators.  (Thanks, translators!)
+  * Enforce that mke2fs won't allow features for revision 0 filesystems.
+  * Optimize inode table allocation in mke2fs for flex_bg filesystems.
+  * Update/clarified man pages
+  * Fix minor typo in uuid-runtime's debian package description
+  * Wrap debian/copyright files to avoid "line too long" lintian warnings
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sat, 23 Aug 2008 08:56:47 -0400
+
+e2fsprogs (1.41.0-3) unstable; urgency=medium
+
+  * Fix mips-specific FTBFS problem in debian/rules file
+  * Synchronize section and priority levels in control file with the
+    FTP masters' override file.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 15 Jul 2008 11:38:59 -0400
+
+e2fsprogs (1.41.0-2) unstable; urgency=medium
+
+  * Don't try to check the group descriptor checksum if the GDT_CSUM
+    feature is not present.  (Closes: #490637)
+  * Add a new blkid -L option which pretty-prints the currently
+    available block devices.  (Closes: #490527)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 13 Jul 2008 19:18:08 -0400
+
+e2fsprogs (1.41.0-1) unstable; urgency=medium
+
+  * New upstream version
+  * Make e2fsck detect corrupted block group descriptors that would
+    cause it to relocate inode tables, causing more damage to the
+    filesystem, and make it try the backup superblock/block group
+    descriptors first.
+  * Fix resize2fs to clean up the resize_inode if all of the reserved
+    gdt blocks are consumed during an off-line resize.
+  * Enable huge_file, dir_nlink, extra_isize feautres for mke2fs and tune2fs.
+  * Enable huge_file, dir_nlink, extra_isize, and uninit_bg by default
+    in mke2fs.conf.
+  * Fix badblocks terminology in man page and program output.
+    (Closes: #440983, #440981)
+  * Clarify stripe-width and stride-size in mke2fs man page.  (Closes: #487849)
+  * mke2fs: Dumb down filesystems for GNU Hurd (Closes: #471977)
+  * Add bash-static to the list of shells recommended for e2fsck-static
+    (Closes: #490003)
+  * mke2fs: Fix flex_bg metadata default layout to avoid a hole between
+    the bitmaps and inode tables.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 10 Jul 2008 17:25:32 -0400
+
+e2fsprogs (1.41~WIP-2008-07-07-1) experimental; urgency=low
+
+  * New upstream version (pre-release for e2sprogs 1.41)
+  * Update to indicate compliance with debian policy version 3.8.0.0.
+  * Fix e2fsck to not truncate valid extent files that are larger than
+    what is supported by indirect files.
+  * Add -dbg packages which contain the debugging information.
+  * mke2fs: Print a better error message when a device is too big.
+    (Closes: #488663)
+  * Create external journal devices with a default blocksize of 4k
+  * Fix bug in badblocks which caused crash when lots of -t patterns are
+    given.  (Closes: #487298)
+  * Fix blkid handling of stale entries.  (Closes: #487758, #487783)
+  * Update Vietnamese, Polish, French, Spanish, German, Catalan,
+    Dutch, Czech translations from the translation project.
+  * Fix FTBFS problem on MIPS (Closes: #487675)
+  * Fix bug in libuuid1.postinst which would cause it to blow up if
+    there were spaces around the equals sign in /etc/adduser.conf.
+    (Closes: #487443)
+  * Update/clarified man pages.  (Closes: #393313)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Mon, 07 Jul 2008 16:30:43 -0400
+
+e2fsprogs (1.41~WIP-2008-06-17-1) experimental; urgency=low
+
+  * New upstream version (pre-release for e2fsprogs 1.41)
+  * New options to badblocks allow it to limit how quickly it reads
+    from disk (for background scrubbing) and abort after a finding
+    giving a number of errors.
+  * Add support for ext4 filesystem features.  (Closes: #388452, #425477)
+  * Tune2fs can migrate a filesystem from using 128 byte inodes to
+    larger inode sizes so the user can take full advantage of ext4)
+  * E2fsck and mke2fs can optionally record an undo log which can be
+    replayed by the e2undo program.
+  * E2fsck will display a less cryptic message when the last check field
+    in the superblock is in the future.  (Closes: #446005)
+  * Improve blkid probes for LVM volumes and swap partitions
+  * Mke2fs has a much more sophisticated system for controlling the
+    parameters of newly created filesystems.  The -t option now is used
+    to specify the filesystem type.  See the mke2fs and mke2fs.conf man
+    pages for more details.
+  * Resize2fs will now print the minimum needed filesystem size if given
+    the -P option, and will resize the filesystem to the smallest possible
+    size if given the -M option.
+  * E2fsck now performs more extensive and careful checks of extended
+    attributes stored in the inode.
+  * Mke2fs will always make sure that lost+found always has at least 2
+    blocks, even for filesystems with very large blocksizes (i.e., 64kb).
+  * The debugfs "ls" command now supports the -p option, which causes
+    filenames to be printed surrounded by double quotes.
+  * Fix a potential off-by-one buffer overflow in e2image
+  * The chattr program will now return a non-zero exit code in case of
+    failures.
+  * This version of e2fsprogs removes support for legacy big-endian
+    filesystems and for MASIX filesystems.
+  * Add I/O statistics reporting to e2fsck.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 17 Jun 2008 23:57:08 -0400
+
+e2fsprogs (1.40.11-1) unstable; urgency=low
+
+  * Change mke2fs, tune2fs and resize2fs to use floating point precision
+    when calculating the number of reserved blocks.  (Closes: #452639)
+  * Update Spanish and Catalan translations.
+  * Fix ext2fs_swap{16,32,64} for external applications.  (Closes: #484879)
+  * Improve uuid-runtime package description.  (Closes: #483962)
+  * Improve e2fsprogs package description.  (Closes: #483023)
+  * Add support for detecting ZFS volumes to libblkid.
+  * Clarify debugfs man page.  (Closes: #486463)
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 17 Jun 2008 21:59:21 -0400
+
+e2fsprogs (1.40.10-1) unstable; urgency=low
+
+  * Fix a very rare potential data corruption bug in e2fsck's journal
+    replay.
+  * Updated German, Dutch, Sweedish, and Vietnamese translations.
+  * Force blkid to revalidate a device if its mtime is newer than the
+    last validation time in the cache.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Wed, 21 May 2008 13:35:12 -0400
+
+e2fsprogs (1.40.9-1) unstable; urgency=low
+
+  * Fix fsck so that if multiple filesystems are being checked in
+      parallel, the progress bar for subsequent filesystems will be
+      correctly displayed.  (Closes: #432865)
+  * Fix fsck -Cn for n!=0 for better Ubuntu boot-time support
+  * debugfs: Don't bother using a pager of stdout is not a tty
+  * Fix tune2fs and debugfs to correctly parse time strings during
+      daylight savings time.  (Closes: #471882)
+  * Teach fsck to treat ext4 and ext4 filesystems as ext* filesystems
+  * Logsave will now propagate SIGINT and SIGTERM signals to its child
+      process.
+  * Mke2fs will not allow the illogical combination of the resize_inode
+      and meta_bg filesystem features.
+  * Use UID/GID ranges from adduser.conf if present, even though we
+      don't use adduser to add users/groups.  (Closes: #473179)
+  * Updated German, Czech, Dutch, French, Polish, Sweedish, and
+      Vietnamese translations.
+  * Update/clarified the mke2fs man page
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Sun, 27 Apr 2008 00:35:20 -0400
+
+e2fsprogs (1.40.8-2) unstable; urgency=low
+
+  * One more big-endian swap fix needed for resize2fs to work correctly
+      with in-inode extended attributes.
+  * Fix minor security issues identified in uuidd.
+  * Remove e2fsprogs preinstall script which contained stuff not needed
+      in well over two stable releases.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 14 Mar 2008 14:25:54 -0400
+
 e2fsprogs (1.40.8-1) unstable; urgency=low
 
   * Fix e2image -I so it works on image files which are larger than 2GB.
@@ -627,7 +1285,7 @@
     /etc/ld.so.preload.  (Closes: #304003)
   * Update Swedish translation, and added translation for Rwanda.
   * Minor man page spelling/typo fixes.  (Closes: #304591, #304592,
-  	#304594, #304597, #304593)
+    #304594, #304597, #304593)
 
  -- Theodore Y. Ts'o <tytso@mit.edu>  Mon,  9 May 2005 09:10:20 -0400
 
diff --git a/debian/comerr-dev.doc-base b/debian/comerr-dev.doc-base
index c6746e6..ccde954 100644
--- a/debian/comerr-dev.doc-base
+++ b/debian/comerr-dev.doc-base
@@ -5,8 +5,8 @@
  which allow a more uniform way for libraries
  to return errors to their callers, and for programs
  to describe errors and exceptional conditions to their users.
-Section: Apps/Programming
+Section: Programming
 
 Format: HTML
-Index: /usr/share/doc/comerr-dev/html-info/com_err.html
+Index: /usr/share/doc/comerr-dev/html-info/com_err_toc.html
 Files: /usr/share/doc/comerr-dev/html-info/*.html
diff --git a/debian/compat b/debian/compat
index b8626c4..7f8f011 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-4
+7
diff --git a/debian/control.in b/debian/control.in
new file mode 100644
index 0000000..0e1f195
--- /dev/null
+++ b/debian/control.in
@@ -0,0 +1,320 @@
+Source: e2fsprogs
+Section: admin
+Priority: required
+Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+ifdef(`UTIL_LINUX_NG',
+``Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, dietlibc-dev (>> 0.30) [alpha amd64 arm hppa i386 ia64 powerpc ppc64 s390 sparc], debhelper (>= 7.0), m4, libblkid-dev (>= 2.16), uuid-dev (>= 2.16)
+'',
+``Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, dietlibc-dev (>> 0.30) [alpha amd64 arm hppa i386 ia64 powerpc ppc64 s390 sparc], debhelper (>= 7.0), m4
+'')dnl
+Standards-Version: 3.8.4
+Homepage: http://e2fsprogs.sourceforge.net
+
+Package: e2fsck-static
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Recommends: sash | bash-static | zsh-static | busybox-static | zsh30-static
+Architecture: any
+Description: statically-linked version of the ext2/ext3/ext4 filesystem checker
+ This may be of some help to you if your filesystem gets corrupted enough
+ to break the shared libraries used by the dynamically linked checker.
+ .
+ This binary takes much more space than its dynamic counterpart located
+ in e2fsprogs, though.
+ .
+ You may want to install a statically-linked shell as well, to be able
+ to run this program if something like your C library gets corrupted.
+
+Package: libcomerr2
+Section: libs
+Provides: libcomerr-kth-compat
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<< 1.34-1)
+Architecture: any
+Description: common error description library
+ libcomerr is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+
+Package: comerr-dev
+Section: libdevel
+Priority: extra
+Depends: libc6-dev | libc-dev, libcomerr2 (= ${mainBinary}), ${misc:Depends}
+Suggests: doc-base
+Replaces: e2fslibs-dev (<< 1.33-2), libkrb5-dev (<< 1.3)
+Architecture: any
+Description: common error description library - headers and static libraries
+ libcom_err is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+ .
+ This package contains the development environment for the com_err library.
+
+Package: libss2
+Section: libs
+Depends: libcomerr2, ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<< 1.34-1)
+Architecture: any
+Description: command-line interface parsing library
+ This package includes a tool that parses a command table to generate
+ a simple command-line interface parser, the include files needed to
+ compile and use it, and the static libs.
+ . 
+ It was originally inspired by the Multics SubSystem library.
+
+Package: ss-dev
+Section: libdevel
+Priority: extra
+Depends: libc6-dev | libc-dev, libss2 (= ${mainBinary}), comerr-dev, ${misc:Depends}
+Architecture: any
+Description: command-line interface parsing library - headers and static libraries
+ This package includes a tool that parses a command table to generate
+ a simple command-line interface parser, the include files needed to
+ compile and use it, and the static libs.
+ . 
+ It was originally inspired by the Multics SubSystem library.
+ .
+ This package contains the development environment for the ss library.
+ifdef(`UTIL_LINUX_NG',,``
+Package: libuuid1
+Section: libs
+Depends: passwd, ${shlibs:Depends}, ${misc:Depends}
+Recommends: uuid-runtime
+Replaces: e2fsprogs (<< 1.34-1)
+Architecture: any
+Description: Universally Unique ID library
+ The libuuid library generates and parses 128-bit universally unique
+ ids (UUIDs).  A UUID is an identifier that is unique across both
+ space and time, with respect to the space of all UUIDs.  A UUID can
+ be used for multiple purposes, from tagging objects with an extremely
+ short lifetime, to reliably identifying very persistent objects
+ across a network.
+ .
+ See RFC 4122 for more information.  
+
+Package: uuid-runtime
+Section: libs
+Priority: optional
+Depends: passwd, libuuid1 (>> 1.40.3-1), ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<= 1.40.3-1ubuntu1)
+Architecture: any
+Description: runtime components for the Universally Unique ID library
+ The libuuid library generates and parses 128-bit universally unique
+ ids (UUIDs).  A UUID is an identifier that is unique across both
+ space and time, with respect to the space of all UUIDs.  A UUID can
+ be used for multiple purposes, from tagging objects with an extremely
+ short lifetime, to reliably identifying very persistent objects
+ across a network.
+ .
+ See RFC 4122 for more information.  
+ .
+ This package contains the uuidgen program and the uuidd daemon.
+ .
+ The uuidd daemon is used to generate UUIDs, especially time-based
+ UUID’s, in a secure and guaranteed-unique fashion, even in the face
+ of large numbers of threads trying to grab UUID’s running on
+ different CPU’s. It is used by libuuid as well as the uuidgen
+ program.
+
+Package: libuuid1-udeb
+XC-Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Depends: ${shlibs:Depends}
+Architecture: any
+Description: stripped down universally unique id library, for debian-installer
+ libuuid generates and parses 128-bit universally unique ids (UUIDs).
+ See RFC 4122 for more information.
+ .
+ This is a minimal package for debian-installer.
+
+Package: uuid-dev
+Section: libdevel
+Priority: extra
+Depends: libc6-dev | libc-dev, libuuid1 (= ${mainBinary}), ${misc:Depends}
+Replaces: e2fslibs-dev (<< 1.15)
+Architecture: any
+Description: universally unique id library - headers and static libraries
+ libuuid generates and parses 128-bit universally unique ids (UUIDs).
+ See RFC 4122 for more information.
+ .
+ This package contains the development environment for the uuid library.
+
+Package: libblkid1
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Architecture: any
+Description: block device id library
+ The blkid library which allows system programs like fsck and 
+ mount to quickly and easily find block devices by filesystem UUID and 
+ LABEL.  This allows system administrators to avoid specifying 
+ filesystems by hard-coded device names, but via a logical naming 
+ system instead.
+
+Package: libblkid1-udeb
+XC-Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Architecture: any
+Description: stripped down block device id library, for debian-installer
+ The blkid library which allows system programs like fsck and 
+ mount to quickly and easily find block devices by filesystem UUID and 
+ LABEL.  This allows system administrators to avoid specifiying 
+ filesystems by hard-coded device names, but via a logical naming 
+ system instead.
+ .
+ This is a minimal package for debian-installer.
+
+Package: libblkid-dev
+Section: libdevel
+Priority: extra
+Depends: libc6-dev | libc-dev, libblkid1 (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: block device id library - headers and static libraries
+ The blkid library which allows system programs like fsck and 
+ mount to quickly and easily find block devices by filesystem UUID and 
+ LABEL.  This allows system administrators to avoid specifiying 
+ filesystems by hard-coded device names, but via a logical naming 
+ system instead.
+ .
+ This package contains the development environment for the blkid library.
+'')dnl
+
+Package: e2fsprogs-udeb
+XC-Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Architecture: any
+Description: stripped-down versions of e2fsprogs, for debian-installer
+ This package is an e2fsprogs package built for a reduced size, so that
+ it can help to save space in debian-installer.
+ .
+ Don't attempt to install this package, it has no support for a couple of
+ features you surely want.  Anyway it should refuse to install.
+
+Package: e2fslibs
+Section: libs
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libext2fs2, libe2p2
+Architecture: any
+Description: ext2/ext3/ext4 file system libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package provides the ext2fs and e2p libraries, for userspace software
+ that directly accesses extended file systems. Programs that use libext2fs
+ include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include
+ dumpe2fs, chattr, and lsattr.
+
+Package: e2fslibs-dev
+Section: libdevel
+Priority: extra
+Depends: libc6-dev | libc-dev, comerr-dev, e2fslibs (= ${binary:Version}), ${misc:Depends}
+Suggests: doc-base
+Provides: ext2fs-dev, e2p-dev
+Replaces: libkrb5-dev (<< 1.3)
+Architecture: any
+Description: ext2/ext3/ext4 file system libraries - headers and static libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains the development environment for the ext2fs and e2p 
+ libraries.
+
+Package: e2fsprogs
+Essential: yes
+ifdef(`UTIL_LINUX_NG',
+``Pre-Depends: ${shlibs:Depends}, ${misc:Depends}, util-linux (>= 2.15~rc1-1)
+'',
+``Pre-Depends: ${shlibs:Depends}, ${misc:Depends}
+'')dnl
+Suggests: gpart, parted, e2fsck-static
+Conflicts: dump (<< 0.4b4-4), quota (<< 1.55-8.1), initscripts (<< 2.85-4), sysvinit (<< 2.85-4)
+Replaces: hurd (<= 20040301-1), libblkid1 (<< 1.38+1.39-WIP-2005.12.10-2), libuuid1 (<< 1.38+1.39-WIP-2005.12.10-2)
+Architecture: any
+Description: ext2/ext3/ext4 file system utilities
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains programs for creating, checking, and maintaining
+ ext-based file systems, and the generic fsck wrapper.
+
+Package: e2fsprogs-dbg
+Section: debug
+Priority: extra
+Depends: e2fsprogs (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for e2fsprogs
+ This package includes the debug information useful for debugging e2fsprogs
+ and its libraries, contained in the e2fsprogs and e2fsck-static packages.
+ The debug information is used for execution tracing and core
+ dump analysis. 
+ifdef(`UTIL_LINUX_NG',,``
+Package: uuid-runtime-dbg
+Section: debug
+Priority: extra
+Depends: uuid-runtime (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for uuid-runtime
+ This package includes the debug information useful for debugging the
+ uuid runtime programs, contained in the uuid-runtime package.
+ The debugging information is used for execution tracing and core
+ dump analysis.
+'')dnl
+
+Package: e2fslibs-dbg
+Section: debug
+Priority: extra
+Depends: e2fslibs (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for e2fslibs
+ This package includes the debug information useful for debugging the
+ ext2fs and e2p libraries, contained in the e2fslibs package.  The debug
+ information is used for execution tracing and core dump analysis.
+
+Package: libcomerr2-dbg
+Section: debug
+Priority: extra
+Depends: libcomerr2 (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for libcomerr2
+ This package includes the debug information useful for debugging the
+ com_err library, contained in the libcomerr2 package.  The debugging
+ information is used for execution tracing and core dump analysis.
+
+Package: libss2-dbg
+Section: debug
+Priority: extra
+Depends: libss2 (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for libss2
+ This package includes the debug information useful for debugging the
+ ss library, contained in the libss2 package.  The debug information
+ is used for execution tracing and core dump analysis.
+ifdef(`UTIL_LINUX_NG',,``
+Package: libblkid1-dbg
+Section: debug
+Priority: extra
+Depends: libblkid1 (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for libblkid1
+ This package includes the debug information useful for debugging the
+ blkid library, contained in the libblkid1 package.  The debug
+ information is used for execution tracing and core dump analysis.
+
+Package: libuuid1-dbg
+Section: debug
+Priority: extra
+Depends: libuuid1 (= ${binary:Version}), ${misc:Depends}
+Architecture: any
+Description: debugging information for libuuid1
+ This package includes the debug information useful for debugging the
+ UUID library, contained in the libuuid1 package.  The debug
+ information is used for execution tracing and core dump analysis.
+'')dnl
diff --git a/debian/e2fsck-static.copyright b/debian/e2fsck-static.copyright
index eb4dfb0..82bdc67 100644
--- a/debian/e2fsck-static.copyright
+++ b/debian/e2fsck-static.copyright
@@ -18,8 +18,9 @@
 This package, the EXT2 filesystem utilities, is protected by the GNU
 Public License.
 
-	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
+	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+	2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
 
 On Debian GNU systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
 
diff --git a/debian/e2fslibs-dev.doc-base b/debian/e2fslibs-dev.doc-base
index 8d971ab..d102315 100644
--- a/debian/e2fslibs-dev.doc-base
+++ b/debian/e2fslibs-dev.doc-base
@@ -3,7 +3,7 @@
 Author: Theodore Ts'o
 Abstract: The EXT2FS library is designed to allow
  user-level programs to manipulate an ext2 filesystem.
-Section: Apps/Programming
+Section: Programming
 
 Format: HTML
 Index: /usr/share/doc/e2fslibs/html-info/libext2fs_toc.html
diff --git a/debian/e2fslibs.copyright b/debian/e2fslibs.copyright
index b17780b..5fa3af0 100644
--- a/debian/e2fslibs.copyright
+++ b/debian/e2fslibs.copyright
@@ -17,9 +17,9 @@
 This package, the EXT2 filesystem libraries, are protected by the GNU
 Public License.
 
-	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
-Public License.
+	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+	2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
 
 On Debian GNU systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
 
diff --git a/debian/e2fslibs.symbols b/debian/e2fslibs.symbols
new file mode 100644
index 0000000..c203f02
--- /dev/null
+++ b/debian/e2fslibs.symbols
@@ -0,0 +1,392 @@
+libe2p.so.2 e2fslibs #MINVER#
+ e2p_edit_feature2@Base 1.40.7
+ e2p_edit_feature@Base 1.37
+ e2p_edit_mntopts@Base 1.37
+ e2p_feature2string@Base 1.37
+ e2p_hash2string@Base 1.37
+ e2p_is_null_uuid@Base 1.37
+ e2p_jrnl_feature2string@Base 1.41.1
+ e2p_jrnl_string2feature@Base 1.41.1
+ e2p_mntopt2string@Base 1.37
+ e2p_os2string@Base 1.37
+ e2p_percent@Base 1.40
+ e2p_string2feature@Base 1.37
+ e2p_string2hash@Base 1.37
+ e2p_string2mntopt@Base 1.37
+ e2p_string2os@Base 1.37
+ e2p_uuid2str@Base 1.37
+ e2p_uuid_to_str@Base 1.37
+ fgetflags@Base 1.37
+ fgetversion@Base 1.37
+ fsetflags@Base 1.37
+ fsetversion@Base 1.37
+ getflags@Base 1.37
+ getversion@Base 1.37
+ iterate_on_dir@Base 1.37
+ list_super2@Base 1.37
+ list_super@Base 1.37
+#MISSING: 1.41.1# os_tab@Base 1.37
+ parse_num_blocks@Base 1.37
+ print_flags@Base 1.37
+ print_fs_errors@Base 1.37
+ print_fs_state@Base 1.37
+ setflags@Base 1.37
+ setversion@Base 1.37
+libext2fs.so.2 e2fslibs #MINVER#
+ badblocks_list_add@Base 1.37
+ badblocks_list_create@Base 1.37
+ badblocks_list_free@Base 1.37
+ badblocks_list_iterate@Base 1.37
+ badblocks_list_iterate_begin@Base 1.37
+ badblocks_list_iterate_end@Base 1.37
+ badblocks_list_test@Base 1.37
+#MISSING: 1.41.1# crc16@Base 1.41.0
+#MISSING: 1.41.1# crc16_table@Base 1.41.0
+ et_ext2_error_table@Base 1.37
+ ext2fs_add_dir_block@Base 1.37
+ ext2fs_add_journal_device@Base 1.37
+ ext2fs_add_journal_inode@Base 1.37
+ ext2fs_adjust_ea_refcount@Base 1.37
+ ext2fs_alloc_block@Base 1.37
+ ext2fs_allocate_block_bitmap@Base 1.37
+ ext2fs_allocate_generic_bitmap@Base 1.37
+ ext2fs_allocate_group_table@Base 1.37
+ ext2fs_allocate_inode_bitmap@Base 1.37
+ ext2fs_allocate_tables@Base 1.37
+ ext2fs_badblocks_copy@Base 1.37
+ ext2fs_badblocks_equal@Base 1.37
+ ext2fs_badblocks_list_add@Base 1.37
+ ext2fs_badblocks_list_create@Base 1.37
+ ext2fs_badblocks_list_del@Base 1.37
+ ext2fs_badblocks_list_free@Base 1.37
+ ext2fs_badblocks_list_iterate@Base 1.37
+ ext2fs_badblocks_list_iterate_begin@Base 1.37
+ ext2fs_badblocks_list_iterate_end@Base 1.37
+ ext2fs_badblocks_list_test@Base 1.37
+ ext2fs_bg_has_super@Base 1.37
+ ext2fs_block_alloc_stats@Base 1.37
+ ext2fs_block_iterate2@Base 1.37
+ ext2fs_block_iterate@Base 1.37
+ ext2fs_bmap2@Base 1.41.0
+ ext2fs_bmap@Base 1.37
+ ext2fs_check_desc@Base 1.37
+ ext2fs_check_directory@Base 1.37
+ ext2fs_check_if_mounted@Base 1.37
+ ext2fs_check_mount_point@Base 1.37
+ ext2fs_clear_bit@Base 1.37
+ ext2fs_clear_block_bitmap@Base 1.37
+ ext2fs_clear_generic_bitmap@Base 1.41.0
+ ext2fs_clear_inode_bitmap@Base 1.37
+ ext2fs_close@Base 1.37
+ ext2fs_close_inode_scan@Base 1.37
+ ext2fs_compare_block_bitmap@Base 1.37
+ ext2fs_compare_generic_bitmap@Base 1.41.0
+ ext2fs_compare_inode_bitmap@Base 1.37
+ ext2fs_copy_bitmap@Base 1.37
+ ext2fs_copy_dblist@Base 1.37
+ ext2fs_copy_generic_bitmap@Base 1.41.0
+ ext2fs_crc16@Base 1.41.1
+ ext2fs_create_icount2@Base 1.37
+ ext2fs_create_icount@Base 1.37
+ ext2fs_create_icount_tdb@Base 1.40
+ ext2fs_create_journal_superblock@Base 1.37
+ ext2fs_create_resize_inode@Base 1.37
+ ext2fs_dblist_count@Base 1.37
+ ext2fs_dblist_dir_iterate@Base 1.37
+ ext2fs_dblist_drop_last@Base 1.40.8
+ ext2fs_dblist_get_last@Base 1.40.8
+ ext2fs_dblist_iterate@Base 1.37
+ ext2fs_dblist_sort@Base 1.37
+ ext2fs_default_journal_size@Base 1.40
+ ext2fs_descriptor_block_loc@Base 1.37
+ ext2fs_get_rec_len@Base 1.41.7
+ ext2fs_set_rec_len@Base 1.41.7
+ ext2fs_dir_iterate2@Base 1.37
+ ext2fs_dir_iterate@Base 1.37
+ ext2fs_dirhash@Base 1.37
+ ext2fs_div_ceil@Base 1.40
+ ext2fs_dup_handle@Base 1.37
+ ext2fs_expand_dir@Base 1.37
+ ext2fs_ext_attr_hash_entry@Base 1.41.0
+ ext2fs_extent_delete@Base 1.41.0
+ ext2fs_extent_free@Base 1.41.0
+ ext2fs_extent_get@Base 1.41.0
+ ext2fs_extent_get_info@Base 1.41.0
+ ext2fs_extent_goto@Base 1.41.0
+ ext2fs_extent_header_verify@Base 1.41.0
+ ext2fs_extent_insert@Base 1.41.0
+ ext2fs_extent_open2@Base 1.41.6
+ ext2fs_extent_open@Base 1.41.0
+ ext2fs_extent_replace@Base 1.41.0
+ ext2fs_extent_set_bmap@Base 1.41.0
+ ext2fs_fast_clear_bit@Base 1.39
+ ext2fs_fast_mark_block_bitmap@Base 1.37
+ ext2fs_fast_mark_block_bitmap_range@Base 1.37
+ ext2fs_fast_mark_inode_bitmap@Base 1.37
+ ext2fs_fast_set_bit@Base 1.39
+ ext2fs_fast_test_block_bitmap@Base 1.37
+ ext2fs_fast_test_block_bitmap_range@Base 1.37
+ ext2fs_fast_test_inode_bitmap@Base 1.37
+ ext2fs_fast_unmark_block_bitmap@Base 1.37
+ ext2fs_fast_unmark_block_bitmap_range@Base 1.37
+ ext2fs_fast_unmark_inode_bitmap@Base 1.37
+ ext2fs_file_close@Base 1.37
+ ext2fs_file_flush@Base 1.37
+ ext2fs_file_get_fs@Base 1.37
+ ext2fs_file_get_lsize@Base 1.37
+ ext2fs_file_get_size@Base 1.37
+ ext2fs_file_llseek@Base 1.37
+ ext2fs_file_lseek@Base 1.37
+ ext2fs_file_open2@Base 1.37
+ ext2fs_file_open@Base 1.37
+ ext2fs_file_read@Base 1.37
+ ext2fs_file_set_size@Base 1.37
+ ext2fs_file_write@Base 1.37
+ ext2fs_find_block_device@Base 1.37
+ ext2fs_flush@Base 1.37
+ ext2fs_flush_icache@Base 1.37
+ ext2fs_follow_link@Base 1.37
+ ext2fs_free@Base 1.37
+ ext2fs_free_block_bitmap@Base 1.37
+ ext2fs_free_dblist@Base 1.37
+ ext2fs_free_generic_bitmap@Base 1.37
+ ext2fs_free_icount@Base 1.37
+ ext2fs_free_inode_bitmap@Base 1.37
+ ext2fs_free_mem@Base 1.37
+ ext2fs_fudge_block_bitmap_end@Base 1.37
+ ext2fs_fudge_generic_bitmap_end@Base 1.41.0
+ ext2fs_fudge_inode_bitmap_end@Base 1.37
+ ext2fs_get_array@Base 1.40.3
+ ext2fs_get_block_bitmap_end@Base 1.37
+ ext2fs_get_block_bitmap_range@Base 1.41.0
+ ext2fs_get_block_bitmap_start@Base 1.37
+ ext2fs_get_blocks@Base 1.37
+ ext2fs_get_data_io@Base 1.37
+ ext2fs_get_device_sectsize@Base 1.37
+ ext2fs_get_device_size2@Base 1.41.4
+ ext2fs_get_device_size@Base 1.37
+ ext2fs_get_free_blocks@Base 1.37
+ ext2fs_get_generic_bitmap_end@Base 1.41.0
+ ext2fs_get_generic_bitmap_range@Base 1.41.0
+ ext2fs_get_generic_bitmap_start@Base 1.41.0
+ ext2fs_get_icount_size@Base 1.37
+ ext2fs_get_inode_bitmap_end@Base 1.37
+ ext2fs_get_inode_bitmap_range@Base 1.41.0
+ ext2fs_get_inode_bitmap_start@Base 1.37
+ ext2fs_get_library_version@Base 1.37
+ ext2fs_get_mem@Base 1.37
+ ext2fs_get_next_inode@Base 1.37
+ ext2fs_get_next_inode_full@Base 1.37
+ ext2fs_get_num_dirs@Base 1.37
+ ext2fs_get_pathname@Base 1.37
+ ext2fs_group_desc_csum_set@Base 1.41.0
+ ext2fs_group_desc_csum_verify@Base 1.41.0
+ ext2fs_group_first_block@Base 1.40
+ ext2fs_group_last_block@Base 1.40
+ ext2fs_group_of_blk@Base 1.37
+ ext2fs_group_of_ino@Base 1.37
+ ext2fs_iblk_add_blocks@Base 1.41.0
+ ext2fs_iblk_set@Base 1.41.0
+ ext2fs_iblk_sub_blocks@Base 1.41.0
+ ext2fs_icount_decrement@Base 1.37
+ ext2fs_icount_fetch@Base 1.37
+ ext2fs_icount_increment@Base 1.37
+ ext2fs_icount_store@Base 1.37
+ ext2fs_icount_validate@Base 1.37
+ ext2fs_image_bitmap_read@Base 1.37
+ ext2fs_image_bitmap_write@Base 1.37
+ ext2fs_image_inode_read@Base 1.37
+ ext2fs_image_inode_write@Base 1.37
+ ext2fs_image_super_read@Base 1.37
+ ext2fs_image_super_write@Base 1.37
+ ext2fs_init_dblist@Base 1.37
+ ext2fs_initialize@Base 1.37
+ ext2fs_inode_alloc_stats2@Base 1.37
+ ext2fs_inode_alloc_stats@Base 1.37
+ ext2fs_inode_data_blocks@Base 1.37
+ ext2fs_inode_has_valid_blocks@Base 1.37
+ ext2fs_inode_io_intern2@Base 1.37
+ ext2fs_inode_io_intern@Base 1.37
+ ext2fs_inode_scan_flags@Base 1.37
+ ext2fs_inode_scan_goto_blockgroup@Base 1.37
+ ext2fs_link@Base 1.37
+ ext2fs_llseek@Base 1.37
+ ext2fs_lookup@Base 1.37
+ ext2fs_make_generic_bitmap@Base 1.41.0
+ ext2fs_mark_bb_dirty@Base 1.37
+ ext2fs_mark_block_bitmap@Base 1.37
+ ext2fs_mark_block_bitmap_range@Base 1.37
+ ext2fs_mark_changed@Base 1.37
+ ext2fs_mark_generic_bitmap@Base 1.37
+ ext2fs_mark_ib_dirty@Base 1.37
+ ext2fs_mark_inode_bitmap@Base 1.37
+ ext2fs_mark_super_dirty@Base 1.37
+ ext2fs_mark_valid@Base 1.37
+ ext2fs_mkdir@Base 1.37
+ ext2fs_namei@Base 1.37
+ ext2fs_namei_follow@Base 1.37
+ ext2fs_native_flag@Base 1.37
+ ext2fs_new_block@Base 1.37
+ ext2fs_new_dir_block@Base 1.37
+ ext2fs_new_inode@Base 1.37
+ ext2fs_open2@Base 1.37
+ ext2fs_open@Base 1.37
+ ext2fs_open_inode_scan@Base 1.37
+ ext2fs_parse_version_string@Base 1.37
+ ext2fs_process_dir_block@Base 1.37
+ ext2fs_read_bb_FILE2@Base 1.37
+ ext2fs_read_bb_FILE@Base 1.37
+ ext2fs_read_bb_inode@Base 1.37
+ ext2fs_read_bitmaps@Base 1.37
+ ext2fs_read_block_bitmap@Base 1.37
+ ext2fs_read_dir_block2@Base 1.37
+ ext2fs_read_dir_block@Base 1.37
+ ext2fs_read_ext_attr@Base 1.37
+ ext2fs_read_ind_block@Base 1.37
+ ext2fs_read_inode@Base 1.37
+ ext2fs_read_inode_bitmap@Base 1.37
+ ext2fs_read_inode_full@Base 1.37
+ ext2fs_reserve_super_and_bgd@Base 1.37
+ ext2fs_resize_block_bitmap@Base 1.37
+ ext2fs_resize_generic_bitmap@Base 1.37
+ ext2fs_resize_inode_bitmap@Base 1.37
+ ext2fs_resize_mem@Base 1.37
+ ext2fs_rewrite_to_io@Base 1.37
+ ext2fs_set_alloc_block_callback@Base 1.41.0
+ ext2fs_set_bit@Base 1.37
+ ext2fs_set_bitmap_padding@Base 1.37
+ ext2fs_set_block_alloc_stats_callback@Base 1.41.0
+ ext2fs_set_block_bitmap_range@Base 1.41.0
+ ext2fs_set_data_io@Base 1.37
+ ext2fs_set_dir_block@Base 1.37
+ ext2fs_set_gdt_csum@Base 1.41.0
+ ext2fs_set_generic_bitmap_padding@Base 1.41.0
+ ext2fs_set_generic_bitmap_range@Base 1.41.0
+ ext2fs_set_inode_bitmap_range@Base 1.41.0
+ ext2fs_set_inode_callback@Base 1.37
+ ext2fs_super_and_bgd_loc@Base 1.37
+ ext2fs_swab16@Base 1.37
+ ext2fs_swab32@Base 1.37
+ ext2fs_swab64@Base 1.40
+#MISSING: 1.41.0# ext2fs_swap_ext_attr@Base 1.37
+#MISSING: 1.41.0# ext2fs_swap_group_desc@Base 1.37
+#MISSING: 1.41.0# ext2fs_swap_inode@Base 1.37
+#MISSING: 1.41.0# ext2fs_swap_inode_full@Base 1.37
+#MISSING: 1.41.0# ext2fs_swap_super@Base 1.37
+ ext2fs_sync_device@Base 1.37
+ ext2fs_tdb_append@Base 1.40
+ ext2fs_tdb_chainlock@Base 1.40
+ ext2fs_tdb_chainlock_mark@Base 1.40.7
+ ext2fs_tdb_chainlock_nonblock@Base 1.40.7
+ ext2fs_tdb_chainlock_read@Base 1.40
+ ext2fs_tdb_chainlock_unmark@Base 1.40.7
+ ext2fs_tdb_chainunlock@Base 1.40
+ ext2fs_tdb_chainunlock_read@Base 1.40
+ ext2fs_tdb_close@Base 1.40
+ ext2fs_tdb_delete@Base 1.40
+ ext2fs_tdb_dump_all@Base 1.40
+ ext2fs_tdb_enable_seqnum@Base 1.40.7
+ ext2fs_tdb_error@Base 1.40
+ ext2fs_tdb_errorstr@Base 1.40
+ ext2fs_tdb_exists@Base 1.40
+ ext2fs_tdb_fd@Base 1.40
+ ext2fs_tdb_fetch@Base 1.40
+ ext2fs_tdb_firstkey@Base 1.40
+ ext2fs_tdb_get_flags@Base 1.40
+ ext2fs_tdb_get_logging_private@Base 1.40
+ ext2fs_tdb_get_seqnum@Base 1.40
+ ext2fs_tdb_hash_size@Base 1.40
+ ext2fs_tdb_increment_seqnum_nonblock@Base 1.40.7
+ ext2fs_tdb_lock_nonblock@Base 1.40.7
+ ext2fs_tdb_lockall@Base 1.40
+ ext2fs_tdb_lockall_mark@Base 1.40.7
+ ext2fs_tdb_lockall_nonblock@Base 1.40.7
+ ext2fs_tdb_lockall_read@Base 1.40
+ ext2fs_tdb_lockall_read_nonblock@Base 1.40.7
+ ext2fs_tdb_lockall_unmark@Base 1.40.7
+ ext2fs_tdb_log_fn@Base 1.40
+ ext2fs_tdb_map_size@Base 1.40
+ ext2fs_tdb_name@Base 1.40
+ ext2fs_tdb_nextkey@Base 1.40
+ ext2fs_tdb_open@Base 1.40
+ ext2fs_tdb_open_ex@Base 1.40
+ ext2fs_tdb_parse_record@Base 1.40
+ ext2fs_tdb_printfreelist@Base 1.40
+ ext2fs_tdb_reopen@Base 1.40
+ ext2fs_tdb_reopen_all@Base 1.40
+ ext2fs_tdb_set_logging_function@Base 1.40
+ ext2fs_tdb_set_max_dead@Base 1.40
+ ext2fs_tdb_store@Base 1.40
+ ext2fs_tdb_transaction_cancel@Base 1.40
+ ext2fs_tdb_transaction_commit@Base 1.40
+ ext2fs_tdb_transaction_recover@Base 1.40
+ ext2fs_tdb_transaction_start@Base 1.40
+ ext2fs_tdb_traverse@Base 1.40
+ ext2fs_tdb_traverse_read@Base 1.40
+ ext2fs_tdb_unlockall@Base 1.40
+ ext2fs_tdb_unlockall_read@Base 1.40
+ ext2fs_tdb_validate_freelist@Base 1.40
+ ext2fs_test_bb_dirty@Base 1.37
+ ext2fs_test_bit@Base 1.37
+ ext2fs_test_block_bitmap@Base 1.37
+ ext2fs_test_block_bitmap_range@Base 1.37
+ ext2fs_test_inode_bitmap_range@Base 1.41.8
+ ext2fs_test_changed@Base 1.37
+ ext2fs_test_generic_bitmap@Base 1.37
+ ext2fs_test_ib_dirty@Base 1.37
+ ext2fs_test_inode_bitmap@Base 1.37
+ ext2fs_test_valid@Base 1.37
+ ext2fs_u32_copy@Base 1.37
+ ext2fs_u32_list_add@Base 1.37
+ ext2fs_u32_list_count@Base 1.37
+ ext2fs_u32_list_create@Base 1.37
+ ext2fs_u32_list_del@Base 1.37
+ ext2fs_u32_list_equal@Base 1.37
+ ext2fs_u32_list_find@Base 1.37
+ ext2fs_u32_list_free@Base 1.37
+ ext2fs_u32_list_iterate@Base 1.37
+ ext2fs_u32_list_iterate_begin@Base 1.37
+ ext2fs_u32_list_iterate_end@Base 1.37
+ ext2fs_u32_list_test@Base 1.37
+ ext2fs_unlink@Base 1.37
+ ext2fs_unmark_block_bitmap@Base 1.37
+ ext2fs_unmark_block_bitmap_range@Base 1.37
+ ext2fs_unmark_generic_bitmap@Base 1.37
+ ext2fs_unmark_inode_bitmap@Base 1.37
+ ext2fs_unmark_valid@Base 1.37
+ ext2fs_update_bb_inode@Base 1.37
+ ext2fs_update_dynamic_rev@Base 1.37
+ ext2fs_warn_bitmap2@Base 1.37
+ ext2fs_warn_bitmap@Base 1.37
+ ext2fs_write_bb_FILE@Base 1.37
+ ext2fs_write_bitmaps@Base 1.37
+ ext2fs_write_block_bitmap@Base 1.37
+ ext2fs_write_dir_block2@Base 1.37
+ ext2fs_write_dir_block@Base 1.37
+ ext2fs_write_ext_attr@Base 1.37
+ ext2fs_write_ind_block@Base 1.37
+ ext2fs_write_inode@Base 1.37
+ ext2fs_write_inode_bitmap@Base 1.37
+ ext2fs_write_inode_full@Base 1.37
+ ext2fs_write_new_inode@Base 1.37
+ ext2fs_zero_blocks@Base 1.41.0
+ initialize_ext2_error_table@Base 1.37
+ initialize_ext2_error_table_r@Base 1.37
+ inode_io_manager@Base 1.37
+ io_channel_read_blk64@Base 1.41.1
+ io_channel_set_options@Base 1.37
+ io_channel_write_blk64@Base 1.41.1
+ io_channel_write_byte@Base 1.37
+ set_undo_io_backing_manager@Base 1.41.0
+ set_undo_io_backup_file@Base 1.41.0
+ tdb_null@Base 1.40
+ test_io_backing_manager@Base 1.37
+ test_io_cb_read_blk64@Base 1.41.0
+ test_io_cb_read_blk@Base 1.37
+ test_io_cb_set_blksize@Base 1.37
+ test_io_cb_write_blk64@Base 1.41.0
+ test_io_cb_write_blk@Base 1.37
+ test_io_cb_write_byte@Base 1.37
+ test_io_manager@Base 1.37
+ undo_io_manager@Base 1.41.0
+ unix_io_manager@Base 1.37
diff --git a/debian/e2fsprogs-udeb.shlibs.local b/debian/e2fsprogs-udeb.shlibs.local
index 2c6e6fa..b41b583 100644
--- a/debian/e2fsprogs-udeb.shlibs.local
+++ b/debian/e2fsprogs-udeb.shlibs.local
@@ -1,6 +1,6 @@
 libblkid 1 libblkid1-udeb
 # force the dependency to libblkid1-udeb, even if it don't include the lib
 libcom_err 2 libblkid1-udeb
-libuuid 1 libblkid1-udeb
+libuuid 1 libuuid1-udeb
 libext2fs 2 libblkid1-udeb
 libe2p 2 libblkid1-udeb
diff --git a/debian/e2fsprogs.copyright b/debian/e2fsprogs.copyright
index 40b6f91..def0a6e 100644
--- a/debian/e2fsprogs.copyright
+++ b/debian/e2fsprogs.copyright
@@ -16,8 +16,10 @@
 
 This package, the EXT2 filesystem utilities, is protected by the GNU
 Public License.
-	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
+
+	Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
+	2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o
 
 On Debian GNU systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
 
diff --git a/debian/initrd-tools.e2fsprogs b/debian/initrd-tools.e2fsprogs
index 7260159..ed49db4 100644
--- a/debian/initrd-tools.e2fsprogs
+++ b/debian/initrd-tools.e2fsprogs
@@ -20,7 +20,7 @@
 
 PROGS="/sbin/tune2fs /usr/lib/e2initrd_helper"
 LIBS=`unset LD_LIBRARY_PATH LD_PRELOAD; ldd $PROGS | \
-    grep -v 'linux-gate.so' | sort -u | awk '{print $3}'` 
+    grep -vE 'linux-gate.so|linux-vdso.so' | sort -u | awk '{print $3}'`
 for i in $LIBS
 do
   	if test -f /etc/ld.so.preload && grep -s ^$i\$ /etc/ld.so.preload; then
diff --git a/debian/libblkid.copyright b/debian/libblkid.copyright
index 991cc2d..8be818b 100644
--- a/debian/libblkid.copyright
+++ b/debian/libblkid.copyright
@@ -16,4 +16,4 @@
 Lesser (Library) General Public License.
 
 On Debian systems, the complete text of the GNU Lesser (Library)
-General Public License can be found in /usr/share/common-licenses/LGPL.
+General Public License can be found in /usr/share/common-licenses/LGPL-2.
diff --git a/debian/libblkid1.symbols b/debian/libblkid1.symbols
new file mode 100644
index 0000000..5ab91f5
--- /dev/null
+++ b/debian/libblkid1.symbols
@@ -0,0 +1,41 @@
+libblkid.so.1 libblkid1 #MINVER#
+ blkid__scan_dir@Base 1.41.1
+ blkid_debug_mask@Base 1.33
+ blkid_dev_devname@Base 1.33
+ blkid_dev_has_tag@Base 1.38
+ blkid_dev_iterate_begin@Base 1.33
+ blkid_dev_iterate_end@Base 1.33
+ blkid_dev_next@Base 1.33
+ blkid_dev_set_search@Base 1.38
+#MISSING: 1.41.1# blkid_devdirs@Base 1.34
+ blkid_devno_to_devname@Base 1.33
+ blkid_find_dev_with_tag@Base 1.33
+ blkid_find_tag_dev@Base 1.33
+ blkid_flush_cache@Base 1.33
+ blkid_free_dev@Base 1.33
+ blkid_free_tag@Base 1.33
+ blkid_gc_cache@Base 1.40
+ blkid_get_cache@Base 1.33
+ blkid_get_dev@Base 1.33
+ blkid_get_dev_size@Base 1.33
+ blkid_get_devname@Base 1.33
+ blkid_get_library_version@Base 1.37
+ blkid_get_tag_value@Base 1.33
+ blkid_known_fstype@Base 1.34
+ blkid_llseek@Base 1.33
+ blkid_new_dev@Base 1.33
+ blkid_parse_tag_string@Base 1.33
+ blkid_parse_version_string@Base 1.37
+ blkid_probe_all@Base 1.33
+ blkid_probe_all_new@Base 1.38
+ blkid_put_cache@Base 1.33
+ blkid_read_cache@Base 1.33
+ blkid_set_tag@Base 1.33
+ blkid_strdup@Base 1.33
+ blkid_strndup@Base 1.33
+ blkid_tag_iterate_begin@Base 1.33
+ blkid_tag_iterate_end@Base 1.33
+ blkid_tag_next@Base 1.33
+ blkid_verify@Base 1.37
+#MISSING: 1.40.7# check_for_modules@Base 1.40.6
+#MISSING: 1.40.7# fs_proc_check@Base 1.40.6
diff --git a/debian/libcomerr2.symbols b/debian/libcomerr2.symbols
new file mode 100644
index 0000000..ea54750
--- /dev/null
+++ b/debian/libcomerr2.symbols
@@ -0,0 +1,20 @@
+libcom_err.so.2 libcomerr2 #MINVER#
+ _et_dynamic_list@Base 1.38
+ _et_list@Base 1.01
+ add_error_table@Base 1.34
+ add_to_error_table@Base 1.34
+ com_err@Base 1.01
+ com_err_hook@Base 1.01
+ com_err_va@Base 1.01
+ com_right@Base 1.34
+ com_right_r@Base 1.41.11
+ error_message@Base 1.01
+ error_table_name@Base 1.01
+ et_list_lock@Base 1.41.2
+ et_list_unlock@Base 1.41.2
+ free_error_table@Base 1.34
+ init_error_table@Base 1.01
+ initialize_error_table_r@Base 1.34
+ remove_error_table@Base 1.34
+ reset_com_err_hook@Base 1.01
+ set_com_err_hook@Base 1.01
diff --git a/debian/libss2.symbols b/debian/libss2.symbols
new file mode 100644
index 0000000..b6fe40b
--- /dev/null
+++ b/debian/libss2.symbols
@@ -0,0 +1,35 @@
+libss.so.2 libss2 #MINVER#
+ _ss_pager_name@Base 1.01
+ _ss_table@Base 1.01
+ et_ss_error_table@Base 1.35
+ initialize_ss_error_table@Base 1.01
+ initialize_ss_error_table_r@Base 1.34
+ ss_abort_subsystem@Base 1.01
+ ss_add_info_dir@Base 1.01
+ ss_add_request_table@Base 1.01
+ ss_create_invocation@Base 1.01
+ ss_delete_info_dir@Base 1.01
+ ss_delete_invocation@Base 1.01
+ ss_delete_request_table@Base 1.01
+ ss_error@Base 1.01
+ ss_execute_command@Base 1.01
+ ss_execute_line@Base 1.01
+ ss_get_prompt@Base 1.01
+ ss_get_readline@Base 1.34
+ ss_help@Base 1.01
+ ss_list_requests@Base 1.01
+ ss_listen@Base 1.01
+ ss_name@Base 1.01
+ ss_page_stdin@Base 1.01
+ ss_pager_create@Base 1.01
+ ss_parse@Base 1.01
+ ss_perror@Base 1.01
+ ss_quit@Base 1.01
+ ss_rl_completion@Base 1.34
+ ss_safe_getenv@Base 1.38
+ ss_self_identify@Base 1.01
+ ss_set_prompt@Base 1.01
+ ss_std_requests@Base 1.01
+ ss_subsystem_name@Base 1.01
+ ss_subsystem_version@Base 1.01
+ ss_unimplemented@Base 1.01
diff --git a/debian/libuuid1.postinst b/debian/libuuid1.postinst
index cd5b093..5336fcf 100644
--- a/debian/libuuid1.postinst
+++ b/debian/libuuid1.postinst
@@ -1,10 +1,36 @@
 #!/bin/sh
 
 set -e
-groupadd -f -K GID_MIN=100 -K GID_MAX=999 libuuid
-if ! grep -q libuuid /etc/passwd; then
-   useradd -d /var/lib/libuuid -K UID_MIN=100 -K UID_MAX=999 -g libuuid libuuid
+
+ADDUSERCONF='/etc/adduser.conf'
+
+if test -f $ADDUSERCONF; then
+    FIRST_SYSTEM_UID=$(sed -n "s/^[[:space:]]*FIRST_SYSTEM_UID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF)
+    LAST_SYSTEM_UID=$(sed -n "s/^[[:space:]]*LAST_SYSTEM_UID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF)
+    FIRST_SYSTEM_GID=$(sed -n "s/^[[:space:]]*FIRST_SYSTEM_GID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF)
+    LAST_SYSTEM_GID=$(sed -n "s/^[[:space:]]*LAST_SYSTEM_GID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF)
 fi
+
+if test -z "$FIRST_SYSTEM_UID"; then
+    FIRST_SYSTEM_UID=100
+fi
+if test -z "$LAST_SYSTEM_UID"; then
+    LAST_SYSTEM_UID=999
+fi
+if test -z "$FIRST_SYSTEM_GID"; then
+    FIRST_SYSTEM_GID=100
+fi
+if test -z "$LAST_SYSTEM_GID"; then
+    LAST_SYSTEM_GID=999
+fi
+
+if ! getent group | grep -q libuuid; then
+  groupadd -f -K GID_MIN=$FIRST_SYSTEM_GID -K GID_MAX=$LAST_SYSTEM_GID libuuid
+fi
+if ! getent passwd | grep -q libuuid; then
+   useradd -d /var/lib/libuuid -K UID_MIN=$FIRST_SYSTEM_UID -K UID_MAX=$LAST_SYSTEM_UID -g libuuid libuuid
+fi
+
 mkdir -p /var/lib/libuuid
 chown libuuid:libuuid /var/lib/libuuid
 chmod 2775 /var/lib/libuuid
diff --git a/debian/libuuid1.symbols b/debian/libuuid1.symbols
new file mode 100644
index 0000000..5a00431
--- /dev/null
+++ b/debian/libuuid1.symbols
@@ -0,0 +1,19 @@
+libuuid.so.1 libuuid1 #MINVER#
+ uuid__generate_random@Base 1.40.4
+ uuid__generate_time@Base 1.40.4
+ uuid_clear@Base 1.05
+ uuid_compare@Base 1.05
+ uuid_copy@Base 1.05
+ uuid_generate@Base 1.05
+ uuid_generate_random@Base 1.15
+ uuid_generate_time@Base 1.15
+ uuid_is_null@Base 1.05
+ uuid_pack@Base 1.05
+ uuid_parse@Base 1.05
+ uuid_time@Base 1.15
+ uuid_type@Base 1.15
+ uuid_unpack@Base 1.05
+ uuid_unparse@Base 1.05
+ uuid_unparse_lower@Base 1.36
+ uuid_unparse_upper@Base 1.36
+ uuid_variant@Base 1.15
diff --git a/debian/rules b/debian/rules
index df04b5e..6cf47a1 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,6 +10,13 @@
 # be paranoid
 export LC_ALL=C
 
+# Allow distro-specific behaviour
+DISTRO :=$(shell sed -ne '/DISTRIB_ID/s/.*=//p' /etc/lsb-release 2>/dev/null || echo Debian)
+SYS_BLKID_VER := $(shell dpkg-query -W libblkid1 | cut -f 2 | cut -b 1)
+ifeq ($(SYS_BLKID_VER),2)
+UTIL_LINUX_NG ?= yes
+endif
+
 # These are used for cross-compiling and for saving the configure script
 # from having to guess our platform (since we know it already)
 DEB_HOST_ARCH   ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
@@ -26,10 +33,15 @@
 COMERR_SOVERSION = $(shell grep ELF_SO_VERSION lib/et/Makefile.in | cut '-d ' -f3)
 SS_VERSION = $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
 SS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
+
+ifneq ($(UTIL_LINUX_NG),yes)
 UUID_VERSION = $(shell grep ELF_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
 UUID_SOVERSION = $(shell grep ELF_SO_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
+
 BLKID_VERSION = $(shell grep ELF_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
 BLKID_SOVERSION = $(shell grep ELF_SO_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
+endif
+
 EXT2FS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ext2fs/Makefile.in | cut '-d ' -f3)
 E2P_SOVERSION = $(shell grep ELF_SO_VERSION lib/e2p/Makefile.in | cut '-d ' -f3)
 
@@ -39,9 +51,32 @@
 debdir=${topdir}/debian
 tmpdir=${debdir}/tmp
 udebdir=${debdir}/e2fsprogs-udeb
+ifneq ($(UTIL_LINUX_NG),yes)
 blkidudebdir=${debdir}/libblkid1-udeb
 uuidudebdir=${debdir}/libuuid1-udeb
+endif
+libcomerrdir=${debdir}/libcomerr${COMERR_SOVERSION}
+comerrdevdir=${debdir}/comerr-dev
+libcomerrdbgdir=${debdir}/libcomerr2-dbg
+libssdir=${debdir}/libss${SS_SOVERSION}
+ssdevdir=${debdir}/ss-dev
+libssdbgdir=${debdir}/libss2-dbg
+ifneq ($(UTIL_LINUX_NG),yes)
+libblkiddir=${debdir}/libblkid${BLKID_SOVERSION}
+libblkiddevdir=${debdir}/libblkid-dev
+libblkiddbgdir=${debdir}/libblkid1-dbg
+libuuiddir=${debdir}/libuuid${UUID_SOVERSION}
+uuiddevdir=${debdir}/uuid-dev
+libuuiddbgdir=${debdir}/libuuid1-dbg
+uuidruntimedir=${debdir}/uuid-runtime
+uuidruntimedbgdir=${debdir}/uuid-runtime-dbg
+endif
+libext2dir=${debdir}/e2fslibs
+libext2devdir=${debdir}/e2fslibs-dev
+libext2dbgdir=${debdir}/e2fslibs-dbg
 maindir=${debdir}/e2fsprogs
+e2fsckstaticdir=${debdir}/e2fsck-static
+debugdir=${debdir}/e2fsprogs-dbg
 stdbuilddir=${debdir}/BUILD-STD
 bfbuilddir=${debdir}/BUILD-BF
 staticbuilddir=${debdir}/BUILD-STATIC
@@ -52,13 +87,15 @@
 mandir=${tmpdir}${MANDIR}
 
 UDEB_NAME = $(package)-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UDEB_PRIORITY = $(shell grep '^Package: e2fsprogs-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+UDEB_PRIORITY = $(shell grep '^Package: e2fsprogs-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
 
+ifneq ($(UTIL_LINUX_NG),yes)
 BLKID_UDEB_NAME = libblkid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-BLKID_UDEB_PRIORITY = $(shell grep '^Package: libblkid1-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+BLKID_UDEB_PRIORITY = $(shell grep '^Package: libblkid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
 
 UUID_UDEB_NAME = libuuid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UUID_UDEB_PRIORITY = $(shell grep '^Package: libuuid1-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+UUID_UDEB_PRIORITY = $(shell grep '^Package: libuuid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+endif
 
 STAMPSDIR=debian/stampdir
 CFGSTDSTAMP=${STAMPSDIR}/configure-std-stamp
@@ -68,54 +105,48 @@
 BUILDBFSTAMP=${STAMPSDIR}/build-bf-stamp
 BUILDSTATICSTAMP=${STAMPSDIR}/build-static-stamp
 
-CCOPTS = -g
-
 INSTALL = install
 INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 0755
 
-ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-CCOPTS += -O2
-endif
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
-INSTALL_PROGRAM += -s
-endif
+#ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+#INSTALL_PROGRAM += -s
+#endif
 
 ifeq (${DEB_HOST_ARCH},alpha)
-CCOPTS += -DHAVE_NETINET_IN_H
+CFLAGS += -DHAVE_NETINET_IN_H
 else
-CCOPTS += -D__NO_STRING_INLINES
+CFLAGS += -D__NO_STRING_INLINES
 endif
 
 ifeq (${DEB_HOST_ARCH_OS},linux)
-DEVMAPPER = --enable-blkid-devmapper
 BUILD_STATIC = build-static
 E2FSCK_STATIC = ${staticbuilddir}/e2fsck/e2fsck.static
 else
 E2FSCK_STATIC = ${stdbuilddir}/e2fsck/e2fsck.static
 endif
 
-BF_CCOPTS = -Os -fomit-frame-pointer
+BF_CFLAGS = -Os -fomit-frame-pointer
 
 COMMON_CONF_FLAGS =  \
-                --enable-elf-shlibs --infodir=/usr/share/info --enable-fsck
+                --enable-elf-shlibs --infodir=/usr/share/info
+ifeq ($(UTIL_LINUX_NG),yes)
+COMMON_CONF_FLAGS += --disable-fsck --disable-libblkid \
+			--disable-libuuid --disable-uuidd
+else
+COMMON_CONF_FLAGS += --enable-fsck
+endif
 
-STD_CONF_FLAGS = --with-ccopts="${CCOPTS}" --enable-compression \
-		${DEVMAPPER}
+STD_CONF_FLAGS = --enable-compression
 
-BF_CONF_FLAGS = --with-ccopts="${CCOPTS} ${BF_CCOPTS}" \
-	--disable-nls --disable-swapfs --disable-imager \
+BF_CONF_FLAGS = --disable-nls --disable-imager --disable-testio-debug \
 	--disable-uuidd --disable-tls \
 	--disable-debugfs  --disable-e2initrd-helper
 
-STATIC_CONF_FLAGS = --with-ccopts="${CCOPTS}" \
-	--disable-nls --disable-imager \
+STATIC_CONF_FLAGS = --disable-nls --disable-imager \
 	--disable-uuidd --disable-tls \
-	--disable-e2initrd-helper \
-	--with-ccopts=-fno-stack-protector
+	--disable-e2initrd-helper
 
-MIPS_NOPIC_CONF_FLAGS = --with-ccopts="${CCOPTS}" \
-	--disable-nls \
-	--disable-swapfs --disable-imager \
+MIPS_NOPIC_CONF_FLAGS = --disable-nls --disable-imager \
 	--disable-uuidd --disable-tls \
         --disable-resizer # --disable-debugfs
 
@@ -129,6 +160,16 @@
 endif
 endif
 
+M4_ARGS=
+ifeq ($(UTIL_LINUX_NG),yes)
+M4_ARGS+=-DUTIL_LINUX_NG
+else
+M4_ARGS+=-UUTIL_LINUX_NG
+endif
+
+debian/control: debian/control.in debian/rules
+	m4 $(M4_ARGS) < debian/control.in > $@
+
 ${CFGSTDSTAMP}:
 	dh_testdir
 
@@ -138,20 +179,22 @@
 	mkdir -p ${stdbuilddir}
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
 	cd ${stdbuilddir} && AWK=/usr/bin/awk \
-		${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS}
+		${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
+		CFLAGS="${CFLAGS}"
 else
 	cd ${stdbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
 		${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
-		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
+		CFLAGS="${CFLAGS}"
 endif
 
   # specially-built MIPS libs
 ifneq ($(ismips),)
 	mkdir -p ${mipsbuilddir} ${mipsbuilddir64}
 	cd ${mipsbuilddir} && AWK=/usr/bin/awk \
-		${topdir}/configure ${MIPS_NOPIC_CONF_FLAGS}
+		${topdir}/configure ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}"
 	cd ${mipsbuilddir64} && AWK=/usr/bin/awk \
-		${topdir}/configure ${MIPS_NOPIC_CONF_FLAGS}
+		${topdir}/configure ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}"
 endif
 
 	mkdir -p ${STAMPSDIR}
@@ -164,11 +207,13 @@
 	mkdir -p ${bfbuilddir}
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
 	cd ${bfbuilddir} && AWK=/usr/bin/awk \
-		${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS}
+		${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
+		CFLAGS="${CFLAGS} ${BF_CFLAGS}"
 else
 	cd ${bfbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
 		${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
-		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
+		CFLAGS="${CFLAGS}"
 endif
 	mkdir -p ${STAMPSDIR}
 	touch ${CFGBFSTAMP}
@@ -180,14 +225,19 @@
 	mkdir -p ${staticbuilddir}
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
 	if type diet > /dev/null  2>&1 ; then \
-		STATIC_CONF_FLAGS="$STATIC_CONF_FLAGS --with-diet-libc"; \
+		cd ${staticbuilddir} && AWK=/usr/bin/awk \
+		${topdir}/configure ${STATIC_CONF_FLAGS} \
+		--with-diet-libc CFLAGS="${CFLAGS}"; \
+	else \
+		cd ${staticbuilddir} && AWK=/usr/bin/awk \
+			${topdir}/configure ${STATIC_CONF_FLAGS} \
+			CFLAGS="${CFLAGS}"; \
 	fi
-	cd ${staticbuilddir} && AWK=/usr/bin/awk \
-		${topdir}/configure ${STATIC_CONF_FLAGS}
 else
 	cd ${staticbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
 		${topdir}/configure ${COMMON_CONF_FLAGS} ${STATIC_CONF_FLAGS} \
-		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+		--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
+		CFLAGS="${CFLAGS}"
 endif
 	mkdir -p ${STAMPSDIR}
 	touch ${CFGSTATICSTAMP}
@@ -200,20 +250,18 @@
 	$(MAKE) -C ${stdbuilddir} all
 	$(MAKE) -C ${stdbuilddir}/e2fsck e2fsck.static
 
-	( cd ${stdbuilddir}/doc && \
-	  texi2html -split_chapter ${topdir}/doc/libext2fs.texinfo )
-	( cd ${stdbuilddir}/lib/et && $(MAKE) com_err.info && \
-	  texi2html -split_chapter -expandinfo ${topdir}/lib/et/com_err.texinfo )
+	( cd ${stdbuilddir}/doc && $(MAKE) libext2fs_abt.html )
+	( cd ${stdbuilddir}/lib/et && $(MAKE) com_err.info com_err_abt.html )
 
   # specially-built MIPS libs
 ifneq ($(ismips),)
 	$(MAKE) -C ${mipsbuilddir}/util
 	$(MAKE) -C ${mipsbuilddir} \
-		CFLAGS="${CCOPTS} ${MIPS_CFLAGS}" \
+		CFLAGS="${CFLAGS} ${MIPS_CFLAGS}" \
 		LIB_SUBDIRS="lib/et lib/ext2fs" libs
 	$(MAKE) -C ${mipsbuilddir64}/util
 	$(MAKE) -C ${mipsbuilddir64} \
-		CFLAGS="${CCOPTS} ${MIPS_CFLAGS_64}" \
+		CFLAGS="${CFLAGS} ${MIPS_CFLAGS_64}" \
 		LIB_SUBDIRS="lib/et lib/ext2fs" libs
 endif
 
@@ -241,7 +289,7 @@
 	[ ! -f ${bfbuilddir}/Makefile ] || $(MAKE) -C ${bfbuilddir} distclean
 	[ ! -f ${staticbuilddir}/Makefile ] || $(MAKE) -C ${staticbuilddir} distclean
 	rm -rf ${stdbuilddir} ${bfbuilddir} ${staticbuilddir} ${mipsbuilddir} ${mipsbuilddir64}
-	rm -f doc/libext2fs/*.html lib/et/com_err/*.html debian/*.substvars
+	rm -f debian/*.substvars
 	dh_clean
 
 install: cleanup install-std
@@ -252,7 +300,7 @@
 cleanup:
 	dh_testdir
 	dh_testroot
-	dh_clean -k
+	dh_prep
 
 install-std: DH_OPTIONS=
 install-std: build
@@ -304,13 +352,15 @@
 
 	(cd ${udebdir}/sbin; ln -s e2fsck fsck.ext2 ; \
 		ln -s e2fsck fsck.ext3 ; ln -s mke2fs mkfs.ext2 ; \
-		ln -s mke2fs mkfs.ext3)
+		ln -s mke2fs mkfs.ext3 ; ln -s mke2fs mkfs.ext4)
 
+ifneq ($(UTIL_LINUX_NG),yes)
 	mkdir -p ${blkidudebdir}/lib
 	mv ${udebdir}/lib/libblkid.* ${blkidudebdir}/lib
 
 	mkdir -p ${uuidudebdir}/lib
 	mv ${udebdir}/lib/libuuid.* ${uuidudebdir}/lib
+endif
 
 binary-indep: 
   # no arch-independant debs.
@@ -339,9 +389,11 @@
 
   # symlinks to prepare dh_installdocs run
 
+ifneq ($(UTIL_LINUX_NG),yes)
 	mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}
 	mkdir -p ${debdir}/libblkid-dev/usr/share/doc
 	ln -sf libblkid${BLKID_SOVERSION} ${debdir}/libblkid-dev/usr/share/doc/libblkid-dev
+endif
 
 	mkdir -p ${debdir}/libss${SS_SOVERSION}/usr/share/doc/libss${SS_SOVERSION}
 	mkdir -p ${debdir}/ss-dev/usr/share/doc
@@ -351,25 +403,29 @@
 	mkdir -p ${debdir}/comerr-dev/usr/share/doc
 	ln -sf libcomerr${COMERR_SOVERSION} ${debdir}/comerr-dev/usr/share/doc/comerr-dev
 
+ifneq ($(UTIL_LINUX_NG),yes)
 	mkdir -p ${debdir}/libuuid${UUID_SOVERSION}/usr/share/doc/libuuid${UUID_SOVERSION}
 	mkdir -p ${debdir}/uuid-dev/usr/share/doc
 #	ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev
+endif
 
 	mkdir -p ${debdir}/e2fslibs/usr/share/doc/e2fslibs
 	mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc
 	ln -sf e2fslibs ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev
 
+ifneq ($(UTIL_LINUX_NG),yes)
 	$(INSTALL) -p -m 0644 debian/libblkid.copyright \
 		${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}/copyright
+endif
 
 	dh_installdocs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
 
   # HTML docs
 	$(INSTALL) -d ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/
-	$(INSTALL) -p -m 0644 ${stdbuilddir}/doc/libext2fs/*.html \
+	$(INSTALL) -p -m 0644 ${stdbuilddir}/doc/*.html \
 	   ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/
 	$(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/
-	$(INSTALL) -p -m 0644 ${stdbuilddir}/lib/et/com_err/*.html \
+	$(INSTALL) -p -m 0644 ${stdbuilddir}/lib/et/*.html \
 	   ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/
 
   # texinfo docs
@@ -387,25 +443,109 @@
 	$(INSTALL) -p -m 0644 debugfs/debug_cmds.ct \
 		${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples
 
-	if test -f /etc/lsb-release && \
-		grep -q DISTRIB_ID=Ubuntu /etc/lsb-release; then \
-	$(INSTALL) -p -m 0644 e2fsck/e2fsck.conf.ubuntu \
-		${debdir}/e2fsprogs/etc/e2fsck.conf; \
-	fi
-
 	dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info
 	dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info
 
 	DH_OPTIONS= dh_installchangelogs -pe2fsprogs \
-		-plibblkid${BLKID_SOVERSION} -plibcomerr${COMERR_SOVERSION} \
-		-plibss${SS_SOVERSION} -plibuuid${UUID_SOVERSION} \
-		-pe2fslibs -puuid-dev -puuid-runtime -pe2fsck-static
+		-plibcomerr${COMERR_SOVERSION} \
+		-plibss${SS_SOVERSION} \
+		-pe2fslibs -pe2fsck-static \
+		-pe2fsprogs-dbg -pe2fslibs-dbg \
+		-plibcomerr2-dbg -plibss2-dbg
+ifneq ($(UTIL_LINUX_NG),yes)
+	DH_OPTIONS= dh_installchangelogs -plibuuid${UUID_SOVERSION} \
+		-puuid-dev -puuid-runtime -puuid-runtime-dbg -plibuuid1-dbg \
+		-plibblkid${BLKID_SOVERSION} -plibblkid1-dbg
+endif
 
 	dh_fixperms
 ifneq ($(ismips),)
-	dh_strip -Xlib64ext2fs-nopic.a
+	dh_strip -k -Xlib64ext2fs-nopic.a
 else
-	dh_strip
+	dh_strip -k
+endif
+
+	# debug package stuff
+	rm -rf ${udebdir}/usr
+ifneq ($(UTIL_LINUX_NG),yes)
+	rm -rf ${blkidudebdir}/usr
+	rm -rf ${uuidudebdir}/usr
+endif
+
+	mkdir -p ${debugdir}/usr/lib
+	mv ${maindir}/usr/lib/debug ${debugdir}/usr/lib
+	rm -rf ${maindir}/usr/lib/debug
+	mv ${e2fsckstaticdir}/usr/lib/debug/sbin/* \
+		${debugdir}/usr/lib/debug
+	rm -rf ${e2fsckstaticdir}/usr/lib
+
+ifneq ($(UTIL_LINUX_NG),yes)
+	mkdir -p ${uuidruntimedbgdir}/usr/lib
+	mv ${uuidruntimedir}/usr/lib/debug ${uuidruntimedbgdir}/usr/lib
+	rmdir ${uuidruntimedir}/usr/lib
+endif
+
+	mkdir -p ${libext2dbgdir}/usr/lib
+	mv ${libext2dir}/usr/lib/debug ${libext2dbgdir}/usr/lib
+	rmdir ${libext2dir}/usr/lib
+
+	mkdir -p ${libcomerrdbgdir}/usr/lib
+	mv ${libcomerrdir}/usr/lib/debug ${libcomerrdbgdir}/usr/lib
+	rmdir ${libcomerrdir}/usr/lib
+
+	mkdir -p ${libssdbgdir}/usr/lib
+	mv ${libssdir}/usr/lib/debug ${libssdbgdir}/usr/lib
+	rmdir ${libssdir}/usr/lib
+
+ifneq ($(UTIL_LINUX_NG),yes)
+	mkdir -p ${libuuiddbgdir}/usr/lib
+	mv ${libuuiddir}/usr/lib/debug ${libuuiddbgdir}/usr/lib
+	rmdir ${libuuiddir}/usr/lib
+
+	mkdir -p ${libblkiddbgdir}/usr/lib
+	mv ${libblkiddir}/usr/lib/debug ${libblkiddbgdir}/usr/lib
+	rmdir ${libblkiddir}/usr/lib
+endif
+
+	# dpkg symbol handling
+ifneq (,$(findstring update-symbols,$(DEB_BUILD_OPTIONS)))
+SYMBOL_LIBS := e2fslibs libcomerr2 libss2
+ifneq ($(UTIL_LINUX_NG),yes)
+SYMBOL_LIBS += libblkid1 libuuid1
+endif
+	for i in $(SYMBOL_LIBS); \
+	do \
+		echo "Generating symbols for $$i..."; \
+		dpkg-gensymbols -p$$i -Pdebian/$$i > debian/$$i.tmp-patch; \
+		cat debian/$$i.tmp-patch; \
+		patch debian/$$i.symbols < debian/$$i.tmp-patch; \
+		/bin/rm debian/$$i.tmp-patch; \
+	done
+endif
+
+	$(INSTALL) -p -m 0644 debian/e2fsprogs.copyright \
+		${debugdir}/usr/share/doc/e2fsprogs-dbg/copyright
+
+ifneq ($(UTIL_LINUX_NG),yes)
+	$(INSTALL) -p -m 0644 debian/uuid-runtime.copyright \
+		${uuidruntimedbgdir}/usr/share/doc/uuid-runtime-dbg/copyright
+endif
+
+	$(INSTALL) -p -m 0644 debian/e2fslibs.copyright \
+		${libext2dbgdir}/usr/share/doc/e2fslibs-dbg/copyright
+
+	$(INSTALL) -p -m 0644 debian/libcomerr2.copyright \
+		${libcomerrdbgdir}/usr/share/doc/libcomerr2-dbg/copyright
+
+	$(INSTALL) -p -m 0644 debian/libss2.copyright \
+		${libssdbgdir}/usr/share/doc/libss2-dbg/copyright
+
+ifneq ($(UTIL_LINUX_NG),yes)
+	$(INSTALL) -p -m 0644 debian/libblkid.copyright \
+		${libblkiddbgdir}/usr/share/doc/libblkid1-dbg/copyright
+
+	$(INSTALL) -p -m 0644 debian/libuuid1.copyright \
+		${libuuiddbgdir}/usr/share/doc/libuuid1-dbg/copyright
 endif
 
 	dh_compress
@@ -413,13 +553,14 @@
 	dh_makeshlibs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
 	dh_makeshlibs -plibcomerr${COMERR_SOVERSION} \
 		-V 'libcomerr2 (>= 1.33-3)'
+ifneq ($(UTIL_LINUX_NG),yes)
 	dh_makeshlibs -plibblkid${BLKID_SOVERSION} -V 'libblkid1 (>= 1.39-1)'
 	echo "udeb: libblkid 1 libblkid1-udeb" >> \
 		debian/libblkid1/DEBIAN/shlibs
 	echo "udeb: libuuid 1 libuuid1-udeb" >> debian/libuuid1/DEBIAN/shlibs
+endif
 
 	dh_installdeb
-	rm debian/e2fsprogs-udeb/DEBIAN/conffiles
 	dh_shlibdeps -l${stdbuilddir}/lib
 	dh_shlibdeps -pe2fsprogs -l${stdbuilddir}/lib \
 		-u"-Ldebian/e2fsprogs.shlibs.local"
@@ -432,24 +573,28 @@
 	  -u '-v${COMERR_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
 	DH_OPTIONS= dh_gencontrol -pss-dev \
 	  -u '-v${SS_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
+ifneq ($(UTIL_LINUX_NG),yes)
 	DH_OPTIONS= dh_gencontrol -puuid-dev \
 	  -u '-v${UUID_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
+endif
+	dh_gencontrol	-pe2fsprogs-udeb -- -fdebian/files~
+ifneq ($(UTIL_LINUX_NG),yes)
+	dh_gencontrol	-plibblkid1-udeb -- -fdebian/files~
+	dh_gencontrol	-plibuuid1-udeb -- -fdebian/files~
+endif
 
+	dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY)
+ifneq ($(UTIL_LINUX_NG),yes)
+	dpkg-distaddfile $(BLKID_UDEB_NAME) debian-installer $(BLKID_UDEB_PRIORITY)
+	dpkg-distaddfile $(UUID_UDEB_NAME) debian-installer $(UUID_UDEB_PRIORITY)
+endif
 	dh_md5sums -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
 	dh_builddeb -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
-
-	# udeb stuff
-	dh_gencontrol	-pe2fsprogs-udeb -- -fdebian/files~
-	dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY)
 	dh_builddeb -pe2fsprogs-udeb --filename=$(UDEB_NAME)
-
-	dh_gencontrol	-plibblkid1-udeb -- -fdebian/files~
-	dpkg-distaddfile $(BLKID_UDEB_NAME) debian-installer $(BLKID_UDEB_PRIORITY)
+ifneq ($(UTIL_LINUX_NG),yes)
 	dh_builddeb -plibblkid1-udeb --filename=$(BLKID_UDEB_NAME)
-
-	dh_gencontrol	-plibuuid1-udeb -- -fdebian/files~
-	dpkg-distaddfile $(UUID_UDEB_NAME) debian-installer $(UUID_UDEB_PRIORITY)
 	dh_builddeb -plibuuid1-udeb --filename=$(UUID_UDEB_NAME)
+endif
 
 binary: binary-indep binary-arch
 
diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides
new file mode 100644
index 0000000..8c0cd0f
--- /dev/null
+++ b/debian/source.lintian-overrides
@@ -0,0 +1,3 @@
+e2fsprogs source: weak-library-dev-dependency ss-dev on libss2 (= ${mainBinary})
+e2fsprogs source: weak-library-dev-dependency comerr-dev on libcomerr2 (= ${mainBinary})
+e2fsprogs source: weak-library-dev-dependency uuid-dev on libuuid1 (= ${mainBinary})
diff --git a/debian/uuid-runtime.lintian-overrides b/debian/uuid-runtime.lintian-overrides
new file mode 100644
index 0000000..4642d30
--- /dev/null
+++ b/debian/uuid-runtime.lintian-overrides
@@ -0,0 +1 @@
+uuid-runtime: command-with-path-in-maintainer-script prerm:5 /usr/sbin/uuidd
diff --git a/debian/uuid-runtime.postinst b/debian/uuid-runtime.postinst
index 36cd7b9..3c1adb6 100644
--- a/debian/uuid-runtime.postinst
+++ b/debian/uuid-runtime.postinst
@@ -1,8 +1,10 @@
 #!/bin/sh
 
 set -e
+if ! getent group | grep -q libuuid; then
 groupadd -f -K GID_MIN=1 -K GID_MAX=999 libuuid
-if ! grep -q libuuid /etc/passwd; then
+fi
+if ! getent passwd | grep -q libuuid; then
    useradd -d /var/lib/libuuid -K UID_MIN=1 -K UID_MAX=499 -g libuuid libuuid
 fi
 chown libuuid:libuuid /usr/sbin/uuidd
diff --git a/debian/uuid-runtime.prerm b/debian/uuid-runtime.prerm
index 241d7a0..904e161 100644
--- a/debian/uuid-runtime.prerm
+++ b/debian/uuid-runtime.prerm
@@ -1,5 +1,5 @@
 #! /bin/sh
-
+set -e
 if [ -x /usr/sbin/uuidd ]
 then
 	/usr/sbin/uuidd -k || true
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..96f61d3
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,4 @@
+version=3
+http://sf.net/e2fsprogs/e2fsprogs-([0-9].+)\.tar\.gz
+#ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-([0-9].+)\.tar\.gz
+
diff --git a/debugfs/Makefile.in b/debugfs/Makefile.in
index bdba326..e314b91 100644
--- a/debugfs/Makefile.in
+++ b/debugfs/Makefile.in
@@ -8,7 +8,6 @@
 top_builddir = ..
 my_dir = debugfs
 INSTALL = @INSTALL@
-DLOPEN_LIB = @DLOPEN_LIB@
 
 @MCONFIG@
 
@@ -26,38 +25,39 @@
 	$(srcdir)/htree.c $(srcdir)/unused.c
 
 LIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \
-	$(LIBUUID) $(DLOPEN_LIB)
-DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID)
+	$(LIBUUID)
+DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(DEPLIBSS) $(DEPLIBCOM_ERR) \
+	$(DEPLIBBLKID) $(DEPLIBUUID)
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $< -o $@
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
 
 all:: $(PROGS) $(MANPAGES)
 
 debugfs: $(DEBUG_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o debugfs $(DEBUG_OBJS) $(LIBS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o debugfs $(DEBUG_OBJS) $(LIBS)
 
 debug_cmds.c debug_cmds.h: debug_cmds.ct
-	@echo "	MK_CMDS $@"
-	@$(MK_CMDS) $(srcdir)/debug_cmds.ct
+	$(E) "	MK_CMDS $@"
+	$(Q) $(MK_CMDS) $(srcdir)/debug_cmds.ct
 
 debugfs.8: $(DEP_SUBSTITUTE) $(srcdir)/debugfs.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/debugfs.8.in debugfs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/debugfs.8.in debugfs.8
 
 installdirs:
-	@echo "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+	$(E) "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
 		$(DESTDIR)$(man8dir)
 
 install: $(PROGS) $(MANPAGES) installdirs
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	INSTALL $(root_sbindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	@for i in $(MANPAGES); do \
+	$(Q) for i in $(MANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
 		done; \
@@ -66,7 +66,7 @@
 	done
 
 install-strip: install
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	STRIP $(root_sbindir)/$$i"; \
 		$(STRIP) $(DESTDIR)$(root_sbindir)/$$i; \
 	done
@@ -96,65 +96,74 @@
  $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h
 debugfs.o: $(srcdir)/debugfs.c $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ss/ss.h $(top_builddir)/lib/ss/ss_err.h \
- $(top_srcdir)/lib/et/com_err.h $(srcdir)/debugfs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
- $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/uuid/uuid.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h \
- $(top_srcdir)/version.h
+ $(srcdir)/debugfs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/version.h $(srcdir)/jfs_user.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h
 util.o: $(srcdir)/util.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 ls.o: $(srcdir)/ls.c $(srcdir)/debugfs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
- $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 ncheck.o: $(srcdir)/ncheck.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 icheck.o: $(srcdir)/icheck.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 lsdel.o: $(srcdir)/lsdel.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 dump.o: $(srcdir)/dump.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 set_fields.o: $(srcdir)/set_fields.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/uuid/uuid.h $(top_srcdir)/lib/e2p/e2p.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
 logdump.o: $(srcdir)/logdump.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
- $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
- $(top_srcdir)/lib/uuid/uuid.h
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h
 htree.o: $(srcdir)/htree.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
 unused.o: $(srcdir)/unused.c $(srcdir)/debugfs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
diff --git a/debugfs/debug_cmds.ct b/debugfs/debug_cmds.ct
index a4a5a4c..95dea0d 100644
--- a/debugfs/debug_cmds.ct
+++ b/debugfs/debug_cmds.ct
@@ -19,7 +19,7 @@
 request do_dirty_filesys, "Mark the filesystem as dirty",
 	dirty_filesys, dirty;
 
-request do_init_filesys, "Initalize a filesystem (DESTROYS DATA)",
+request do_init_filesys, "Initialize a filesystem (DESTROYS DATA)",
 	init_filesys;
 
 request do_show_super_stats, "Show superblock statistics",
@@ -43,6 +43,9 @@
 request do_stat, "Show inode information ",
 	show_inode_info, stat;
 
+request do_dump_extents, "Dump extents information ",
+	dump_extents, extents, ex;
+
 request do_link, "Create directory link",
 	link, ln;
 
@@ -154,5 +157,8 @@
 request do_set_current_time, "Set current time to use when setting filesystme fields",
 	set_current_time;
 
+request do_supported_features, "Print features supported by this version of e2fsprogs",
+	supported_features;
+
 end;
 
diff --git a/debugfs/debugfs.8.in b/debugfs/debugfs.8.in
index 81b411e..9012a56 100644
--- a/debugfs/debugfs.8.in
+++ b/debugfs/debugfs.8.in
@@ -4,7 +4,7 @@
 .\" 
 .TH DEBUGFS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-debugfs \- ext2/ext3 file system debugger
+debugfs \- ext2/ext3/ext4 file system debugger
 .SH SYNOPSIS
 .B debugfs
 [
@@ -37,10 +37,10 @@
 The 
 .B debugfs 
 program is an interactive file system debugger. It can be used to
-examine and change the state of an ext2 file system.
+examine and change the state of an ext2, ext3, or ext4 file system.
 .br
 .I device
-is the special file corresponding to the device containing the ext2
+is the special file corresponding to the device containing the
 file system (e.g /dev/hdXX).
 .SH OPTIONS
 .TP
@@ -90,10 +90,11 @@
 detecting the correct block size as normal.
 .TP
 .I -s superblock
-Causes the file system superblock to be read from the given block number,
-rather than the default (1).  If you give a
+Causes the file system superblock to be read from the given block
+number, instead of using the primary superblock (located at an offset of
+1024 bytes from the beginning of the filesystem).  If you specify the
 .I -s
-option, you must also give a
+option, you must also provide the blocksize of the filesystem via the
 .I -b
 option.
 .TP
@@ -168,14 +169,18 @@
 Change the root directory to be the directory 
 .IR filespec .
 .TP
-.I close
-Close the currently open file system.
+.I close [-a]
+Close the currently open file system.  If the 
+.I -a
+option is specified, write out any changes to the superblock and block
+group descriptors to all of the backup superblocks, not just to the
+master superblock.
 .TP
 .I clri file
 Clear the contents of the inode 
 .IR file .
 .TP
-.I dump [-p] filspec out_file
+.I dump [-p] filespec out_file
 Dump the contents of the inode 
 .I filespec
 to the output file 
@@ -187,6 +192,25 @@
 to match 
 .IR filespec .
 .TP
+.I dump_extents [-n] [-l] filespec
+Dump the the extent tree of the inode
+.IR filespec .
+The 
+.I -n
+flag will cause
+.I dump_extents
+to only display the interior nodes in the extent tree.   The
+.I  -l
+flag cause
+.I dump_extents
+to only display the leaf nodes in the extent tree.
+.IP
+(Please note that the length and range of blocks for the last extent in
+an interior node is an estimate by the extents library functions, and is
+not stored in file esystem data structures.   Hence, the values displayed
+may not necessarily by accurate and does not indicate a problem or 
+corruption in the file system.)
+.TP
 .I expand_dir filespec
 Expand the directory
 .IR filespec .
@@ -306,7 +330,7 @@
 .I \-b
 options.
 .TP
-.I ls [-l] [-d] filespec
+.I ls [-l] [-d] [-p] filespec
 Print a listing of the files in the directory
 .IR filespec .
 The 
@@ -315,6 +339,11 @@
 The
 .I \-d
 flag will list deleted entries in the directory.
+The 
+.I \-p
+flag will list the files in a format which is more easily parsable by
+scripts, as well as making it more clear when there are spaces or other
+non-printing characters at the end of filenames.
 .TP
 .I modify_inode filespec
 Modify the contents of the inode structure in the inode
@@ -465,7 +494,7 @@
 command to link the inode to the destination pathname, or use 
 .B e2fsck
 to check the filesystem and link all of the recovered inodes to the
-lost+found dirctory.
+lost+found directory.
 .TP
 .I unlink pathname
 Remove the link specified by 
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
index a92933d..be95e20 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
@@ -4,7 +4,7 @@
  *
  * Copyright (C) 1993 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
- * 
+ *
  * Modifications by Robert Sanders <gt8134b@prism.gatech.edu>
  */
 
@@ -16,7 +16,7 @@
 #include <time.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
@@ -36,14 +36,17 @@
 #include <ext2fs/ext2_ext_attr.h>
 
 #include "../version.h"
+#include "jfs_user.h"
 
 extern ss_request_table debug_cmds;
+ss_request_table *extra_cmds;
+const char *debug_prog_name;
 
 ext2_filsys	current_fs = NULL;
 ext2_ino_t	root, cwd;
 
 static void open_filesystem(char *device, int open_flags, blk_t superblock,
-			    blk_t blocksize, int catastrophic, 
+			    blk_t blocksize, int catastrophic,
 			    char *data_filename)
 {
 	int	retval;
@@ -57,7 +60,7 @@
 
 	if (data_filename) {
 		if ((open_flags & EXT2_FLAG_IMAGE_FILE) == 0) {
-			com_err(device, 0, 
+			com_err(device, 0,
 				"The -d option is only valid when reading an e2image file");
 			current_fs = NULL;
 			return;
@@ -75,7 +78,7 @@
 			"opening read-only because of catastrophic mode");
 		open_flags &= ~EXT2_FLAG_RW;
 	}
-	
+
 	retval = ext2fs_open(device, open_flags, superblock, blocksize,
 			     unix_io_manager, &current_fs);
 	if (retval) {
@@ -102,7 +105,7 @@
 	if (data_io) {
 		retval = ext2fs_set_data_io(current_fs, data_io);
 		if (retval) {
-			com_err(device, retval, 
+			com_err(device, retval,
 				"while setting data source");
 			goto errout;
 		}
@@ -126,7 +129,7 @@
 	blk_t	blocksize = 0;
 	int	open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
 	char	*data_filename = 0;
-	
+
 	reset_getopt();
 	while ((c = getopt (argc, argv, "iwfecb:s:d:")) != EOF) {
 		switch (c) {
@@ -170,7 +173,7 @@
 	if (check_fs_not_open(argv[0]))
 		return;
 	open_filesystem(argv[optind], open_flags,
-			superblock, blocksize, catastrophic, 
+			superblock, blocksize, catastrophic,
 			data_filename);
 	return;
 
@@ -197,7 +200,7 @@
 static void close_filesystem(NOARGS)
 {
 	int	retval;
-	
+
 	if (current_fs->flags & EXT2_FLAG_IB_DIRTY) {
 		retval = ext2fs_write_inode_bitmap(current_fs);
 		if (retval)
@@ -217,8 +220,28 @@
 
 void do_close_filesys(int argc, char **argv)
 {
-	if (common_args_process(argc, argv, 1, 1, "close_filesys", "", 0))
+	int	c;
+
+	if (check_fs_open(argv[0]))
 		return;
+
+	reset_getopt();
+	while ((c = getopt (argc, argv, "a")) != EOF) {
+		switch (c) {
+		case 'a':
+			current_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
+			break;
+		default:
+			goto print_usage;
+		}
+	}
+
+	if (argc > optind) {
+	print_usage:
+		com_err(0, 0, "Usage: close_filesys [-a]");
+		return;
+	}
+
 	close_filesystem();
 }
 
@@ -227,7 +250,7 @@
 	struct ext2_super_block param;
 	errcode_t	retval;
 	int		err;
-	
+
 	if (common_args_process(argc, argv, 3, 3, "initialize",
 				"<device> <blocksize>", CHECK_FS_NOTOPEN))
 		return;
@@ -286,7 +309,7 @@
 	FILE 	*out;
 	struct ext2_group_desc *gdp;
 	int	c, header_only = 0;
-	int	numdirs = 0, first;
+	int	numdirs = 0, first, gdt_csum;
 
 	reset_getopt();
 	while ((c = getopt (argc, argv, "h")) != EOF) {
@@ -309,12 +332,14 @@
 	for (i=0; i < current_fs->group_desc_count; i++)
 		numdirs += current_fs->group_desc[i].bg_used_dirs_count;
 	fprintf(out, "Directories:              %d\n", numdirs);
-	
+
 	if (header_only) {
 		close_pager(out);
 		return;
 	}
-	
+
+	gdt_csum = EXT2_HAS_RO_COMPAT_FEATURE(current_fs->super,
+					      EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 	gdp = &current_fs->group_desc[0];
 	for (i = 0; i < current_fs->group_desc_count; i++, gdp++) {
 		fprintf(out, " Group %2d: block bitmap at %u, "
@@ -322,7 +347,7 @@
 		        "inode table at %u\n"
 		        "           %d free %s, "
 		        "%d free %s, "
-		        "%d used %s\n",
+		        "%d used %s%s",
 		        i, gdp->bg_block_bitmap,
 		        gdp->bg_inode_bitmap, gdp->bg_inode_table,
 		        gdp->bg_free_blocks_count,
@@ -331,12 +356,21 @@
 		        gdp->bg_free_inodes_count != 1 ? "inodes" : "inode",
 		        gdp->bg_used_dirs_count,
 		        gdp->bg_used_dirs_count != 1 ? "directories"
-				: "directory");
+				: "directory", gdt_csum ? ", " : "\n");
+		if (gdt_csum)
+			fprintf(out, "%d unused %s\n",
+				gdp->bg_itable_unused,
+				gdp->bg_itable_unused != 1 ? "inodes":"inode");
 		first = 1;
 		print_bg_opts(gdp, EXT2_BG_INODE_UNINIT, "Inode not init",
 			      &first, out);
 		print_bg_opts(gdp, EXT2_BG_BLOCK_UNINIT, "Block not init",
 			      &first, out);
+		if (gdt_csum) {
+			fprintf(out, "%sChecksum 0x%04x",
+				first ? "           [":", ", gdp->bg_checksum);
+			first = 0;
+		}
 		if (!first)
 			fputs("]\n", out);
 	}
@@ -346,7 +380,7 @@
 	fprintf(stderr, "%s: Usage: show_super [-h]\n", argv[0]);
 }
 
-void do_dirty_filesys(int argc EXT2FS_ATTR((unused)), 
+void do_dirty_filesys(int argc EXT2FS_ATTR((unused)),
 		      char **argv EXT2FS_ATTR((unused)))
 {
 	if (check_fs_open(argv[0]))
@@ -387,10 +421,10 @@
 	lb->first_block = 0;
 }
 
-static int list_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)), 
-			    blk_t *blocknr, e2_blkcnt_t blockcnt, 
+static int list_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)),
+			    blk_t *blocknr, e2_blkcnt_t blockcnt,
 			    blk_t ref_block EXT2FS_ATTR((unused)),
-			    int ref_offset EXT2FS_ATTR((unused)), 
+			    int ref_offset EXT2FS_ATTR((unused)),
 			    void *private)
 {
 	struct list_blocks_struct *lb = (struct list_blocks_struct *) private;
@@ -436,7 +470,7 @@
 {
 	int printable = 0;
 	int i;
-	
+
 	/* check: is string "printable enough?" */
 	for (i = 0; i < len; i++)
 		if (isprint(str[i]))
@@ -453,9 +487,9 @@
 			fprintf(out, "%02x ", (unsigned char)str[i]);
 }
 
-static void internal_dump_inode_extra(FILE *out, 
+static void internal_dump_inode_extra(FILE *out,
 				      const char *prefix EXT2FS_ATTR((unused)),
-				      ext2_ino_t inode_num EXT2FS_ATTR((unused)), 
+				      ext2_ino_t inode_num EXT2FS_ATTR((unused)),
 				      struct ext2_inode_large *inode)
 {
 	struct ext2_ext_attr_entry *entry;
@@ -489,7 +523,7 @@
 				return;
 			}
 			fprintf(out, "  ");
-			dump_xattr_string(out, EXT2_EXT_ATTR_NAME(entry), 
+			dump_xattr_string(out, EXT2_EXT_ATTR_NAME(entry),
 					  entry->e_name_len);
 			fprintf(out, " = \"");
 			dump_xattr_string(out, start + entry->e_value_offs,
@@ -509,7 +543,7 @@
 	lb.first_block = 0;
 	lb.f = f;
 	lb.first = 1;
-	ext2fs_block_iterate2(current_fs, inode, 0, NULL,
+	ext2fs_block_iterate2(current_fs, inode, BLOCK_FLAG_READ_ONLY, NULL,
 			     list_blocks_proc, (void *)&lb);
 	finish_range(&lb);
 	if (lb.total)
@@ -517,6 +551,139 @@
 	fprintf(f,"\n");
 }
 
+static int int_log10(unsigned long long arg)
+{
+	int     l = 0;
+
+	arg = arg / 10;
+	while (arg) {
+		l++;
+		arg = arg / 10;
+	}
+	return l;
+}
+
+#define DUMP_LEAF_EXTENTS	0x01
+#define DUMP_NODE_EXTENTS	0x02
+#define DUMP_EXTENT_TABLE	0x04
+
+static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
+			 int flags, int logical_width, int physical_width)
+{
+	ext2_extent_handle_t	handle;
+	struct ext2fs_extent	extent;
+	struct ext2_extent_info info;
+	int			op = EXT2_EXTENT_ROOT;
+	unsigned int		printed = 0;
+	errcode_t 		errcode;
+
+	errcode = ext2fs_extent_open(current_fs, ino, &handle);
+	if (errcode)
+		return;
+
+	if (flags & DUMP_EXTENT_TABLE)
+		fprintf(f, "Level Entries %*s %*s Length Flags\n",
+			(logical_width*2)+3, "Logical",
+			(physical_width*2)+3, "Physical");
+	else
+		fprintf(f, "%sEXTENTS:\n%s", prefix, prefix);
+
+	while (1) {
+		errcode = ext2fs_extent_get(handle, op, &extent);
+
+		if (errcode)
+			break;
+
+		op = EXT2_EXTENT_NEXT;
+
+		if (extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)
+			continue;
+
+		if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) {
+			if ((flags & DUMP_LEAF_EXTENTS) == 0)
+				continue;
+		} else {
+			if ((flags & DUMP_NODE_EXTENTS) == 0)
+				continue;
+		}
+
+		errcode = ext2fs_extent_get_info(handle, &info);
+		if (errcode)
+			continue;
+
+		if (!(extent.e_flags & EXT2_EXTENT_FLAGS_LEAF)) {
+			if (extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)
+				continue;
+
+			if (flags & DUMP_EXTENT_TABLE) {
+				fprintf(f, "%2d/%2d %3d/%3d %*llu - %*llu "
+					"%*llu%*s %6u\n",
+					info.curr_level, info.max_depth,
+					info.curr_entry, info.num_entries,
+					logical_width,
+					extent.e_lblk,
+					logical_width,
+					extent.e_lblk + (extent.e_len - 1),
+					physical_width,
+					extent.e_pblk,
+					physical_width+3, "", extent.e_len);
+				continue;
+			}
+
+			fprintf(f, "%s(NODE #%d, %lld-%lld, blk %lld)",
+				printed ? ", " : "",
+				info.curr_entry,
+				extent.e_lblk,
+				extent.e_lblk + (extent.e_len - 1),
+				extent.e_pblk);
+			printed = 1;
+			continue;
+		}
+
+		if (flags & DUMP_EXTENT_TABLE) {
+			fprintf(f, "%2d/%2d %3d/%3d %*llu - %*llu "
+				"%*llu - %*llu %6u %s\n",
+				info.curr_level, info.max_depth,
+				info.curr_entry, info.num_entries,
+				logical_width,
+				extent.e_lblk,
+				logical_width,
+				extent.e_lblk + (extent.e_len - 1),
+				physical_width,
+				extent.e_pblk,
+				physical_width,
+				extent.e_pblk + (extent.e_len - 1),
+				extent.e_len,
+				extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ?
+					"Uninit" : "");
+			continue;
+		}
+
+		if (extent.e_len == 0)
+			continue;
+		else if (extent.e_len == 1)
+			fprintf(f,
+				"%s(%lld%s): %lld",
+				printed ? ", " : "",
+				extent.e_lblk,
+				extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ?
+				" [uninit]" : "",
+				extent.e_pblk);
+		else
+			fprintf(f,
+				"%s(%lld-%lld%s): %lld-%lld",
+				printed ? ", " : "",
+				extent.e_lblk,
+				extent.e_lblk + (extent.e_len - 1),
+				extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ?
+					" [uninit]" : "",
+				extent.e_pblk,
+				extent.e_pblk + (extent.e_len - 1));
+		printed = 1;
+	}
+	if (printed)
+		fprintf(f, "\n");
+}
 
 void internal_dump_inode(FILE *out, const char *prefix,
 			 ext2_ino_t inode_num, struct ext2_inode *inode,
@@ -525,7 +692,13 @@
 	const char *i_type;
 	char frag, fsize;
 	int os = current_fs->super->s_creator_os;
-	
+	struct ext2_inode_large *large_inode;
+	int is_large_inode = 0;
+
+	if (EXT2_INODE_SIZE(current_fs->super) > EXT2_GOOD_OLD_INODE_SIZE)
+		is_large_inode = 1;
+	large_inode = (struct ext2_inode_large *) inode;
+
 	if (LINUX_S_ISDIR(inode->i_mode)) i_type = "directory";
 	else if (LINUX_S_ISREG(inode->i_mode)) i_type = "regular";
 	else if (LINUX_S_ISLNK(inode->i_mode)) i_type = "symlink";
@@ -535,9 +708,16 @@
 	else if (LINUX_S_ISSOCK(inode->i_mode)) i_type = "socket";
 	else i_type = "bad type";
 	fprintf(out, "%sInode: %u   Type: %s    ", prefix, inode_num, i_type);
-	fprintf(out, "%sMode:  %04o   Flags: 0x%x   Generation: %u\n",
-		prefix, 
-		inode->i_mode & 0777, inode->i_flags, inode->i_generation);
+	fprintf(out, "%sMode:  %04o   Flags: 0x%x\n",
+		prefix, inode->i_mode & 0777, inode->i_flags);
+	if (is_large_inode && large_inode->i_extra_isize >= 24) {
+		fprintf(out, "%sGeneration: %u    Version: 0x%08x:%08x\n",
+			prefix, inode->i_generation, large_inode->i_version_hi,
+			inode->osd1.linux1.l_i_version);
+	} else {
+		fprintf(out, "%sGeneration: %u    Version: 0x%08x\n", prefix,
+			inode->i_generation, inode->osd1.linux1.l_i_version);
+	}
 	fprintf(out, "%sUser: %5d   Group: %5d   Size: ",
 		prefix, inode_uid(*inode), inode_gid(*inode));
 	if (LINUX_S_ISREG(inode->i_mode)) {
@@ -554,14 +734,16 @@
 			inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0,
 			inode->osd1.hurd1.h_i_translator);
 	else
-		fprintf(out, "%sFile ACL: %d    Directory ACL: %d\n",
+		fprintf(out, "%sFile ACL: %llu    Directory ACL: %d\n",
 			prefix,
-			inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0);
-	if (os == EXT2_OS_LINUX) 
+			inode->i_file_acl | ((long long)
+				(inode->osd2.linux2.l_i_file_acl_high) << 32),
+			LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0);
+	if (os == EXT2_OS_LINUX)
 		fprintf(out, "%sLinks: %d   Blockcount: %llu\n",
-			prefix, inode->i_links_count, 
-			(((unsigned long long) 
-			  inode->osd2.linux2.l_i_blocks_hi << 32)) + 
+			prefix, inode->i_links_count,
+			(((unsigned long long)
+			  inode->osd2.linux2.l_i_blocks_hi << 32)) +
 			inode->i_blocks);
 	else
 		fprintf(out, "%sLinks: %d   Blockcount: %u\n",
@@ -571,22 +753,33 @@
 		frag = inode->osd2.hurd2.h_i_frag;
 		fsize = inode->osd2.hurd2.h_i_fsize;
 		break;
-	    case EXT2_OS_MASIX:
-		frag = inode->osd2.masix2.m_i_frag;
-		fsize = inode->osd2.masix2.m_i_fsize;
-		break;
 	    default:
 		frag = fsize = 0;
 	}
 	fprintf(out, "%sFragment:  Address: %d    Number: %d    Size: %d\n",
 		prefix, inode->i_faddr, frag, fsize);
-	fprintf(out, "%sctime: 0x%08x -- %s", prefix, inode->i_ctime,
-		time_to_string(inode->i_ctime));
-	fprintf(out, "%satime: 0x%08x -- %s", prefix, inode->i_atime,
-		time_to_string(inode->i_atime));
-	fprintf(out, "%smtime: 0x%08x -- %s", prefix, inode->i_mtime,
-		time_to_string(inode->i_mtime));
-	if (inode->i_dtime) 
+	if (is_large_inode && large_inode->i_extra_isize >= 24) {
+		fprintf(out, "%s ctime: 0x%08x:%08x -- %s", prefix,
+			inode->i_ctime, large_inode->i_ctime_extra,
+			time_to_string(inode->i_ctime));
+		fprintf(out, "%s atime: 0x%08x:%08x -- %s", prefix,
+			inode->i_atime, large_inode->i_atime_extra,
+			time_to_string(inode->i_atime));
+		fprintf(out, "%s mtime: 0x%08x:%08x -- %s", prefix,
+			inode->i_mtime, large_inode->i_mtime_extra,
+			time_to_string(inode->i_mtime));
+		fprintf(out, "%scrtime: 0x%08x:%08x -- %s", prefix,
+			large_inode->i_crtime, large_inode->i_crtime_extra,
+			time_to_string(large_inode->i_crtime));
+	} else {
+		fprintf(out, "%sctime: 0x%08x -- %s", prefix, inode->i_ctime,
+			time_to_string(inode->i_ctime));
+		fprintf(out, "%satime: 0x%08x -- %s", prefix, inode->i_atime,
+			time_to_string(inode->i_atime));
+		fprintf(out, "%smtime: 0x%08x -- %s", prefix, inode->i_mtime,
+			time_to_string(inode->i_mtime));
+	}
+	if (inode->i_dtime)
 	  fprintf(out, "%sdtime: 0x%08x -- %s", prefix, inode->i_dtime,
 		  time_to_string(inode->i_dtime));
 	if (EXT2_INODE_SIZE(current_fs->super) > EXT2_GOOD_OLD_INODE_SIZE)
@@ -605,21 +798,25 @@
 			devnote = "";
 		} else {
 			major = (inode->i_block[1] & 0xfff00) >> 8;
-			minor = ((inode->i_block[1] & 0xff) | 
+			minor = ((inode->i_block[1] & 0xff) |
 				 ((inode->i_block[1] >> 12) & 0xfff00));
 			devnote = "(New-style) ";
 		}
-		fprintf(out, "%sDevice major/minor number: %02d:%02d (hex %02x:%02x)\n", 
+		fprintf(out, "%sDevice major/minor number: %02d:%02d (hex %02x:%02x)\n",
 			devnote, major, minor, major, minor);
+	} else if (do_dump_blocks) {
+		if (inode->i_flags & EXT4_EXTENTS_FL)
+			dump_extents(out, prefix, inode_num,
+				     DUMP_LEAF_EXTENTS, 0, 0);
+		else
+			dump_blocks(out, prefix, inode_num);
 	}
-	else if (do_dump_blocks)
-		dump_blocks(out, prefix, inode_num);
 }
 
 static void dump_inode(ext2_ino_t inode_num, struct ext2_inode *inode)
 {
 	FILE	*out;
-	
+
 	out = open_pager();
 	internal_dump_inode(out, "", inode_num, inode, 1);
 	close_pager(out);
@@ -656,6 +853,69 @@
 	return;
 }
 
+void do_dump_extents(int argc, char *argv[])
+{
+	struct ext2_inode inode;
+	ext2_ino_t	ino;
+	FILE		*out;
+	int		c, flags = 0;
+	int		logical_width;
+	int		physical_width;
+
+	reset_getopt();
+	while ((c = getopt(argc, argv, "nl")) != EOF) {
+		switch (c) {
+		case 'n':
+			flags |= DUMP_NODE_EXTENTS;
+			break;
+		case 'l':
+			flags |= DUMP_LEAF_EXTENTS;
+			break;
+		}
+	}
+
+	if (argc != optind+1) {
+	print_usage:
+		com_err(0, 0, "Usage: dump_extents [-n] [-l] file");
+		return;
+	}
+
+	if (flags == 0)
+		flags = DUMP_NODE_EXTENTS | DUMP_LEAF_EXTENTS;
+	flags |= DUMP_EXTENT_TABLE;
+
+	if (check_fs_open(argv[0]))
+		return;
+
+	ino = string_to_inode(argv[optind]);
+	if (ino == 0)
+		return;
+
+	if (debugfs_read_inode(ino, &inode, argv[0]))
+		return;
+
+	if ((inode.i_flags & EXT4_EXTENTS_FL) == 0) {
+		fprintf(stderr, "%s: does not uses extent block maps\n",
+			argv[optind]);
+		return;
+	}
+
+	logical_width = int_log10(((inode.i_size |
+				    (__u64) inode.i_size_high << 32) +
+				   current_fs->blocksize - 1) /
+				  current_fs->blocksize) + 1;
+	if (logical_width < 5)
+		logical_width = 5;
+	physical_width = int_log10(current_fs->super->s_blocks_count) + 1;
+	if (physical_width < 5)
+		physical_width = 5;
+
+	out = open_pager();
+	dump_extents(out, "", ino, flags, logical_width, physical_width);
+	close_pager(out);
+	return;
+}
+
 void do_chroot(int argc, char *argv[])
 {
 	ext2_ino_t inode;
@@ -791,7 +1051,8 @@
 
 	sprintf(buf, format, *val);
 	printf("%30s    [%s] ", prompt, buf);
-	fgets(buf, sizeof(buf), stdin);
+	if (!fgets(buf, sizeof(buf), stdin))
+		return;
 	if (buf[strlen (buf) - 1] == '\n')
 		buf[strlen (buf) - 1] = '\0';
 	if (!buf[0])
@@ -812,7 +1073,8 @@
 
 	sprintf(buf, format, *val);
 	printf("%30s    [%s] ", prompt, buf);
-	fgets(buf, sizeof(buf), stdin);
+	if (!fgets(buf, sizeof(buf), stdin))
+		return;
 	if (buf[strlen (buf) - 1] == '\n')
 		buf[strlen (buf) - 1] = '\0';
 	if (!buf[0])
@@ -833,7 +1095,8 @@
 
 	sprintf(buf, format, *val);
 	printf("%30s    [%s] ", prompt, buf);
-	fgets(buf, sizeof(buf), stdin);
+	if (!fgets(buf, sizeof(buf), stdin))
+		return;
 	if (buf[strlen (buf) - 1] == '\n')
 		buf[strlen (buf) - 1] = '\0';
 	if (!buf[0])
@@ -858,7 +1121,7 @@
 	const char	*octal_format = "0%o";
 	const char	*decimal_format = "%d";
 	const char	*unsignedlong_format = "%lu";
-	
+
 	if (common_inode_args_process(argc, argv, &inode_num, CHECK_FS_RW))
 		return;
 
@@ -866,7 +1129,7 @@
 
 	if (debugfs_read_inode(inode_num, &inode, argv[1]))
 		return;
-	
+
 	modify_u16(argv[0], "Mode", octal_format, &inode.i_mode);
 	modify_u16(argv[0], "User ID", decimal_format, &inode.i_uid);
 	modify_u16(argv[0], "Group ID", decimal_format, &inode.i_gid);
@@ -877,7 +1140,7 @@
 	modify_u32(argv[0], "Deletion time", decimal_format, &inode.i_dtime);
 	modify_u16(argv[0], "Link count", decimal_format, &inode.i_links_count);
 	if (os == EXT2_OS_LINUX)
-		modify_u16(argv[0], "Block count high", unsignedlong_format, 
+		modify_u16(argv[0], "Block count high", unsignedlong_format,
 			   &inode.osd2.linux2.l_i_blocks_hi);
 	modify_u32(argv[0], "Block count", unsignedlong_format, &inode.i_blocks);
 	modify_u32(argv[0], "File flags", hex_format, &inode.i_flags);
@@ -894,17 +1157,13 @@
 	if (os == EXT2_OS_HURD)
 		modify_u32(argv[0], "Translator Block",
 			    decimal_format, &inode.osd1.hurd1.h_i_translator);
-	
+
 	modify_u32(argv[0], "Fragment address", decimal_format, &inode.i_faddr);
 	switch (os) {
 	    case EXT2_OS_HURD:
 		frag = &inode.osd2.hurd2.h_i_frag;
 		fsize = &inode.osd2.hurd2.h_i_fsize;
 		break;
-	    case EXT2_OS_MASIX:
-		frag = &inode.osd2.masix2.m_i_frag;
-		fsize = &inode.osd2.masix2.m_i_fsize;
-		break;
 	    default:
 		frag = fsize = 0;
 	}
@@ -918,7 +1177,7 @@
 		modify_u32(argv[0], buf, decimal_format, &inode.i_block[i]);
 	}
 	modify_u32(argv[0], "Indirect Block", decimal_format,
-		    &inode.i_block[EXT2_IND_BLOCK]);    
+		    &inode.i_block[EXT2_IND_BLOCK]);
 	modify_u32(argv[0], "Double Indirect Block", decimal_format,
 		    &inode.i_block[EXT2_DIND_BLOCK]);
 	modify_u32(argv[0], "Triple Indirect Block", decimal_format,
@@ -931,7 +1190,7 @@
 {
 	ext2_ino_t	inode;
 	int		retval;
-	
+
 	if (common_inode_args_process(argc, argv, &inode, 0))
 		return;
 
@@ -948,7 +1207,7 @@
 {
 	int	retval;
 	char	*pathname = NULL;
-	
+
 	if (common_args_process(argc, argv, 1, 1,
 				"print_working_directory", "", 0))
 		return;
@@ -988,22 +1247,22 @@
 
 	if (LINUX_S_ISDIR(mode))
 		return EXT2_FT_DIR;
-	
+
 	if (LINUX_S_ISCHR(mode))
 		return EXT2_FT_CHRDEV;
-	
+
 	if (LINUX_S_ISBLK(mode))
 		return EXT2_FT_BLKDEV;
-	
+
 	if (LINUX_S_ISLNK(mode))
 		return EXT2_FT_SYMLINK;
 
 	if (LINUX_S_ISFIFO(mode))
 		return EXT2_FT_FIFO;
-	
+
 	if (LINUX_S_ISSOCK(mode))
 		return EXT2_FT_SOCK;
-	
+
 	return 0;
 }
 
@@ -1013,7 +1272,7 @@
 	struct ext2_inode inode;
 	int		retval;
 	ext2_ino_t	dir;
-	char		*dest, *cp, *basename;
+	char		*dest, *cp, *base_name;
 
 	/*
 	 * Get the source inode
@@ -1021,17 +1280,17 @@
 	ino = string_to_inode(sourcename);
 	if (!ino)
 		return;
-	basename = strrchr(sourcename, '/');
-	if (basename)
-		basename++;
+	base_name = strrchr(sourcename, '/');
+	if (base_name)
+		base_name++;
 	else
-		basename = sourcename;
+		base_name = sourcename;
 	/*
 	 * Figure out the destination.  First see if it exists and is
-	 * a directory.  
+	 * a directory.
 	 */
 	if (! (retval=ext2fs_namei(current_fs, root, cwd, destname, &dir)))
-		dest = basename;
+		dest = base_name;
 	else {
 		/*
 		 * OK, it doesn't exist.  See if it is
@@ -1052,8 +1311,8 @@
 
 	if (debugfs_read_inode(ino, &inode, sourcename))
 		return;
-	
-	retval = ext2fs_link(current_fs, dir, dest, ino, 
+
+	retval = ext2fs_link(current_fs, dir, dest, ino,
 			     ext2_file_type(inode.i_mode));
 	if (retval)
 		com_err("make_link", retval, 0);
@@ -1071,7 +1330,7 @@
 }
 
 static int mark_blocks_proc(ext2_filsys fs, blk_t *blocknr,
-			    int blockcnt EXT2FS_ATTR((unused)), 
+			    int blockcnt EXT2FS_ATTR((unused)),
 			    void *private EXT2FS_ATTR((unused)))
 {
 	blk_t	block;
@@ -1105,7 +1364,7 @@
 
 	/*
 	 * XXX this function doesn't handle changing the links count on the
-	 * parent directory when undeleting a directory.  
+	 * parent directory when undeleting a directory.
 	 */
 	inode.i_links_count = LINUX_S_ISDIR(inode.i_mode) ? 2 : 1;
 	inode.i_dtime = 0;
@@ -1113,7 +1372,7 @@
 	if (debugfs_write_inode(ino, &inode, argv[0]))
 		return;
 
-	ext2fs_block_iterate(current_fs, ino, 0, NULL,
+	ext2fs_block_iterate(current_fs, ino, BLOCK_FLAG_READ_ONLY, NULL,
 			     mark_blocks_proc, NULL);
 
 	ext2fs_inode_alloc_stats2(current_fs, ino, +1, 0);
@@ -1126,19 +1385,19 @@
 {
 	int		retval;
 	ext2_ino_t	dir;
-	char		*basename;
-	
-	basename = strrchr(filename, '/');
-	if (basename) {
-		*basename++ = '\0';
+	char		*base_name;
+
+	base_name = strrchr(filename, '/');
+	if (base_name) {
+		*base_name++ = '\0';
 		dir = string_to_inode(filename);
 		if (!dir)
 			return;
 	} else {
 		dir = cwd;
-		basename = filename;
+		base_name = filename;
 	}
-	retval = ext2fs_unlink(current_fs, dir, basename, 0, 0);
+	retval = ext2fs_unlink(current_fs, dir, base_name, 0, 0);
 	if (retval)
 		com_err("unlink_file_by_name", retval, 0);
 	return;
@@ -1159,7 +1418,7 @@
  	int		count;
 	errcode_t	retval;
 	char		*tmp;
-	
+
 	if ((argc > 3) || (argc==2 && *argv[1] == '?')) {
 		com_err(argv[0], 0, "Usage: find_free_block [count [goal]]");
 		return;
@@ -1187,7 +1446,7 @@
 		goal = current_fs->super->s_first_data_block;
 
 	printf("Free blocks found: ");
-	free_blk = goal - 1;	
+	free_blk = goal - 1;
 	while (count-- > 0) {
 		retval = ext2fs_new_block(current_fs, free_blk + 1, 0,
 					  &free_blk);
@@ -1211,7 +1470,7 @@
 	int		mode;
 	int		retval;
 	char		*tmp;
-	
+
 	if (argc > 3 || (argc>1 && *argv[1] == '?')) {
 		com_err(argv[0], 0, "Usage: find_free_inode [dir] [mode]");
 		return;
@@ -1329,6 +1588,7 @@
 		retval = ext2fs_expand_dir(current_fs, cwd);
 		if (retval) {
 			com_err(argv[0], retval, "while expanding directory");
+			close(fd);
 			return;
 		}
 		retval = ext2fs_link(current_fs, cwd, argv[2], newfile,
@@ -1344,10 +1604,13 @@
 	ext2fs_inode_alloc_stats2(current_fs, newfile, +1, 0);
 	memset(&inode, 0, sizeof(inode));
 	inode.i_mode = (statbuf.st_mode & ~LINUX_S_IFMT) | LINUX_S_IFREG;
-	inode.i_atime = inode.i_ctime = inode.i_mtime = 
+	inode.i_atime = inode.i_ctime = inode.i_mtime =
 		current_fs->now ? current_fs->now : time(0);
 	inode.i_links_count = 1;
 	inode.i_size = statbuf.st_size;
+	if (current_fs->super->s_feature_incompat &
+	    EXT3_FEATURE_INCOMPAT_EXTENTS)
+		inode.i_flags |= EXT4_EXTENTS_FL;
 	if (debugfs_write_new_inode(newfile, &inode, argv[0])) {
 		close(fd);
 		return;
@@ -1432,7 +1695,7 @@
 	ext2fs_mark_ib_dirty(current_fs);
 	memset(&inode, 0, sizeof(inode));
 	inode.i_mode = mode;
-	inode.i_atime = inode.i_ctime = inode.i_mtime = 
+	inode.i_atime = inode.i_ctime = inode.i_mtime =
 		current_fs->now ? current_fs->now : time(0);
 	if ((major < 256) && (minor < 256)) {
 		inode.i_block[0] = major*256+minor;
@@ -1476,7 +1739,7 @@
 	if (retval == EXT2_ET_DIR_NO_SPACE) {
 		retval = ext2fs_expand_dir(current_fs, parent);
 		if (retval) {
-			com_err("argv[0]", retval, "while expanding directory");
+			com_err(argv[0], retval, "while expanding directory");
 			return;
 		}
 		goto try_again;
@@ -1489,7 +1752,7 @@
 }
 
 static int release_blocks_proc(ext2_filsys fs, blk_t *blocknr,
-			       int blockcnt EXT2FS_ATTR((unused)), 
+			       int blockcnt EXT2FS_ATTR((unused)),
 			       void *private EXT2FS_ATTR((unused)))
 {
 	blk_t	block;
@@ -1511,7 +1774,7 @@
 	if (!ext2fs_inode_has_valid_blocks(&inode_buf))
 		return;
 
-	ext2fs_block_iterate(current_fs, inode, 0, NULL,
+	ext2fs_block_iterate(current_fs, inode, BLOCK_FLAG_READ_ONLY, NULL,
 			     release_blocks_proc, NULL);
 	printf("\n");
 	ext2fs_inode_alloc_stats2(current_fs, inode, -1,
@@ -1589,7 +1852,7 @@
 	rds->empty = 0;
 	return 0;
 }
-	
+
 void do_rmdir(int argc, char *argv[])
 {
 	int retval;
@@ -1646,7 +1909,7 @@
 	}
 }
 
-void do_show_debugfs_params(int argc EXT2FS_ATTR((unused)), 
+void do_show_debugfs_params(int argc EXT2FS_ATTR((unused)),
 			    char *argv[] EXT2FS_ATTR((unused)))
 {
 	FILE *out = stdout;
@@ -1675,7 +1938,7 @@
 void do_features(int argc, char *argv[])
 {
 	int	i;
-	
+
 	if (check_fs_open(argv[0]))
 		return;
 
@@ -1698,7 +1961,7 @@
 	blk_t		blk, pblk;
 	int		err;
 	errcode_t	errcode;
-	
+
 	if (common_args_process(argc, argv, 3, 3, argv[0],
 				"<file> logical_blk", 0))
 		return;
@@ -1738,7 +2001,7 @@
 			group);
 		return;
 	}
-	block_nr = current_fs->group_desc[(unsigned)group].bg_inode_table + 
+	block_nr = current_fs->group_desc[(unsigned)group].bg_inode_table +
 		block;
 	offset &= (EXT2_BLOCK_SIZE(current_fs->super) - 1);
 
@@ -1768,6 +2031,71 @@
 	}
 }
 
+static int find_supp_feature(__u32 *supp, int feature_type, char *name)
+{
+	int compat, bit, ret;
+	unsigned int feature_mask;
+
+	if (name) {
+		if (feature_type == E2P_FS_FEATURE)
+			ret = e2p_string2feature(name, &compat, &feature_mask);
+		else
+			ret = e2p_jrnl_string2feature(name, &compat,
+						      &feature_mask);
+		if (ret)
+			return ret;
+
+		if (!(supp[compat] & feature_mask))
+			return 1;
+	} else {
+	        for (compat = 0; compat < 3; compat++) {
+		        for (bit = 0, feature_mask = 1; bit < 32;
+			     bit++, feature_mask <<= 1) {
+			        if (supp[compat] & feature_mask) {
+					if (feature_type == E2P_FS_FEATURE)
+						fprintf(stdout, " %s",
+						e2p_feature2string(compat,
+						feature_mask));
+					else
+						fprintf(stdout, " %s",
+						e2p_jrnl_feature2string(compat,
+						feature_mask));
+				}
+	        	}
+		}
+	        fprintf(stdout, "\n");
+	}
+
+	return 0;
+}
+
+void do_supported_features(int argc, char *argv[])
+{
+        int	ret;
+	__u32	supp[3] = { EXT2_LIB_FEATURE_COMPAT_SUPP,
+			    EXT2_LIB_FEATURE_INCOMPAT_SUPP,
+			    EXT2_LIB_FEATURE_RO_COMPAT_SUPP };
+	__u32	jrnl_supp[3] = { JFS_KNOWN_COMPAT_FEATURES,
+				 JFS_KNOWN_INCOMPAT_FEATURES,
+				 JFS_KNOWN_ROCOMPAT_FEATURES };
+
+	if (argc > 1) {
+		ret = find_supp_feature(supp, E2P_FS_FEATURE, argv[1]);
+		if (ret) {
+			ret = find_supp_feature(jrnl_supp, E2P_JOURNAL_FEATURE,
+						argv[1]);
+		}
+		if (ret)
+			com_err(argv[0], 0, "Unknown feature: %s\n", argv[1]);
+		else
+			fprintf(stdout, "Supported feature: %s\n", argv[1]);
+	} else {
+		fprintf(stdout, "Supported features:");
+		ret = find_supp_feature(supp, E2P_FS_FEATURE, NULL);
+		ret = find_supp_feature(jrnl_supp, E2P_JOURNAL_FEATURE, NULL);
+	}
+}
+
 static int source_file(const char *cmd_file, int sci_idx)
 {
 	FILE		*f;
@@ -1785,6 +2113,8 @@
 			exit(1);
 		}
 	}
+	fflush(stdout);
+	fflush(stderr);
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	while (!feof(f)) {
@@ -1803,6 +2133,8 @@
 			exit_status++;
 		}
 	}
+	if (f != stdin)
+		fclose(f);
 	return exit_status;
 }
 
@@ -1810,7 +2142,7 @@
 {
 	int		retval;
 	int		sci_idx;
-	const char	*usage = "Usage: debugfs [-b blocksize] [-s superblock] [-f cmd_file] [-R request] [-V] [[-w] [-c] device]";
+	const char	*usage = "Usage: %s [-b blocksize] [-s superblock] [-f cmd_file] [-R request] [-V] [[-w] [-c] device]";
 	int		c;
 	int		open_flags = EXT2_FLAG_SOFTSUPP_FEATURES;
 	char		*request = 0;
@@ -1820,10 +2152,13 @@
 	blk_t		blocksize = 0;
 	int		catastrophic = 0;
 	char		*data_filename = 0;
-	
+
+	if (debug_prog_name == 0)
+		debug_prog_name = "debugfs";
+
 	add_error_table(&et_ext2_error_table);
-	fprintf (stderr, "debugfs %s (%s)\n", E2FSPROGS_VERSION,
-		 E2FSPROGS_DATE);
+	fprintf (stderr, "%s %s (%s)\n", debug_prog_name,
+		 E2FSPROGS_VERSION, E2FSPROGS_DATE);
 
 	while ((c = getopt (argc, argv, "iwcR:f:b:s:Vd:")) != EOF) {
 		switch (c) {
@@ -1843,11 +2178,11 @@
 			open_flags |= EXT2_FLAG_RW;
 			break;
 		case 'b':
-			blocksize = parse_ulong(optarg, argv[0], 
+			blocksize = parse_ulong(optarg, argv[0],
 						"block size", 0);
 			break;
 		case 's':
-			superblock = parse_ulong(optarg, argv[0], 
+			superblock = parse_ulong(optarg, argv[0],
 						 "superblock number", 0);
 			break;
 		case 'c':
@@ -1859,7 +2194,7 @@
 				error_message(EXT2_ET_BASE));
 			exit(0);
 		default:
-			com_err(argv[0], 0, usage);
+			com_err(argv[0], 0, usage, debug_prog_name);
 			return 1;
 		}
 	}
@@ -1867,8 +2202,8 @@
 		open_filesystem(argv[optind], open_flags,
 				superblock, blocksize, catastrophic,
 				data_filename);
-	
-	sci_idx = ss_create_invocation("debugfs", "0.0", (char *) NULL,
+
+	sci_idx = ss_create_invocation(debug_prog_name, "0.0", (char *) NULL,
 				       &debug_cmds, &retval);
 	if (retval) {
 		ss_perror(sci_idx, retval, "creating invocation");
@@ -1881,6 +2216,12 @@
 		ss_perror(sci_idx, retval, "adding standard requests");
 		exit (1);
 	}
+	if (extra_cmds)
+		ss_add_request_table (sci_idx, extra_cmds, 1, &retval);
+	if (retval) {
+		ss_perror(sci_idx, retval, "adding extra requests");
+		exit (1);
+	}
 	if (request) {
 		retval = 0;
 		retval = ss_execute_line(sci_idx, request);
@@ -1894,9 +2235,11 @@
 		ss_listen(sci_idx);
 	}
 
+	ss_delete_invocation(sci_idx);
+
 	if (current_fs)
 		close_filesystem();
-	
+
 	remove_error_table(&et_ext2_error_table);
 	return exit_status;
 }
diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h
index d72c7ac..bbfa760 100644
--- a/debugfs/debugfs.h
+++ b/debugfs/debugfs.h
@@ -78,12 +78,13 @@
 /* set_fields.c */
 extern void do_set_super(int argc, char **);
 extern void do_set_inode(int argc, char **);
+extern void do_set_block_group_descriptor(int argc, char **);
 
 /* unused.c */
 extern void do_dump_unused(int argc, char **argv);
 
 /* debugfs.c */
-extern void internal_dump_inode(FILE *, const char *, ext2_ino_t, 
+extern void internal_dump_inode(FILE *, const char *, ext2_ino_t,
 				struct ext2_inode *, int);
 
 extern void do_dirty_filesys(int argc, char **argv);
@@ -123,4 +124,5 @@
 extern void do_bmap(int argc, char **argv);
 extern void do_imap(int argc, char **argv);
 extern void do_set_current_time(int argc, char **argv);
+extern void do_supported_features(int argc, char **argv);
 
diff --git a/debugfs/dump.c b/debugfs/dump.c
index 2cfe623..ab0d68b 100644
--- a/debugfs/dump.c
+++ b/debugfs/dump.c
@@ -1,6 +1,6 @@
 /*
  * dump.c --- dump the contents of an inode out to a file
- * 
+ *
  * Copyright (C) 1994 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -22,7 +22,7 @@
 #include <utime.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
@@ -51,7 +51,7 @@
 	{ LINUX_S_IXOTH, S_IXOTH },
 	{ 0, 0 }
 };
- 
+
 static mode_t mode_xlate(__u16 lmode)
 {
 	mode_t	mode = 0;
@@ -106,7 +106,7 @@
 	ext2_file_t	e2_file;
 	int		nbytes;
 	unsigned int	got;
-	
+
 	if (debugfs_read_inode(ino, &inode, cmdname))
 		return;
 
@@ -117,7 +117,7 @@
 	}
 	while (1) {
 		retval = ext2fs_file_read(e2_file, buf, sizeof(buf), &got);
-		if (retval) 
+		if (retval)
 			com_err(cmdname, retval, "while reading ext2 file");
 		if (got == 0)
 			break;
@@ -130,12 +130,12 @@
 		com_err(cmdname, retval, "while closing ext2 file");
 		return;
 	}
-		
+
 	if (preserve)
 		fix_perms("dump_file", &inode, fd, outname);
 	else if (fd != 1)
 		close(fd);
-				    
+
 	return;
 }
 
@@ -145,9 +145,8 @@
 	int		fd;
 	int		c;
 	int		preserve = 0;
-	const char *dump_usage = "Usage: dump_inode [-p] <file> <output_file>";
 	char		*in_fn, *out_fn;
-	
+
 	reset_getopt();
 	while ((c = getopt (argc, argv, "p")) != EOF) {
 		switch (c) {
@@ -155,14 +154,14 @@
 			preserve++;
 			break;
 		default:
-			com_err(argv[0], 0, dump_usage);
+		print_usage:
+			com_err(argv[0], 0, "Usage: dump_inode [-p] "
+				"<file> <output_file>");
 			return;
 		}
 	}
-	if (optind != argc-2) {
-		com_err(argv[0], 0, dump_usage);
-		return;
-	}
+	if (optind != argc-2)
+		goto print_usage;
 
 	if (check_fs_open(argv[0]))
 		return;
@@ -171,7 +170,7 @@
 	out_fn = argv[optind+1];
 
 	inode = string_to_inode(in_fn);
-	if (!inode) 
+	if (!inode)
 		return;
 
 	fd = open(out_fn, O_CREAT | O_WRONLY | O_TRUNC | O_LARGEFILE, 0666);
@@ -289,7 +288,7 @@
 	free(fullname);
 }
 
-static int rdump_dirent(struct ext2_dir_entry *dirent, 
+static int rdump_dirent(struct ext2_dir_entry *dirent,
 			int offset EXT2FS_ATTR((unused)),
 			int blocksize EXT2FS_ATTR((unused)),
 			char *buf EXT2FS_ATTR((unused)), void *private)
@@ -360,7 +359,7 @@
 
 	fflush(stdout);
 	fflush(stderr);
-	dump_file(argv[0], inode, 1, 0, argv[2]); 
+	dump_file(argv[0], inode, 1, 0, argv[2]);
 
 	return;
 }
diff --git a/debugfs/htree.c b/debugfs/htree.c
index d0e673e..77dc88b 100644
--- a/debugfs/htree.c
+++ b/debugfs/htree.c
@@ -1,6 +1,6 @@
 /*
  * htree.c --- hash tree routines
- * 
+ *
  * Copyright (C) 2002 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -17,12 +17,14 @@
 #include <sys/types.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
 
 #include "debugfs.h"
+#include "uuid/uuid.h"
+#include "e2p/e2p.h"
 
 static FILE *pager;
 
@@ -38,9 +40,10 @@
 	char		name[EXT2_NAME_LEN + 1];
 	char		tmp[EXT2_NAME_LEN + 16];
 	blk_t		pblk;
-	ext2_dirhash_t 	hash;
+	ext2_dirhash_t 	hash, minor_hash;
+	unsigned int	rec_len;
 	int		hash_alg;
-	
+
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
@@ -48,10 +51,13 @@
 		return;
 	}
 
+	printf("Reading directory block %lu, phys %lu\n",
+	       (unsigned long) blk, (unsigned long) pblk);
 	errcode = ext2fs_read_dir_block2(current_fs, pblk, buf, 0);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
-			"while 	reading block %u\n", blk);
+			"while reading block %lu (%lu)\n",
+			(unsigned long) blk, (unsigned long) pblk);
 		return;
 	}
 	hash_alg = rootnode->hash_version;
@@ -61,10 +67,17 @@
 
 	while (offset < fs->blocksize) {
 		dirent = (struct ext2_dir_entry *) (buf + offset);
-		if (((offset + dirent->rec_len) > fs->blocksize) ||
-		    (dirent->rec_len < 8) ||
-		    ((dirent->rec_len % 4) != 0) ||
-		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
+		errcode = ext2fs_get_rec_len(fs, dirent, &rec_len);
+		if (errcode) {
+			com_err("htree_dump_leaf_inode", errcode,
+				"while getting rec_len for block %lu",
+				(unsigned long) blk);
+			return;
+		}
+		if (((offset + rec_len) > fs->blocksize) ||
+		    (rec_len < 8) ||
+		    ((rec_len % 4) != 0) ||
+		    ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len)) {
 			fprintf(pager, "Corrupted directory block (%u)!\n", blk);
 			break;
 		}
@@ -74,12 +87,12 @@
 		name[thislen] = '\0';
 		errcode = ext2fs_dirhash(hash_alg, name,
 					 thislen, fs->super->s_hash_seed,
-					 &hash, 0);
+					 &hash, &minor_hash);
 		if (errcode)
 			com_err("htree_dump_leaf_node", errcode,
 				"while calculating hash");
-		sprintf(tmp, "%u 0x%08x (%d) %s   ", dirent->inode,
-			hash, dirent->rec_len, name);
+		sprintf(tmp, "%u 0x%08x-%08x (%d) %s   ", dirent->inode,
+			hash, minor_hash, rec_len, name);
 		thislen = strlen(tmp);
 		if (col + thislen > 80) {
 			fprintf(pager, "\n");
@@ -87,7 +100,7 @@
 		}
 		fprintf(pager, "%s", tmp);
 		col += thislen;
-		offset += dirent->rec_len;
+		offset += rec_len;
 	}
 	fprintf(pager, "\n");
 }
@@ -102,13 +115,13 @@
 static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino,
 				struct ext2_inode *inode,
 				struct ext2_dx_root_info * rootnode,
-				struct ext2_dx_entry *ent, 
+				struct ext2_dx_entry *ent,
 				char *buf, int level)
 {
 	struct ext2_dx_countlimit	limit;
 	struct ext2_dx_entry		e;
 	int				hash, i;
-	
+
 
 	limit = *((struct ext2_dx_countlimit *) ent);
 	limit.count = ext2fs_le16_to_cpu(limit.count);
@@ -156,7 +169,7 @@
 		fprintf(pager, "Couldn't allocate child block.\n");
 		return;
 	}
-	
+
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_int_block", errcode,
@@ -186,6 +199,7 @@
 	struct ext2_inode inode;
 	int		c;
 	int		long_opt = 0;
+	blk_t		blk;
 	char		*buf = NULL;
 	struct 		ext2_dx_root_info  *rootnode;
 	struct 		ext2_dx_entry *ent;
@@ -228,7 +242,7 @@
 		com_err(argv[0], 0, "Not a directory");
 		goto errout;
 	}
-	
+
 	if ((inode.i_flags & EXT2_BTREE_FL) == 0) {
 		com_err(argv[0], 0, "Not a hash-indexed directory");
 		goto errout;
@@ -240,7 +254,14 @@
 		goto errout;
 	}
 
-	errcode = io_channel_read_blk(current_fs->io, inode.i_block[0], 
+	errcode = ext2fs_bmap(current_fs, ino, &inode, buf, 0, 0, &blk);
+	if (errcode) {
+		com_err("do_htree_block", errcode,
+			"while mapping logical block 0\n");
+		goto errout;
+	}
+
+	errcode = io_channel_read_blk(current_fs->io, blk,
 				      1, buf);
 	if (errcode) {
 		com_err(argv[0], errcode, "Error reading root node");
@@ -264,8 +285,7 @@
 			    rootnode->indirect_levels);
 
 errout:
-	if (buf)
-		free(buf);
+	free(buf);
 	close_pager(pager);
 }
 
@@ -279,14 +299,23 @@
 	int		c;
 	int		hash_version = 0;
 	__u32		hash_seed[4];
-	
+
 	hash_seed[0] = hash_seed[1] = hash_seed[2] = hash_seed[3] = 0;
 
 	reset_getopt();
-	while ((c = getopt (argc, argv, "h:")) != EOF) {
+	while ((c = getopt (argc, argv, "h:s:")) != EOF) {
 		switch (c) {
 		case 'h':
-			hash_version = atoi(optarg);
+			hash_version = e2p_string2hash(optarg);
+			if (hash_version < 0)
+				hash_version = atoi(optarg);
+			break;
+		case 's':
+			if (uuid_parse(optarg, (unsigned char *) hash_seed)) {
+				fprintf(stderr, "Invalid UUID format: %s\n",
+					optarg);
+				return;
+			}
 			break;
 		default:
 			goto print_usage;
@@ -294,7 +323,8 @@
 	}
 	if (optind != argc-1) {
 	print_usage:
-		com_err(argv[0], 0, "usage: dx_hash filename");
+		com_err(argv[0], 0, "usage: dx_hash [-h hash_alg] "
+			"[-s hash_seed] filename");
 		return;
 	}
 	err = ext2fs_dirhash(hash_version, argv[optind], strlen(argv[optind]),
@@ -319,14 +349,14 @@
 };
 
 static int search_dir_block(ext2_filsys fs, blk_t *blocknr,
-			    e2_blkcnt_t blockcnt, blk_t ref_blk, 
+			    e2_blkcnt_t blockcnt, blk_t ref_blk,
 			    int ref_offset, void *priv_data);
 
 void do_dirsearch(int argc, char *argv[])
 {
 	ext2_ino_t	inode;
 	struct process_block_struct pb;
-	
+
 	if (check_fs_open(argv[0]))
 		return;
 
@@ -346,15 +376,16 @@
 	}
 	pb.search_name = argv[2];
 	pb.len = strlen(pb.search_name);
-	
-	ext2fs_block_iterate2(current_fs, inode, 0, 0, search_dir_block, &pb);
+
+	ext2fs_block_iterate2(current_fs, inode, BLOCK_FLAG_READ_ONLY, 0,
+			      search_dir_block, &pb);
 
 	free(pb.buf);
 }
 
 
 static int search_dir_block(ext2_filsys fs, blk_t *blocknr,
-			    e2_blkcnt_t blockcnt, 
+			    e2_blkcnt_t blockcnt,
 			    blk_t ref_blk EXT2FS_ATTR((unused)),
 			    int ref_offset EXT2FS_ATTR((unused)),
 			    void *priv_data)
@@ -363,6 +394,7 @@
 	struct ext2_dir_entry *dirent;
 	errcode_t	       	errcode;
 	unsigned int		offset = 0;
+	unsigned int		rec_len;
 
 	if (blockcnt < 0)
 		return 0;
@@ -378,9 +410,15 @@
 
 	while (offset < fs->blocksize) {
 		dirent = (struct ext2_dir_entry *) (p->buf + offset);
-
+		errcode = ext2fs_get_rec_len(fs, dirent, &rec_len);
+		if (errcode) {
+			com_err("htree_dump_leaf_inode", errcode,
+				"while getting rec_len for block %lu",
+				(unsigned long) *blocknr);
+			return BLOCK_ABORT;
+		}
 		if (dirent->inode &&
-		    p->len == (dirent->name_len & 0xFF) && 
+		    p->len == (dirent->name_len & 0xFF) &&
 		    strncmp(p->search_name, dirent->name,
 			    p->len) == 0) {
 			printf("Entry found at logical block %lld, "
@@ -389,7 +427,7 @@
 			printf("offset %u\n", offset);
 			return BLOCK_ABORT;
 		}
-		offset += dirent->rec_len;
+		offset += rec_len;
 	}
 	return 0;
 }
diff --git a/debugfs/icheck.c b/debugfs/icheck.c
index a6b182d..4b090a9 100644
--- a/debugfs/icheck.c
+++ b/debugfs/icheck.c
@@ -1,6 +1,6 @@
 /*
  * icheck.c --- given a list of blocks, generate a list of inodes
- * 
+ *
  * Copyright (C) 1994 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -48,7 +48,7 @@
 	}
 	if (!bw->blocks_left)
 		return BLOCK_ABORT;
-	
+
 	return 0;
 }
 
@@ -62,7 +62,7 @@
 	struct ext2_inode	inode;
 	errcode_t		retval;
 	char			*block_buf;
-	
+
 	if (argc < 2) {
 		com_err(argv[0], 0, "Usage: icheck <block number> ...");
 		return;
@@ -104,7 +104,7 @@
 		com_err("icheck", retval, "while starting inode scan");
 		goto error_out;
 	}
-	
+
 	while (ino) {
 		if (!inode.i_links_count)
 			goto next;
@@ -127,7 +127,8 @@
 		if (inode.i_dtime)
 			goto next;
 
-		retval = ext2fs_block_iterate2(current_fs, ino, 0, block_buf,
+		retval = ext2fs_block_iterate2(current_fs, ino,
+					       BLOCK_FLAG_READ_ONLY, block_buf,
 					       icheck_proc, &bw);
 		if (retval) {
 			com_err("icheck", retval,
@@ -160,8 +161,7 @@
 
 error_out:
 	free(bw.barray);
-	if (block_buf)
-		free(block_buf);
+	free(block_buf);
 	if (scan)
 		ext2fs_close_inode_scan(scan);
 	return;
diff --git a/debugfs/logdump.c b/debugfs/logdump.c
index 2bf67b5..9364ce4 100644
--- a/debugfs/logdump.c
+++ b/debugfs/logdump.c
@@ -1,11 +1,11 @@
 /*
  * logdump.c --- dump the contents of the journal out to a file
- * 
+ *
  * Authro: Stephen C. Tweedie, 2001  <sct@redhat.com>
  * Copyright (C) 2001 Red Hat, Inc.
- * Based on portions  Copyright (C) 1994 Theodore Ts'o.  
+ * Based on portions  Copyright (C) 1994 Theodore Ts'o.
  *
- * This file may be redistributed under the terms of the GNU Public 
+ * This file may be redistributed under the terms of the GNU Public
  * License.
  */
 
@@ -24,7 +24,7 @@
 #include <utime.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
@@ -36,14 +36,14 @@
 
 enum journal_location {JOURNAL_IS_INTERNAL, JOURNAL_IS_EXTERNAL};
 
-#define ANY_BLOCK ((unsigned int) -1)
+#define ANY_BLOCK ((blk_t) -1)
 
 int		dump_all, dump_contents, dump_descriptors;
-unsigned int	block_to_dump, group_to_dump, bitmap_to_dump;
-unsigned int	inode_block_to_dump, inode_offset_to_dump, bitmap_to_dump;
+blk_t		block_to_dump, bitmap_to_dump, inode_block_to_dump;
+unsigned int	group_to_dump, inode_offset_to_dump;
 ext2_ino_t	inode_to_dump;
 
-struct journal_source 
+struct journal_source
 {
 	enum journal_location where;
 	int fd;
@@ -60,8 +60,9 @@
 				  unsigned int, int, tid_t);
 
 static void dump_metadata_block(FILE *, struct journal_source *,
-				journal_superblock_t*, 
-				unsigned int, unsigned int, int, tid_t);
+				journal_superblock_t*,
+				unsigned int, unsigned int, unsigned int,
+				int, tid_t);
 
 static void do_hexdump (FILE *, char *, int);
 
@@ -76,7 +77,7 @@
 	int		retval;
 	char		*out_fn;
 	FILE		*out_file;
-	
+
 	char		*inode_spec = NULL;
 	char		*journal_fn = NULL;
 	int		journal_fd = 0;
@@ -87,8 +88,8 @@
 	char		*tmp;
 	struct journal_source journal_source;
 	struct ext2_super_block *es = NULL;
-	
-	journal_source.where = 0;
+
+	journal_source.where = JOURNAL_IS_INTERNAL;
 	journal_source.fd = 0;
 	journal_source.file = 0;
 	dump_all = 0;
@@ -98,7 +99,7 @@
 	bitmap_to_dump = -1;
 	inode_block_to_dump = ANY_BLOCK;
 	inode_to_dump = -1;
-	
+
 	reset_getopt();
 	while ((c = getopt (argc, argv, "ab:ci:f:s")) != EOF) {
 		switch (c) {
@@ -152,11 +153,11 @@
 			       / es->s_inodes_per_group);
 		group_offset = ((inode_to_dump - 1)
 				% es->s_inodes_per_group);
-		inodes_per_block = (current_fs->blocksize 
+		inodes_per_block = (current_fs->blocksize
 				    / sizeof(struct ext2_inode));
-		
-		inode_block_to_dump = 
-			current_fs->group_desc[inode_group].bg_inode_table + 
+
+		inode_block_to_dump =
+			current_fs->group_desc[inode_group].bg_inode_table +
 			(group_offset / inodes_per_block);
 		inode_offset_to_dump = ((group_offset % inodes_per_block)
 					* sizeof(struct ext2_inode));
@@ -178,7 +179,7 @@
 	}
 
 	if (block_to_dump != ANY_BLOCK && current_fs != NULL) {
-		group_to_dump = ((block_to_dump - 
+		group_to_dump = ((block_to_dump -
 				  es->s_first_data_block)
 				 / es->s_blocks_per_group);
 		bitmap_to_dump = current_fs->group_desc[group_to_dump].bg_block_bitmap;
@@ -195,7 +196,7 @@
 				journal_fn);
 			goto errout;
 		}
-		
+
 		journal_source.where = JOURNAL_IS_EXTERNAL;
 		journal_source.fd = journal_fd;
 	} else if ((journal_inum = es->s_journal_inum)) {
@@ -206,17 +207,17 @@
 				goto errout;
 			}
 			memset(&journal_inode, 0, sizeof(struct ext2_inode));
-			memcpy(&journal_inode.i_block[0], es->s_jnl_blocks, 
+			memcpy(&journal_inode.i_block[0], es->s_jnl_blocks,
 			       EXT2_N_BLOCKS*4);
 			journal_inode.i_size = es->s_jnl_blocks[16];
 			journal_inode.i_links_count = 1;
 			journal_inode.i_mode = LINUX_S_IFREG | 0600;
 		} else {
-			if (debugfs_read_inode(journal_inum, &journal_inode, 
+			if (debugfs_read_inode(journal_inum, &journal_inode,
 					       argv[0]))
 				goto errout;
 		}
-		
+
 		retval = ext2fs_file_open2(current_fs, journal_inum,
 					   &journal_inode, 0, &journal_file);
 		if (retval) {
@@ -227,7 +228,7 @@
 		journal_source.file = journal_file;
 	} else {
 		char uuid[37];
-		
+
 		uuid_unparse(es->s_journal_uuid, uuid);
 		journal_fn = blkid_get_devname(NULL, "UUID", uuid);
 		if (!journal_fn)
@@ -258,23 +259,23 @@
 		close(journal_fd);
 
 errout:
-	if (out_file != stdout)
+	if (out_file && (out_file != stdout))
 		fclose(out_file);
 
 	return;
 
 print_usage:
-	fprintf(stderr, "%s: Usage: logdump [-ac] [-b<block>] [-i<inode>]\n\t"
+	fprintf(stderr, "%s: Usage: logdump [-acs] [-b<block>] [-i<filespec>]\n\t"
 		"[-f<journal_file>] [output_file]\n", argv[0]);
 }
 
 
-static int read_journal_block(const char *cmd, struct journal_source *source, 
+static int read_journal_block(const char *cmd, struct journal_source *source,
 			      off_t offset, char *buf, int size,
 			      unsigned int *got)
 {
 	int retval;
-	
+
 	if (source->where == JOURNAL_IS_EXTERNAL) {
 		if (lseek(source->fd, offset, SEEK_SET) < 0) {
 			retval = errno;
@@ -288,23 +289,24 @@
 		} else
 			retval = errno;
 	} else {
-		retval = ext2fs_file_lseek(source->file, offset, 
+		retval = ext2fs_file_lseek(source->file, offset,
 					   EXT2_SEEK_SET, NULL);
 		if (retval) {
 			com_err(cmd, retval, "while seeking in reading journal");
 			return retval;
 		}
-		
+
 		retval = ext2fs_file_read(source->file, buf, size, got);
 	}
-	
+
 	if (retval)
-		com_err(cmd, retval, "while while reading journal");
+		com_err(cmd, retval, "while reading journal");
 	else if (*got != (unsigned int) size) {
-		com_err(cmd, 0, "short read (read %d, expected %d) while while reading journal", *got, size);
+		com_err(cmd, 0, "short read (read %d, expected %d) "
+			"while reading journal", *got, size);
 		retval = -1;
 	}
-	
+
 	return retval;
 }
 
@@ -326,7 +328,7 @@
 }
 
 
-static void dump_journal(char *cmdname, FILE *out_file, 
+static void dump_journal(char *cmdname, FILE *out_file,
 			 struct journal_source *source)
 {
 	struct ext2_super_block *sb;
@@ -338,23 +340,23 @@
 	int			retval;
 	__u32			magic, sequence, blocktype;
 	journal_header_t	*header;
-	
+
 	tid_t			transaction;
 	unsigned int		blocknr = 0;
-	
+
 	/* First, check to see if there's an ext2 superblock header */
-	retval = read_journal_block(cmdname, source, 0, 
+	retval = read_journal_block(cmdname, source, 0,
 				    buf, 2048, &got);
 	if (retval)
 		return;
 
 	jsb = (journal_superblock_t *) buf;
 	sb = (struct ext2_super_block *) (buf+1024);
-#ifdef ENABLE_SWAPFS
-	if (sb->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC)) 
+#ifdef WORDS_BIGENDIAN
+	if (sb->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC))
 		ext2fs_swap_super(sb);
 #endif
-	
+
 	if ((be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) &&
 	    (sb->s_magic == EXT2_SUPER_MAGIC) &&
 	    (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) {
@@ -365,14 +367,14 @@
 		if (dump_all) {
 			fprintf(out_file, "\tuuid=%s\n", jsb_buffer);
 			fprintf(out_file, "\tblocksize=%d\n", blocksize);
-			fprintf(out_file, "\tjournal data size %ld\n",
-				(long) sb->s_blocks_count);
+			fprintf(out_file, "\tjournal data size %lu\n",
+				(unsigned long) sb->s_blocks_count);
 		}
 	}
-	
+
 	/* Next, read the journal superblock */
 
-	retval = read_journal_block(cmdname, source, blocknr*blocksize, 
+	retval = read_journal_block(cmdname, source, blocknr*blocksize,
 				    jsb_buffer, 1024, &got);
 	if (retval)
 		return;
@@ -393,29 +395,29 @@
 	if (!blocknr)
 		/* Empty journal, nothing to do. */
 		return;
-		
+
 	while (1) {
-		retval = read_journal_block(cmdname, source, 
+		retval = read_journal_block(cmdname, source,
 					    blocknr*blocksize, buf,
 					    blocksize, &got);
 		if (retval || got != blocksize)
 			return;
-	
+
 		header = (journal_header_t *) buf;
 
 		magic = be32_to_cpu(header->h_magic);
 		sequence = be32_to_cpu(header->h_sequence);
 		blocktype = be32_to_cpu(header->h_blocktype);
-		
+
 		if (magic != JFS_MAGIC_NUMBER) {
 			fprintf (out_file, "No magic number at block %u: "
 				 "end of journal.\n", blocknr);
 			return;
 		}
-		
+
 		if (sequence != transaction) {
 			fprintf (out_file, "Found sequence %u (not %u) at "
-				 "block %u: end of journal.\n", 
+				 "block %u: end of journal.\n",
 				 sequence, transaction, blocknr);
 			return;
 		}
@@ -423,13 +425,13 @@
 		if (dump_descriptors) {
 			fprintf (out_file, "Found expected sequence %u, "
 				 "type %u (%s) at block %u\n",
-				 sequence, blocktype, 
+				 sequence, blocktype,
 				 type_to_name(blocktype), blocknr);
 		}
-		
+
 		switch (blocktype) {
 		case JFS_DESCRIPTOR_BLOCK:
-			dump_descriptor_block(out_file, source, buf, jsb, 
+			dump_descriptor_block(out_file, source, buf, jsb,
 					      &blocknr, blocksize,
 					      transaction);
 			continue;
@@ -439,10 +441,10 @@
 			blocknr++;
 			WRAP(jsb, blocknr);
 			continue;
-			
+
 		case JFS_REVOKE_BLOCK:
 			dump_revoke_block(out_file, buf, jsb,
-					  blocknr, blocksize, 
+					  blocknr, blocksize,
 					  transaction);
 			blocknr++;
 			WRAP(jsb, blocknr);
@@ -457,76 +459,78 @@
 }
 
 
-static void dump_descriptor_block(FILE *out_file, 
-				  struct journal_source *source, 
+static void dump_descriptor_block(FILE *out_file,
+				  struct journal_source *source,
 				  char *buf,
-				  journal_superblock_t *jsb, 
+				  journal_superblock_t *jsb,
 				  unsigned int *blockp, int blocksize,
 				  tid_t transaction)
 {
-	int			offset;
+	int			offset, tag_size = JBD_TAG_SIZE32;
 	char			*tagp;
 	journal_block_tag_t	*tag;
 	unsigned int		blocknr;
 	__u32			tag_block;
 	__u32			tag_flags;
-		
+
+	if (be32_to_cpu(jsb->s_feature_incompat) & JFS_FEATURE_INCOMPAT_64BIT)
+		tag_size = JBD_TAG_SIZE64;
 
 	offset = sizeof(journal_header_t);
 	blocknr = *blockp;
 
-	if (dump_all) 
+	if (dump_all)
 		fprintf(out_file, "Dumping descriptor block, sequence %u, at "
 			"block %u:\n", transaction, blocknr);
-	
+
 	++blocknr;
 	WRAP(jsb, blocknr);
-	
+
 	do {
-		/* Work out the location of the current tag, and skip to 
+		/* Work out the location of the current tag, and skip to
 		 * the next one... */
 		tagp = &buf[offset];
 		tag = (journal_block_tag_t *) tagp;
-		offset += sizeof(journal_block_tag_t);
+		offset += tag_size;
 
 		/* ... and if we have gone too far, then we've reached the
 		   end of this block. */
 		if (offset > blocksize)
 			break;
-	
+
 		tag_block = be32_to_cpu(tag->t_blocknr);
 		tag_flags = be32_to_cpu(tag->t_flags);
 
 		if (!(tag_flags & JFS_FLAG_SAME_UUID))
 			offset += 16;
 
-		dump_metadata_block(out_file, source, jsb, 
-				    blocknr, tag_block, blocksize, 
+		dump_metadata_block(out_file, source, jsb,
+				    blocknr, tag_block, tag_flags, blocksize,
 				    transaction);
 
 		++blocknr;
 		WRAP(jsb, blocknr);
-		
+
 	} while (!(tag_flags & JFS_FLAG_LAST_TAG));
-	
+
 	*blockp = blocknr;
 }
 
 
 static void dump_revoke_block(FILE *out_file, char *buf,
-			      journal_superblock_t *jsb EXT2FS_ATTR((unused)), 
-			      unsigned int blocknr, 
+			      journal_superblock_t *jsb EXT2FS_ATTR((unused)),
+			      unsigned int blocknr,
 			      int blocksize EXT2FS_ATTR((unused)),
 			      tid_t transaction)
 {
 	int			offset, max;
 	journal_revoke_header_t *header;
 	unsigned int		*entry, rblock;
-	
-	if (dump_all) 
+
+	if (dump_all)
 		fprintf(out_file, "Dumping revoke block, sequence %u, at "
 			"block %u:\n", transaction, blocknr);
-	
+
 	header = (journal_revoke_header_t *) buf;
 	offset = sizeof(journal_revoke_header_t);
 	max = be32_to_cpu(header->r_count);
@@ -551,7 +555,7 @@
 			__u32 first_block)
 {
 	if (start_extent >= 0 && first_block != 0)
-		fprintf(out_file, "(%d+%u): %u ", 
+		fprintf(out_file, "(%d+%u): %u ",
 			start_extent, end_extent-start_extent, first_block);
 }
 
@@ -564,79 +568,81 @@
 
 static void dump_metadata_block(FILE *out_file, struct journal_source *source,
 				journal_superblock_t *jsb EXT2FS_ATTR((unused)),
-				unsigned int log_blocknr, 
-				unsigned int fs_blocknr, 
+				unsigned int log_blocknr,
+				unsigned int fs_blocknr,
+				unsigned int log_tag_flags,
 				int blocksize,
 				tid_t transaction)
 {
 	unsigned int 	got;
 	int		retval;
 	char 		buf[8192];
-	
+
 	if (!(dump_all
 	      || (fs_blocknr == block_to_dump)
 	      || (fs_blocknr == inode_block_to_dump)
 	      || (fs_blocknr == bitmap_to_dump)))
 		return;
-	
+
 	fprintf(out_file, "  FS block %u logged at ", fs_blocknr);
-	if (!dump_all) 
+	if (!dump_all)
 		fprintf(out_file, "sequence %u, ", transaction);
-	fprintf(out_file, "journal block %u\n", log_blocknr);
-	
+	fprintf(out_file, "journal block %u (flags 0x%x)\n", log_blocknr,
+		log_tag_flags);
+
 	/* There are two major special cases to parse:
-	 * 
+	 *
 	 * If this block is a block
 	 * bitmap block, we need to give it special treatment so that we
 	 * can log any allocates and deallocates which affect the
-	 * block_to_dump query block. 
-	 * 
+	 * block_to_dump query block.
+	 *
 	 * If the block is an inode block for the inode being searched
 	 * for, then we need to dump the contents of that inode
-	 * structure symbolically.  
+	 * structure symbolically.
 	 */
-	
+
 	if (!(dump_contents && dump_all)
 	    && fs_blocknr != block_to_dump
-	    && fs_blocknr != bitmap_to_dump 
+	    && fs_blocknr != bitmap_to_dump
 	    && fs_blocknr != inode_block_to_dump)
 		return;
-	
-	retval = read_journal_block("logdump", source, 
+
+	retval = read_journal_block("logdump", source,
 				    blocksize * log_blocknr,
 				    buf, blocksize, &got);
 	if (retval)
 		return;
-	
+
 	if (fs_blocknr == bitmap_to_dump) {
 		struct ext2_super_block *super;
 		int offset;
-		
+
 		super = current_fs->super;
-		offset = ((fs_blocknr - super->s_first_data_block) %
+		offset = ((block_to_dump - super->s_first_data_block) %
 			  super->s_blocks_per_group);
-	
+
 		fprintf(out_file, "    (block bitmap for block %u: "
-			"block is %s)\n", 
+			"block is %s)\n",
 			block_to_dump,
 			ext2fs_test_bit(offset, buf) ? "SET" : "CLEAR");
 	}
-	
+
 	if (fs_blocknr == inode_block_to_dump) {
 		struct ext2_inode *inode;
 		int first, prev, this, start_extent, i;
-		
+
 		fprintf(out_file, "    (inode block for inode %u):\n",
 			inode_to_dump);
-		
+
 		inode = (struct ext2_inode *) (buf + inode_offset_to_dump);
 		internal_dump_inode(out_file, "    ", inode_to_dump, inode, 0);
-		
+
 		/* Dump out the direct/indirect blocks here:
 		 * internal_dump_inode can only dump them from the main
 		 * on-disk inode, not from the journaled copy of the
 		 * inode. */
-		
+
 		fprintf (out_file, "    Blocks:  ");
 		first = prev = start_extent = -1;
 
@@ -655,13 +661,13 @@
 		show_indirect(out_file, "IND", inode->i_block[i++]);
 		show_indirect(out_file, "DIND", inode->i_block[i++]);
 		show_indirect(out_file, "TIND", inode->i_block[i++]);
-		
+
 		fprintf(out_file, "\n");
 	}
 
 	if (dump_contents)
 		do_hexdump(out_file, buf, blocksize);
-	
+
 }
 
 static void do_hexdump (FILE *out_file, char *buf, int blocksize)
@@ -670,10 +676,10 @@
 	int *intp;
 	char *charp;
 	unsigned char c;
-	
+
 	intp = (int *) buf;
 	charp = (char *) buf;
-	
+
 	for (i=0; i<blocksize; i+=16) {
 		fprintf(out_file, "    %04x:  ", i);
 		for (j=0; j<16; j+=4)
diff --git a/debugfs/ls.c b/debugfs/ls.c
index 52c7e34..906504e 100644
--- a/debugfs/ls.c
+++ b/debugfs/ls.c
@@ -1,6 +1,6 @@
 /*
  * ls.c --- list directories
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -17,7 +17,7 @@
 #include <sys/types.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
@@ -30,6 +30,7 @@
 
 #define LONG_OPT	0x0001
 #define DELETED_OPT	0x0002
+#define PARSE_OPT	0x0004
 
 struct list_dir_struct {
 	FILE	*f;
@@ -39,7 +40,7 @@
 
 static const char *monstr[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
 				"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-					
+
 static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
 			 int	entry,
 			 struct ext2_dir_entry *dirent,
@@ -72,7 +73,16 @@
 	} else {
 		lbr = rbr = ' ';
 	}
-	if (ls->options & LONG_OPT) {
+	if (ls->options & PARSE_OPT) {
+		if (ino && debugfs_read_inode(ino, &inode, name)) return 0;
+		fprintf(ls->f,"/%u/%06o/%d/%d/%s/",ino,inode.i_mode,inode.i_uid, inode.i_gid,name);
+		if (LINUX_S_ISDIR(inode.i_mode))
+			fprintf(ls->f, "/");
+		else
+			fprintf(ls->f, "%lld/", inode.i_size | ((__u64)inode.i_size_high << 32));
+		fprintf(ls->f, "\n");
+	}
+	else if (ls->options & LONG_OPT) {
 		if (ino) {
 			if (debugfs_read_inode(ino, &inode, name))
 				return 0;
@@ -117,13 +127,13 @@
 	int		c;
 	int		flags;
 	struct list_dir_struct ls;
-	
+
 	ls.options = 0;
 	if (check_fs_open(argv[0]))
 		return;
 
 	reset_getopt();
-	while ((c = getopt (argc, argv, "dl")) != EOF) {
+	while ((c = getopt (argc, argv, "dlp")) != EOF) {
 		switch (c) {
 		case 'l':
 			ls.options |= LONG_OPT;
@@ -131,6 +141,9 @@
 		case 'd':
 			ls.options |= DELETED_OPT;
 			break;
+		case 'p':
+			ls.options |= PARSE_OPT;
+			break;
 		default:
 			goto print_usage;
 		}
@@ -138,7 +151,7 @@
 
 	if (argc > optind+1) {
 	print_usage:
-		com_err(0, 0, "Usage: ls [-l] [-d] file");
+		com_err(0, 0, "Usage: ls [-l] [-d] [-p] file");
 		return;
 	}
 
diff --git a/debugfs/lsdel.c b/debugfs/lsdel.c
index b3293b8..265753b 100644
--- a/debugfs/lsdel.c
+++ b/debugfs/lsdel.c
@@ -1,6 +1,6 @@
 /*
  * lsdel.c --- routines to try to help a user recover a deleted file.
- * 
+ *
  * Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  * Theodore Ts'o.  This file may be redistributed under the terms of
  * the GNU Public License.
@@ -85,7 +85,7 @@
  	char			*tmp;
 	time_t			now;
 	FILE			*out;
-	
+
 	if (common_args_process(argc, argv, 1, 2, "ls_deleted_inodes",
 				"[secs]", 0))
 		return;
@@ -129,7 +129,7 @@
 			"while starting inode scan");
 		goto error_out;
 	}
-	
+
 	while (ino) {
 		if ((inode.i_dtime == 0) ||
 		    (secs && ((unsigned) abs(now - secs) > inode.i_dtime)))
@@ -139,8 +139,9 @@
 		lsd.num_blocks = 0;
 		lsd.free_blocks = 0;
 		lsd.bad_blocks = 0;
-		
-		retval = ext2fs_block_iterate2(current_fs, ino, 0, block_buf,
+
+		retval = ext2fs_block_iterate2(current_fs, ino,
+					       BLOCK_FLAG_READ_ONLY, block_buf,
 					       lsdel_proc, &lsd);
 		if (retval) {
 			com_err("ls_deleted_inodes", retval,
@@ -159,20 +160,20 @@
 					exit(1);
 				}
 			}
-				
+
 			delarray[num_delarray].ino = ino;
 			delarray[num_delarray].mode = inode.i_mode;
 			delarray[num_delarray].uid = inode_uid(inode);
 			delarray[num_delarray].size = inode.i_size;
 			if (!LINUX_S_ISDIR(inode.i_mode))
-				delarray[num_delarray].size |= 
+				delarray[num_delarray].size |=
 					((__u64) inode.i_size_high << 32);
 			delarray[num_delarray].dtime = inode.i_dtime;
 			delarray[num_delarray].num_blocks = lsd.num_blocks;
 			delarray[num_delarray].free_blocks = lsd.free_blocks;
 			num_delarray++;
 		}
-		
+
 	next:
 		do {
 			retval = ext2fs_get_next_inode(scan, &ino, &inode);
@@ -185,22 +186,22 @@
 	}
 
 	out = open_pager();
-	
+
 	fprintf(out, " Inode  Owner  Mode    Size      Blocks   Time deleted\n");
-	
+
 	qsort(delarray, num_delarray, sizeof(struct deleted_info),
 	      deleted_info_compare);
-	
+
 	for (i = 0; i < num_delarray; i++) {
-		fprintf(out, "%6u %6d %6o %6llu %6lld/%6lld %s", 
+		fprintf(out, "%6u %6d %6o %6llu %6lld/%6lld %s",
 			delarray[i].ino,
 			delarray[i].uid, delarray[i].mode, delarray[i].size,
-			delarray[i].free_blocks, delarray[i].num_blocks, 
+			delarray[i].free_blocks, delarray[i].num_blocks,
 			time_to_string(delarray[i].dtime));
 	}
 	fprintf(out, "%d deleted inodes found.\n", num_delarray);
 	close_pager(out);
-	
+
 error_out:
 	free(block_buf);
 	free(delarray);
diff --git a/debugfs/ncheck.c b/debugfs/ncheck.c
index bb7f524..a366281 100644
--- a/debugfs/ncheck.c
+++ b/debugfs/ncheck.c
@@ -1,6 +1,6 @@
 /*
  * ncheck.c --- given a list of inodes, generate a list of names
- * 
+ *
  * Copyright (C) 1994 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -18,18 +18,12 @@
 
 #include "debugfs.h"
 
-struct inode_info {
-	ext2_ino_t	ino;
-	ext2_ino_t	parent;
-	char		*pathname;
-};
-
 struct inode_walk_struct {
-	struct inode_info	*iarray;
+	ext2_ino_t		*iarray;
 	int			inodes_left;
 	int			num_inodes;
 	int			position;
-	ext2_ino_t		parent;
+	char			*parent;
 };
 
 static int ncheck_proc(struct ext2_dir_entry *dirent,
@@ -45,28 +39,27 @@
 	if (iw->position <= 2)
 		return 0;
 	for (i=0; i < iw->num_inodes; i++) {
-		if (iw->iarray[i].ino == dirent->inode) {
-			iw->iarray[i].parent = iw->parent;
-			iw->inodes_left--;
+		if (iw->iarray[i] == dirent->inode) {
+			printf("%u\t%s/%.*s\n", iw->iarray[i], iw->parent,
+			       (dirent->name_len & 0xFF), dirent->name);
 		}
 	}
 	if (!iw->inodes_left)
 		return DIRENT_ABORT;
-	
+
 	return 0;
 }
 
 void do_ncheck(int argc, char **argv)
 {
 	struct inode_walk_struct iw;
-	struct inode_info	*iinfo;
 	int			i;
 	ext2_inode_scan		scan = 0;
 	ext2_ino_t		ino;
 	struct ext2_inode	inode;
 	errcode_t		retval;
 	char			*tmp;
-	
+
 	if (argc < 2) {
 		com_err(argv[0], 0, "Usage: ncheck <inode number> ...");
 		return;
@@ -74,19 +67,19 @@
 	if (check_fs_open(argv[0]))
 		return;
 
-	iw.iarray = malloc(sizeof(struct inode_info) * argc);
+	iw.iarray = malloc(sizeof(ext2_ino_t) * argc);
 	if (!iw.iarray) {
-		com_err("do_ncheck", ENOMEM,
+		com_err("ncheck", ENOMEM,
 			"while allocating inode info array");
 		return;
 	}
-	memset(iw.iarray, 0, sizeof(struct inode_info) * argc);
+	memset(iw.iarray, 0, sizeof(ext2_ino_t) * argc);
 
 	for (i=1; i < argc; i++) {
-		iw.iarray[i-1].ino = strtol(argv[i], &tmp, 0);
+		iw.iarray[i-1] = strtol(argv[i], &tmp, 0);
 		if (*tmp) {
 			com_err(argv[0], 0, "Bad inode - %s", argv[i]);
-			return;
+			goto error_out;
 		}
 	}
 
@@ -105,7 +98,8 @@
 		com_err("ncheck", retval, "while starting inode scan");
 		goto error_out;
 	}
-	
+
+	printf("Inode\tPathname\n");
 	while (ino) {
 		if (!inode.i_links_count)
 			goto next;
@@ -120,10 +114,17 @@
 			goto next;
 
 		iw.position = 0;
-		iw.parent = ino;
-		
+
+		retval = ext2fs_get_pathname(current_fs, ino, 0, &iw.parent);
+		if (retval) {
+			com_err("ncheck", retval, 
+				"while calling ext2fs_get_pathname");
+			goto next;
+		}
+
 		retval = ext2fs_dir_iterate(current_fs, ino, 0, 0,
 					    ncheck_proc, &iw);
+		ext2fs_free_mem(&iw.parent);
 		if (retval) {
 			com_err("ncheck", retval,
 				"while calling ext2_dir_iterate");
@@ -145,29 +146,6 @@
 		}
 	}
 
-	for (i=0, iinfo = iw.iarray; i < iw.num_inodes; i++, iinfo++) {
-		if (iinfo->parent == 0)
-			continue;
-		retval = ext2fs_get_pathname(current_fs, iinfo->parent,
-					     iinfo->ino, &iinfo->pathname);
-		if (retval)
-			com_err("ncheck", retval,
-				"while resolving pathname for inode %d (%d)",
-				iinfo->parent, iinfo->ino);
-	}
-	
-	printf("Inode\tPathname\n");
-	for (i=0, iinfo = iw.iarray; i < iw.num_inodes; i++, iinfo++) {
-		if (iinfo->parent == 0) {
-			printf("%u\t<inode not found>\n", iinfo->ino);
-			continue;
-		}
-		printf("%u\t%s\n", iinfo->ino, iinfo->pathname ?
-		       iinfo->pathname : "<unknown pathname>");
-		if (iinfo->pathname)
-			free(iinfo->pathname);
-	}
-
 error_out:
 	free(iw.iarray);
 	if (scan)
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
index 454a3db..5f02472 100644
--- a/debugfs/set_fields.c
+++ b/debugfs/set_fields.c
@@ -1,8 +1,8 @@
 /*
  * set_fields.c --- set a superblock value
- * 
+ *
  * Copyright (C) 2000, 2001, 2002, 2003, 2004 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -29,6 +29,9 @@
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#if HAVE_STRINGS_H
+#include <strings.h>
+#endif
 #include <fcntl.h>
 #include <utime.h>
 
@@ -39,6 +42,7 @@
 static struct ext2_super_block set_sb;
 static struct ext2_inode set_inode;
 static struct ext2_group_desc set_gd;
+static dgrp_t set_bg;
 static ext2_ino_t set_ino;
 static int array_idx;
 
@@ -60,6 +64,7 @@
 static errcode_t parse_hashalg(struct field_set_info *info, char *arg);
 static errcode_t parse_time(struct field_set_info *info, char *arg);
 static errcode_t parse_bmap(struct field_set_info *info, char *arg);
+static errcode_t parse_gd_csum(struct field_set_info *info, char *arg);
 
 static struct field_set_info super_fields[] = {
 	{ "inodes_count", &set_sb.s_inodes_count, 4, parse_uint },
@@ -92,12 +97,12 @@
 	{ "block_group_nr", &set_sb.s_block_group_nr, 2, parse_uint },
 	{ "feature_compat", &set_sb.s_feature_compat, 4, parse_uint },
 	{ "feature_incompat", &set_sb.s_feature_incompat, 4, parse_uint },
-	{ "feature_ro_compat", &set_sb.s_feature_ro_compat, 4, parse_uint }, 
+	{ "feature_ro_compat", &set_sb.s_feature_ro_compat, 4, parse_uint },
 	{ "uuid", &set_sb.s_uuid, 16, parse_uuid },
 	{ "volume_name",  &set_sb.s_volume_name, 16, parse_string },
 	{ "last_mounted",  &set_sb.s_last_mounted, 64, parse_string },
 	{ "lastcheck",  &set_sb.s_lastcheck, 4, parse_uint },
-	{ "algorithm_usage_bitmap", &set_sb.s_algorithm_usage_bitmap, 
+	{ "algorithm_usage_bitmap", &set_sb.s_algorithm_usage_bitmap,
 		  4, parse_uint },
 	{ "prealloc_blocks", &set_sb.s_prealloc_blocks, 1, parse_uint },
 	{ "prealloc_dir_blocks", &set_sb.s_prealloc_dir_blocks, 1,
@@ -115,7 +120,7 @@
 	{ "default_mount_opts", &set_sb.s_default_mount_opts, 4, parse_uint },
 	{ "first_meta_bg", &set_sb.s_first_meta_bg, 4, parse_uint },
 	{ "mkfs_time", &set_sb.s_mkfs_time, 4, parse_time },
-	{ "jnl_blocks", &set_sb.s_jnl_blocks[0], 4, parse_uint, FLAG_ARRAY, 
+	{ "jnl_blocks", &set_sb.s_jnl_blocks[0], 4, parse_uint, FLAG_ARRAY,
 	  17 },
 	{ "blocks_count_hi", &set_sb.s_blocks_count_hi, 4, parse_uint },
 	{ "r_blocks_count_hi", &set_sb.s_r_blocks_count_hi, 4, parse_uint },
@@ -127,6 +132,8 @@
 	{ "mmp_interval", &set_sb.s_mmp_interval, 2, parse_uint },
 	{ "mmp_block", &set_sb.s_mmp_block, 8, parse_uint },
 	{ "raid_stripe_width", &set_sb.s_raid_stripe_width, 4, parse_uint },
+	{ "log_groups_per_flex", &set_sb.s_log_groups_per_flex, 1, parse_uint },
+	{ "kbytes_written", &set_sb.s_kbytes_written, 8, parse_uint },
 	{ 0, 0, 0, 0 }
 };
 
@@ -145,13 +152,15 @@
 	{ "flags", &set_inode.i_flags, 4, parse_uint },
 	{ "version", &set_inode.osd1.linux1.l_i_version, 4, parse_uint },
 	{ "translator", &set_inode.osd1.hurd1.h_i_translator, 4, parse_uint },
-	{ "block", &set_inode.i_block[0], 4, parse_uint, FLAG_ARRAY, 
+	{ "block", &set_inode.i_block[0], 4, parse_uint, FLAG_ARRAY,
 	  EXT2_NDIR_BLOCKS },
 	{ "block[IND]", &set_inode.i_block[EXT2_IND_BLOCK], 4, parse_uint },
 	{ "block[DIND]", &set_inode.i_block[EXT2_DIND_BLOCK], 4, parse_uint },
 	{ "block[TIND]", &set_inode.i_block[EXT2_TIND_BLOCK], 4, parse_uint },
 	{ "generation", &set_inode.i_generation, 4, parse_uint },
 	{ "file_acl", &set_inode.i_file_acl, 4, parse_uint },
+	{ "file_acl_high", &set_inode.osd2.linux2.l_i_file_acl_high, 2,
+	  parse_uint },
 	{ "dir_acl", &set_inode.i_dir_acl, 4, parse_uint },
 	{ "size_high", &set_inode.i_size_high, 4, parse_uint },
 	{ "faddr", &set_inode.i_faddr, 4, parse_uint },
@@ -175,7 +184,7 @@
 	{ "flags", &set_gd.bg_flags, 2, parse_uint },
 	{ "reserved", &set_gd.bg_reserved, 2, parse_uint, FLAG_ARRAY, 2 },
 	{ "itable_unused", &set_gd.bg_itable_unused, 2, parse_uint },
-	{ "checksum", &set_gd.bg_checksum, 2, parse_uint },
+	{ "checksum", &set_gd.bg_checksum, 2, parse_gd_csum },
 	{ 0, 0, 0, 0 }
 };
 
@@ -212,7 +221,7 @@
 		else
 			*delim = 0;
 	}
-	/* 
+	/*
 	 * Can we parse the number?
 	 */
 	if (idx) {
@@ -231,9 +240,10 @@
 			if (strcmp(ss->name, field) != 0)
 				continue;
 		}
+		free(arg);
 		return ss;
 	}
-
+	free(arg);
 	return NULL;
 }
 
@@ -347,7 +357,7 @@
 static errcode_t parse_uuid(struct field_set_info *info, char *arg)
 {
 	unsigned char *	p = (unsigned char *) info->ptr;
-	
+
 	if ((strcasecmp(arg, "null") == 0) ||
 	    (strcasecmp(arg, "clear") == 0)) {
 		uuid_clear(p);
@@ -391,7 +401,7 @@
 	}
 	blk = num;
 
-	retval = ext2fs_bmap(current_fs, set_ino, &set_inode, 0, BMAP_SET, 
+	retval = ext2fs_bmap(current_fs, set_ino, &set_inode, 0, BMAP_SET,
 			     array_idx, &blk);
 	if (retval) {
 		com_err("set_inode", retval, "while setting block map");
@@ -399,6 +409,19 @@
 	return retval;
 }
 
+static errcode_t parse_gd_csum(struct field_set_info *info, char *arg)
+{
+
+	if (strcmp(arg, "calc") == 0) {
+		ext2fs_group_desc_csum_set(current_fs, set_bg);
+		set_gd = current_fs->group_desc[set_bg];
+		printf("Checksum set to 0x%04x\n",
+		       current_fs->group_desc[set_bg].bg_checksum);
+		return 0;
+	}
+
+	return parse_uint(info, arg);
+}
 
 static void print_possible_fields(struct field_set_info *fields)
 {
@@ -439,7 +462,7 @@
 			type = "set physical->logical block map";
 		strcpy(name, ss->name);
 		if (ss->flags & FLAG_ARRAY) {
-			if (ss->max_idx > 0) 
+			if (ss->max_idx > 0)
 				sprintf(idx, "[%d]", ss->max_idx);
 			else
 				strcpy(idx, "[]");
@@ -457,7 +480,7 @@
 		"\t\"set_super_value -l\" will list the names of "
 		"superblock fields\n\twhich can be set.";
 	static struct field_set_info *ss;
-	
+
 	if ((argc == 2) && !strcmp(argv[1], "-l")) {
 		print_possible_fields(super_fields);
 		return;
@@ -484,7 +507,7 @@
 		"\t\"set_inode_field -l\" will list the names of "
 		"the fields in an ext2 inode\n\twhich can be set.";
 	static struct field_set_info *ss;
-	
+
 	if ((argc == 2) && !strcmp(argv[1], "-l")) {
 		print_possible_fields(inode_fields);
 		return;
@@ -518,7 +541,6 @@
 		"\t\"set_block_group_descriptor -l\" will list the names of "
 		"the fields in a block group descriptor\n\twhich can be set.";
 	struct field_set_info	*ss;
-	dgrp_t			set_bg;
 	char			*end;
 
 	if ((argc == 2) && !strcmp(argv[1], "-l")) {
diff --git a/debugfs/unused.c b/debugfs/unused.c
index 0eee8e6..818fef1 100644
--- a/debugfs/unused.c
+++ b/debugfs/unused.c
@@ -1,6 +1,6 @@
 /*
  * unused.c --- quick and dirty unused space dumper
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -17,7 +17,7 @@
 #include <sys/types.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
diff --git a/debugfs/util.c b/debugfs/util.c
index a490d2c..e4ecb1f 100644
--- a/debugfs/util.c
+++ b/debugfs/util.c
@@ -1,12 +1,12 @@
 /*
  * util.c --- utilities for the debugfs program
- * 
+ *
  * Copyright (C) 1993, 1994 Theodore Ts'o.  This file may be
  * redistributed under the terms of the GNU Public License.
  *
  */
 
-#define _XOPEN_SOURCE /* needed for strptime */
+#define _XOPEN_SOURCE 600 /* needed for strptime */
 
 #include <stdio.h>
 #include <unistd.h>
@@ -17,7 +17,7 @@
 #include <signal.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
@@ -40,7 +40,7 @@
  * affairs is that BSD-derived versions of getopt() misbehave if
  * optind is set to 0 in order to reset getopt(), and glibc's getopt()
  * will core dump if optind is set 1 in order to reset getopt().
- * 
+ *
  * More modern versions of BSD require that optreset be set to 1 in
  * order to reset getopt().   Sigh.  Standards, anyone?
  *
@@ -82,11 +82,13 @@
 	char buf[80];
 
 	signal(SIGPIPE, SIG_IGN);
+	if (!isatty(1))
+		return stdout;
 	if (!pager)
 		pager = getenv("PAGER");
 	if (!pager)
 		pager = find_pager(buf);
-	if (!pager || 
+	if (!pager ||
 	    (strcmp(pager, "__none__") == 0) ||
 	    ((outfile = popen(pager, "w")) == 0))
 		return stdout;
@@ -121,7 +123,7 @@
 
 	retval = ext2fs_namei(current_fs, root, cwd, str, &ino);
 	if (retval) {
-		com_err(str, retval, "");
+		com_err(str, retval, 0);
 		return 0;
 	}
 	return ino;
@@ -190,7 +192,7 @@
 {
 	static int	do_gmt = -1;
 	time_t		t = (time_t) cl;
-	char *		tz;
+	const char	*tz;
 
 	if (do_gmt == -1) {
 		/* The diet libc doesn't respect the TZ environemnt variable */
@@ -229,6 +231,7 @@
 	    ts.tm_min > 59 || ts.tm_sec > 61)
 		ts.tm_mday = 0;
 #endif
+	ts.tm_isdst = -1;
 	ret = mktime(&ts);
 	if (ts.tm_mday == 0 || ret == ((time_t) -1)) {
 		/* Try it as an integer... */
@@ -248,7 +251,7 @@
 {
 	char		*tmp;
 	unsigned long	ret;
-	
+
 	ret = strtoul(str, &tmp, 0);
 	if (*tmp == 0) {
 		if (err)
@@ -274,10 +277,8 @@
 
 	blk = parse_ulong(str, cmd, "block number", &err);
 	*ret = blk;
-	if (err == 0 && blk == 0) {
-		com_err(cmd, 0, "Invalid block number 0");
-		err = 1;
-	}
+	if (err)
+		com_err(cmd, 0, "Invalid block number: %s", str);
 	return err;
 }
 
@@ -316,9 +317,9 @@
 {
 	if (common_args_process(argc, argv, 2, 2, argv[0], "<file>", flags))
 		return 1;
-	
+
 	*inode = string_to_inode(argv[1]);
-	if (!*inode) 
+	if (!*inode)
 		return 1;
 	return 0;
 }
@@ -337,6 +338,11 @@
 
 	if (strtoblk(argv[0], argv[1], block))
 		return 1;
+	if (*block == 0) {
+		com_err(argv[0], 0, "Invalid block number 0");
+		err = 1;
+	}
+
 	if (argc > 2) {
 		*count = parse_ulong(argv[2], argv[0], "count", &err);
 		if (err)
diff --git a/depfix.sed b/depfix.sed
index 11c83e9..c73a893 100644
--- a/depfix.sed
+++ b/depfix.sed
@@ -25,6 +25,8 @@
 s;/usr/include/[^ ]* *;;g
 s;/usr/lib/[^ ]* *;;g
 s;/mit/cygnus[^ ]* *;;g
+s;../[^ ]*lib/blkid/blkid[^ ]* *;;g
+s;../[^ ]*lib/uuid/uuid.h[^ ]* *;;g
 
 #
 # Now insert a trailing newline...
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 5494cf0..3398d5f 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -13,32 +13,39 @@
 
 DVI=texi2dvi
 DVIPS=dvips -o "$@"
-INFO=makeinfo
-HTML=texi2html
+INFO=@MAKEINFO@
+HTML=texi2html -split_chapter
 
 all:: libext2fs.info libext2fs.dvi
 
 install-doc-libs: libext2fs.info libext2fs.dvi
-	@$(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
-	@echo "	MKINSTALLDIRS $(infodir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(infodir)
-	-@for i in libext2fs.info* ; do \
+	$(Q) $(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
+	$(E) "	MKINSTALLDIRS $(infodir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(infodir)
+	-$(Q) for i in libext2fs.info* ; do \
 		echo "	INSTALL_DATA $(infodir)/$$i" ; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i ; \
 	done
-	@echo "	GZIP $(infodir)/libext2fs.info*"
-	-@gzip -9 $(DESTDIR)$(infodir)/libext2fs.info*
+	$(E) "	GZIP $(infodir)/libext2fs.info*"
+	-$(Q) gzip -9 $(DESTDIR)$(infodir)/libext2fs.info*
 
 uninstall-doc-libs:
 	$(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
 
 libext2fs.info: $(srcdir)/libext2fs.texinfo
-	@echo "	MAKEINFO $@"
-	-@$(INFO) $(srcdir)/libext2fs.texinfo
+	$(E) "	MAKEINFO $@"
+	-$(Q) $(INFO) $(srcdir)/libext2fs.texinfo
 
 libext2fs.dvi: $(srcdir)/libext2fs.texinfo
-	@echo "	TEXI2DVI $@"
-	-@$(DVI) $(srcdir)/libext2fs.texinfo
+	$(E) "	TEXI2DVI $@"
+	-$(Q) $(DVI) $(srcdir)/libext2fs.texinfo
+
+libext2fs_abt.html: $(srcdir)/libext2fs.texinfo
+	$(E) "	TEXI2HTML $@"
+	-$(Q) $(HTML) $(srcdir)/libext2fs.texinfo
+	-$(Q) if test -d libext2fs ; then \
+		mv libext2fs/* . ; rmdir libext2fs ; \
+		fi
 
 .PHONY: distclean
 distclean:: clean
@@ -48,7 +55,7 @@
 clean:: clean-all
 
 .PHONY: clean-all
-clean-all:: clean-tex clean-backup clean-final clean-tarfiles
+clean-all:: clean-tex clean-backup clean-final clean-tarfiles clean-html
 
 .PHONY: clean-final
 clean-final::
@@ -65,3 +72,7 @@
 .PHONY: clean-tarfiles
 clean-tarfiles::
 	$(RM) -f *.tar *.tar.gz *.tgz
+
+clean-html::
+	$(RM) -f *.html
+
diff --git a/doc/libext2fs.texinfo b/doc/libext2fs.texinfo
index f3b0d1e..fcd38b9 100644
--- a/doc/libext2fs.texinfo
+++ b/doc/libext2fs.texinfo
@@ -1,17 +1,15 @@
 \input texinfo    @c -*-texinfo-*-
 @c %**start of header
 @setfilename libext2fs.info
-@settitle The EXT2FS Library (version 1.40.8)
+@settitle The EXT2FS Library (version 1.41.11)
 @synindex tp fn
 @comment %**end of header
 
 @ifinfo
 @dircategory Development
-@format
-START-INFO-DIR-ENTRY
-* libext2fs: (libext2fs.info).                  The EXT2FS library.
-END-INFO-DIR-ENTRY
-@end format
+@direntry
+* libext2fs: (libext2fs).                  The EXT2FS library.
+@end direntry
 @end ifinfo
 
 @c smallbook
@@ -31,7 +29,8 @@
 This file documents the ext2fs library, a library for manipulating the
 ext2 filesystem.
 
-Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Theodore Ts'o
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+2006, 2007, 2008, 2009 by Theodore Ts'o
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -61,8 +60,8 @@
 
 @title The EXT2FS Library
 @subtitle The EXT2FS Library
-@subtitle Version 1.40.8
-@subtitle March 2008
+@subtitle Version 1.41.11
+@subtitle March 2010
 
 @author by Theodore Ts'o
 
@@ -103,7 +102,7 @@
 
 @top The EXT2FS Library
 
-This manual documents the EXT2FS Library, version 1.40.8.
+This manual documents the EXT2FS Library, version 1.41.11.
 
 @end ifinfo
 
@@ -129,6 +128,7 @@
 
 @menu
 * Filesystem-level functions::  
+* File I/O Functions::          
 * Inode Functions::             
 * Directory functions::         
 * Bitmap Functions::            
@@ -139,7 +139,7 @@
 
 @c ----------------------------------------------------------------------
 
-@node Filesystem-level functions, Inode Functions, EXT2FS Library Functions, EXT2FS Library Functions
+@node Filesystem-level functions, File I/O Functions, EXT2FS Library Functions, EXT2FS Library Functions
 @comment  node-name,  next,  previous,  up
 @section Filesystem-level functions
 
@@ -397,11 +397,131 @@
 to be written when the filesystem is closed or flushed.
 @end deftypefun
 
+@c ----------------------------------------------------------------------
 
+@node File I/O Functions, Inode Functions, Filesystem-level functions, EXT2FS Library Functions
+@comment  node-name,  next,  previous,  up
+@section File I/O Functions
+
+The following functions provide a convenient abstraction to read or
+write a file in an filesystem.  The interface is similar in spirit to
+the Linux/POSIX file I/O system calls.
+
+@menu
+* File handle manipulation::    
+* Reading and writing data::    
+* Changing the file offset ::   
+* Getting the file size::       
+@end menu
 
 @c ----------------------------------------------------------------------
 
-@node Inode Functions, Directory functions, Filesystem-level functions, EXT2FS Library Functions
+@node File handle manipulation, Reading and writing data, File I/O Functions, File I/O Functions
+@comment  node-name,  next,  previous,  up
+@subsection File handle manipulation
+
+The file handle functions much like a file descriptor in the Linux/POSIX
+file I/O system calls.  Unlike the Linux/POSIX system calls, files are
+opened via inode numbers instead of via pathnames.  To resolve a
+pathname to an inode number, use the function @code{ext2fs_namei} or to
+create a new file, use @code{ext2fs_new_inode} and @code{ext2fs_link}.
+
+@deftypefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}, int @var{flags}, ext2_file_t *@var{ret})
+@deftypefunx errcode_t ext2fs_file_open (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, ext2_file_t *@var{ret})
+
+Opens a file identified by inode number @var{ino} in filesystem @var{fs}
+and returns a file handle in @var{ret}.  If an inode structure is
+provided in @var{inode}, then it is used instead of reading the inode
+from the filesystem.
+
+The @var{flags} argument contains a bitmask of flags which control how
+the file should be opened.
+
+@table @code
+@item EXT2_FILE_WRITE
+Open the file for reading and writing.  Without this flag, the file is
+opened for writing only.
+
+@item EXT2_FILE_CREATE
+Create the file if it is not already present.
+
+@end table
+@end deftypefun
+
+@deftypefun ext2_filsys ext2fs_file_get_fs (ext2_file_t @var{file})
+Return the filesystem handle where the open file @var{file} was opened.
+@end deftypefun
+
+@deftypefun errcode_t ext2fs_file_close (ext2_file_t @var{file})
+Close the file handle @var{file}.
+@end deftypefun
+
+@deftypefun errcode_t ext2fs_file_flush (ext2_file_t @var{file})
+Force any data written via @code{ext2fs_file_write} to disk.
+@end deftypefun
+
+@c ----------------------------------------------------------------------
+
+@node Reading and writing data, Changing the file offset , File handle manipulation, File I/O Functions
+@comment  node-name,  next,  previous,  up
+@subsection Reading and writing data
+
+@deftypefun errcode_t ext2fs_file_read (ext2_file_t @var{file}, void *@var{buf}, unsigned int @var{wanted}, unsigned int *@var{got})
+Read @var{wanted} bytes of data from @var{file} store it in the buffer
+@var{buf}.  The number of bytes that was actually read is returned
+via @var{got}.
+@end deftypefun
+
+@deftypefun errcode_t ext2fs_file_write (ext2_file_t @var{file}, const void *@var{buf}, unsigned int @var{nbytes}, unsigned int *@var{written})
+Write @var{wanted} bytes of data from the buffer @var{buf} to the
+current file position of @var{file}.  The number of bytes that was 
+actually written is returned via @var{got}.
+@end deftypefun
+
+@c ----------------------------------------------------------------------
+
+@node Changing the file offset , Getting the file size, Reading and writing data, File I/O Functions
+@comment  node-name,  next,  previous,  up
+@subsection Changing the file offset
+
+@deftypefun errcode_t ext2fs_file_llseek (ext2_file_t @var{file}, __u64 @var{offset}, int @var{whence}, __u64 *@var{ret_pos})
+@deftypefunx errcode_t ext2fs_file_lseek (ext2_file_t @var{file}, ext2_off_t @var{offset}, int @var{whence}, ext2_off_t *@var{ret_pos})
+Change the current file position of @var{file} according to the
+directive @var{whence} as follows:
+
+@table @code
+@item EXT2_SEEK_SET
+The file position is set to @var{offset} bytes from the beginning of the
+file.
+
+@item EXT2_SEEK_CUR
+The file position set to its current location plus @var{offset} bytes.
+
+@item EXT2_SEEK_END
+The file position is set to the size of the file plus @var{offset}
+bytes.
+@end table
+
+The current offset is returned via @var{ret_pos}.
+@end deftypefun
+
+@c ----------------------------------------------------------------------
+
+@node Getting the file size,  , Changing the file offset , File I/O Functions
+@comment  node-name,  next,  previous,  up
+@subsection Getting the file size
+
+@deftypefun errcode_t ext2fs_file_get_lsize (ext2_file_t @var{file}, __u64 *@var{ret_size})
+Return the size of the file @var{file} in @var{ret_size}.
+@end deftypefun
+
+@deftypefun ext2_off_t ext2fs_file_get_size (ext2_file_t @var{file})
+Return the size of the file @var{file}.
+@end deftypefun
+
+@c ----------------------------------------------------------------------
+
+@node Inode Functions, Directory functions, File I/O Functions, EXT2FS Library Functions
 @comment  node-name,  next,  previous,  up
 @section Inode Functions
 
@@ -493,10 +613,7 @@
 @comment  node-name,  next,  previous,  up
 @subsection Iterating over blocks in an inode
 
-@deftypefun errcode_t ext2fs_block_iterate (ext2_filsys @var{fs},
-ext2_ino_t @var{ino}, int @var{flags}, char *block_buf, int
-(*func)(ext2_filsys @var{fs}, blk_t *@var{blocknr}, int @var{blockcnt},
-void *@var{private}), void *@var{private})
+@deftypefun errcode_t ext2fs_block_iterate (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, char *block_buf, int (*func)(ext2_filsys @var{fs}, blk_t *@var{blocknr}, int @var{blockcnt}, void *@var{private}), void *@var{private})
 
 Iterate over all of the blocks in inode number @var{ino} in filesystem
 @var{fs}, by calling the function @var{func} for each block in the
@@ -566,7 +683,7 @@
 
 @deftypefun errcode_t ext2fs_block_iterate2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, char *@var{block}_buf, int (*func)(ext2_filsys @var{fs}, blk_t *@var{blocknr}, e2_blkcnt_t @var{blockcnt}, blk_t @var{ref_blk}, int  @var{ref_offset}, void *@var{private}), void *@var{private})
 
-This function is much like @code{ext2fs_block_iterate2}, except that the
+This function is much like @code{ext2fs_block_iterate}, except that the
 @var{blockcnt} type is a 64-bit signed quantity, to support larger
 files, and the addition of the @var{ref_blk} and @var{ref_offset}
 arguments passed to the callback function, which identify the location
@@ -595,7 +712,7 @@
 Returns 0 if @var{ino} is a directory, and @code{ENOTDIR} if it is not.
 @end deftypefun
 
-@deftypefun int ext2_inode_has_valid_blocks (struct ext2_inode *@var{inode})
+@deftypefun int ext2fs_inode_has_valid_blocks (struct ext2_inode *@var{inode})
 
 Returns 1 if the inode's block entries actually valid block entries, and
 0 if not.  Inodes which represent devices and fast symbolic links do not
@@ -635,9 +752,7 @@
 byte swapping if necessary.
 @end deftypefun
 
-@deftypefun errcode_t ext2fs_new_dir_block (ext2_filsys @var{fs},
-ext2_ino_t @var{dir_ino}, ext2_ino_t @var{parent_ino}, char
-**@var{block})
+@deftypefun errcode_t ext2fs_new_dir_block (ext2_filsys @var{fs}, ext2_ino_t @var{dir_ino}, ext2_ino_t @var{parent_ino}, char **@var{block})
 
 This function creates a new directory block in @var{block}.  If
 @var{dir_ino} is non-zero, then @var{dir_info} and @var{parent_ino} is used
@@ -1193,7 +1308,7 @@
 @deftypefun errcode_t ext2fs_check_desc (ext2_filsys @var{fs})
 @end deftypefun
 
-@deftypefun errcode_t ext2_get_num_dirs (ext2_filsys @var{fs}, ext2_ino_t *@var{ret_num_dirs})
+@deftypefun errcode_t ext2fs_get_num_dirs (ext2_filsys @var{fs}, ext2_ino_t *@var{ret_num_dirs})
 @end deftypefun
 
 
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index 4db7c68..dddd014 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -1,52 +1,80 @@
-%% TeX macros to handle Texinfo files.
-%% $Id$
-
-%  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
-%                94, 95, 1996 Free Software Foundation, Inc.
-
-%This texinfo.tex file is free software; you can redistribute it and/or
-%modify it under the terms of the GNU General Public License as
-%published by the Free Software Foundation; either version 2, or (at
-%your option) any later version.
-
-%This texinfo.tex file is distributed in the hope that it will be
-%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%General Public License for more details.
-
-%You should have received a copy of the GNU General Public License
-%along with this texinfo.tex file; see the file COPYING.  If not, write
-%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-%Boston, MA 02111-1307, USA.
-
-
-%In other words, you are welcome to use, share and improve this program.
-%You are forbidden to forbid anyone else to use, share and improve
-%what you give them.   Help stamp out software-hoarding!
-
-
-% Send bug reports to bug-texinfo@prep.ai.mit.edu.
-% Please include a *precise* test case in each bug report.
-
-
-% Make it possible to create a .fmt file just by loading this file:
-% if the underlying format is not loaded, start by loading it now.
-% Added by gildea November 1993.
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2006-02-13.16}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
+% Software Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this texinfo.tex file; see the file COPYING.  If not, write
+% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction.  (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+%   ftp://tug.org/tex/texinfo.tex
+%     (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent.  You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
 
-% This automatically updates the version number based on RCS.
-\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision$
-\message{Loading texinfo package [Version \texinfoversion]:}
+
+\message{Loading texinfo [version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
 % and turn on active characters that we couldn't do earlier because
 % they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
+\everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
-% Save some parts of plain tex whose names we will redefine.
+\message{Basics,}
+\chardef\other=12
 
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
 \let\ptexb=\b
 \let\ptexbullet=\bullet
 \let\ptexc=\c
@@ -54,99 +82,203 @@
 \let\ptexdot=\.
 \let\ptexdots=\dots
 \let\ptexend=\end
-\let\ptexequiv = \equiv
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
 \let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
 \let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
 \let\ptexrbrace=\}
+\let\ptexslash=\/
 \let\ptexstar=\*
 \let\ptext=\t
-\let\ptextilde=\~
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-\let\~ = \tie                  % And make it available as @~.
-
-
-\message{Basics,}
-\chardef\other=12
 
 % If this character appears in an error message or help string, it
 % starts a new line in the output.
 \newlinechar = `^^J
 
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Pre-3.0.
+\else
+  \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
 
 % Ignore a token.
 %
 \def\gobble#1{}
 
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+  ap-pen-dix bit-map bit-maps
+  data-base data-bases eshell fall-ing half-way long-est man-u-script
+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+  spell-ing spell-ings
+  stand-alone strong-est time-stamp time-stamps which-ever white-space
+  wide-spread wrap-around
+}
 
 % Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset  
-\newdimen \normaloffset   
+\newdimen\bindingoffset
+\newdimen\normaloffset
 \newdimen\pagewidth \newdimen\pageheight
 
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
 % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
+% since that produces some useless output on the terminal.  We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
 %
 \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{\tracingcommands2 \tracingstats2
-   \tracingpages1 \tracingoutput1 \tracinglostchars1
-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
+\def\loggingall{%
+  \tracingstats2
+  \tracingpages1
+  \tracinglostchars2  % 2 gives us more in etex
+  \tracingparagraphs1
+  \tracingoutput1
+  \tracingmacros2
+  \tracingrestores1
+  \showboxbreadth\maxdimen \showboxdepth\maxdimen
+  \ifx\eTeXversion\undefined\else % etex gives us more logging
+    \tracingscantokens1
+    \tracingifs1
+    \tracinggroups1
+    \tracingnesting2
+    \tracingassigns1
+  \fi
+  \tracingcommands3  % 3 gives us more in etex
+  \errorcontextlines16
 }%
 
-%---------------------Begin change-----------------------
+% add check for \lastpenalty to plain's definitions.  If the last thing
+% we did was a \nobreak, we don't want to insert more space.
 %
-%%%% For @cropmarks command.
-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+  \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+  \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+  \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
 %
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen \topandbottommargin
-\newdimen \outerhsize \newdimen \outervsize
-\cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
 %
-%---------------------End change-----------------------
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
 
 % Main output routine.
 \chardef\PAGE = 255
 \output = {\onepageout{\pagecontents\PAGE}}
 
-\newbox\headlinebox  \newbox\footlinebox
+\newbox\headlinebox
+\newbox\footlinebox
 
 % \onepageout takes a vbox as an argument.  Note that \pagecontents
 % does insertions, but you have to call it yourself.
 \def\onepageout#1{%
-  \hoffset=\normaloffset
+  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+  %
   \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi
   %
@@ -160,58 +292,69 @@
     % take effect in \write's, yet the group defined by the \vbox ends
     % before the \shipout runs.
     %
-    \escapechar = `\\     % use backslash in output files.
     \indexdummies         % don't expand commands in the output.
     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
-                   % the page break happens to be in the middle of an example.
+               % the page break happens to be in the middle of an example.
+               % We don't want .vr (or whatever) entries like this:
+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % "\acronym" won't work when it's read back in;
+               % it needs to be 
+               % {\code {{\tt \backslashcurfont }acronym}
     \shipout\vbox{%
+      % Do this early so pdf references go to the beginning of the page.
+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+      %
+      \ifcropmarks \vbox to \outervsize\bgroup
+        \hsize = \outerhsize
+        \vskip-\topandbottommargin
+        \vtop to0pt{%
+          \line{\ewtop\hfil\ewtop}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vss}%
+        \vskip\topandbottommargin
+        \line\bgroup
+          \hfil % center the page within the outer (page) hsize.
+          \ifodd\pageno\hskip\bindingoffset\fi
+          \vbox\bgroup
+      \fi
+      %
       \unvbox\headlinebox
       \pagebody{#1}%
-      \unvbox\footlinebox
-    }%
-    }%
+      \ifdim\ht\footlinebox > 0pt
+        % Only leave this space if the footline is nonempty.
+        % (We lessened \vsize for it in \oddfootingxxx.)
+        % The \baselineskip=24pt in plain's \makefootline has no effect.
+        \vskip 2\baselineskip
+        \unvbox\footlinebox
+      \fi
+      %
+      \ifcropmarks
+          \egroup % end of \vbox\bgroup
+        \hfil\egroup % end of (centering) \line\bgroup
+        \vskip\topandbottommargin plus1fill minus1fill
+        \boxmaxdepth = \cornerthick
+        \vbox to0pt{\vss
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \line{\ewbot\hfil\ewbot}%
+        }%
+      \egroup % \vbox from first cropmarks clause
+      \fi
+    }% end of \shipout\vbox
+  }% end of group with \indexdummies
   \advancepageno
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
 }
 
-%%%% For @cropmarks command %%%%
-
-% Here is a modification of the main output routine for Near East Publications
-% This provides right-angle cropmarks at all four corners.
-% The contents of the page are centerlined into the cropmarks,
-% and any desired binding offset is added as an \hskip on either
-% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
-%
-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-{\escapechar=`\\\relax % makes sure backslash is used in output files.
-                 \shipout
-                 \vbox to \outervsize{\hsize=\outerhsize
-                 \vbox{\line{\ewtop\hfill\ewtop}}
-                 \nointerlineskip
-                 \line{\vbox{\moveleft\cornerthick\nstop}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nstop}}
-                 \vskip \topandbottommargin
-                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-                        \vbox{
-                        {\let\hsize=\pagewidth \makeheadline}
-                        \pagebody{#1}
-                        {\let\hsize=\pagewidth \makefootline}}
-                        \ifodd\pageno\else\hskip\bindingoffset\fi}
-                 \vskip \topandbottommargin plus1fill minus1fill
-                 \boxmaxdepth\cornerthick
-                 \line{\vbox{\moveleft\cornerthick\nsbot}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nsbot}}
-                 \nointerlineskip
-                 \vbox{\line{\ewbot\hfill\ewbot}}
-        }}
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-%
-% Do @cropmarks to get crop marks
-\def\cropmarks{\let\onepageout=\croppageout }
-
 \newinsert\margin \dimen\margin=\maxdimen
 
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
@@ -225,7 +368,6 @@
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }
 
-%
 % Here are the rules for the cropmarks.  Note that they are
 % offset so that the space between them is truly \outerhsize or \outervsize
 % (P. A. MacKay, 12 November, 1986)
@@ -241,149 +383,168 @@
 % the input line (except we remove a trailing comment).  #1 should be a
 % macro which expects an ordinary undelimited TeX argument.
 %
-\def\parsearg#1{%
-  \let\next = #1%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+  \def\next{#2}%
   \begingroup
     \obeylines
-    \futurelet\temp\parseargx
+    \spaceisspace
+    #1%
+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
 }
 
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse.  Otherwise, we're done.
-\def\parseargx{%
-  % \obeyedspace is defined far below, after the definition of \sepspaces.
-  \ifx\obeyedspace\temp
-    \expandafter\parseargdiscardspace
-  \else
-    \expandafter\parseargline
-  \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
 {\obeylines %
   \gdef\parseargline#1^^M{%
     \endgroup % End of the group started in \parsearg.
-    %
-    % First remove any @c comment, then any @comment.
-    % Result of each macro is put in \toks0.
-    \argremovec #1\c\relax %
-    \expandafter\argremovecomment \the\toks0 \comment\relax %
-    %
-    % Call the caller's macro, saved as \next in \parsearg.
-    \expandafter\next\expandafter{\the\toks0}%
+    \argremovecomment #1\comment\ArgTerm%
   }%
 }
 
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us.  The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
 %    @end itemize  @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'.  Here we remove all active spaces from #1, and assign the
-% result to \toks0.
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
 %
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands.  (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.)  But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
-  \begingroup
-    \ignoreactivespaces
-    \edef\temp{#1}%
-    \global\toks0 = \expandafter{\temp}%
-  \endgroup
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+  \def\temp{#3}%
+  \ifx\temp\empty
+    % We cannot use \next here, as it holds the macro to run;
+    % thus we reuse \temp.
+    \let\temp\finishparsearg
+  \else
+    \let\temp\argcheckspaces
+  \fi
+  % Put the space token in:
+  \temp#1 #3\ArgTerm
 }
 
-% Change the active space to expand to nothing.
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \next.
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
 %
-\begingroup
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
+
+% \parseargdef\foo{...}
+%	is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick.  --kasal, 16nov03
+
+\def\parseargdef#1{%
+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+  \def#2{\parsearg#1}%
+  \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
   \obeyspaces
-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
+  \gdef\obeyedspace{ }
+
+  % Make each space character in the input produce a normal interword
+  % space in the output.  Don't allow a line break at this space, as this
+  % is used only in environments like @example, where each line of input
+  % should produce a line of output anyway.
+  %
+  \gdef\sepspaces{\obeyspaces\let =\tie}
+
+  % If an index command is used in an @example environment, any spaces
+  % therein should become regular spaces in the raw index file, not the
+  % expansion of \tie (\leavevmode \penalty \@M \ ).
+  \gdef\unsepspaces{\let =\space}
+}
 
 
 \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
 
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment.  Type Return to continue.}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Type <Return> to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
+% Define the framework for environments in texinfo.tex.  It's used like this:
 %
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
-  \removeactivespaces{#1}%
-  \edef\endthing{\the\toks0}%
-  %
-  \expandafter\ifx\csname E\endthing\endcsname\relax
-    \expandafter\ifx\csname \endthing\endcsname\relax
-      % There's no \foo, i.e., no ``environment'' foo.
-      \errhelp = \EMsimple
-      \errmessage{Undefined command `@end \endthing'}%
-    \else
-      \unmatchedenderror\endthing
-    \fi
+%   \envdef\foo{...}
+%   \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo.  \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches.  The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as enviroments; they don't open a group.  (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+  \def\temp{#1}%
+  \ifx\thisenv\temp
   \else
-    % Everything's ok; the right environment has been started.
-    \csname E\endthing\endcsname
+    \badenverr
   \fi
 }
 
-% There is an environment #1, but it hasn't been started.  Give an error.
-%
-\def\unmatchedenderror#1{%
+% Evironment mismatch, #1 expected:
+\def\badenverr{%
   \errhelp = \EMsimple
-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+  \errmessage{This command can appear only \inenvironment\temp,
+    not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+  \ifx#1\empty
+    out of any environment%
+  \else
+    in environment \expandafter\string#1%
+  \fi
 }
 
-% Define the control sequence \E#1 to give an unmatched @end error.
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
 %
-\def\defineunmatchedend#1{%
-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+\parseargdef\end{%
+  \if 1\csname iscond.#1\endcsname
+  \else
+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    \expandafter\checkenv\csname#1\endcsname
+    \csname E#1\endcsname
+    \endgroup
+  \fi
 }
 
+\newhelp\EMsimple{Press RETURN to continue.}
 
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
-  % Why was this kern here?  It messes up equalizing space above and below
-  % environments.  --karl, 6may93
-  %{\advance \baselineskip by -\singlespaceskip
-  %\kern \baselineskip}%
-  \setleading \singlespaceskip
-}
 
 %% Simple single-character @ commands
 
 % @@ prints an @
 % Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
+\def\@{{\tt\char64}}
 
 % This is turned off because it was never documented
 % and you can use @w{...} around a quote to suppress ligatures.
@@ -393,21 +554,27 @@
 %\def\'{{'}}
 
 % Used to generate quoted braces.
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
 \let\{=\mylbrace
 \let\}=\myrbrace
 \begingroup
-  % Definitions to produce actual \{ & \} command in an index.
-  \catcode`\{ = 12 \catcode`\} = 12
+  % Definitions to produce \{ and \} commands for indices,
+  % and @{ and @} for the aux/toc files.
+  \catcode`\{ = \other \catcode`\} = \other
   \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\@ = 0 \catcode`\\ = 12
-  @gdef@lbracecmd[\{]%
-  @gdef@rbracecmd[\}]%
-@endgroup
+  \catcode`\! = 0 \catcode`\\ = \other
+  !gdef!lbracecmd[\{]%
+  !gdef!rbracecmd[\}]%
+  !gdef!lbraceatcmd[@{]%
+  !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
 
 % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
 \let\, = \c
 \let\dotaccent = \.
 \def\ringaccent#1{{\accent23 #1}}
@@ -415,10 +582,12 @@
 \let\ubaraccent = \b
 \let\udotaccent = \d
 
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
 \def\questiondown{?`}
 \def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
 
 % Dotless i and dotless j, used for accents.
 \def\imacro{i}
@@ -431,23 +600,69 @@
   \fi\fi
 }
 
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+  \kern-.15em
+  \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
 % @: forces normal size whitespace following.
 \def\:{\spacefactor=1000 }
 
 % @* forces a line break.
 \def\*{\hfil\break\hbox{}\ignorespaces}
 
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
+% @/ allows a line break.
+\let\/=\allowbreak
 
-% @enddots{} is an end-of-sentence ellipsis.
-\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
 
 % @! is an end-of-sentence bang.
-\gdef\!{!\spacefactor=3000 }
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
 
 % @? is an end-of-sentence query.
-\gdef\?{?\spacefactor=3000 }
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off  says whether to put extra space after punctuation.
+% 
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+  \def\temp{#1}%
+  \ifx\temp\onword \plainfrenchspacing
+  \else\ifx\temp\offword \plainnonfrenchspacing
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+  \fi\fi
+}
 
 % @w prevents a word break.  Without the \leavevmode, @w at the
 % beginning of a paragraph, when TeX is still in vertical mode, would
@@ -462,47 +677,24 @@
 % therefore, no glue is inserted, and the space between the headline and
 % the text is small, which looks bad.
 %
-\def\group{\begingroup
-  \ifnum\catcode13=\active \else
+% Another complication is that the group might be very large.  This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material.  In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom.  The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+  \ifnum\catcode`\^^M=\active \else
     \errhelp = \groupinvalidhelp
     \errmessage{@group invalid in context where filling is enabled}%
   \fi
+  \startsavinginserts
   %
-  % The \vtop we start below produces a box with normal height and large
-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
-  % next line of text is done) \lineskip glue after it.  (See p.82 of
-  % the TeXbook.)  Thus, space below is not quite equal to space
-  % above.  But it's pretty close.
-  \def\Egroup{%
-    \egroup           % End the \vtop.
-    \endgroup         % End the \group.
-  }%
-  %
-  \vtop\bgroup
-    % We have to put a strut on the last line in case the @group is in
-    % the midst of an example, rather than completely enclosing it.
-    % Otherwise, the interline space between the last line of the group
-    % and the first line afterwards is too small.  But we can't put the
-    % strut in \Egroup, since there it would be on a line by itself.
-    % Hence this just inserts a strut at the beginning of each line.
-    \everypar = {\strut}%
-    %
-    % Since we have a strut on every line, we don't need any of TeX's
-    % normal interline spacing.
-    \offinterlineskip
-    %
-    % OK, but now we have to do something about blank
-    % lines in the input in @example-like environments, which normally
-    % just turn into \lisppar, which will insert no space now that we've
-    % turned off the interline space.  Simplest is to make them be an
-    % empty paragraph.
-    \ifx\par\lisppar
-      \edef\par{\leavevmode \par}%
-      %
-      % Reset ^^M's definition to new definition of \par.
-      \obeylines
-    \fi
-    %
+  \setbox\groupbox = \vtop\bgroup
     % Do @comment since we are called inside an environment such as
     % @example, where each end-of-line in the input causes an
     % end-of-line in the output.  We don't want the end-of-line after
@@ -512,6 +704,32 @@
     \comment
 }
 %
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it.  Thus, space below is not quite equal to space
+% above.  But it's pretty close.
+\def\Egroup{%
+    % To get correct interline space between the last line of the group
+    % and the first line afterwards, we have to propagate \prevdepth.
+    \endgraf % Not \par, as it may have been set to \lisppar.
+    \global\dimen1 = \prevdepth
+  \egroup           % End the \vtop.
+  % \dimen0 is the vertical size of the group's box.
+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
+  % \dimen2 is how much space is left on the page (more or less).
+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  % if the group doesn't fit on the current page, and it's a big big
+  % group, force a page break.
+  \ifdim \dimen0 > \dimen2
+    \ifdim \pagetotal < \vfilllimit\pageheight
+      \page
+    \fi
+  \fi
+  \box\groupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+%
 % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
 % message, so this ends up printing `@group can only ...'.
 %
@@ -524,60 +742,60 @@
 
 \newdimen\mil  \mil=0.001in
 
-\def\need{\parsearg\needx}
-
 % Old definition--didn't work.
-%\def\needx #1{\par %
+%\parseargdef\need{\par %
 %% This method tries to make TeX break the page naturally
 %% if the depth of the box does not fit.
 %{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
 %\prevdepth=-1000pt
 %}}
 
-\def\needx#1{%
-  % Go into vertical mode, so we don't make a big box in the middle of a
+\parseargdef\need{%
+  % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.
   \par
   %
-  % Don't add any leading before our big empty box, but allow a page
-  % break, since the best break might be right here.
-  \allowbreak
-  \nointerlineskip
-  \vtop to #1\mil{\vfil}%
-  %
-  % TeX does not even consider page breaks if a penalty added to the
-  % main vertical list is 10000 or more.  But in order to see if the
-  % empty box we just added fits on the page, we must make it consider
-  % page breaks.  On the other hand, we don't want to actually break the
-  % page after the empty box.  So we use a penalty of 9999.
-  %
-  % There is an extremely small chance that TeX will actually break the
-  % page at this \penalty, if there are no other feasible breakpoints in
-  % sight.  (If the user is using lots of big @group commands, which
-  % almost-but-not-quite fill up a page, TeX will have a hard time doing
-  % good page breaking, for example.)  However, I could not construct an
-  % example where a page broke at this \penalty; if it happens in a real
-  % document, then we can reconsider our strategy.
-  \penalty9999
-  %
-  % Back up by the size of the box, whether we did a page break or not.
-  \kern -#1\mil
-  %
-  % Do not allow a page break right after this kern.
-  \nobreak
+  % If the @need value is less than one line space, it's useless.
+  \dimen0 = #1\mil
+  \dimen2 = \ht\strutbox
+  \advance\dimen2 by \dp\strutbox
+  \ifdim\dimen0 > \dimen2
+    %
+    % Do a \strut just to make the height of this box be normal, so the
+    % normal leading is inserted relative to the preceding line.
+    % And a page break here is fine.
+    \vtop to #1\mil{\strut\vfil}%
+    %
+    % TeX does not even consider page breaks if a penalty added to the
+    % main vertical list is 10000 or more.  But in order to see if the
+    % empty box we just added fits on the page, we must make it consider
+    % page breaks.  On the other hand, we don't want to actually break the
+    % page after the empty box.  So we use a penalty of 9999.
+    %
+    % There is an extremely small chance that TeX will actually break the
+    % page at this \penalty, if there are no other feasible breakpoints in
+    % sight.  (If the user is using lots of big @group commands, which
+    % almost-but-not-quite fill up a page, TeX will have a hard time doing
+    % good page breaking, for example.)  However, I could not construct an
+    % example where a page broke at this \penalty; if it happens in a real
+    % document, then we can reconsider our strategy.
+    \penalty9999
+    %
+    % Back up by the size of the box, whether we did a page break or not.
+    \kern -#1\mil
+    %
+    % Do not allow a page break right after this kern.
+    \nobreak
+  \fi
 }
 
-% @br   forces paragraph break
+% @br   forces paragraph break (and is undocumented).
 
 \let\br = \par
 
-% @dots{}  output some dots
-
-\def\dots{$\ldots$}
-
-% @page    forces the start of a new page
-
+% @page forces the start of a new page.
+%
 \def\page{\par\vfill\supereject}
 
 % @exdent text....
@@ -588,467 +806,692 @@
 \newskip\exdentamount
 
 % This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
 
 % This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+  \leftline{\hskip\leftskip{\rm#1}}}}
 
-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-
-\def\inmargin#1{%
-\strut\vadjust{\nobreak\kern-\strutdepth
-  \vtop to \strutdepth{\baselineskip\strutdepth\vss
-  \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph.  For more general purposes, use the \margin insertion
+% class.  WHICH is `l' or `r'.
+%
 \newskip\inmarginspacing \inmarginspacing=1cm
 \def\strutdepth{\dp\strutbox}
-
-%\hbox{{\rm#1}}\hfil\break}}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+  \nobreak
+  \kern-\strutdepth
+  \vtop to \strutdepth{%
+    \baselineskip=\strutdepth
+    \vss
+    % if you have multiple lines of stuff to put here, you'll need to
+    % make the vbox yourself of the appropriate size.
+    \ifx#1l%
+      \llap{\ignorespaces #2\hskip\inmarginspacing}%
+    \else
+      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+    \fi
+    \null
+  }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+  \setbox0 = \hbox{\ignorespaces #2}%
+  \ifdim\wd0 > 0pt
+    \def\lefttext{#1}%  have both texts
+    \def\righttext{#2}%
+  \else
+    \def\lefttext{#1}%  have only one text
+    \def\righttext{#1}%
+  \fi
+  %
+  \ifodd\pageno
+    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+  \else
+    \def\temp{\inleftmargin\lefttext}%
+  \fi
+  \temp
+}
 
 % @include file    insert text of that file as input.
-% Allow normal characters that  we make active in the argument (a file name).
-\def\include{\begingroup
-  \catcode`\\=12
-  \catcode`~=12
-  \catcode`^=12
-  \catcode`_=12
-  \catcode`|=12
-  \catcode`<=12
-  \catcode`>=12
-  \catcode`+=12
-  \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
-  % Read the included file in a group so nested @include's work.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+  \pushthisfilestack
   \def\thisfile{#1}%
-  \input\thisfile
-\endgroup}
+  {%
+    \makevalueexpandable
+    \def\temp{\input #1 }%
+    \expandafter
+  }\temp
+  \popthisfilestack
+}
+\def\filenamecatcodes{%
+  \catcode`\\=\other
+  \catcode`~=\other
+  \catcode`^=\other
+  \catcode`_=\other
+  \catcode`|=\other
+  \catcode`<=\other
+  \catcode`>=\other
+  \catcode`+=\other
+  \catcode`-=\other
+}
+
+\def\pushthisfilestack{%
+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+  \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+  the stack of filenames is empty.}}
 
 \def\thisfile{}
 
-% @center line   outputs that line, centered
-
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+  \ifhmode
+    \let\next\centerH
+  \else
+    \let\next\centerV
+  \fi
+  \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+  {%
+    \hfil\break
+    \advance\hsize by -\leftskip
+    \advance\hsize by -\rightskip
+    \line{#1}%
+    \break
+  }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
 
 % @sp n   outputs n lines of vertical space
 
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
+\parseargdef\sp{\vskip #1\baselineskip}
 
 % @comment ...line which is ignored...
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 
-\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
-\parsearg \commentxxx}
-
-\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
 
 \let\c=\comment
 
-% @paragraphindent  is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-\let\chapter=\relax
-\let\unnumbered=\relax
-\let\top=\relax
-\let\unnumberedsec=\relax
-\let\unnumberedsection=\relax
-\let\unnumberedsubsec=\relax
-\let\unnumberedsubsection=\relax
-\let\unnumberedsubsubsec=\relax
-\let\unnumberedsubsubsection=\relax
-\let\section=\relax
-\let\subsec=\relax
-\let\subsubsec=\relax
-\let\subsection=\relax
-\let\subsubsection=\relax
-\let\appendix=\relax
-\let\appendixsec=\relax
-\let\appendixsection=\relax
-\let\appendixsubsec=\relax
-\let\appendixsubsection=\relax
-\let\appendixsubsubsec=\relax
-\let\appendixsubsubsection=\relax
-\let\contents=\relax
-\let\smallbook=\relax
-\let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
 %
-\def\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \relax
-  \let\deffn = \relax
-  \let\deffnx = \relax
-  \let\defindex = \relax
-  \let\defivar = \relax
-  \let\defmac = \relax
-  \let\defmethod = \relax
-  \let\defop = \relax
-  \let\defopt = \relax
-  \let\defspec = \relax
-  \let\deftp = \relax
-  \let\deftypefn = \relax
-  \let\deftypefun = \relax
-  \let\deftypevar = \relax
-  \let\deftypevr = \relax
-  \let\defun = \relax
-  \let\defvar = \relax
-  \let\defvr = \relax
-  \let\ref = \relax
-  \let\xref = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\settitle = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\everyheading = \relax
-  \let\evenheading = \relax
-  \let\oddheading = \relax
-  \let\everyfooting = \relax
-  \let\evenfooting = \relax
-  \let\oddfooting = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\lowersections = \relax
-  \let\down = \relax
-  \let\raisesections = \relax
-  \let\up = \relax
-  \let\set = \relax
-  \let\clear = \relax
-  \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
 %
-\def\ignore{\doignore{ignore}}
-
-% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% Also ignore @macro ... @end macro.  The user must run texi2dvi,
-% which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
-\def\macro{\doignore{macro}}
-\let\unmacro = \comment
-
-
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  \long\def\doignoretext##1\end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode32 = 10
-  %
-  % And now expand that command.
-  \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{  (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \global\warnedobstrue
+\parseargdef\paragraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
     \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the change of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook: make the current font be a dummy font.
-  %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
-    %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
-    %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because not all sites
-    % might have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm = \nullfont  \let\tenit = \nullfont  \let\tensl = \nullfont
-    \let\tenbf = \nullfont  \let\tentt = \nullfont  \let\smallcaps = \nullfont
-    \let\tensf = \nullfont
-    % Similarly for index fonts (mostly for their use in
-    % smallexample)
-    \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont
-    \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont
-    \let\indsf = \nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex
-    \def\tex{\doignore{tex}}
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.  Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
   \fi
-  \endgroup
+  \parindent = \defaultparindent
 }
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
 
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-%
-\def\value{\begingroup
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \valuexxx}
-\def\valuexxx#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {\{No value for ``#1''\}}%
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
   \else
-    \csname SET#1\endcsname
-  \fi
-\endgroup}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifsetfail
-  \else
-    \expandafter\ifsetsucceed
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
   \fi
 }
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
 
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indent at such
+% paragraphs.
 %
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifclearsucceed
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
   \else
-    \expandafter\ifclearfail
-  \fi
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
 }
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
 
-% @iftex always succeeds; we read the text following, through @end
-% iftex).  But `@end iftex' should be valid only after an @iftex.
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
 %
-\def\iftex{\conditionalsucceed{iftex}}
-\defineunmatchedend{iftex}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group).  So we must
-% define \Eiftex to redefine itself to be its previous value.  (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
+% We also make \indent itself not actually do anything until the next
+% paragraph.
 %
-\def\conditionalsucceed#1{%
-  \edef\temp{%
-    % Remember the current value of \E#1.
-    \let\nece{prevE#1} = \nece{E#1}%
-    %
-    % At the `@end #1', redefine \E#1 to be its previous value.
-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \restorefirstparagraphindent
+    \indent
   }%
-  \temp
+  \gdef\noindent{%
+    \restorefirstparagraphindent
+    \noindent
+  }%
+  \global\everypar = {%
+    \kern -\parindent
+    \restorefirstparagraphindent
+  }%
 }
 
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+\gdef\restorefirstparagraphindent{%
+  \global \let \indent = \ptexindent
+  \global \let \noindent = \ptexnoindent
+  \global \everypar = {}%
+}
+
 
 % @asis just yields its argument.  Used with @table, for example.
 %
 \def\asis#1{#1}
 
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written.  Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo).  So we must use a
-% control sequence to switch into and out of math mode.
+% @math outputs its argument in math mode.
 %
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode`\_ = \active
+  \gdef\mathunderscore{%
+    \catcode`\_=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care.  Texinfo does not
+% otherwise define @\.
 %
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+  \tex
+  \mathunderscore
+  \let\\ = \mathbackslash
+  \mathactive
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+  \catcode`^ = \active
+  \catcode`< = \active
+  \catcode`> = \active
+  \catcode`+ = \active
+  \gdef\mathactive{%
+    \let^ = \ptexhat
+    \let< = \ptexless
+    \let> = \ptexgtr
+    \let+ = \ptexplus
+  }
+}
 
 % @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
 
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+  \leavevmode
+  \hbox to 1.5em{%
+    \hskip 0pt plus 0.25fil
+    .\hfil.\hfil.%
+    \hskip 0pt plus 0.5fil
+  }%
+}
 
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\global\let\lastnode=\relax}
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=\endofsentencespacefactor
+}
 
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\appendixnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
 
 % @refill is a no-op.
 \let\refill=\relax
 
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
 % @setfilename is done at the beginning of every texinfo file.
 % So open here the files we need to have open while reading the input.
 % This makes it possible to make a .fmt file for texinfo.
 \def\setfilename{%
-   \readauxfile
-   \opencontents
-   \openindices
    \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+   \iflinks
+     \tryauxfile
+     % Open the new aux file.  TeX will close it automatically at exit.
+     \immediate\openout\auxfile=\jobname.aux
+   \fi % \openindices needs to do some work in any case.
+   \openindices
+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   \openin 1 texinfo.cnf
+   \ifeof 1 \else \input texinfo.cnf \fi
+   \closein 1
+   %
    \comment % Ignore the actual filename.
 }
 
+% Called from \setfilename.
+%
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
+
 % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
 
-% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-% \def\macroxxx#1#2 \end macro{%
-% \expandafter\gdef\macrotemp#1{#2}%
-% \endgroup}
 
-%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
-%\def\linemacroxxx#1#2 \end linemacro{%
-%\let\parsearg=\relax
-%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
-%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
-%\expandafter\gdef\macrotempx#1{#2}%
-%\endgroup}
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
 
-%\def\butfirst#1{}
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set).  So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+  \ifx\pdfoutput\relax
+  \else
+    \ifcase\pdfoutput
+    \else
+      \pdftrue
+    \fi
+  \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places.  Thus, we have to
+% double any backslashes.  Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e.  Not good.
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
+% (and related messages, the final outcome is that it is up to the TeX
+% user to double the backslashes and otherwise make the string valid, so
+% that's what we do).
+
+% double active backslashes.
+% 
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+   @catcode`@\=@active
+   @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters.  hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens.  I've
+% tinkered with it a little for texinfo, but it's definitely from there.
+% 
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+% 
+\def\HyPsdSubst#1#2#3{%
+  \def\HyPsdReplace##1#1##2\END{%
+    ##1%
+    \ifx\\##2\\%
+    \else
+      #2%
+      \HyReturnAfterFi{%
+        \HyPsdReplace##2\END
+      }%
+    \fi
+  }%
+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
+             % \lastnode when called from \setref -> \pdfmkdest.
+  \HyPsdSubst{(}{\realbackslash(}{#1}%
+  \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\ifpdf
+  \input pdfcolor
+  \pdfcatalog{/PageMode /UseOutlines}%
+  \def\dopdfimage#1#2#3{%
+    \def\imagewidth{#2}%
+    \def\imageheight{#3}%
+    % without \immediate, pdftex seg faults when the same image is
+    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+    \ifnum\pdftexversion < 14
+      \immediate\pdfimage
+    \else
+      \immediate\pdfximage
+    \fi
+      \ifx\empty\imagewidth\else width \imagewidth \fi
+      \ifx\empty\imageheight\else height \imageheight \fi
+      \ifnum\pdftexversion<13
+         #1.pdf%
+       \else
+         {#1.pdf}%
+       \fi
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \atdummies
+    \activebackslashdouble
+    \def\pdfdestname{#1}%
+    \backslashparens\pdfdestname
+    \pdfdest name{\pdfdestname} xyz%
+  }}%
+  %
+  % used to mark target names; must be expandable.
+  \def\pdfmkpgn#1{#1}%
+  %
+  \let\linkcolor = \Blue  % was Cyan, but that seems light?
+  \def\endlink{\Black\pdfendlink}
+  % Adding outlines to PDF; macros for calculating structure of outlines
+  % come from Petr Olsak
+  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+    \else \csname#1\endcsname \fi}
+  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+    \advance\tempnum by 1
+    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+  %
+  % #1 is the section text, which is what will be displayed in the
+  % outline by the pdf viewer.  #2 is the pdf expression for the number
+  % of subentries (or empty, for subsubsections).  #3 is the node text,
+  % which might be empty if this toc entry had no corresponding node.
+  % #4 is the page number
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    % Generate a link to the node text if that exists; else, use the
+    % page number.  We could generate a destination for the section
+    % text in the case where a section has no node, but it doesn't
+    % seem worth the trouble, since most documents are normally structured.
+    \def\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \else
+      % Doubled backslashes in the name.
+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+       \backslashparens\pdfoutlinedest}%
+    \fi
+    %
+    % Also double the backslashes in the display string.
+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+     \backslashparens\pdfoutlinetext}%
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      % Thanh's hack / proper braces in bookmarks
+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+      %
+      % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\numchapentry##1##2##3##4{%
+	\def\thischapnum{##2}%
+	\def\thissecnum{0}%
+	\def\thissubsecnum{0}%
+      }%
+      \def\numsecentry##1##2##3##4{%
+	\advancenumber{chap\thischapnum}%
+	\def\thissecnum{##2}%
+	\def\thissubsecnum{0}%
+      }%
+      \def\numsubsecentry##1##2##3##4{%
+	\advancenumber{sec\thissecnum}%
+	\def\thissubsecnum{##2}%
+      }%
+      \def\numsubsubsecentry##1##2##3##4{%
+	\advancenumber{subsec\thissubsecnum}%
+      }%
+      \def\thischapnum{0}%
+      \def\thissecnum{0}%
+      \def\thissubsecnum{0}%
+      %
+      % use \def rather than \let here because we redefine \chapentry et
+      % al. a second time, below.
+      \def\appentry{\numchapentry}%
+      \def\appsecentry{\numsecentry}%
+      \def\appsubsecentry{\numsubsecentry}%
+      \def\appsubsubsecentry{\numsubsubsecentry}%
+      \def\unnchapentry{\numchapentry}%
+      \def\unnsecentry{\numsecentry}%
+      \def\unnsubsecentry{\numsubsecentry}%
+      \def\unnsubsubsecentry{\numsubsubsecentry}%
+      \readdatafile{toc}%
+      %
+      % Read toc second time, this time actually producing the outlines.
+      % The `-' means take the \expnumber as the absolute number of
+      % subentries, which we calculated on our first read of the .toc above.
+      %
+      % We use the node names as the destinations.
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
+        \dopdfoutline{##1}{}{##3}{##4}}%
+      %
+      % PDF outlines are displayed using system fonts, instead of
+      % document fonts.  Therefore we cannot use special characters,
+      % since the encoding is unknown.  For example, the eogonek from
+      % Latin 2 (0xea) gets translated to a | character.  Info from
+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+      %
+      % xx to do this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Right
+      % now, I guess we'll just let the pdf reader have its way.
+      \indexnofonts
+      \setupdatafile
+      \catcode`\\=\active \otherbackslash
+      \input \jobname.toc
+    \endgroup
+  }
+  %
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \ifx\p\space\else\addtokens{\filename}{\PP}%
+        \advance\filenamelength by 1
+      \fi
+    \fi
+    \nextsp}
+  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \ifnum\pdftexversion < 14
+    \let \startlink \pdfannotlink
+  \else
+    \let \startlink \pdfstartlink
+  \fi
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      % 
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
+      \makevalueexpandable
+      \leavevmode\Red
+      \startlink attr{/Border [0 0 0]}%
+        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+    \endgroup}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+    \linkcolor #1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+  \let\pdfmkdest = \gobble
+  \let\pdfurl = \gobble
+  \let\endlink = \relax
+  \let\linkcolor = \relax
+  \let\pdfmakeoutlines = \relax
+\fi  % \ifx\pdfoutput
 
 
 \message{fonts,}
 
-% Font-change commands.
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname ten#1\endcsname  % change the current font
+}
 
-% Texinfo supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
 \newfam\sffam
-\def\sf{\fam=\sffam \tensf}
+\def\sf{\fam=\sffam \setfontstyle{sf}}
 \let\li = \sf % Sometimes we call it \li, not \sf.
 
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
 
-%% Try out Computer Modern fonts at \magstephalf
-\let\mainmagstep=\magstephalf
+% Default leading.
+\newdimen\textleading  \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly.  There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+  \normalbaselineskip = #1\relax
+  \normallineskip = \lineskipfactor\normalbaselineskip
+  \normalbaselines
+  \setbox\strutbox =\hbox{%
+    \vrule width0pt height\strutheightpercent\baselineskip
+                    depth \strutdepthpercent \baselineskip
+  }%
+}
 
 % Set the font macro #1 to the font named #2, adding on the
 % specified font prefix (normally `cm').
@@ -1078,17 +1521,11 @@
 \def\scshape{csc}
 \def\scbshape{csc}
 
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
-\else
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
 \setfont\textrm\rmshape{10}{\mainmagstep}
 \setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
 \setfont\textbf\bfshape{10}{\mainmagstep}
 \setfont\textit\itshape{10}{\mainmagstep}
 \setfont\textsl\slshape{10}{\mainmagstep}
@@ -1098,41 +1535,68 @@
 \font\texti=cmmi10 scaled \mainmagstep
 \font\textsy=cmsy10 scaled \mainmagstep
 
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
 \setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
 
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\slshape{9}{1000}
-\let\indsl=\indit
-\let\indtt=\ninett
-\let\indttsl=\ninett
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
 
 % Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
 \setfont\chaprm\rmbshape{12}{\magstep2}
 \setfont\chapit\itbshape{10}{\magstep3}
 \setfont\chapsl\slbshape{10}{\magstep3}
 \setfont\chaptt\ttbshape{12}{\magstep2}
 \setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{12}{\magstep2}
+\setfont\chapsf\sfbshape{17}{1000}
 \let\chapbf=\chaprm
 \setfont\chapsc\scbshape{10}{\magstep3}
 \font\chapi=cmmi12 scaled \magstep2
 \font\chapsy=cmsy10 scaled \magstep3
 
 % Section fonts (14.4pt).
+\def\secnominalsize{14pt}
 \setfont\secrm\rmbshape{12}{\magstep1}
 \setfont\secit\itbshape{10}{\magstep2}
 \setfont\secsl\slbshape{10}{\magstep2}
@@ -1144,113 +1608,188 @@
 \font\seci=cmmi12 scaled \magstep1
 \font\secsy=cmsy10 scaled \magstep2
 
-% \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.
-% \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.
-% \setfont\ssecsl\slshape{10}{\magstep1}
-% \setfont\ssectt\ttshape{10}{\magstep1}
-% \setfont\ssecsf\sfshape{10}{\magstep1}
-
-%\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.
-%\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than
-%\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.
-%\setfont\ssectt\ttshape{10}{1315}
-%\setfont\ssecsf\sfshape{10}{1315}
-
-%\let\ssecbf=\ssecrm
-
 % Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
 \setfont\ssecrm\rmbshape{12}{\magstephalf}
 \setfont\ssecit\itbshape{10}{1315}
 \setfont\ssecsl\slbshape{10}{1315}
 \setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{\magstep1}
+\setfont\ssecttsl\ttslshape{10}{1315}
 \setfont\ssecsf\sfbshape{12}{\magstephalf}
 \let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
+\setfont\ssecsc\scbshape{10}{1315}
 \font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled \magstep1
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
+\font\ssecsy=cmsy10 scaled 1315
 
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\let\authorrm = \secrm
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
 
 % In order for the font changes to affect most math symbols and letters,
 % we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
 %
 \def\resetmathfonts{%
-  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
-  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
-  \textfont\ttfam = \tentt \textfont\sffam = \tensf
+  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+  \textfont\ttfam=\tentt \textfont\sffam=\tensf
 }
 
-
 % The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
+% of just \STYLE.  We do this because \STYLE needs to also set the
+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower).  These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
 \def\textfonts{%
   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
-  \resetmathfonts}
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \let\tenttsl=\textttsl
+  \def\curfontsize{text}%
+  \def\lsize{reduced}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+  \let\tenttsl=\titlettsl
+  \def\curfontsize{title}%
+  \def\lsize{chap}\def\lllsize{subsec}%
+  \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
 \def\chapfonts{%
   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+  \let\tenttsl=\chapttsl
+  \def\curfontsize{chap}%
+  \def\lsize{sec}\def\lllsize{text}%
   \resetmathfonts \setleading{19pt}}
 \def\secfonts{%
   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \let\tenttsl=\secttsl
+  \def\curfontsize{sec}%
+  \def\lsize{subsec}\def\lllsize{reduced}%
   \resetmathfonts \setleading{16pt}}
 \def\subsecfonts{%
   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \let\tenttsl=\ssecttsl
+  \def\curfontsize{ssec}%
+  \def\lsize{text}\def\lllsize{small}%
   \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
-  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-  \resetmathfonts \setleading{12pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+  \let\tenttsl=\reducedttsl
+  \def\curfontsize{reduced}%
+  \def\lsize{small}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+  \let\tenttsl=\smallttsl
+  \def\curfontsize{small}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+  \let\tenttsl=\smallerttsl
+  \def\curfontsize{smaller}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{9.5pt}}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+%   8.5x11=86   smallbook=72  a4=90  a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+%   8.5x11=90+  smallbook=80  a4=90+  a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt.  So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+%   8.5x11=71  smallbook=60  a4=75  a5=58
+%
+% I wish the USA used A4 paper.
+% --karl, 24jan03.
+
 
 % Set up the default fonts, so we can use them for creating boxes.
 %
-\textfonts
+\textfonts \rm
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
 
 % Count depth in font-changes, for error checks
 \newcount\fontdepth \fontdepth=0
 
 % Fonts for short table of contents.
 \setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
+\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12
 \setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
 
 %% Add scribe-like font environments, plus @l for inline lisp (usually sans
 %% serif) and @ii for TeX italic
 
 % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
 % unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl.  We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
 
 \let\i=\smartitalic
-\let\var=\smartitalic
-\let\dfn=\smartitalic
+\let\slanted=\smartslanted
+\let\var=\smartslanted
+\let\dfn=\smartslanted
 \let\emph=\smartitalic
-\let\cite=\smartitalic
 
+% @b, explicit bold.
 \def\b#1{{\bf #1}}
 \let\strong=\b
 
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
 % We can't just use \exhyphenpenalty, because that only has effect at
 % the end of a paragraph.  Restore normal hyphenation at the end of the
 % group within which \nohyphenation is presumably called.
@@ -1258,27 +1797,51 @@
 \def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
 \def\restorehyphenation{\hyphenchar\font = `- }
 
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dotChar   = `\.
+\chardef\exclamChar= `\!
+\chardef\questChar = `\?
+\chardef\semiChar  = `\;
+%
+\catcode`@=11
+  \def\plainfrenchspacing{%
+    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \def\endofsentencespacefactor{1000}% for @. and friends
+  }
+  \def\plainnonfrenchspacing{%
+    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+    \def\endofsentencespacefactor{3000}% for @. and friends
+  }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
 \def\t#1{%
-  {\tt \rawbackslash \frenchspacing #1}%
+  {\tt \rawbackslash \plainfrenchspacing #1}%
   \null
 }
-\let\ttfont=\t
-\def\samp #1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
-  \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
     \vbox{\hrule\kern-0.4pt
-     \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
+     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
     \kern-0.4pt\hrule}%
-  \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
+  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
 % The old definition, with no lozenge:
 %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
+% @file, @option are the same as @samp.
 \let\file=\samp
-\let\url=\samp % perhaps include a hypertex \special eventually
-\def\email#1{$\langle${\tt #1}$\rangle$}
+\let\option=\samp
 
 % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.
@@ -1297,13 +1860,13 @@
     \nohyphenation
     %
     \rawbackslash
-    \frenchspacing
+    \plainfrenchspacing
     #1%
   }%
   \null
 }
 
-% We *must* turn on hyphenation at `-' and `_' in \code.
+% We *must* turn on hyphenation at `-' and `_' in @code.
 % Otherwise, it is too hard to avoid overfull hboxes
 % in the Emacs manual, the Library manual, etc.
 
@@ -1313,48 +1876,154 @@
 % and arrange explicitly to hyphenate at a dash.
 %  -- rms.
 {
-\catcode`\-=\active
-\catcode`\_=\active
-\catcode`\|=\active
-\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
-% The following is used by \doprintindex to insure that long function names
-% wrap around.  It is necessary for - and _ to be active before the index is
-% read from the file, as \entry parses the arguments long before \code is
-% ever called.  -- mycroft
-% _ is always active; and it shouldn't be \let = to an _ that is a
-% subscript character anyway. Then, @cindex @samp{_} (for example)
-% fails.  --karl
-\global\def\indexbreaks{%
-  \catcode`\-=\active \let-\realdash
-}
+  \catcode`\-=\active
+  \catcode`\_=\active
+  %
+  \global\def\code{\begingroup
+    \catcode`\-=\active  \catcode`\_=\active
+    \ifallowcodebreaks
+     \let-\codedash
+     \let_\codeunder
+    \else
+     \let-\realdash
+     \let_\realunder
+    \fi
+    \codex
+  }
 }
 
 \def\realdash{-}
 \def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\normalunderscore\discretionary{}{}{}}
+\def\codeunder{%
+  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+  % will therefore expand the active definition of _, which is us
+  % (inside @code that is), therefore an endless loop.
+  \ifusingtt{\ifmmode
+               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+             \else\normalunderscore \fi
+             \discretionary{}{}{}}%
+            {\_}%
+}
 \def\codex #1{\tclose{#1}\endgroup}
 
-%\let\exp=\tclose  %Was temporary
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__.  This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general.  @allowcodebreaks provides a way to control this.
+% 
+\newif\ifallowcodebreaks  \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\keywordtrue
+    \allowcodebreakstrue
+  \else\ifx\txiarg\keywordfalse
+    \allowcodebreaksfalse
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+  \fi\fi
+}
 
 % @kbd is like @code, except that if the argument is just one @key command,
 % then @kbd has no effect.
-%
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+%   `example' (@kbd uses ttsl only inside of @example and friends),
+%   or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\worddistinct
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+  \else\ifx\txiarg\wordexample
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+  \else\ifx\txiarg\wordcode
+    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
 \def\xkey{\key}
 \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
 \ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\ttsl\look}}\fi
-\else{\tclose{\ttsl\look}}\fi}
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
+  \ifdim\wd0 > 0pt
+    \unhbox0 % third arg given, show only that
+  \else
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \code{#1}% only url given, so show it
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+  \def\email#1{\doemail#1,,\finish}
+  \def\doemail#1,#2,#3\finish{\begingroup
+    \unsepspaces
+    \pdfurl{mailto:#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+    \endlink
+  \endgroup}
+\else
+  \let\email=\uref
+\fi
 
 % Check if we are currently using a typewriter font.  Since all the
 % Computer Modern typewriter fonts have zero interword stretch (and
 % shrink), and it is reasonable to expect all typewriter fonts to have
 % this property, we can check that font parameter.
-% 
+%
 \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
 
 % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of
-% @dmn{}pt.
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
 %
 \def\dmn#1{\thinspace #1}
 
@@ -1365,14 +2034,106 @@
 % Polish suppressed-l.  --karl, 22sep96.
 %\def\l#1{{\li #1}\null}
 
+% Explicit font changes: @r, @sc, undocumented @ii.
 \def\r#1{{\rm #1}}              % roman font
-% Use of \lowercase was suggested.
 \def\sc#1{{\smallcaps#1}}       % smallcaps font
 \def\ii#1{{\it #1}}             % italic font
 
-% @pounds{} is a sterling sign.
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+% 
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+  {\selectfonts\lsize #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+% 
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+  {\plainfrenchspacing #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
 \def\pounds{{\it\$}}
 
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+% 
+% Although only regular is the truly official Euro symbol, we ignore
+% that.  The Euro is designed to be slightly taller than the regular
+% font height.
+% 
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+% 
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+% 
+% Also doesn't work in math.  Do we need to do math with euro symbols?
+% Hope not.
+% 
+% 
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+  % We set the font at each command, rather than predefining it in
+  % \textfonts and the other font-switching commands, so that
+  % installations which never need the symbol don't have to have the
+  % font installed.
+  % 
+  % There is only one designed size (nominal 10pt), so we always scale
+  % that to the current nominal size.
+  % 
+  % By the way, simply using "at 1em" works for cmr10 and the like, but
+  % does not work for cmbx10 and other extended/shrunken fonts.
+  % 
+  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+  %
+  \ifx\curfontstyle\bfstylename 
+    % bold:
+    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+  \else 
+    % regular:
+    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+  \fi
+  \thiseurofont
+}
+
+% @registeredsymbol - R in a circle.  The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+               \hfil\crcr\Orb}}%
+    }$%
+}
+
+% Laurent Siebenmann reports \Orb undefined with:
+%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
+% so we'll define it if necessary.
+% 
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
+
 
 \message{page headings,}
 
@@ -1380,87 +2141,124 @@
 \newskip\titlepagebottomglue \titlepagebottomglue = 2pc
 
 % First the title page.  Must do @settitle before @titlepage.
-\def\titlefont#1{{\titlerm #1}}
-
 \newif\ifseenauthor
 \newif\iffinishedtitlepage
 
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
         \endgroup\page\hbox{}\page}
 
-\def\titlepage{\begingroup \parindent=0pt \textfonts
-   \let\subtitlerm=\tenrm
-% I deinstalled the following change because \cmr12 is undefined.
-% This change was not in the ChangeLog anyway.  --rms.
-%   \let\subtitlerm=\cmr12
-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-   %
-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-   %
-   % Leave some space at the very top of the page.
-   \vglue\titlepagetopglue
-   %
-   % Now you can print the title using @title.
-   \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefont{##1}}
-                    % print a rule at the page bottom also.
-                    \finishedtitlepagefalse
-                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
-   % No rule at page bottom unless we print one at the top with @title.
-   \finishedtitlepagetrue
-   %
-   % Now you can put text using @subtitle.
-   \def\subtitle{\parsearg\subtitlezzz}%
-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-   %
-   % @author should come last, but may come many times.
-   \def\author{\parsearg\authorzzz}%
-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-      {\authorfont \leftline{##1}}}%
-   %
-   % Most title ``pages'' are actually two pages long, with space
-   % at the top of the second.  We don't want the ragged left on the second.
-   \let\oldpage = \page
-   \def\page{%
+\envdef\titlepage{%
+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
+  \begingroup
+    \parindent=0pt \textfonts
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
       \iffinishedtitlepage\else
-         \finishtitlepage
+	 \finishtitlepage
       \fi
-      \oldpage
       \let\page = \oldpage
-      \hbox{}}%
-%   \def\page{\oldpage \hbox{}}
+      \page
+      \null
+    }%
 }
 
 \def\Etitlepage{%
-   \iffinishedtitlepage\else
-      \finishtitlepage
-   \fi
-   % It is important to do the page break before ending the group,
-   % because the headline and footline are only empty inside the group.
-   % If we use the new definition of \page, we always get a blank page
-   % after the title page, which we certainly don't want.
-   \oldpage
-   \endgroup
-   \HEADINGSon
+    \iffinishedtitlepage\else
+	\finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+  \endgroup
+  %
+  % Need this before the \...aftertitlepage checks so that if they are
+  % in effect the toc pages will come out with page numbers.
+  \HEADINGSon
+  %
+  % If they want short, they certainly want long too.
+  \ifsetshortcontentsaftertitlepage
+    \shortcontents
+    \contents
+    \global\let\shortcontents = \relax
+    \global\let\contents = \relax
+  \fi
+  %
+  \ifsetcontentsaftertitlepage
+    \contents
+    \global\let\contents = \relax
+    \global\let\shortcontents = \relax
+  \fi
 }
 
 \def\finishtitlepage{%
-   \vskip4pt \hrule height 2pt width \hsize
-   \vskip\titlepagebottomglue
-   \finishedtitlepagetrue
+  \vskip4pt \hrule height 2pt width \hsize
+  \vskip\titlepagebottomglue
+  \finishedtitlepagetrue
 }
 
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+		\let\tt=\authortt}
+
+\parseargdef\title{%
+  \checkenv\titlepage
+  \leftline{\titlefonts\rm #1}
+  % print a rule at the page bottom also.
+  \finishedtitlepagefalse
+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+  \checkenv\titlepage
+  {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+  \def\temp{\quotation}%
+  \ifx\thisenv\temp
+    \def\quotationauthor{#1}% printed in \Equotation.
+  \else
+    \checkenv\titlepage
+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+    {\authorfont \leftline{#1}}%
+  \fi
+}
+
+
 %%% Set up page headings and footings.
 
 \let\thispage=\folio
 
-\newtoks \evenheadline    % Token sequence for heading line of even pages
-\newtoks \oddheadline     % Token sequence for heading line of odd pages
-\newtoks \evenfootline    % Token sequence for footing line of even pages
-\newtoks \oddfootline     % Token sequence for footing line of odd pages
+\newtoks\evenheadline    % headline on even pages
+\newtoks\oddheadline     % headline on odd pages
+\newtoks\evenfootline    % footline on even pages
+\newtoks\oddfootline     % footline on odd pages
 
-% Now make Tex use those variables
+% Now make TeX use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                             \else \the\evenheadline \fi}}
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
@@ -1474,43 +2272,37 @@
 % @evenfooting @thisfile||
 % @oddfooting ||@thisfile
 
+
 \def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
 
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+  %
+  % Leave some space for the footline.  Hopefully ok to assume
+  % @evenfooting will not be used by itself.
+  \global\advance\pageheight by -\baselineskip
+  \global\advance\vsize by -\baselineskip
+}
 
-\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-%
-}% unbind the catcode of @.
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
 
 % @headings double      turns headings on for double-sided printing.
 % @headings single      turns headings on for single-sided printing.
@@ -1524,7 +2316,7 @@
 
 \def\headings #1 {\csname HEADINGS#1\endcsname}
 
-\def\HEADINGSoff{
+\def\HEADINGSoff{%
 \global\evenheadline={\hfil} \global\evenfootline={\hfil}
 \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
 \HEADINGSoff
@@ -1533,7 +2325,7 @@
 % chapter name on inside top of right hand pages, document
 % title on inside top of left hand pages, and page numbers on outside top
 % edge of all pages.
-\def\HEADINGSdouble{
+\def\HEADINGSdouble{%
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
@@ -1545,7 +2337,7 @@
 
 % For single-sided printing, chapter title goes across top left of page,
 % page number on top right.
-\def\HEADINGSsingle{
+\def\HEADINGSsingle{%
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
@@ -1575,41 +2367,28 @@
 }
 
 % Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+  \number\day\space
+  \ifcase\month
+  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+  \fi
+  \space\number\year}
+\fi
 
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
+% @settitle line...  specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
 
 
 \message{tables,}
-
-% @tabs -- simple alignment
-
-% These don't work.  For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+% Tables -- @table, @ftable, @vtable, @item(x).
 
 % default indentation of table text
 \newdimen\tableindent \tableindent=.8in
@@ -1621,7 +2400,7 @@
 % used internally for \itemindent minus \itemmargin
 \newdimen\itemmax
 
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
 % these defs.
 % They also define \itemindex
 % to index the item name in whatever manner is desired (perhaps none).
@@ -1633,30 +2412,13 @@
 \def\internalBitem{\smallbreak \parsearg\itemzzz}
 \def\internalBitemx{\itemxpar \parsearg\itemzzz}
 
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-                 \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-                 \itemzzz {#1}}
-
 \def\itemzzz #1{\begingroup %
   \advance\hsize by -\rightskip
   \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemfont{#1}}%
+  \setbox0=\hbox{\itemindicate{#1}}%
   \itemindex{#1}%
   \nobreak % This prevents a break before @itemx.
   %
-  % Be sure we are not still in the middle of a paragraph.
-  %{\parskip = 0in
-  %\par
-  %}%
-  %
   % If the item text does not fit in the space we have, put it on a line
   % by itself, and do not allow a page break either before or after that
   % line.  We do not start a paragraph here because then if the next
@@ -1677,114 +2439,132 @@
     % \parskip glue -- logically it's part of the @item we just started.
     \nobreak \vskip-\parskip
     %
-    % Stop a page break at the \parskip glue coming up.  Unfortunately
-    % we can't prevent a possible page break at the following
-    % \baselineskip glue.
-    \nobreak
+    % Stop a page break at the \parskip glue coming up.  However, if
+    % what follows is an environment such as @example, there will be no
+    % \parskip glue; then the negative vskip we just inserted would
+    % cause the example and the item to crash together.  So we use this
+    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+    % \parskip glue after all.  Section titles are handled this way also.
+    % 
+    \penalty 10001
     \endgroup
     \itemxneedsnegativevskipfalse
   \else
     % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.  Since that
-    % text will be indented by \tableindent, we make the item text be in
-    % a zero-width box.
+    % following text (if any) will end up on the same line.
     \noindent
-    \rlap{\hskip -\tableindent\box0}\ignorespaces%
-    \endgroup%
-    \itemxneedsnegativevskiptrue%
+    % Do this with kerns and \unhbox so that if there is a footnote in
+    % the item text, it can migrate to the main vertical list and
+    % eventually be printed.
+    \nobreak\kern-\tableindent
+    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+    \unhbox0
+    \nobreak\kern\dimen0
+    \endgroup
+    \itemxneedsnegativevskiptrue
   \fi
 }
 
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
 
-%% Contains a kludge to get @end[description] to work
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1        \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
+% @table, @ftable, @vtable.
+\envdef\table{%
+  \let\itemindex\gobble
+  \tablecheck{table}%
 }
+\envdef\ftable{%
+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+  \tablecheck{ftable}%
+}
+\envdef\vtable{%
+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+  \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+  \ifnum \the\catcode`\^^M=\active
+    \endgroup
+    \errmessage{This command won't work in this context; perhaps the problem is
+      that we are \inenvironment\thisenv}%
+    \def\next{\doignore{#1}}%
+  \else
+    \let\next\tablex
+  \fi
+  \next
+}
+\def\tablex#1{%
+  \def\itemindicate{#1}%
+  \parsearg\tabley
+}
+\def\tabley#1{%
+  {%
+    \makevalueexpandable
+    \edef\temp{\noexpand\tablez #1\space\space\space}%
+    \expandafter
+  }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+  \aboveenvbreak
+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+  \ifnum 0#2>0 \tableindent=#2\mil \fi
+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+  \itemmax=\tableindent
+  \advance \itemmax by -\itemmargin
+  \advance \leftskip by \tableindent
+  \exdentamount=\tableindent
+  \parindent = 0pt
+  \parskip = \smallskipamount
+  \ifdim \parskip=0pt \parskip=2pt \fi
+  \let\item = \internalBitem
+  \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
 
 % This is the counter used by @enumerate, which is really @itemize
 
 \newcount \itemno
 
-\def\itemize{\parsearg\itemizezzz}
+\envdef\itemize{\parsearg\doitemize}
 
-\def\itemizezzz #1{%
-  \begingroup % ended by the @end itemsize
-  \itemizey {#1}{\Eitemize}
+\def\doitemize#1{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  \def\itemcontents{#1}%
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  \let\item=\itemizeitem
 }
 
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
-  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+  \advance\itemno by 1  % for enumerations
+  {\let\par=\endgraf \smallbreak}% reasonable place to break
+  {%
+   % If the document has an @itemize directly after a section title, a
+   % \nobreak will be last on the list, and \sectionheading will have
+   % done a \vskip-\parskip.  In that case, we don't want to zero
+   % parskip, or the item text will crash with the heading.  On the
+   % other hand, when there is normal text preceding the item (as there
+   % usually is), we do want to zero parskip, or there would be too much
+   % space.  In that case, we won't have a \nobreak before.  At least
+   % that's the theory.
+   \ifnum\lastpenalty<10000 \parskip=0in \fi
+   \noindent
+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   \vadjust{\penalty 1200}}% not good to break after first line of item.
+  \flushcr
+}
 
 % \splitoff TOKENS\endmark defines \first to be the first token in
 % TOKENS, and \rest to be the remainder.
@@ -1795,11 +2575,8 @@
 % or number, to specify the first label in the enumerated list.  No
 % argument is the same as `1'.
 %
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
 \def\enumeratey #1 #2\endenumeratey{%
-  \begingroup % ended by the @end enumerate
-  %
   % If we were given no argument, pretend we were given `1'.
   \def\thearg{#1}%
   \ifx\thearg\empty \def\thearg{1}\fi
@@ -1870,13 +2647,13 @@
   }%
 }
 
-% Call itemizey, adding a period to the first argument and supplying the
+% Call \doitemize, adding a period to the first argument and supplying the
 % common last two arguments.  Also subtract one from the initial value in
 % \itemno, since @item increments \itemno.
 %
 \def\startenumeration#1{%
   \advance\itemno by -1
-  \itemizey{#1.}\Eenumerate\flushcr
+  \doitemize{#1.}\flushcr
 }
 
 % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
@@ -1887,16 +2664,6 @@
 \def\Ealphaenumerate{\Eenumerate}
 \def\Ecapsenumerate{\Eenumerate}
 
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
 
 % @multitable macros
 % Amy Hendrickson, 8/18/94, 3/6/96
@@ -1910,7 +2677,7 @@
 
 % To make preamble:
 %
-% Either define widths of columns in terms of percent of \hsize: 
+% Either define widths of columns in terms of percent of \hsize:
 %   @multitable @columnfractions .25 .3 .45
 %   @item ...
 %
@@ -1923,38 +2690,28 @@
 %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
 %   @item ...
 %   using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-%     @multitable {Column 1 template} {Column 2 template} {Column 3 
-%      template}
-% Not:
-%     @multitable {Column 1 template} {Column 2 template} 
-%      {Column 3 template}
 
-% Each new table line starts with @item, each subsequent new column 
+% Each new table line starts with @item, each subsequent new column
 % starts with @tab. Empty columns may be produced by supplying @tab's
 % with nothing between them for as many times as empty columns are needed,
 % ie, @tab@tab@tab will produce two empty columns.
 
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
 
 % Sample multitable:
 
 %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
 %   @item first col stuff @tab second col stuff @tab third col
-%   @item 
-%   first col stuff 
-%   @tab 
-%   second col stuff 
-%   @tab 
-%   third col 
-%   @item first col stuff @tab second col stuff 
+%   @item
+%   first col stuff
+%   @tab
+%   second col stuff
+%   @tab
+%   third col
+%   @item first col stuff @tab second col stuff
 %   @tab Many paragraphs of text may be used in any column.
-%     
+%
 %         They will wrap at the width determined by the template.
 %   @item@tab@tab This will be in third column.
 %   @end multitable
@@ -1966,10 +2723,7 @@
 % @multitablelinespace is space to leave between table items, baseline
 %                                                            to baseline.
 %   0pt means it depends on current normal line spacing.
-
-%%%%
-% Dimensions 
-
+%
 \newskip\multitableparskip
 \newskip\multitableparindent
 \newdimen\multitablecolspace
@@ -1979,129 +2733,176 @@
 \multitablecolspace=12pt
 \multitablelinespace=0pt
 
-%%%%
 % Macros used to set up halign preamble:
+%
 \let\endsetuptable\relax
 \def\xendsetuptable{\endsetuptable}
 \let\columnfractions\relax
 \def\xcolumnfractions{\columnfractions}
 \newif\ifsetpercent
 
-%% 2/1/96, to allow fractions to be given with more than one digit.
-\def\pickupwholefraction#1 {\global\advance\colcount by1 %
-\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-\setuptable}
-
-\newcount\colcount
-\def\setuptable#1{\def\firstarg{#1}%
-\ifx\firstarg\xendsetuptable\let\go\relax%
-\else
-  \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
-  \else
-    \ifsetpercent
-       \let\go\pickupwholefraction   % In this case arg of setuptable
-                                     % is the decimal point before the
-                                     % number given in percent of hsize.
-                                     % We don't need this so we don't use it.
-    \else
-       \global\advance\colcount by1
-       \setbox0=\hbox{#1 }% Add a normal word space as a separator;
-                          % typically that is always in the input, anyway.
-       \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-    \fi%
-  \fi%
-\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
-\fi\go}
-
-%%%%
-% multitable syntax
-\def\tab{&\hskip1sp\relax} % 2/2/96
-                           % tiny skip here makes sure this column space is
-                           % maintained, even if it is never used.
-
-
-%%%%
-% @multitable ... @end multitable definitions:
-
-\def\multitable{\parsearg\dotable}
-
-\def\dotable#1{\bgroup
-\let\item\cr
-\tolerance=9500
-\hbadness=9500
-\setmultitablespacing
-\parskip=\multitableparskip
-\parindent=\multitableparindent
-\overfullrule=0pt
-\global\colcount=0\relax%
-\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-\setuptable#1 \endsetuptable
- % Need to reset this to 0 after \setuptable.
-\global\colcount=0\relax% 
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and 
- % continue for many paragraphs if desired.
-\halign\bgroup&\global\advance\colcount by 1\relax%
-\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- %  If a template has been used, we will add \multitablecolspace 
- % to the width of each template entry.
- %  If user has set preamble in terms of percent of \hsize
- % we will use that dimension as the width of the column, and
- % the \leftskip will keep entries from bumping into each other.
- % Table will start at left margin and final column will justify at
- % right margin.
-\ifnum\colcount=1
-\else
-  \ifsetpercent
-  \else
-   % If user has <not> set preamble in terms of percent of \hsize
-   % we will advance \hsize by \multitablecolspace 
-  \advance\hsize by \multitablecolspace
-  \fi
- % In either case we will make \leftskip=\multitablecolspace:
-\leftskip=\multitablecolspace
-\fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighing sequences respectively marking
- % characters.
- \noindent\ignorespaces##\unskip\multistrut}\cr
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column  entry will cause \colcount to advance by one. 
- % The table preamble
- % looks at the current \colcount to find the correct column width.
-\global\everycr{\noalign{%
-% \filbreak%% keeps underfull box messages off when table breaks over pages.
-% Maybe so, but it also creates really weird page breaks when the table
-% breaks over pages Wouldn't \vfil be better?  Wait until the problem
-% manifests itself, so it can be fixed for real --karl.
-\global\colcount=0\relax}}
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1.  We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+  \global\advance\colcount by 1
+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+  \setuptable
 }
 
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
+\newcount\colcount
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
+  \else
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
+    \else
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+                   % separator; typically that is always in the input, anyway.
+         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \fi
+    \fi
+    \ifx\go\pickupwholefraction
+      % Put the argument back for the \pickupwholefraction call, so
+      % we'll always have a period there to be parsed.
+      \def\go{\pickupwholefraction#1}%
+    \else
+      \let\go = \setuptable
+    \fi%
+  \fi
+  \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry.  Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% A \tab used to include \hskip1sp.  But then the space in a template
+% line is not enough.  That is bad.  So let's go back to just `&' until
+% we encounter the problem it was intended to solve again.
+%					--karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab  % insert after every tab.
+%
+\envdef\multitable{%
+  \vskip\parskip
+  \startsavinginserts
+  %
+  % @item within a multitable starts a normal row.
+  % We use \def instead of \let so that if one of the multitable entries
+  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+  % \endtemplate) expanding \doitemize.
+  \def\item{\crcr}%
+  %
+  \tolerance=9500
+  \hbadness=9500
+  \setmultitablespacing
+  \parskip=\multitableparskip
+  \parindent=\multitableparindent
+  \overfullrule=0pt
+  \global\colcount=0
+  %
+  \everycr = {%
+    \noalign{%
+      \global\everytab={}%
+      \global\colcount=0 % Reset the column counter.
+      % Check for saved footnotes, etc.
+      \checkinserts
+      % Keeps underfull box messages off when table breaks over pages.
+      %\filbreak
+	% Maybe so, but it also creates really weird page breaks when the
+	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
+	% problem manifests itself, so it can be fixed for real --karl.
+    }%
+  }%
+  %
+  \parsearg\domultitable
+}
+\def\domultitable#1{%
+  % To parse everything between @multitable and @item:
+  \setuptable#1 \endsetuptable
+  %
+  % This preamble sets up a generic column definition, which will
+  % be used as many times as user calls for columns.
+  % \vtop will set a single line and will also let text wrap and
+  % continue for many paragraphs if desired.
+  \halign\bgroup &%
+    \global\advance\colcount by 1
+    \multistrut
+    \vtop{%
+      % Use the current \colcount to find the correct column width:
+      \hsize=\expandafter\csname col\the\colcount\endcsname
+      %
+      % In order to keep entries from bumping into each other
+      % we will add a \leftskip of \multitablecolspace to all columns after
+      % the first one.
+      %
+      % If a template has been used, we will add \multitablecolspace
+      % to the width of each template entry.
+      %
+      % If the user has set preamble in terms of percent of \hsize we will
+      % use that dimension as the width of the column, and the \leftskip
+      % will keep entries from bumping into each other.  Table will start at
+      % left margin and final column will justify at right margin.
+      %
+      % Make sure we don't inherit \rightskip from the outer environment.
+      \rightskip=0pt
+      \ifnum\colcount=1
+	% The first column will be indented with the surrounding text.
+	\advance\hsize by\leftskip
+      \else
+	\ifsetpercent \else
+	  % If user has not set preamble in terms of percent of \hsize
+	  % we will advance \hsize by \multitablecolspace.
+	  \advance\hsize by \multitablecolspace
+	\fi
+       % In either case we will make \leftskip=\multitablecolspace:
+      \leftskip=\multitablecolspace
+      \fi
+      % Ignoring space at the beginning and end avoids an occasional spurious
+      % blank line, when TeX decides to break the line at the space before the
+      % box from the multistrut, so the strut ends up on a line by itself.
+      % For example:
+      % @multitable @columnfractions .11 .89
+      % @item @code{#}
+      % @tab Legal holiday which is valid in major parts of the whole country.
+      % Is automatically provided with highlighting sequences respectively
+      % marking characters.
+      \noindent\ignorespaces##\unskip\multistrut
+    }\cr
+}
+\def\Emultitable{%
+  \crcr
+  \egroup % end the \halign
+  \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+  \def\multistrut{\strut}% just use the standard line spacing
+  %
+  % Compute \multitablelinespace (if not defined by user) for use in
+  % \multitableparskip calculation.  We used define \multistrut based on
+  % this, but (ironically) that caused the spacing to be off.
+  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
 \ifdim\multitablelinespace=0pt
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
 %% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing. 
+%% table. If not, do nothing.
 %%        If so, set to same dimension as multitablelinespace.
-\else
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
 \ifdim\multitableparskip>\multitablelinespace
 \global\multitableparskip=\multitablelinespace
 \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
@@ -2114,13 +2915,228 @@
 \fi}
 
 
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed.  They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested.  But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+  \expandafter\let\csname #1\endcsname = \relax
+  \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+  % Scan in ``verbatim'' mode:
+  \obeylines
+  \catcode`\@ = \other
+  \catcode`\{ = \other
+  \catcode`\} = \other
+  %
+  % Make sure that spaces turn into tokens that match what \doignoretext wants.
+  \spaceisspace
+  %
+  % Count number of #1's that we've seen.
+  \doignorecount = 0
+  %
+  % Swallow text until we reach the matching `@end #1'.
+  \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+  \obeylines %
+  %
+  \gdef\dodoignore#1{%
+    % #1 contains the command name as a string, e.g., `ifinfo'.
+    %
+    % Define a command to find the next `@end #1'.
+    \long\def\doignoretext##1^^M@end #1{%
+      \doignoretextyyy##1^^M@#1\_STOP_}%
+    %
+    % And this command to find another #1 command, at the beginning of a
+    % line.  (Otherwise, we would consider a line `@c @ifset', for
+    % example, to count as an @ifset for nesting.)
+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+    %
+    % And now expand that command.
+    \doignoretext ^^M%
+  }%
+}
+
+\def\doignoreyyy#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty			% Nothing found.
+    \let\next\doignoretextzzz
+  \else					% Found a nested condition, ...
+    \advance\doignorecount by 1
+    \let\next\doignoretextyyy		% ..., look for another.
+    % If we're here, #1 ends with ^^M\ifinfo (for example).
+  \fi
+  \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+  \ifnum\doignorecount = 0	% We have just found the outermost @end.
+    \let\next\enddoignore
+  \else				% Still inside a nested condition.
+    \advance\doignorecount by -1
+    \let\next\doignoretext      % Look for the next @end.
+  \fi
+  \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+  % Ignore anything after the last `@end #1'; this matters in verbatim
+  % environments, where otherwise the newline after an ignored conditional
+  % would result in a blank line in the output.
+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+  {%
+    \makevalueexpandable
+    \def\temp{#2}%
+    \edef\next{\gdef\makecsname{SET#1}}%
+    \ifx\temp\empty
+      \next{}%
+    \else
+      \setzzz#2\endsetzzz
+    \fi
+  }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+  {%
+    \makevalueexpandable
+    \global\expandafter\let\csname SET#1\endcsname=\relax
+  }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+  \catcode`\- = \active \catcode`\_ = \active
+  %
+  \gdef\makevalueexpandable{%
+    \let\value = \expandablevalue
+    % We don't want these characters active, ...
+    \catcode`\-=\other \catcode`\_=\other
+    % ..., but we might end up with active ones in the argument if
+    % we're called from @code, as @code{@value{foo-bar_}}, though.
+    % So \let them to their normal equivalents.
+    \let-\realdash \let_\normalunderscore
+  }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file.  This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    {[No value for ``#1'']}%
+    \message{Variable `#1', used in @value, is not set.}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+  {%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname SET#2\endcsname\relax
+      #1% If not set, redefine \next.
+    \fi
+    \expandafter
+  }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
 \message{indexing,}
 % Index generation facilities
 
 % Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
 
 % \newindex {foo} defines an index named foo.
 % It automatically defines \fooindex such that
@@ -2129,45 +3145,59 @@
 % the file that accumulates this index.  The file's extension is foo.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#1}}
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
 }
 
 % @defindex foo  ==  \newindex{foo}
-
+%
 \def\defindex{\parsearg\newindex}
 
 % Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#1}}
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}%
 }
 
-\def\defcodeindex{\parsearg\newcodeindex}
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#2}}%
-}
-
+%
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#2}}%
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+  % Only do \closeout if we haven't already done it, else we'll end up
+  % closing the target index.
+  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+    % The \closeout helps reduce unnecessary open files; the limit on the
+    % Acorn RISC OS is a mere 16 files.
+    \expandafter\closeout\csname#2indfile\endcsname
+    \expandafter\let\csname\donesynindex#2\endcsname = 1
+  \fi
+  % redefine \fooindfile:
+  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+  \expandafter\let\csname#2indfile\endcsname=\temp
+  % redefine \fooindex:
+  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }
 
 % Define \doindex, the driver for all \fooindex macros.
@@ -2187,199 +3217,394 @@
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
 
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
 \def\indexdummies{%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-% (Must be a way to avoid doing expansion at all, and thus not have to
-% laboriously list every single command here.)
-\def\@{@}% will be @@ when we switch to @ as escape char.
-%\let\{ = \lbracecmd
-%\let\} = \rbracecmd
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-%\def\char{\realbackslash char}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\dotless##1{\realbackslash dotless {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\,##1{\realbackslash ,{##1}}%
-\def\t##1{\realbackslash t {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-\unsepspaces
+  \escapechar = `\\     % use backslash in output files.
+  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+  \def\ {\realbackslash\space }%
+  % Need these in case \tex is in effect and \{ is a \delimiter again.
+  % But can't use \lbracecmd and \rbracecmd because texindex assumes
+  % braces and backslashes are used only as delimiters.
+  \let\{ = \mylbrace
+  \let\} = \myrbrace
+  %
+  % Do the redefinitions.
+  \commondummies
 }
 
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
+% For the aux and toc files, @ is the escape character.  So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files).  When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+  \def\@{@@}%
+  \def\ {@ }%
+  \let\{ = \lbraceatcmd
+  \let\} = \rbraceatcmd
+  %
+  % Do the redefinitions.
+  \commondummies
+  \otherbackslash
+}
 
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+  %
+  % \definedummyword defines \#1 as \string\#1\space, thus effectively
+  % preventing its expansion.  This is used only for control% words,
+  % not control letters, because the \space would be incorrect for
+  % control characters, but is needed to separate the control word
+  % from whatever follows.
+  %
+  % For control letters, we have \definedummyletter, which omits the
+  % space.
+  %
+  % These can be used both for control words that take an argument and
+  % those that do not.  If it is followed by {arg} in the input, then
+  % that will dutifully get written to the index (or wherever).
+  %
+  \def\definedummyword  ##1{\def##1{\string##1\space}}%
+  \def\definedummyletter##1{\def##1{\string##1}}%
+  \let\definedummyaccent\definedummyletter
+  %
+  \commondummiesnofonts
+  %
+  \definedummyletter\_%
+  %
+  % Non-English letters.
+  \definedummyword\AA
+  \definedummyword\AE
+  \definedummyword\L
+  \definedummyword\OE
+  \definedummyword\O
+  \definedummyword\aa
+  \definedummyword\ae
+  \definedummyword\l
+  \definedummyword\oe
+  \definedummyword\o
+  \definedummyword\ss
+  \definedummyword\exclamdown
+  \definedummyword\questiondown
+  \definedummyword\ordf
+  \definedummyword\ordm
+  %
+  % Although these internal commands shouldn't show up, sometimes they do.
+  \definedummyword\bf
+  \definedummyword\gtr
+  \definedummyword\hat
+  \definedummyword\less
+  \definedummyword\sf
+  \definedummyword\sl
+  \definedummyword\tclose
+  \definedummyword\tt
+  %
+  \definedummyword\LaTeX
+  \definedummyword\TeX
+  %
+  % Assorted special characters.
+  \definedummyword\bullet
+  \definedummyword\comma
+  \definedummyword\copyright
+  \definedummyword\registeredsymbol
+  \definedummyword\dots
+  \definedummyword\enddots
+  \definedummyword\equiv
+  \definedummyword\error
+  \definedummyword\euro
+  \definedummyword\expansion
+  \definedummyword\minus
+  \definedummyword\pounds
+  \definedummyword\point
+  \definedummyword\print
+  \definedummyword\result
+  %
+  % We want to disable all macros so that they are not expanded by \write.
+  \macrolist
+  %
+  \normalturnoffactive
+  %
+  % Handle some cases of @value -- where it does not contain any
+  % (non-fully-expandable) commands.
+  \makevalueexpandable
+}
 
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+  % Control letters and accents.
+  \definedummyletter\!%
+  \definedummyaccent\"%
+  \definedummyaccent\'%
+  \definedummyletter\*%
+  \definedummyaccent\,%
+  \definedummyletter\.%
+  \definedummyletter\/%
+  \definedummyletter\:%
+  \definedummyaccent\=%
+  \definedummyletter\?%
+  \definedummyaccent\^%
+  \definedummyaccent\`%
+  \definedummyaccent\~%
+  \definedummyword\u
+  \definedummyword\v
+  \definedummyword\H
+  \definedummyword\dotaccent
+  \definedummyword\ringaccent
+  \definedummyword\tieaccent
+  \definedummyword\ubaraccent
+  \definedummyword\udotaccent
+  \definedummyword\dotless
+  %
+  % Texinfo font commands.
+  \definedummyword\b
+  \definedummyword\i
+  \definedummyword\r
+  \definedummyword\sc
+  \definedummyword\t
+  %
+  % Commands that take arguments.
+  \definedummyword\acronym
+  \definedummyword\cite
+  \definedummyword\code
+  \definedummyword\command
+  \definedummyword\dfn
+  \definedummyword\emph
+  \definedummyword\env
+  \definedummyword\file
+  \definedummyword\kbd
+  \definedummyword\key
+  \definedummyword\math
+  \definedummyword\option
+  \definedummyword\pxref
+  \definedummyword\ref
+  \definedummyword\samp
+  \definedummyword\strong
+  \definedummyword\tie
+  \definedummyword\uref
+  \definedummyword\url
+  \definedummyword\var
+  \definedummyword\verb
+  \definedummyword\w
+  \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names.  It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
 \def\indexnofonts{%
-% Just ignore accents.
-\let\,=\indexdummyfont
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-\let\dotless=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
+  % Accent commands should become @asis.
+  \def\definedummyaccent##1{\let##1\asis}%
+  % We can just ignore other control letters.
+  \def\definedummyletter##1{\let##1\empty}%
+  % Hopefully, all control words can become @asis.
+  \let\definedummyword\definedummyaccent
+  %
+  \commondummiesnofonts
+  %
+  % Don't no-op \tt, since it isn't a user-level command
+  % and is used in the definitions of the active chars like <, >, |, etc.
+  % Likewise with the other plain tex font commands.
+  %\let\tt=\asis
+  %
+  \def\ { }%
+  \def\@{@}%
+  % how to handle braces?
+  \def\_{\normalunderscore}%
+  %
+  % Non-English letters.
+  \def\AA{AA}%
+  \def\AE{AE}%
+  \def\L{L}%
+  \def\OE{OE}%
+  \def\O{O}%
+  \def\aa{aa}%
+  \def\ae{ae}%
+  \def\l{l}%
+  \def\oe{oe}%
+  \def\o{o}%
+  \def\ss{ss}%
+  \def\exclamdown{!}%
+  \def\questiondown{?}%
+  \def\ordf{a}%
+  \def\ordm{o}%
+  %
+  \def\LaTeX{LaTeX}%
+  \def\TeX{TeX}%
+  %
+  % Assorted special characters.
+  % (The following {} will end up in the sort string, but that's ok.)
+  \def\bullet{bullet}%
+  \def\comma{,}%
+  \def\copyright{copyright}%
+  \def\registeredsymbol{R}%
+  \def\dots{...}%
+  \def\enddots{...}%
+  \def\equiv{==}%
+  \def\error{error}%
+  \def\euro{euro}%
+  \def\expansion{==>}%
+  \def\minus{-}%
+  \def\pounds{pounds}%
+  \def\point{.}%
+  \def\print{-|}%
+  \def\result{=>}%
+  %
+  % We need to get rid of all macros, leaving only the arguments (if present).
+  % Of course this is not nearly correct, but it is the best we can do for now.
+  % makeinfo does not expand macros in the argument to @deffn, which ends up
+  % writing an index entry, and texindex isn't prepared for an index sort entry
+  % that starts with \.
+  % 
+  % Since macro invocations are followed by braces, we can just redefine them
+  % to take a single TeX argument.  The case of a macro invocation that
+  % goes to end-of-line is not handled.
+  % 
+  \macrolist
 }
 
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
-
 \let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-  \fi
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+  \iflinks
   {%
-    \count255=\lastpenalty
-    {%
-      \indexdummies % Must do this here, since \bf, etc expand at this stage
-      \escapechar=`\\
-      {%
-        \let\folio=0% We will expand all macros now EXCEPT \folio.
-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-        % so it will be output as is; and it will print as backslash.
-        %
-        % First process the index-string with all font commands turned off
-        % to get the string to sort by.
-        {\indexnofonts \xdef\indexsorttmp{#2}}%
-        %
-        % Now produce the complete index entry, with both the sort key and the
-        % original text, including any font commands.
-        \toks0 = {#2}%
-        \edef\temp{%
-          \write\csname#1indfile\endcsname{%
-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-        }%
-        \temp
-      }%
-    }%
-    \penalty\count255
+    % Store the main index entry text (including the third arg).
+    \toks0 = {#2}%
+    % If third arg is present, precede it with a space.
+    \def\thirdarg{#3}%
+    \ifx\thirdarg\empty \else
+      \toks0 = \expandafter{\the\toks0 \space #3}%
+    \fi
+    %
+    \edef\writeto{\csname#1indfile\endcsname}%
+    %
+    \ifvmode
+      \dosubindsanitize
+    \else
+      \dosubindwrite
+    \fi
   }%
+  \fi
 }
 
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
+% Write the entry in \toks0 to the index file:
 %
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
+\def\dosubindwrite{%
+  % Put the index entry in the margin if desired.
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+  \fi
+  %
+  % Remember, we are within a group.
+  \indexdummies % Must do this here, since \bf, etc expand at this stage
+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+  %
+  % Process the index entry with all font commands turned off, to
+  % get the string to sort by.
+  {\indexnofonts
+   \edef\temp{\the\toks0}% need full expansion
+   \xdef\indexsorttmp{\temp}%
+  }%
+  %
+  % Set up the complete index entry, with both the sort key and
+  % the original text, including any font commands.  We write
+  % three arguments to \entry to the .?? file (four in the
+  % subentry case), texindex reduces to two when writing the .??s
+  % sorted result.
+  \edef\temp{%
+    \write\writeto{%
+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+  }%
+  \temp
+}
+
+% Take care of unwanted page breaks:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again.  Otherwise, the whatsit generated by the
+% \write will make \lastskip zero.  The result is that sequences
+% like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode.  We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip.  The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+  \skip0 = \lastskip
+  \edef\lastskipmacro{\the\lastskip}%
+  \count255 = \lastpenalty
+  %
+  % If \lastskip is nonzero, that means the last item was a
+  % skip.  And since a skip is discardable, that means this
+  % -\skip0 glue we're inserting is preceded by a
+  % non-discardable item, therefore it is not a potential
+  % breakpoint, therefore no \nobreak needed.
+  \ifx\lastskipmacro\zeroskipmacro
+  \else
+    \vskip-\skip0
+  \fi
+  %
+  \dosubindwrite
+  %
+  \ifx\lastskipmacro\zeroskipmacro
+    % If \lastskip was zero, perhaps the last item was a penalty, and
+    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
+    % to re-insert the same penalty (values >10000 are used for various
+    % signals); since we just inserted a non-discardable item, any
+    % following glue (such as a \parskip) would be a breakpoint.  For example:
+    % 
+    %   @deffn deffn-whatever
+    %   @vindex index-whatever
+    %   Description.
+    % would allow a break between the index-whatever whatsit
+    % and the "Description." paragraph.
+    \ifnum\count255>9999 \penalty\count255 \fi
+  \else
+    % On the other hand, if we had a nonzero \lastskip,
+    % this make-up glue would be preceded by a non-discardable item
+    % (the whatsit from the \write), so we must insert a \nobreak.
+    \nobreak\vskip\skip0
+  \fi
+}
 
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
@@ -2413,36 +3638,29 @@
 
 % Define the macros used in formatting output of the sorted index material.
 
-% This is what you call to cause a particular index to get printed.
-% Write
-% @unnumbered Function Index
-% @printindex fn
-
-\def\printindex{\parsearg\doprintindex}
-
-\def\doprintindex#1{\begingroup
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
   \dobreak \chapheadingskip{10000}%
   %
-  \indexfonts \rm
+  \smallfonts \rm
   \tolerance = 9500
-  \indexbreaks
-  \def\indexbackslash{\rawbackslashxx}%
-  % Index files are almost Texinfo source, but we use \ as the escape
-  % character.  It would be better to use @, but that's too big a change
-  % to make right now.
-  \catcode`\\ = 0
-  \catcode`\@ = 11
-  \escapechar = `\\
-  \begindoublecolumns
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
   %
   % See if the index file exists and is nonempty.
+  % Change catcode of @ here so that if the index file contains
+  % \initial {@}
+  % as its first line, TeX doesn't complain about mismatched braces
+  % (because it thinks @} is a control sequence).
+  \catcode`\@ = 11
   \openin 1 \jobname.#1s
   \ifeof 1
     % \enddoublecolumns gets confused if there is no text in the index,
     % and it loses the chapter title and the aux file entries for the
     % index.  The easiest way to prevent this problem is to make sure
     % there is some text.
-    (Index is nonexistent)
+    \putwordIndexNonexistent
   \else
     %
     % If the index file exists but is empty, then \openin leaves \ifeof
@@ -2450,89 +3668,140 @@
     % it can discover if there is anything in it.
     \read 1 to \temp
     \ifeof 1
-      (Index is empty)
+      \putwordIndexIsEmpty
     \else
+      % Index files are almost Texinfo source, but we use \ as the escape
+      % character.  It would be better to use @, but that's too big a change
+      % to make right now.
+      \def\indexbackslash{\backslashcurfont}%
+      \catcode`\\ = 0
+      \escapechar = `\\
+      \begindoublecolumns
       \input \jobname.#1s
+      \enddoublecolumns
     \fi
   \fi
   \closein 1
-  \enddoublecolumns
 \endgroup}
 
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
+\def\initial#1{{%
+  % Some minor font changes for the special characters.
+  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+  %
+  % Remove any glue we may have, we'll be inserting our own.
+  \removelastskip
+  %
+  % We like breaks before the index initials, so insert a bonus.
+  \nobreak
+  \vskip 0pt plus 3\baselineskip
+  \penalty 0
+  \vskip 0pt plus -3\baselineskip
+  %
+  % Typeset the initial.  Making this add up to a whole number of
+  % baselineskips increases the chance of the dots lining up from column
+  % to column.  It still won't often be perfect, because of the stretch
+  % we need before each entry, but it's better.
+  %
+  % No shrink because it confuses \balancecolumns.
+  \vskip 1.67\baselineskip plus .5\baselineskip
+  \leftline{\secbf #1}%
+  % Do our best not to break after the initial.
+  \nobreak
+  \vskip .33\baselineskip plus .1\baselineskip
+}}
 
-\def\initial #1{%
-{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin.  It is used for index and table of contents
-% entries.  The paragraph is indented by \leftskip.
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin.  It is used for index
+% and table of contents entries.  The paragraph is indented by \leftskip.
 %
-\def\entry #1#2{\begingroup
-  %
-  % Start a new paragraph if necessary, so our assignments below can't
-  % affect previous text.
-  \par
-  %
-  % Do not fill out the last line with white space.
-  \parfillskip = 0in
-  %
-  % No extra space above this paragraph.
-  \parskip = 0in
-  %
-  % Do not prefer a separate line ending with a hyphen to fewer lines.
-  \finalhyphendemerits = 0
-  %
-  % \hangindent is only relevant when the entry text and page number
-  % don't both fit on one line.  In that case, bob suggests starting the
-  % dots pretty far over on the line.  Unfortunately, a large
-  % indentation looks wrong when the entry text itself is broken across
-  % lines.  So we use a small indentation and put up with long leaders.
-  %
-  % \hangafter is reset to 1 (which is the value we want) at the start
-  % of each paragraph, so we need not do anything with that.
-  \hangindent=2em
-  %
-  % When the entry text needs to be broken, just fill out the first line
-  % with blank space.
-  \rightskip = 0pt plus1fil
-  %
-  % Start a ``paragraph'' for the index entry so the line breaking
-  % parameters we've set above will have an effect.
-  \noindent
-  %
-  % Insert the text of the index entry.  TeX will do line-breaking on it.
-  #1%
-  % The following is kludged to not output a line of dots in the index if
-  % there are no page numbers.  The next person who breaks this will be
-  % cursed by a Unix daemon.
-  \def\tempa{{\rm }}%
-  \def\tempb{#2}%
-  \edef\tempc{\tempa}%
-  \edef\tempd{\tempb}%
-  \ifx\tempc\tempd\ \else%
+% A straightforward implementation would start like this:
+%	\def\entry#1#2{...
+% But this frozes the catcodes in the argument, and can cause problems to
+% @code, which sets - active.  This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+%                                 --kasal, 21nov03
+\def\entry{%
+  \begingroup
     %
-    % If we must, put the page number on a line of its own, and fill out
-    % this line with blank space.  (The \hfil is overwhelmed with the
-    % fill leaders glue in \indexdotfill if the page number does fit.)
-    \hfil\penalty50
-    \null\nobreak\indexdotfill % Have leaders before the page number.
+    % Start a new paragraph if necessary, so our assignments below can't
+    % affect previous text.
+    \par
     %
-    % The `\ ' here is removed by the implicit \unskip that TeX does as
-    % part of (the primitive) \par.  Without it, a spurious underfull
-    % \hbox ensues.
-    \ #2% The page number ends the paragraph.
-  \fi%
-  \par
-\endgroup}
+    % Do not fill out the last line with white space.
+    \parfillskip = 0in
+    %
+    % No extra space above this paragraph.
+    \parskip = 0in
+    %
+    % Do not prefer a separate line ending with a hyphen to fewer lines.
+    \finalhyphendemerits = 0
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    % \hangafter is reset to 1 (which is the value we want) at the start
+    % of each paragraph, so we need not do anything with that.
+    \hangindent = 2em
+    %
+    % When the entry text needs to be broken, just fill out the first line
+    % with blank space.
+    \rightskip = 0pt plus1fil
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus1pt
+    %
+    % Swallow the left brace of the text (first parameter):
+    \afterassignment\doentry
+    \let\temp =
+}
+\def\doentry{%
+    \bgroup % Instead of the swallowed brace.
+      \noindent
+      \aftergroup\finishentry
+      % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+    % #1 is the page number.
+    %
+    % The following is kludged to not output a line of dots in the index if
+    % there are no page numbers.  The next person who breaks this will be
+    % cursed by a Unix daemon.
+    \def\tempa{{\rm }}%
+    \def\tempb{#1}%
+    \edef\tempc{\tempa}%
+    \edef\tempd{\tempb}%
+    \ifx\tempc\tempd
+      \ %
+    \else
+      %
+      % If we must, put the page number on a line of its own, and fill out
+      % this line with blank space.  (The \hfil is overwhelmed with the
+      % fill leaders glue in \indexdotfill if the page number does fit.)
+      \hfil\penalty50
+      \null\nobreak\indexdotfill % Have leaders before the page number.
+      %
+      % The `\ ' here is removed by the implicit \unskip that TeX does as
+      % part of (the primitive) \par.  Without it, a spurious underfull
+      % \hbox ensues.
+      \ifpdf
+	\pdfgettoks#1.%
+	\ \the\toksA
+      \else
+	\ #1%
+      \fi
+    \fi
+    \par
+  \endgroup
+}
 
 % Like \dotfill except takes at least 1 em.
 \def\indexdotfill{\cleaders
@@ -2541,11 +3810,18 @@
 \def\primary #1{\line{#1\hfil}}
 
 \newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+\def\secondary#1#2{{%
+  \parfillskip=0in
+  \parskip=0in
+  \hangindent=1in
+  \hangafter=1
+  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+  \ifpdf
+    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+  \else
+    #2
+  \fi
+  \par
 }}
 
 % Define two-column mode, which we use to typeset indexes.
@@ -2558,24 +3834,41 @@
 
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.
-  \output = {\global\setbox\partialpage
-    =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
-  \eject
+  \output = {%
+    %
+    % Here is a possibility not foreseen in manmac: if we accumulate a
+    % whole lot of material, we might end up calling this \output
+    % routine twice in a row (see the doublecol-lose test, which is
+    % essentially a couple of indexes with @setchapternewpage off).  In
+    % that case we just ship out what is in \partialpage with the normal
+    % output routine.  Generally, \partialpage will be empty when this
+    % runs and this will be a no-op.  See the indexspread.tex test case.
+    \ifvoid\partialpage \else
+      \onepageout{\pagecontents\partialpage}%
+    \fi
+    %
+    \global\setbox\partialpage = \vbox{%
+      % Unvbox the main output page.
+      \unvbox\PAGE
+      \kern-\topskip \kern\baselineskip
+    }%
+  }%
+  \eject % run that output routine to set \partialpage
   %
-  % Now switch to the double-column output routine.
-  \output={\doublecolumnout}%
+  % Use the double-column output routine for subsequent pages.
+  \output = {\doublecolumnout}%
   %
   % Change the page size parameters.  We could do this once outside this
   % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
   % format, but then we repeat the same computation.  Repeating a couple
   % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it once.
+  % execution time, so we may as well do it in one place.
   %
   % First we halve the line length, less a little for the gutter between
   % the columns.  We compute the gutter based on the line length, so it
   % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +- <
-  % 1pt) as it did when we hard-coded it.
+  % below is chosen so that the gutter has the same value (well, +-<1pt)
+  % as it did when we hard-coded it.
   %
   % We put the result in a separate register, \doublecolumhsize, so we
   % can restore it in \pagesofar, after \hsize itself has (potentially)
@@ -2590,110 +3883,155 @@
   % since nobody clobbers \vsize.)
   \vsize = 2\vsize
 }
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
 \def\doublecolumnout{%
   \splittopskip=\topskip \splitmaxdepth=\maxdepth
   % Get the available space for the double columns -- the normal
   % (undoubled) page height minus any material left over from the
   % previous page.
-  \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
-  % box0 will be the left-hand column, box1 the right.
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  \advance\dimen@ by -\ht\partialpage
+  %
+  % box0 will be the left-hand column, box2 the right.
   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
   \onepageout\pagesofar
-  \unvbox255 \penalty\outputpenalty
+  \unvbox255
+  \penalty\outputpenalty
 }
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
 \def\pagesofar{%
-  % The contents of the output page -- any previous material,
-  % followed by the two boxes we just split.
   \unvbox\partialpage
+  %
   \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
 }
+%
+% All done with double columns.
 \def\enddoublecolumns{%
-  \output={\balancecolumns}\eject % split what we have
-  \endgroup
-  % Back to normal single-column typesetting, but take account of the
-  % fact that we just accumulated some stuff on the output page.
-  \pagegoal=\vsize 
+  \output = {%
+    % Split the last of the double-column material.  Leave it on the
+    % current page, no automatic page break.
+    \balancecolumns
+    %
+    % If we end up splitting too much material for the current page,
+    % though, there will be another page break right after this \output
+    % invocation ends.  Having called \balancecolumns once, we do not
+    % want to call it again.  Therefore, reset \output to its normal
+    % definition right away.  (We hope \balancecolumns will never be
+    % called on to balance too much material, but if it is, this makes
+    % the output somewhat more palatable.)
+    \global\output = {\onepageout{\pagecontents\PAGE}}%
+  }%
+  \eject
+  \endgroup % started in \begindoublecolumns
+  %
+  % \pagegoal was set to the doubled \vsize above, since we restarted
+  % the current page.  We're now back to normal single-column
+  % typesetting, so reset \pagegoal to the normal \vsize (after the
+  % \endgroup where \vsize got restored).
+  \pagegoal = \vsize
 }
+%
+% Called at the end of the double column material.
 \def\balancecolumns{%
-  % Called on the last page of the double column material.
-  \setbox0=\vbox{\unvbox255}%
+  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2
+  \divide\dimen@ by 2 % target to split to
+  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
   \splittopskip = \topskip
   % Loop until we get a decent breakpoint.
-  {\vbadness=10000 \loop \global\setbox3=\copy0
-    \global\setbox1=\vsplit3 to\dimen@
-    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}%
+  {%
+    \vbadness = 10000
+    \loop
+      \global\setbox3 = \copy0
+      \global\setbox1 = \vsplit3 to \dimen@
+    \ifdim\ht3>\dimen@
+      \global\advance\dimen@ by 1pt
+    \repeat
+  }%
+  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
   \setbox0=\vbox to\dimen@{\unvbox1}%
   \setbox2=\vbox to\dimen@{\unvbox3}%
+  %
   \pagesofar
 }
-\catcode `\@=\other
+\catcode`\@ = \other
 
 
 \message{sectioning,}
-% Define chapters, sections, etc.
+% Chapters, sections, etc.
 
-\newcount \chapno
-\newcount \secno        \secno=0
-\newcount \subsecno     \subsecno=0
-\newcount \subsubsecno  \subsubsecno=0
+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number".  We avoid collisions with chapter
+% numbers by starting them at 10000.  (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno        \secno=0
+\newcount\subsecno     \subsecno=0
+\newcount\subsubsecno  \subsubsecno=0
 
 % This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount \appendixno  \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-\newwrite \contentsfile
-% This is called from \setfilename.
-\def\opencontents{\openout \contentsfile = \jobname.toc}
+\newcount\appendixno  \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+  \ifnum\appendixno=`A A%
+  \else\ifnum\appendixno=`B B%
+  \else\ifnum\appendixno=`C C%
+  \else\ifnum\appendixno=`D D%
+  \else\ifnum\appendixno=`E E%
+  \else\ifnum\appendixno=`F F%
+  \else\ifnum\appendixno=`G G%
+  \else\ifnum\appendixno=`H H%
+  \else\ifnum\appendixno=`I I%
+  \else\ifnum\appendixno=`J J%
+  \else\ifnum\appendixno=`K K%
+  \else\ifnum\appendixno=`L L%
+  \else\ifnum\appendixno=`M M%
+  \else\ifnum\appendixno=`N N%
+  \else\ifnum\appendixno=`O O%
+  \else\ifnum\appendixno=`P P%
+  \else\ifnum\appendixno=`Q Q%
+  \else\ifnum\appendixno=`R R%
+  \else\ifnum\appendixno=`S S%
+  \else\ifnum\appendixno=`T T%
+  \else\ifnum\appendixno=`U U%
+  \else\ifnum\appendixno=`V V%
+  \else\ifnum\appendixno=`W W%
+  \else\ifnum\appendixno=`X X%
+  \else\ifnum\appendixno=`Y Y%
+  \else\ifnum\appendixno=`Z Z%
+  % The \the is necessary, despite appearances, because \appendixletter is
+  % expanded while writing the .toc file.  \char\appendixno is not
+  % expandable, thus it is written literally, thus all appendixes come out
+  % with the same letter (or @) in the toc without it.
+  \else\char\the\appendixno
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
 
 % Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise
-
-\def\thischapter{} \def\thissection{}
-\def\seccheck#1{\if \pageno<0 %
-\errmessage{@#1 not allowed after generating table of contents}\fi
-%
-}
-
-\def\chapternofonts{%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\def\result{\realbackslash result}
-\def\equiv{\realbackslash equiv}
-\def\expansion{\realbackslash expansion}
-\def\print{\realbackslash print}
-\def\TeX{\realbackslash TeX}
-\def\dots{\realbackslash dots}
-\def\copyright{\realbackslash copyright}
-\def\tt{\realbackslash tt}
-\def\bf{\realbackslash bf }
-\def\w{\realbackslash w}
-\def\less{\realbackslash less}
-\def\gtr{\realbackslash gtr}
-\def\hat{\realbackslash hat}
-\def\char{\realbackslash char}
-\def\tclose##1{\realbackslash tclose {##1}}
-\def\code##1{\realbackslash code {##1}}
-\def\samp##1{\realbackslash samp {##1}}
-\def\r##1{\realbackslash r {##1}}
-\def\b##1{\realbackslash b {##1}}
-\def\key##1{\realbackslash key {##1}}
-\def\file##1{\realbackslash file {##1}}
-\def\kbd##1{\realbackslash kbd {##1}}
-% These are redefined because @smartitalic wouldn't work inside xdef.
-\def\i##1{\realbackslash i {##1}}
-\def\cite##1{\realbackslash cite {##1}}
-\def\var##1{\realbackslash var {##1}}
-\def\emph##1{\realbackslash emph {##1}}
-\def\dfn##1{\realbackslash dfn {##1}}
-}
+% page headings and footings can use it.  @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
 
 \newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
 
 % @raisesections: treat @section as chapter, @subsection as section, etc.
 \def\raisesections{\global\advance\secbase by -1}
@@ -2703,297 +4041,250 @@
 \def\lowersections{\global\advance\secbase by 1}
 \let\down=\lowersections % original BFox name
 
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+  % Compute the abs. sec. level:
+  \absseclevel=#2
+  \advance\absseclevel by \secbase
+  % Make sure \absseclevel doesn't fall outside the range:
+  \ifnum \absseclevel < 0
+    \absseclevel = 0
   \else
-    \numberedsubsubseczzz{#2}
+    \ifnum \absseclevel > 3
+      \absseclevel = 3
+    \fi
   \fi
-\fi
+  % The heading type:
+  \def\headtype{#1}%
+  \if \headtype U%
+    \ifnum \absseclevel < \unmlevel
+      \chardef\unmlevel = \absseclevel
+    \fi
+  \else
+    % Check for appendix sections:
+    \ifnum \absseclevel = 0
+      \edef\chapheadtype{\headtype}%
+    \else
+      \if \headtype A\if \chapheadtype N%
+	\errmessage{@appendix... within a non-appendix chapter}%
+      \fi\fi
+    \fi
+    % Check for numbered within unnumbered:
+    \ifnum \absseclevel > \unmlevel
+      \def\headtype{U}%
+    \else
+      \chardef\unmlevel = 3
+    \fi
+  \fi
+  % Now print the heading:
+  \if \headtype U%
+    \ifcase\absseclevel
+	\unnumberedzzz{#3}%
+    \or \unnumberedseczzz{#3}%
+    \or \unnumberedsubseczzz{#3}%
+    \or \unnumberedsubsubseczzz{#3}%
+    \fi
+  \else
+    \if \headtype A%
+      \ifcase\absseclevel
+	  \appendixzzz{#3}%
+      \or \appendixsectionzzz{#3}%
+      \or \appendixsubseczzz{#3}%
+      \or \appendixsubsubseczzz{#3}%
+      \fi
+    \else
+      \ifcase\absseclevel
+	  \chapterzzz{#3}%
+      \or \seczzz{#3}%
+      \or \numberedsubseczzz{#3}%
+      \or \numberedsubsubseczzz{#3}%
+      \fi
+    \fi
+  \fi
+  \suppressfirstparagraphindent
 }
 
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
-  \else
-    \appendixsubsubseczzz{#2}
-  \fi
-\fi
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+  % section resetting is \global in case the chapter is in a group, such
+  % as an @include file.
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\chapno by 1
+  %
+  % Used for \float.
+  \gdef\chaplevelprefix{\the\chapno.}%
+  \resetallfloatnos
+  %
+  \message{\putwordChapter\space \the\chapno}%
+  %
+  % Write the actual heading.
+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
+  %
+  % So @section and the like are numbered underneath this chapter.
+  \global\let\section = \numberedsec
+  \global\let\subsection = \numberedsubsec
+  \global\let\subsubsection = \numberedsubsubsec
 }
 
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
-  \else
-    \unnumberedsubsubseczzz{#2}
-  \fi
-\fi
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\appendixno by 1
+  \gdef\chaplevelprefix{\appendixletter.}%
+  \resetallfloatnos
+  %
+  \def\appendixnum{\putwordAppendix\space \appendixletter}%
+  \message{\appendixnum}%
+  %
+  \chapmacro{#1}{Yappendix}{\appendixletter}%
+  %
+  \global\let\section = \appendixsec
+  \global\let\subsection = \appendixsubsec
+  \global\let\subsubsection = \appendixsubsubsec
 }
 
-
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{\seccheck{chapter}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\donoderef %
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{\seccheck{appendix}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry
-  {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\appendixnoderef %
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
-}}
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\unnumberedno by 1
+  %
+  % Since an unnumbered has no number, no prefix for figures.
+  \global\let\chaplevelprefix = \empty
+  \resetallfloatnos
+  %
+  % This used to be simply \message{#1}, but TeX fully expands the
+  % argument to \message.  Therefore, if #1 contained @-commands, TeX
+  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+  % expanded @cite (which turns out to cause errors because \cite is meant
+  % to be executed, not expanded).
+  %
+  % Anyway, we don't want the fully-expanded definition of @cite to appear
+  % as a result of the \message, we just want `@cite' itself.  We use
+  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+  % simply yielding the contents of <toks register>.  (We also do this for
+  % the toc entries.)
+  \toks0 = {#1}%
+  \message{(\the\toks0)}%
+  %
+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+  %
+  \global\let\section = \unnumberedsec
+  \global\let\subsection = \unnumberedsubsec
+  \global\let\subsubsection = \unnumberedsubsubsec
+}
 
 % @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+\outer\parseargdef\centerchap{%
+  % Well, we could do the following in a group, but that would break
+  % an assumption that \chapmacro is called at the outermost level.
+  % Thus we are safer this way:		--kasal, 24feb04
+  \let\centerparametersmaybe = \centerparameters
+  \unnmhead0{#1}%
+  \let\centerparametersmaybe = \relax
+}
 
-\outer\def\top{\parsearg\unnumberedyyy}
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{\seccheck{unnumbered}%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message.  Therefore, if #1 contained @-commands, TeX
-% expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself.  We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of the <toks register>.
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}}
+% @top is like @unnumbered.
+\let\top\unnumbered
 
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{\seccheck{section}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
 
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
 
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
 
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{\seccheck{subsection}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
 
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno}%
+}
 
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-\plainsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
 
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry %
-  {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-  {\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynumbered}%
+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
 
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry{#1}%
-  {\appendixletter}
-  {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
 
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
 
 % These macros control what the section commands do, according
 % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
 % Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
 
 % Define @majorheading, @heading and @subheading
 
-% NOTE on use of \vbox for chapter headings, section headings, and
-% such:
+% NOTE on use of \vbox for chapter headings, section headings, and such:
 %       1) We use \vbox rather than the earlier \line to permit
 %          overlong headings to fold.
 %       2) \hyphenpenalty is set to 10000 because hyphenation in a
@@ -3002,23 +4293,27 @@
 %          if justification is not attempted.  Hence \raggedright.
 
 
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
+\def\majorheading{%
+  {\advance\chapheadingskip by 10pt \chapbreak }%
+  \parsearg\chapheadingzzz
+}
 
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                  \parindent=0pt\raggedright
-                  \rm #1\hfill}}\bigskip \par\penalty 200}
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                    \parindent=0pt\raggedright
+                    \rm #1\hfill}}%
+  \bigskip \par\penalty 200\relax
+  \suppressfirstparagraphindent
+}
 
 % @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
 
 % These macros generate a chapter, section, etc. heading only
 % (including whitespace, linebreaking, etc. around it),
@@ -3027,8 +4322,6 @@
 %%% Args are the skip and penalty (usually negative)
 \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
 
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
 %%% Define plain chapter starts, and page on/off switching for it
 % Parameter controlling skip before chapter headings (if needed)
 
@@ -3040,18 +4333,18 @@
 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
 
-\def\CHAPPAGoff{
+\def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak
 \global\let\pagealignmacro=\chappager}
 
-\def\CHAPPAGon{
+\def\CHAPPAGon{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager
 \global\let\pagealignmacro=\chappager
 \global\def\HEADINGSon{\HEADINGSsingle}}
 
-\def\CHAPPAGodd{
+\def\CHAPPAGodd{%
 \global\let\contentsalignmacro = \chapoddpage
 \global\let\pchapsepmacro=\chapoddpage
 \global\let\pagealignmacro=\chapoddpage
@@ -3059,221 +4352,423 @@
 
 \CHAPPAGon
 
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
   \pchapsepmacro
   {%
     \chapfonts \rm
-    \def\chapnum{#2}%
-    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+    %
+    % Have to define \thissection before calling \donoderef, because the
+    % xref code eventually uses it.  On the other hand, it has to be called
+    % after \pchapsepmacro, or the headline will change too soon.
+    \gdef\thissection{#1}%
+    \gdef\thischaptername{#1}%
+    %
+    % Only insert the separating space if we have a chapter/appendix
+    % number, and don't print the unnumbered ``number''.
+    \def\temptype{#2}%
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unnchap}%
+      \gdef\thischapter{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+      \def\toctype{omit}%
+      \gdef\thischapter{}%
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+      \def\toctype{app}%
+      % We don't substitute the actual chapter name into \thischapter
+      % because we don't want its macros evaluated now.  And we don't
+      % use \thissection because that changes with each section.
+      %
+      \xdef\thischapter{\putwordAppendix{} \appendixletter:
+                        \noexpand\thischaptername}%
+    \else
+      \setbox0 = \hbox{#3\enspace}%
+      \def\toctype{numchap}%
+      \xdef\thischapter{\putwordChapter{} \the\chapno:
+                        \noexpand\thischaptername}%
+    \fi\fi\fi
+    %
+    % Write the toc entry for this chapter.  Must come before the
+    % \donoderef, because we include the current node name in the toc
+    % entry, and \donoderef resets it to empty.
+    \writetocentry{\toctype}{#1}{#3}%
+    %
+    % For pdftex, we have to write out the node definition (aka, make
+    % the pdfdest) after any page break, but before the actual text has
+    % been typeset.  If the destination for the pdf outline is after the
+    % text, then jumping from the outline may wind up with the text not
+    % being visible, for instance under high magnification.
+    \donoderef{#2}%
+    %
+    % Typeset the actual heading.
     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 \centerparametersmaybe
+          \hangindent=\wd0 \centerparametersmaybe
           \unhbox0 #1\par}%
   }%
   \nobreak\bigskip % no page break after a chapter title
   \nobreak
 }
 
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
 % @centerchap -- centered and unnumbered.
 \let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
-  \def\centerparametersmaybe{%
-    \advance\rightskip by 3\rightskip
-    \leftskip = \rightskip
-    \parfillskip = 0pt
-  }%
-  \chfplain{#1}{}%
-}}
+\def\centerparameters{%
+  \advance\rightskip by 3\rightskip
+  \leftskip = \rightskip
+  \parfillskip = 0pt
+}
 
-\CHAPFplain % The default
 
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
 \def\unnchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\penalty 10000 %
+                       \rm #1\hfill}}\bigskip \par\nobreak
 }
-
 \def\chfopen #1#2{\chapoddpage {\chapfonts
 \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
 \par\penalty 5000 %
 }
-
 \def\centerchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
+                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
 }
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
+\def\CHAPFopen{%
+  \global\let\chapmacro=\chfopen
+  \global\let\centerchapmacro=\centerchfopen}
 
 
-% Section titles.
+% Section titles.  These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
 \newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
 
 % Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
 
 % Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
 
 
-% Print any size section title.
-% 
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
-  {%
-    \expandafter\advance\csname #1headingskip\endcsname by \parskip
-    \csname #1headingbreak\endcsname
-  }%
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\sectionheading#1#2#3#4{%
   {%
     % Switch to the right set of fonts.
-    \csname #1fonts\endcsname \rm
+    \csname #2fonts\endcsname \rm
     %
-    % Only insert the separating space if we have a section number.
-    \def\secnum{#2}%
-    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+    % Insert space above the heading.
+    \csname #2headingbreak\endcsname
     %
+    % Only insert the space after the number if we have a section number.
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unn}%
+      \gdef\thissection{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      % for @headings -- no section number, don't include in toc,
+      % and don't redefine \thissection.
+      \setbox0 = \hbox{}%
+      \def\toctype{omit}%
+      \let\sectionlevel=\empty
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{app}%
+      \gdef\thissection{#1}%
+    \else
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{num}%
+      \gdef\thissection{#1}%
+    \fi\fi\fi
+    %
+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+    %
+    % Write the node reference (= pdf destination for pdftex).
+    % Again, see comments in \chapmacro.
+    \donoderef{#3}%
+    %
+    % Interline glue will be inserted when the vbox is completed.
+    % That glue will be a valid breakpoint for the page, since it'll be
+    % preceded by a whatsit (usually from the \donoderef, or from the
+    % \writetocentry if there was no node).  We don't want to allow that
+    % break, since then the whatsits could end up on page n while the
+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
+    \nobreak
+    %
+    % Output the actual section heading.
     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 % zero if no section number
-          \unhbox0 #3}%
+          \hangindent=\wd0  % zero if no section number
+          \unhbox0 #1}%
   }%
-  \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
+  % Add extra space after the heading -- half of whatever came above it.
+  % Don't allow stretch, though.
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
+  \nobreak
+  %
+  % We'll almost certainly start a paragraph next, so don't let that
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  % 
+  % This is purely so the last item on the list is a known \penalty >
+  % 10000.  This is so \startdefun can avoid allowing breakpoints after
+  % section headings.  Otherwise, it would insert a valid breakpoint between:
+  % 
+  %   @section sec-whatever
+  %   @deffn def-whatever
+  \penalty 10001
 }
 
 
-\message{toc printing,}
-% Finish up the main text and prepare to read what we've written
-% to \contentsfile.
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this.  The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything.  This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+  \edef\writetoctype{#1}%
+  \ifx\writetoctype\omitkeyword \else
+    \iftocfileopened\else
+      \immediate\openout\tocfile = \jobname.toc
+      \global\tocfileopenedtrue
+    \fi
+    %
+    \iflinks
+      {\atdummies
+       \edef\temp{%
+         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+       \temp
+      }%
+    \fi
+  \fi
+  %
+  % Tell \shipout to create a pdf destination on each page, if we're
+  % writing pdf.  These are used in the table of contents.  We can't
+  % just write one on every page because the title pages are numbered
+  % 1 and 2 (the page numbers aren't printed), and so are the first
+  % two pages of the document.  Thus, we'd have two destinations named
+  % `1', and two named `2'.
+  \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care.  This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+% 
+\def\activecatcodes{%
+  \catcode`\"=\active
+  \catcode`\$=\active
+  \catcode`\<=\active
+  \catcode`\>=\active
+  \catcode`\\=\active
+  \catcode`\^=\active
+  \catcode`\_=\active
+  \catcode`\|=\active
+  \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+  \setupdatafile
+  \activecatcodes
+  \input \jobname.toc
+}
 
 \newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
 \def\startcontents#1{%
-   % If @setchapternewpage on, and @headings double, the contents should
-   % start on an odd page, unlike chapters.  Thus, we maintain
-   % \contentsalignmacro in parallel with \pagealignmacro.
-   % From: Torbjorn Granlund <tege@matematik.su.se>
-   \contentsalignmacro
-   \immediate\closeout \contentsfile
-   \ifnum \pageno>0
-      \pageno = -1              % Request roman numbered pages.
-   \fi
-   % Don't need to put `Contents' or `Short Contents' in the headline.
-   % It is abundantly clear what they are.
-   \unnumbchapmacro{#1}\def\thischapter{}%
-   \begingroup                  % Set up to handle contents files properly.
-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
-      \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
-      \raggedbottom             % Worry more about breakpoints than the bottom.
-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+  % If @setchapternewpage on, and @headings double, the contents should
+  % start on an odd page, unlike chapters.  Thus, we maintain
+  % \contentsalignmacro in parallel with \pagealignmacro.
+  % From: Torbjorn Granlund <tege@matematik.su.se>
+  \contentsalignmacro
+  \immediate\closeout\tocfile
+  %
+  % Don't need to put `Contents' or `Short Contents' in the headline.
+  % It is abundantly clear what they are.
+  \def\thischapter{}%
+  \chapmacro{#1}{Yomitfromtoc}{}%
+  %
+  \savepageno = \pageno
+  \begingroup                  % Set up to handle contents files properly.
+    \raggedbottom              % Worry more about breakpoints than the bottom.
+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    %
+    % Roman numerals for page numbers.
+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
 }
 
 
 % Normal (long) toc.
-\outer\def\contents{%
-   \startcontents{\putwordTableofContents}%
-      \input \jobname.toc
-   \endgroup
-   \vfill \eject
+\def\contents{%
+  \startcontents{\putwordTOC}%
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \ifeof 1 \else
+      \pdfmakeoutlines
+    \fi
+    \closein 1
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
 }
 
 % And just the chapters.
-\outer\def\summarycontents{%
-   \startcontents{\putwordShortContents}%
-      %
-      \let\chapentry = \shortchapentry
-      \let\unnumbchapentry = \shortunnumberedentry
-      % We want a true roman here for the page numbers.
-      \secfonts
-      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
-      \rm
-      \hyphenpenalty = 10000
-      \advance\baselineskip by 1pt % Open it up a little.
-      \def\secentry ##1##2##3##4{}
-      \def\unnumbsecentry ##1##2{}
-      \def\subsecentry ##1##2##3##4##5{}
-      \def\unnumbsubsecentry ##1##2{}
-      \def\subsubsecentry ##1##2##3##4##5##6{}
-      \def\unnumbsubsubsecentry ##1##2{}
-      \input \jobname.toc
-   \endgroup
-   \vfill \eject
+\def\summarycontents{%
+  \startcontents{\putwordShortTOC}%
+    %
+    \let\numchapentry = \shortchapentry
+    \let\appentry = \shortchapentry
+    \let\unnchapentry = \shortunnchapentry
+    % We want a true roman here for the page numbers.
+    \secfonts
+    \let\rm=\shortcontrm \let\bf=\shortcontbf
+    \let\sl=\shortcontsl \let\tt=\shortconttt
+    \rm
+    \hyphenpenalty = 10000
+    \advance\baselineskip by 1pt % Open it up a little.
+    \def\numsecentry##1##2##3##4{}
+    \let\appsecentry = \numsecentry
+    \let\unnsecentry = \numsecentry
+    \let\numsubsecentry = \numsecentry
+    \let\appsubsecentry = \numsecentry
+    \let\unnsubsecentry = \numsecentry
+    \let\numsubsubsecentry = \numsecentry
+    \let\appsubsubsecentry = \numsecentry
+    \let\unnsubsubsecentry = \numsecentry
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \closein 1
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
 }
 \let\shortcontents = \summarycontents
 
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+  % This space should be enough, since a single number is .5em, and the
+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+  % But use \hss just in case.
+  % (This space doesn't include the extra space that gets added after
+  % the label; that gets put in by \shortchapentry above.)
+  %
+  % We'd like to right-justify chapter numbers, but that looks strange
+  % with appendix letters.  And right-justifying numbers and
+  % left-justifying letters looks strange when there is less than 10
+  % chapters.  Have to read the whole toc once to know how many chapters
+  % there are before deciding ...
+  \hbox to 1em{#1\hss}%
+}
+
 % These macros generate individual entries in the table of contents.
 % The first argument is the chapter or section name.
 % The last argument is the page number.
 % The arguments in between are the chapter number, section number, ...
 
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
 }
 
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+  % We use M since it's probably the widest letter.
+  \setbox0 = \hbox{\putwordAppendix{} M}%
+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
 
-\def\shortchaplabel#1{%
-  % We typeset #1 in a box of constant width, regardless of the text of
-  % #1, so the chapter titles will come out aligned.
-  \setbox0 = \hbox{#1}%
-  \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
-  %
-  % This space should be plenty, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  \advance\dimen0 by 1.1em
-  \hbox to \dimen0{#1\hfil}%
-}
-
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
 
 % Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
 
 % Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
 
 % And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
 
 % This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
 
 % Now for the actual typesetting. In all these, #1 is the text and #2 is the
 % page number.
@@ -3284,36 +4779,28 @@
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
      \chapentryfonts
-     \tocentry{#1}{\dopageno{#2}}%
+     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup
    \nobreak\vskip .25\baselineskip plus.1\baselineskip
 }
 
 \def\dosecentry#1#2{\begingroup
   \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsecentry#1#2{\begingroup
   \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsubsecentry#1#2{\begingroup
   \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here.  (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-%
-% \turnoffactive is for the sake of @" used for umlauts.
-\def\tocentry#1#2{\begingroup
-  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-  \entry{\turnoffactive #1}{\turnoffactive #2}%
-\endgroup}
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
 
 % Space between chapter (or whatever) number and the title.
 \def\labelspace{\hskip1em \relax}
@@ -3323,91 +4810,91 @@
 
 \def\chapentryfonts{\secfonts \rm}
 \def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
 
 
 \message{environments,}
-
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox    \newbox\longdblarrowbox
-\newbox\pushcharbox    \newbox\bullbox
-\newbox\equivbox       \newbox\errorbox
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-%                                      depth .1ex\hfil}
-%}
+% @foo ... @end foo.
 
 % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
 \def\point{$\star$}
 \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
 \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
 \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
 \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
 
+% The @error{} command.
 % Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
 {\tentt \global\dimen0 = 3em}% Width of the box.
 \dimen2 = .55pt % Thickness of rules
 % The text. (`r' is open on the right, `e' somewhat less so on the left.)
 \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
    \advance\hsize by -2\dimen2 % Rules.
-   \vbox{
+   \vbox{%
       \hrule height\dimen2
       \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
          \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
          \kern3pt\vrule width\dimen2}% Space to right.
       \hrule height\dimen2}
     \hfil}
-
-% The @error{} command.
+%
 \def\error{\leavevmode\lower.7ex\copy\errorbox}
 
 % @tex ... @end tex    escapes into raw Tex temporarily.
 % One exception: @ is still an escape character, so that @end tex works.
 % But \@ or @@ will get a plain tex @ character.
 
-\def\tex{\begingroup
-\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-\catcode `\%=14
-\catcode 43=12 % plus
-\catcode`\"=12
-\catcode`\==12
-\catcode`\|=12
-\catcode`\<=12
-\catcode`\>=12
-\escapechar=`\\
-%
-\let\,=\ptexcomma
-\let\~=\ptextilde
-\let\{=\ptexlbrace
-\let\}=\ptexrbrace
-\let\.=\ptexdot
-\let\*=\ptexstar
-\let\dots=\ptexdots
-\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}
-\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}
-\def\@{@}%
-\let\bullet=\ptexbullet
-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
-%
-\let\Etex=\endgroup}
+\envdef\tex{%
+  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+  \catcode `\%=14
+  \catcode `\+=\other
+  \catcode `\"=\other
+  \catcode `\|=\other
+  \catcode `\<=\other
+  \catcode `\>=\other
+  \escapechar=`\\
+  %
+  \let\b=\ptexb
+  \let\bullet=\ptexbullet
+  \let\c=\ptexc
+  \let\,=\ptexcomma
+  \let\.=\ptexdot
+  \let\dots=\ptexdots
+  \let\equiv=\ptexequiv
+  \let\!=\ptexexclam
+  \let\i=\ptexi
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \let\{=\ptexlbrace
+  \let\+=\tabalign
+  \let\}=\ptexrbrace
+  \let\/=\ptexslash
+  \let\*=\ptexstar
+  \let\t=\ptext
+  \let\frenchspacing=\plainfrenchspacing
+  %
+  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+  \def\@{@}%
+}
+% There is no need to define \Etex.
 
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
 
 % Amount to narrow the margins by for @lisp.
 \newskip\lispnarrowing \lispnarrowing=0.4in
@@ -3417,38 +4904,38 @@
 % have any width.
 \def\lisppar{\null\endgraf}
 
-% Make each space character in the input produce a normal interword
-% space in the output.  Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is.  This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
 % This space is always present above and below environments.
 \newskip\envskipamount \envskipamount = 0pt
 
 % Make spacing and below environment symmetrical.  We use \parskip here
 % to help in doing that, since in @example-like environments \parskip
 % is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
+% start of the next paragraph will insert \parskip.
 %
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
+\def\aboveenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
+      % it's not a good place to break if the last penalty was \nobreak
+      % or better ...
+      \ifnum\lastpenalty<10000 \penalty-50 \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
 
 \let\afterenvbreak = \aboveenvbreak
 
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
 \let\nonarrowing=\relax
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
 \font\circle=lcircle10
 \newdimen\circthick
 \newdimen\cartouter\newdimen\cartinner
@@ -3468,833 +4955,1326 @@
 %
 \newskip\lskip\newskip\rskip
 
-\long\def\cartouche{%
-\begingroup
-        \lskip=\leftskip \rskip=\rightskip
-        \leftskip=0pt\rightskip=0pt %we want these *outside*.
-        \cartinner=\hsize \advance\cartinner by-\lskip
-                          \advance\cartinner by-\rskip
-        \cartouter=\hsize
-        \advance\cartouter by 18pt % allow for 3pt kerns on either
-%                                    side, and for 6pt waste from
-%                                    each corner char
-        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-        % Flag to tell @lisp, etc., not to narrow margin.
-        \let\nonarrowing=\comment
-        \vbox\bgroup
-                \baselineskip=0pt\parskip=0pt\lineskip=0pt
-                \carttop
-                \hbox\bgroup
-                        \hskip\lskip
-                        \vrule\kern3pt
-                        \vbox\bgroup
-                                \hsize=\cartinner
-                                \kern3pt
-                                \begingroup
-                                        \baselineskip=\normbskip
-                                        \lineskip=\normlskip
-                                        \parskip=\normpskip
-                                        \vskip -\parskip
+\envdef\cartouche{%
+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
+  \startsavinginserts
+  \lskip=\leftskip \rskip=\rightskip
+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
+  \cartinner=\hsize \advance\cartinner by-\lskip
+  \advance\cartinner by-\rskip
+  \cartouter=\hsize
+  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
+				% side, and for 6pt waste from
+				% each corner char, and rule thickness
+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+  % Flag to tell @lisp, etc., not to narrow margin.
+  \let\nonarrowing = t%
+  \vbox\bgroup
+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
+      \carttop
+      \hbox\bgroup
+	  \hskip\lskip
+	  \vrule\kern3pt
+	  \vbox\bgroup
+	      \kern3pt
+	      \hsize=\cartinner
+	      \baselineskip=\normbskip
+	      \lineskip=\normlskip
+	      \parskip=\normpskip
+	      \vskip -\parskip
+	      \comment % For explanation, see the end of \def\group.
+}
 \def\Ecartouche{%
-                                \endgroup
-                                \kern3pt
-                        \egroup
-                        \kern3pt\vrule
-                        \hskip\rskip
-                \egroup
-                \cartbot
-        \egroup
-\endgroup
-}}
+              \ifhmode\par\fi
+	      \kern3pt
+	  \egroup
+	  \kern3pt\vrule
+	  \hskip\rskip
+      \egroup
+      \cartbot
+  \egroup
+  \checkinserts
+}
 
 
 % This macro is called at the beginning of all the @example variants,
 % inside a group.
 \def\nonfillstart{%
   \aboveenvbreak
-  \inENV % This group ends at the end of the body
   \hfuzz = 12pt % Don't be fussy
   \sepspaces % Make spaces be word-separators rather than space tokens.
-  \singlespace
   \let\par = \lisppar % don't ignore blank lines
   \obeylines % each line of input is a line of output
   \parskip = 0pt
   \parindent = 0pt
   \emergencystretch = 0pt % don't try to avoid overfull boxes
-  % @cartouche defines \nonarrowing to inhibit narrowing
-  % at next level down.
   \ifx\nonarrowing\relax
     \advance \leftskip by \lispnarrowing
     \exdentamount=\lispnarrowing
-    \let\exdent=\nofillexdent
-    \let\nonarrowing=\relax
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \let\exdent=\nofillexdent
+}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+%    @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+  \ifx\SETdispenvsize\smallword
+    \smallexamplefonts \rm
+  \fi
+}
+\def\setsmalldispenv{%
+  \ifx\SETdispenvsize\nosmallword
+  \else
+    \smallexamplefonts \rm
   \fi
 }
 
-% To ending an @example-like environment, we first end the paragraph
-% (via \afterenvbreak's vertical glue), and then the group.  That way we
-% keep the zero \parskip that the environments set -- \parskip glue
-% will be inserted at the beginning of the next paragraph in the
-% document, after the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}%
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+  \expandafter\let\csname E#1\endcsname \afterenvbreak
+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
 
-% This macro is
-\def\lisp{\begingroup
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+  \makedispenv{#1}{#3}
+  \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
   \nonfillstart
-  \let\Elisp = \nonfillfinish
   \tt
-  \rawbackslash % have \ input char produce \ char from current font
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
+}
+
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+  \nonfillstart
   \gobble
 }
 
-% Define the \E... control sequence only if we are inside the
-% environment, so the error checking in \end will work.
+% @format/@smallformat: same as @display except don't narrow margins.
 %
-% We must call \lisp last in the definition, since it reads the
-% return following the @example (or whatever) command.
-%
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% @smallexample and @smalllisp.  This is not used unless the @smallbook
-% command is given.  Originally contributed by Pavel@xerox.
-%
-\def\smalllispx{\begingroup
+\makedispenv{format}{%
+  \let\nonarrowing = t%
   \nonfillstart
-  \let\Esmalllisp = \nonfillfinish
-  \let\Esmallexample = \nonfillfinish
-  %
-  % Smaller fonts for small examples.
-  \indexfonts \tt
-  \rawbackslash % make \ output the \ character from the current font (tt)
   \gobble
 }
 
-% This is @display; same as @lisp except use roman font.
-%
-\def\display{\begingroup
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+  \let\nonarrowing = t%
   \nonfillstart
-  \let\Edisplay = \nonfillfinish
   \gobble
 }
+\let\Eflushleft = \afterenvbreak
 
-% This is @format; same as @display except don't narrow margins.
+% @flushright.
 %
-\def\format{\begingroup
-  \let\nonarrowing = t
+\envdef\flushright{%
+  \let\nonarrowing = t%
   \nonfillstart
-  \let\Eformat = \nonfillfinish
-  \gobble
-}
-
-% @flushleft (same as @format) and @flushright.
-%
-\def\flushleft{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushleft = \nonfillfinish
-  \gobble
-}
-\def\flushright{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushright = \nonfillfinish
   \advance\leftskip by 0pt plus 1fill
-  \gobble}
+  \gobble
+}
+\let\Eflushright = \afterenvbreak
+
 
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
+% and narrows the margins.  We keep \parskip nonzero in general, since
+% we're doing normal filling.  So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
 %
-\def\quotation{%
-  \begingroup\inENV %This group ends at the end of the @quotation body
+\envdef\quotation{%
   {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \singlespace
   \parindent=0pt
-  % We have retained a nonzero parskip for the environment, since we're
-  % doing normal filling. So to avoid extra space below the environment...
-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
   %
   % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
   \ifx\nonarrowing\relax
     \advance\leftskip by \lispnarrowing
     \advance\rightskip by \lispnarrowing
     \exdentamount = \lispnarrowing
+  \else
     \let\nonarrowing = \relax
   \fi
+  \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+  \par
+  \ifx\quotationauthor\undefined\else
+    % indent a bit.
+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+  \fi
+  {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty \else
+    {\bf #1: }%
+  \fi
 }
 
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too.  Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+  \do\ \do\\\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+  \do\<\do\>\do\|\do\@\do+\do\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+  \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+  \tt  % easiest (and conventionally used) font for verbatim
+  \def\par{\leavevmode\endgraf}%
+  \catcode`\`=\active
+  \tabeightspaces
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabexpand{%
+    \catcode`\^^I=\active
+    \def^^I{\leavevmode\egroup
+      \dimen0=\wd0 % the width so far, or since the previous tab
+      \divide\dimen0 by\tabw
+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
+      \wd0=\dimen0 \box0 \starttabbox
+    }%
+  }
+\endgroup
+\def\setupverbatim{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  % Easiest (and conventionally used) font for verbatim
+  \tt
+  \def\par{\leavevmode\egroup\box0\endgraf}%
+  \catcode`\`=\active
+  \tabexpand
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+  \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+%    \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+  \catcode`\ =\active
+  \obeylines %
+  % ignore everything up to the first ^^M, that's the newline at the end
+  % of the @verbatim input line itself.  Otherwise we get an extra blank
+  % line in the output.
+  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+  % We really want {...\end verbatim} in the body of the macro, but
+  % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+    \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+  {%
+    \makevalueexpandable
+    \setupverbatim
+    \input #1
+    \afterenvbreak
+  }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+  \begingroup
+    \parindent = 0pt  % paragraph indentation looks wrong on title page
+    \scanexp\copyingtext
+  \endgroup
+}
+
 \message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
+% @defun etc.
 
 \newskip\defbodyindent \defbodyindent=.4in
 \newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
 \newskip\deflastargmargin \deflastargmargin=18pt
 
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
+% Start the processing of @deffn:
+\def\startdefun{%
+  \ifnum\lastpenalty<10000
+    \medbreak
+  \else
+    % If there are two @def commands in a row, we'll have a \nobreak,
+    % which is there to keep the function description together with its
+    % header.  But if there's nothing but headers, we need to allow a
+    % break somewhere.  Check specifically for penalty 10002, inserted
+    % by \defargscommonending, instead of 10000, since the sectioning
+    % commands also insert a nobreak penalty, and we don't want to allow
+    % a break between a section heading and a defun.
+    % 
+    \ifnum\lastpenalty=10002 \penalty2000 \fi
+    %
+    % Similarly, after a section heading, do not allow a break.
+    % But do insert the glue.
+    \medskip  % preceded by discardable penalty, so not a breakpoint
+  \fi
+  %
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+  % First, check whether we are in the right environment:
+  \checkenv#1%
+  %
+  % As above, allow line break if we have multiple x headers in a row.
+  % It's not a great place, though.
+  \ifnum\lastpenalty=10002 \penalty3000 \fi
+  %
+  % And now, it's time to reuse the body of the original defun:
+  \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+  \begingroup
+    % call \deffnheader:
+    #1#2 \endheader
+    % common ending:
+    \interlinepenalty = 10000
+    \advance\rightskip by 0pt plus 1fil
+    \endgraf
+    \nobreak\vskip -\parskip
+    \penalty 10002  % signal to \startdefun and \dodefunx
+    % Some of the @defun-type tags do not enable magic parentheses,
+    % rendering the following check redundant.  But we don't optimize.
+    \checkparencounts
+  \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remainnig is to define \deffnheader.
+%
+\def\makedefun#1{%
+  \expandafter\let\csname E#1\endcsname = \Edefun
+  \edef\temp{\noexpand\domakedefun
+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+  \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+  \envdef#1{%
+    \startdefun
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#2{\dodefunx#1}%
+  \def#3%
+}
+
+%%% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+  \dosubind{fn}{\code{#3}}{#1}%
+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+%%% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{fn}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{vr}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+  \doind{tp}{\code{#2}}%
+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+  % Get the values of \leftskip and \rightskip as they were outside the @def...
+  \advance\leftskip by -\defbodyindent
+  %
+  % How we'll format the type name.  Putting it in brackets helps
+  % distinguish it from the body text that may end up on the next line
+  % just below it.
+  \def\temp{#1}%
+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+  %
+  % Figure out line sizes for the paragraph shape.
+  % The first line needs space for \box0; but if \rightskip is nonzero,
+  % we need only space for the part of \box0 which exceeds it:
+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  % The continuations:
+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
+  % (plain.tex says that \dimen1 should be used only as global.)
+  \parshape 2 0in \dimen0 \defargsindent \dimen2
+  %
+  % Put the type name to the right margin.
+  \noindent
+  \hbox to 0pt{%
+    \hfil\box0 \kern-\hsize
+    % \hsize has to be shortened this way:
+    \kern\leftskip
+    % Intentionally do not respect \rightskip, since we need the space.
+  }%
+  %
+  % Allow all lines to be underfull without complaint:
+  \tolerance=10000 \hbadness=10000
+  \exdentamount=\defbodyindent
+  {%
+    % defun fonts. We use typewriter by default (used to be bold) because:
+    % . we're printing identifiers, they should be in tt in principle.
+    % . in languages with many accents, such as Czech or French, it's
+    %   common to leave accents off identifiers.  The result looks ok in
+    %   tt, but exceedingly strange in rm.
+    % . we don't want -- and --- to be treated as ligatures.
+    % . this still does not fix the ?` and !` ligatures, but so far no
+    %   one has made identifiers using them :).
+    \df \tt
+    \def\temp{#2}% return value type
+    \ifx\temp\empty\else \tclose{\temp} \fi
+    #3% output function name
+  }%
+  {\rm\enskip}% hskip 0.5 em of \tenrm
+  %
+  \boldbrax
+  % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name.  This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable.  Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+  % use sl by default (not ttsl),
+  % tt for the names.
+  \df \sl \hyphenchar\font=0
+  %
+  % On the other hand, if an argument has two dashes (for instance), we
+  % want a way to get ttsl.  Let's try @var for that.
+  \let\var=\ttslanted
+  #1%
+  \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
 \def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
+  \catcode`\(=\active \catcode`\)=\active
+  \catcode`\[=\active \catcode`\]=\active
+  \catcode`\&=\active
+}
 
 % Make control sequences which act like normal parenthesis chars.
 \let\lparen = ( \let\rparen = )
 
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
 % Be sure that we always have a definition for `(', etc.  For example,
 % if the fn name has parens in it, \boldbrax will not be in effect yet,
 % so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
+{
+  \activeparens
+  \global\let(=\lparen \global\let)=\rparen
+  \global\let[=\lbrack \global\let]=\rbrack
+  \global\let& = \&
 
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+  \gdef\magicamp{\let&=\amprm}
+}
 
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
-\global\advance\parencount by 1 }
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-% also in that case restore the outer-level definition of (.
-\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-\global\advance \parencount by -1 }
+\newcount\parencount
+
 % If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
 
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
+\def\parenfont{%
+  \ifampseen
+    % At the first level, print parens in roman,
+    % otherwise use the default font.
+    \ifnum \parencount=1 \rm \fi
+  \else
+    % The \sf parens (in \boldbrax) actually are a little bolder than
+    % the contained text.  This is especially needed for [ and ] .
+    \sf
+  \fi
+}
+\def\infirstlevel#1{%
+  \ifampseen
+    \ifnum\parencount=1
+      #1%
+    \fi
+  \fi
+}
+\def\bfafterword#1 {#1 \bf}
 
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\dimen3=\rightskip
-\advance\dimen3 by -\defbodyindent
-\noindent        %
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1     %
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip        % Generate function name
+\def\opnr{%
+  \global\advance\parencount by 1
+  {\parenfont(}%
+  \infirstlevel \bfafterword
+}
+\def\clnr{%
+  {\parenfont)}%
+  \infirstlevel \sl
+  \global\advance\parencount by -1
 }
 
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-%    such as \defunheader.
+\newcount\brackcount
+\def\lbrb{%
+  \global\advance\brackcount by 1
+  {\bf[}%
+}
+\def\rbrb{%
+  {\bf]}%
+  \global\advance\brackcount by -1
+}
 
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
+\def\checkparencounts{%
+  \ifnum\parencount=0 \else \badparencount \fi
+  \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+\def\badparencount{%
+  \errmessage{Unbalanced parentheses in @def}%
+  \global\parencount=0
+}
+\def\badbrackcount{%
+  \errmessage{Unbalanced square braces in @def}%
+  \global\brackcount=0
+}
 
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
 
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
+\message{macros,}
+% @macro.
 
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+  \newwrite\macscribble
+  \def\scantokens#1{%
+    \toks0={#1}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \input \jobname.tmp
+  }
+\fi
 
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
+\def\scanmacro#1{%
+  \begingroup
+    \newlinechar`\^^M
+    \let\xeatspaces\eatspaces
+    % Undo catcode changes of \startcontents and \doprintindex
+    % When called from @insertcopying or (short)caption, we need active
+    % backslash to get it printed correctly.  Previously, we had
+    % \catcode`\\=\other instead.  We'll see whether a problem appears
+    % with macro expansion.				--kasal, 19aug04
+    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+    % ... and \example
+    \spaceisspace
+    %
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    %
+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
+    %							--kasal, 29nov03
+    \scantokens{#1\endinput}%
+  \endgroup
+}
 
-% This is used for \def{tp,vr}parsebody.  It could probably be used for
-% some of the others, too, with some judicious conditionals.
+\def\scanexp#1{%
+  \edef\temp{\noexpand\scanmacro{#1}}%
+  \temp
+}
+
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+
+% List of all defined macros in the form
+%    \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+     \toks0 = \expandafter{\macrolist\definedummyword#1}%
+     \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+%   \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
 % 
-\def\parsebodycommon#1#2#3{%
-  \begingroup\inENV %
-  \medbreak %
-  % Define the end token that this defining construct specifies
-  % so that it will exit this group.
-  \def#1{\endgraf\endgroup\medbreak}%
-  \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
-  \parindent=0in
-  \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-  \exdentamount=\defbodyindent
-  \begingroup\obeylines
+\def\cslet#1#2{%
+  \expandafter\let
+  \csname#1\expandafter\endcsname
+  \csname#2\endcsname
 }
 
-\def\defvrparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{#3{#4}}%
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
 }
 
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
-% \let\deftpparsebody=\defvrparsebody
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+  \catcode`\"=\other
+  \catcode`\+=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\@=\other
+  \catcode`\^=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\~=\other
+}
+
+\def\scanargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+  \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+  \scanctxt
+  \catcode`\{=\other
+  \catcode`\}=\other
+  \catcode`\^^M=\other
+  \usembodybackslash
+}
+
+\def\macroargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \ifx\argl\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \argl;%
+  \fi
+  \if1\csname ismacro.\the\macname\endcsname
+     \message{Warning: redefining \the\macname}%
+  \else
+     \expandafter\ifx\csname \the\macname\endcsname \relax
+     \else \errmessage{Macro name \the\macname\space already defined}\fi
+     \global\cslet{macsave.\the\macname}{\the\macname}%
+     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+     \addtomacrolist{\the\macname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody
+  \fi}
+
+\parseargdef\unmacro{%
+  \if1\csname ismacro.#1\endcsname
+    \global\cslet{#1}{macsave.#1}%
+    \global\expandafter\let \csname ismacro.#1\endcsname=0%
+    % Remove the macro name from \macrolist:
+    \begingroup
+      \expandafter\let\csname#1\endcsname \relax
+      \let\definedummyword\unmacrodo
+      \xdef\macrolist{\macrolist}%
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
+
+% Called by \do from \dounmacro on each macro.  The idea is to omit any
+% macro definitions that have been changed to \relax.
 %
-% So, to get around this, we put \empty in with the type name.  That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
+\def\unmacrodo#1{%
+  \ifx #1\relax
+    % remove this
+  \else
+    \noexpand\definedummyword \noexpand#1%
+  \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX:  let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
 %
-\def\deftpparsebody #1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+  \let\hash=##% convert placeholders to macro parameter chars
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup\noexpand\scanmacro{\temp}}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \egroup
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \expandafter\noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \egroup
+          \noexpand\norecurse{\the\macname}%
+          \noexpand\scanmacro{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+  {%
+    \expandafter\let\obeyedspace=\empty
+    \addtomacrolist{#1}%
+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+  }%
+  \next
 }
 
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does.
-% 
-\def\removeemptybraces\empty#1\relax{#1}
 
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-% 
-\def\parsetpheaderline#1#2#3{%
-  #1{\removeemptybraces#2\relax}{#3}%
-}%
+\message{cross references,}
 
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
+\newwrite\auxfile
 
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
-
-% So much for the things common to all kinds of definitions.
-
-% Define @defun.
-
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
-
-\def\defunargs #1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
-#1%
-\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type.  #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-%               at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop {Funny Method} foo-class frobnicate argument
-
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @defmethod == @defop Method
-
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% @defivar == @defcv {Instance Variable}
-
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type.  #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
-
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-
-\message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
-
-\newif\ifhavexrefs  % True if xref values are known.
+\newif\ifhavexrefs    % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
-% @inforef is simple.
+% @inforef is relatively simple.
 \def\inforef #1{\inforefzzz #1,,,,**}
 \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
   node \samp{\ignorespaces#1{}}}
 
-% \setref{foo} defines a cross-reference point named foo.
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references.  The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross,  ,  , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
 
-\def\setref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
+\let\nwnode=\node
+\let\lastnode=\empty
 
-\def\unnumbsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
+% Write a cross-reference definition for the current node.  #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+  \ifx\lastnode\empty\else
+    \setref{\lastnode}{#1}%
+    \global\let\lastnode=\empty
+  \fi
+}
 
-\def\appendixsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Yappendixletterandtype}}
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
 
-% \xref, \pxref, and \ref generate cross-references to specified points.
-% For \xrefX, #1 is the node name, #2 the name of the Info
-% cross-reference, #3 the printed node name, #4 the name of the Info
-% file, #5 the name of the printed manual.  All but the node name can be
-% omitted.
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \thissection,
+%                 or the anchor name.
+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
+%                 empty for anchors.
+% 3) NAME-pg    - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+  \pdfmkdest{#1}%
+  \iflinks
+    {%
+      \atdummies  % preserve commands, but don't expand them
+      \edef\writexrdef##1##2{%
+	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+	  ##1}{##2}}% these are parameters of \writexrdef
+      }%
+      \toks0 = \expandafter{\thissection}%
+      \immediate \writexrdef{title}{\the\toks0 }%
+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+      \writexrdef{pg}{\folio}% will be written later, during \shipout
+    }%
+  \fi
+}
+
+% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual.  All but the node name can be omitted.
 %
 \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
 \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
 \def\ref#1{\xrefX[#1,,,,,,,]}
 \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+  \unsepspaces
   \def\printedmanual{\ignorespaces #5}%
-  \def\printednodename{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual}%
-  \setbox0=\hbox{\printednodename}%
+  \def\printedrefname{\ignorespaces #3}%
+  \setbox1=\hbox{\printedmanual\unskip}%
+  \setbox0=\hbox{\printedrefname\unskip}%
   \ifdim \wd0 = 0pt
     % No printed node name was explicitly given.
     \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
       % Use the node name inside the square brackets.
-      \def\printednodename{\ignorespaces #1}%
+      \def\printedrefname{\ignorespaces #1}%
     \else
       % Use the actual chapter/section title appear inside
       % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1>0pt%
+      \ifdim \wd1 > 0pt
         % It is in another manual, so we don't have it.
-        \def\printednodename{\ignorespaces #1}%
+        \def\printedrefname{\ignorespaces #1}%
       \else
         \ifhavexrefs
           % We know the real title if we have the xref values.
-          \def\printednodename{\refx{#1-title}{}}%
+          \def\printedrefname{\refx{#1-title}{}}%
         \else
           % Otherwise just copy the Info node name.
-          \def\printednodename{\ignorespaces #1}%
+          \def\printedrefname{\ignorespaces #1}%
         \fi%
       \fi
     \fi
   \fi
   %
-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-  % insert empty discretionaries after hyphens, which means that it will
-  % not find a line break at a hyphen in a node names.  Since some manuals
-  % are best written with fairly long node names, containing hyphens, this
-  % is a loss.  Therefore, we give the text of the node name again, so it
-  % is as if TeX is seeing it for the first time.
-  \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
-  \else
-    % _ (for example) has to be the character _ for the purposes of the
-    % control sequence corresponding to the node, but it has to expand
-    % into the usual \leavevmode...\vrule stuff for purposes of
-    % printing. So we \turnoffactive for the \refx-snt, back on for the
-    % printing, back off for the \refx-pg.
-    {\turnoffactive \refx{#1-snt}{}}%
-    \space [\printednodename],\space
-    \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+  % Make link in pdf output.
+  \ifpdf
+    \leavevmode
+    \getfilename{#4}%
+    {\turnoffactive
+     % See comments at \activebackslashdouble.
+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+      \backslashparens\pdfxrefdest}%
+     %
+     \ifnum\filenamelength>0
+       \startlink attr{/Border [0 0 0]}%
+         goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     \else
+       \startlink attr{/Border [0 0 0]}%
+         goto name{\pdfmkpgn{\pdfxrefdest}}%
+     \fi
+    }%
+    \linkcolor
   \fi
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  We distinguish them by the
+  % LABEL-title being set to a magic string.
+  {%
+    % Have to otherify everything special to allow the \csname to
+    % include an _ in the xref name, etc.
+    \indexnofonts
+    \turnoffactive
+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+      \csname XR#1-title\endcsname
+  }%
+  \iffloat\Xthisreftitle
+    % If the user specified the print name (third arg) to the ref,
+    % print it instead of our usual "Figure 1.2".
+    \ifdim\wd0 = 0pt
+      \refx{#1-snt}{}%
+    \else
+      \printedrefname
+    \fi
+    %
+    % if the user also gave the printed manual name (fifth arg), append
+    % "in MANUALNAME".
+    \ifdim \wd1 > 0pt
+      \space \putwordin{} \cite{\printedmanual}%
+    \fi
+  \else
+    % node/anchor (non-float) references.
+    %
+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+    % insert empty discretionaries after hyphens, which means that it will
+    % not find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens, this
+    % is a loss.  Therefore, we give the text of the node name again, so it
+    % is as if TeX is seeing it for the first time.
+    \ifdim \wd1 > 0pt
+      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else
+      % _ (for example) has to be the character _ for the purposes of the
+      % control sequence corresponding to the node, but it has to expand
+      % into the usual \leavevmode...\vrule stuff for purposes of
+      % printing. So we \turnoffactive for the \refx-snt, back on for the
+      % printing, back off for the \refx-pg.
+      {\turnoffactive
+       % Only output a following space if the -snt ref is nonempty; for
+       % @unnumbered and @anchor, it won't be.
+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+      }%
+      % output the `[mynode]' via a macro so it can be overridden.
+      \xrefprintnodename\printedrefname
+      %
+      % But we always want a comma and a space:
+      ,\space
+      %
+      % output the `page 3'.
+      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+    \fi
+  \fi
+  \endlink
 \endgroup}
 
-% \dosetq is the interface for calls from other macros
-
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive 
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
-
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents.  Particularly
+% one that Bob is working on :).
 %
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Non-3.0.
-\else
-  \def\linenumber{\the\inputlineno:\space}
-\fi
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+  \ifnum\secno=0
+    \putwordChapter@tie \the\chapno
+  \else \ifnum\subsecno=0
+    \putwordSection@tie \the\chapno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+\def\Yappendix{%
+  \ifnum\secno=0
+     \putwordAppendix@tie @char\the\appendixno{}%
+  \else \ifnum\subsecno=0
+     \putwordSection@tie @char\the\appendixno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie
+      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
 
 % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
 % If its value is nonempty, SUFFIX is output afterward.
-
+%
 \def\refx#1#2{%
-  \expandafter\ifx\csname X#1\endcsname\relax
+  {%
+    \indexnofonts
+    \otherbackslash
+    \expandafter\global\expandafter\let\expandafter\thisrefX
+      \csname XR#1\endcsname
+  }%
+  \ifx\thisrefX\relax
     % If not defined, say something at least.
-    $\langle$un\-de\-fined$\rangle$%
-    \ifhavexrefs
-      \message{\linenumber Undefined cross reference `#1'.}%
-    \else
-      \ifwarnedxrefs\else
-        \global\warnedxrefstrue
-        \message{Cross reference values unknown; you must run TeX again.}%
+    \angleleft un\-de\-fined\angleright
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
       \fi
     \fi
   \else
     % It's defined, so just use it.
-    \csname X#1\endcsname
+    \thisrefX
   \fi
   #2% Output the suffix in any case.
 }
 
-% This is the macro invoked by entries in the aux file.
-\def\xrdef #1#2{{%
-  \catcode`\'=\other
-  \expandafter\gdef\csname X#1\endcsname{#2}%
-}}
+% This is the macro invoked by entries in the aux file.  Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions).  But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+  %
+  % Was that xref control sequence that we just defined for a float?
+  \expandafter\iffloat\csname XR#1\endcsname
+    % it was a float, and we have the (safe) float type in \iffloattype.
+    \expandafter\let\expandafter\floatlist
+      \csname floatlist\iffloattype\endcsname
+    %
+    % Is this the first time we've seen this float type?
+    \expandafter\ifx\floatlist\relax
+      \toks0 = {\do}% yes, so just \do
+    \else
+      % had it before, so preserve previous elements in list.
+      \toks0 = \expandafter{\floatlist\do}%
+    \fi
+    %
+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
+    % for later use in \listoffloats.
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+  \fi
+}
 
 % Read the last existing aux file, if any.  No error if none exists.
-\def\readauxfile{\begingroup
+%
+\def\tryauxfile{%
+  \openin 1 \jobname.aux
+  \ifeof 1 \else
+    \readdatafile{aux}%
+    \global\havexrefstrue
+  \fi
+  \closein 1
+}
+
+\def\setupdatafile{%
   \catcode`\^^@=\other
-  \catcode`\=\other
-  \catcode`\=\other
+  \catcode`\^^A=\other
+  \catcode`\^^B=\other
   \catcode`\^^C=\other
   \catcode`\^^D=\other
   \catcode`\^^E=\other
   \catcode`\^^F=\other
   \catcode`\^^G=\other
   \catcode`\^^H=\other
-  \catcode`\=\other
+  \catcode`\^^K=\other
   \catcode`\^^L=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode`\=\other
-  \catcode26=\other
+  \catcode`\^^N=\other
+  \catcode`\^^P=\other
+  \catcode`\^^Q=\other
+  \catcode`\^^R=\other
+  \catcode`\^^S=\other
+  \catcode`\^^T=\other
+  \catcode`\^^U=\other
+  \catcode`\^^V=\other
+  \catcode`\^^W=\other
+  \catcode`\^^X=\other
+  \catcode`\^^Z=\other
   \catcode`\^^[=\other
   \catcode`\^^\=\other
   \catcode`\^^]=\other
   \catcode`\^^^=\other
   \catcode`\^^_=\other
-  \catcode`\@=\other
-  \catcode`\^=\other
-  % It was suggested to define this as 7, which would allow ^^e4 etc.
+  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
   % in xref tags, i.e., node names.  But since ^^e4 notation isn't
   % supported in the main text, it doesn't seem desirable.  Furthermore,
   % that is not enough: for node names that actually contain a ^
@@ -4302,11 +6282,14 @@
   % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
   % argument, and \hat is not an expandable control sequence.  It could
   % all be worked out, but why?  Either we support ^^ or we don't.
-  % 
+  %
   % The other change necessary for this was to define \auxhat:
   % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
   % and then to call \auxhat in \setq.
-  % 
+  %
+  \catcode`\^=\other
+  %
+  % Special characters.  Should be turned off anyway, but...
   \catcode`\~=\other
   \catcode`\[=\other
   \catcode`\]=\other
@@ -4318,42 +6301,42 @@
   \catcode`\$=\other
   \catcode`\#=\other
   \catcode`\&=\other
-  % `\+ does not work, so use 43.
-  \catcode43=\other
-  % Make the characters 128-255 be printing characters
-  {%
-    \count 1=128
-    \def\loop{%
-      \catcode\count 1=\other
-      \advance\count 1 by 1
-      \ifnum \count 1<256 \loop \fi
-    }%
-  }%
-  % The aux file uses ' as the escape (for now).
-  % Turn off \ as an escape so we do not lose on
-  % entries which were dumped with control sequences in their names.
-  % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-  % Reference to such entries still does not work the way one would wish,
-  % but at least they do not bomb out when the aux file is read in.
-  \catcode`\{=1
-  \catcode`\}=2
   \catcode`\%=\other
-  \catcode`\'=0
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+  %
+  % This is to support \ in node names and titles, since the \
+  % characters end up in a \csname.  It's easier than
+  % leaving it active and making its active definition an actual \
+  % character.  What I don't understand is why it works in the *value*
+  % of the xrdef.  Seems like it should be a catcode12 \, and that
+  % should not typeset properly.  But it works, so I'm moving on for
+  % now.  --karl, 15jan04.
   \catcode`\\=\other
   %
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \closein 1
-    \input \jobname.aux
-    \global\havexrefstrue
-    \global\warnedobstrue
-  \fi
-  % Open the new aux file.  TeX will close it automatically at exit.
-  \openout\auxfile=\jobname.aux
+  % Make the characters 128-255 be printing characters.
+  {%
+    \count1=128
+    \def\loop{%
+      \catcode\count1=\other
+      \advance\count1 by 1
+      \ifnum \count1<256 \loop \fi
+    }%
+  }%
+  %
+  % @ is our escape character in .aux files, and we need braces.
+  \catcode`\{=1
+  \catcode`\}=2
+  \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+  \setupdatafile
+  \input\jobname.#1
 \endgroup}
 
-
-% Footnotes.
+\message{insertions,}
+% including footnotes.
 
 \newcount \footnoteno
 
@@ -4364,40 +6347,42 @@
 % space to prevent strange expansion errors.)
 \def\supereject{\par\penalty -20000\footnoteno =0 }
 
-% @footnotestyle is meaningful for info output only..
+% @footnotestyle is meaningful for info output only.
 \let\footnotestyle=\comment
 
-\let\ptexfootnote=\footnote
-
 {\catcode `\@=11
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
   \global\advance\footnoteno by \@ne
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
   % In case the footnote comes at the end of a sentence, preserve the
   % extra spacing after we do the footnote number.
   \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
   %
   % Remove inadvertent blank space before typesetting the footnote number.
   \unskip
   \thisfootno\@sf
-  \footnotezzz
+  \dofootnote
 }%
 
 % Don't bother with the trickery in plain.tex to not require the
 % footnote text as a parameter.  Our footnotes don't need to be so general.
-% 
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
 % the footnote is read.  --karl, 16nov96.
 %
-\long\gdef\footnotezzz{\insert\footins\bgroup
+\gdef\dofootnote{%
+  \insert\footins\bgroup
   % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.
   % So reset some parameters.
+  \hsize=\pagewidth
   \interlinepenalty\interfootnotelinepenalty
   \splittopskip\ht\strutbox % top baseline for broken footnotes
   \splitmaxdepth\dp\strutbox
@@ -4408,8 +6393,17 @@
   \xspaceskip\z@skip
   \parindent\defaultparindent
   %
-  % Hang the footnote text off the number.
-  \hang
+  \smallfonts \rm
+  %
+  % Because we use hanging indentation in footnotes, a @noindent appears
+  % to exdent this text, so make it be a no-op.  makeinfo does not use
+  % hanging indentation so @noindent can still be needed within footnote
+  % text after an @example or the like (not that this is good style).
+  \let\noindent = \relax
+  %
+  % Hang the footnote text off the number.  Use \everypar in case the
+  % footnote extends for more than one paragraph.
+  \everypar = {\hang}%
   \textindent{\thisfootno}%
   %
   % Don't crash into the line above the footnote text.  Since this
@@ -4418,97 +6412,447 @@
   \footstrut
   \futurelet\next\fo@t
 }
-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
-  \else\let\next\f@t\fi \next}
-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
-\def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
-
 }%end \catcode `\@=11
 
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished.  Otherwise, the insertion
+% would be lost.
+% Similarily, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes.  --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
 %
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
-  \normalbaselineskip = #1\relax
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
+\def\startsavinginserts{%
+  \ifx \insert\ptexinsert
+    \let\insert\saveinsert
+  \else
+    \let\checkinserts\relax
+  \fi
 }
 
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
 %
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
+\def\saveinsert#1{%
+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+  \afterassignment\next
+  % swallow the left brace
+  \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+    {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
+  \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+  \next
+}
+\def\newsaveinsX #1{%
+  \csname newbox\endcsname #1%
+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+    \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image.  We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front.  If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+  % Do not bother showing banner with epsf.tex v2.7k (available in
+  % doc/epsf.tex and on ctan).
+  \def\epsfannounce{\toks0 = }%
+  \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+  work.  It is also included in the Texinfo distribution, or you can get
+  it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+  \ifx\epsfbox\undefined
+    \ifwarnednoepsf \else
+      \errhelp = \noepsfhelp
+      \errmessage{epsf.tex not found, images will be ignored}%
+      \global\warnednoepsftrue
+    \fi
+  \else
+    \imagexxx #1,,,,,\finish
+  \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+  \catcode`\^^M = 5     % in case we're inside an example
+  \normalturnoffactive  % allow _ et al. in names
+  % If the image is by itself, center it.
+  \ifvmode
+    \imagevmodetrue
+    \nobreak\bigskip
+    % Usually we'll have text after the image which will insert
+    % \parskip glue, so insert it here too to equalize the space
+    % above and below.
+    \nobreak\vskip\parskip
+    \nobreak
+    \line\bgroup
+  \fi
   %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
+  % Output the image.
+  \ifpdf
+    \dopdfimage{#1}{#2}{#3}%
+  \else
+    % \epsfbox itself resets \epsf?size at each figure.
+    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+    \epsfbox{#1.eps}%
+  \fi
+  %
+  \ifimagevmode \egroup \bigbreak \fi  % space after the image
+\endgroup}
 
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc.  We don't actually implement floating yet, we always include the
+% float "here".  But it seemed the best name for the future.
 %
-\def\finalout{\overfullrule=0pt}
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
 
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
 
-% End of control word definitions.
-
-\message{and turning on texinfo input format.}
-
-\def\openindices{%
-   \newindex{cp}%
-   \newcodeindex{fn}%
-   \newcodeindex{vr}%
-   \newcodeindex{tp}%
-   \newcodeindex{ky}%
-   \newcodeindex{pg}%
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label.  Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored.  It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+  \let\thiscaption=\empty
+  \let\thisshortcaption=\empty
+  %
+  % don't lose footnotes inside @float.
+  %
+  % BEWARE: when the floats start float, we have to issue warning whenever an
+  % insert appears inside a float which could possibly float. --kasal, 26may04
+  %
+  \startsavinginserts
+  %
+  % We can't be used inside a paragraph.
+  \par
+  %
+  \vtop\bgroup
+    \def\floattype{#1}%
+    \def\floatlabel{#2}%
+    \def\floatloc{#3}% we do nothing with this yet.
+    %
+    \ifx\floattype\empty
+      \let\safefloattype=\empty
+    \else
+      {%
+        % the floattype might have accents or other special characters,
+        % but we need to use it in a control sequence name.
+        \indexnofonts
+        \turnoffactive
+        \xdef\safefloattype{\floattype}%
+      }%
+    \fi
+    %
+    % If label is given but no type, we handle that as the empty type.
+    \ifx\floatlabel\empty \else
+      % We want each FLOATTYPE to be numbered separately (Figure 1,
+      % Table 1, Figure 2, ...).  (And if no label, no number.)
+      %
+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+      \global\advance\floatno by 1
+      %
+      {%
+        % This magic value for \thissection is output by \setref as the
+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
+        % labels (which have a completely different output format) from
+        % node and anchor labels.  And \xrdef uses it to construct the
+        % lists of floats.
+        %
+        \edef\thissection{\floatmagic=\safefloattype}%
+        \setref{\floatlabel}{Yfloat}%
+      }%
+    \fi
+    %
+    % start with \parskip glue, I guess.
+    \vskip\parskip
+    %
+    % Don't suppress indentation if a float happens to start a section.
+    \restorefirstparagraphindent
 }
 
-% Set some numeric style parameters, for 8.5 x 11 format.
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption:    Foo 1.1
+% @float Foo & @caption{Cap}:     Foo: Cap
+% @float Foo & no caption:        Foo
+% @float ,lbl & Caption{Cap}:     1.1: Cap
+% @float ,lbl & no caption:       1.1
+% @float & @caption{Cap}:         Cap
+% @float & no caption:
+%
+\def\Efloat{%
+    \let\floatident = \empty
+    %
+    % In all cases, if we have a float type, it comes first.
+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+    %
+    % If we have an xref label, the number comes next.
+    \ifx\floatlabel\empty \else
+      \ifx\floattype\empty \else % if also had float type, need tie first.
+        \appendtomacro\floatident{\tie}%
+      \fi
+      % the number.
+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+    \fi
+    %
+    % Start the printed caption with what we've constructed in
+    % \floatident, but keep it separate; we need \floatident again.
+    \let\captionline = \floatident
+    %
+    \ifx\thiscaption\empty \else
+      \ifx\floatident\empty \else
+	\appendtomacro\captionline{: }% had ident, so need a colon between
+      \fi
+      %
+      % caption text.
+      \appendtomacro\captionline{\scanexp\thiscaption}%
+    \fi
+    %
+    % If we have anything to print, print it, with space before.
+    % Eventually this needs to become an \insert.
+    \ifx\captionline\empty \else
+      \vskip.5\parskip
+      \captionline
+      %
+      % Space below caption.
+      \vskip\parskip
+    \fi
+    %
+    % If have an xref label, write the list of floats info.  Do this
+    % after the caption, to avoid chance of it being a breakpoint.
+    \ifx\floatlabel\empty \else
+      % Write the text that goes in the lof to the aux file as
+      % \floatlabel-lof.  Besides \floatident, we include the short
+      % caption if specified, else the full caption if specified, else nothing.
+      {%
+        \atdummies
+        %
+        % since we read the caption text in the macro world, where ^^M
+        % is turned into a normal character, we have to scan it back, so
+        % we don't write the literal three characters "^^M" into the aux file.
+	\scanexp{%
+	  \xdef\noexpand\gtemp{%
+	    \ifx\thisshortcaption\empty
+	      \thiscaption
+	    \else
+	      \thisshortcaption
+	    \fi
+	  }%
+	}%
+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+	  \ifx\gtemp\empty \else : \gtemp \fi}}%
+      }%
+    \fi
+  \egroup  % end of \vtop
+  %
+  % place the captured inserts
+  %
+  % BEWARE: when the floats start floating, we have to issue warning
+  % whenever an insert appears inside a float which could possibly
+  % float. --kasal, 26may04
+  %
+  \checkinserts
+}
 
-\hsize = 6in
-\hoffset = .25in
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+  \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use.  Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+  \ifx#1\relax
+      % Haven't seen this figure type before.
+      \csname newcount\endcsname #1%
+      %
+      % Remember to reset this floatno at the next chap.
+      \expandafter\gdef\expandafter\resetallfloatnos
+        \expandafter{\resetallfloatnos #1=0 }%
+  \fi
+  \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref.  That is, the magic
+% \thissection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
+% (safe) float type for this float.  We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+  \def\temp{#1}%
+  \def\iffloattype{#2}%
+  \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+  \def\floattype{#1}% floattype
+  {%
+    % the floattype might have accents or other special characters,
+    % but we need to use it in a control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safefloattype{\floattype}%
+  }%
+  %
+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+    \ifhavexrefs
+      % if the user said @listoffloats foo but never @float foo.
+      \message{\linenumber No `\safefloattype' floats to list.}%
+    \fi
+  \else
+    \begingroup
+      \leftskip=\tocindent  % indent these entries like a toc
+      \let\do=\listoffloatsdo
+      \csname floatlist\safefloattype\endcsname
+    \endgroup
+  \fi
+}
+
+% This is called on each entry in a list of floats.  We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+  % Can't fully expand XR#1-lof because it can contain anything.  Just
+  % pass the control sequence.  On the other hand, XR#1-pg is just the
+  % page number, and we want to fully expand that so we can get a link
+  % in pdf output.
+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+  %
+  % use the same \entry macro we use to generate the TOC and index.
+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+  \writeentry
+}}
+
+\message{localization,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename.  If done too late, it may not override everything
+% properly.  Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+  \tex % read txi-??.tex file in plain TeX.
+    % Read the file if it exists.
+    \openin 1 txi-#1.tex
+    \ifeof 1
+      \errhelp = \nolanghelp
+      \errmessage{Cannot read language file txi-#1.tex}%
+    \else
+      \input txi-#1.tex
+    \fi
+    \closein 1
+  \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty.  Maybe you need to install it?  In the current directory
+should work if nowhere else does.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
 \newdimen\defaultparindent \defaultparindent = 15pt
-\parindent = \defaultparindent
-\parskip 3pt plus 2pt minus 1pt
-\setleading{13.2pt}
-\advance\topskip by 1.2cm
 
 \chapheadingskip = 15pt plus 4pt minus 2pt
 \secheadingskip = 12pt plus 3pt minus 2pt
 \subsecheadingskip = 9pt plus 2pt minus 2pt
 
 % Prevent underfull vbox error messages.
-\vbadness=10000
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
 
 % Following George Bush, just get rid of widows and orphans.
 \widowpenalty=10000
@@ -4517,101 +6861,199 @@
 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
 % using an old version of TeX, don't do anything.  We want the amount of
 % stretch added to depend on the line length, hence the dependence on
-% \hsize.  This makes it come to about 9pt for the 8.5x11 format.
+% \hsize.  We call this whenever the paper size is set.
 %
-\ifx\emergencystretch\thisisundefined
-  % Allow us to assign to \emergencystretch anyway.
-  \def\emergencystretch{\dimen0}%
-\else
-  \emergencystretch = \hsize
-  \divide\emergencystretch by 45
-\fi
-
-% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
-\def\smallbook{
-  \global\chapheadingskip = 15pt plus 4pt minus 2pt
-  \global\secheadingskip = 12pt plus 3pt minus 2pt
-  \global\subsecheadingskip = 9pt plus 2pt minus 2pt
-  %
-  \global\lispnarrowing = 0.3in
-  \setleading{12pt}
-  \advance\topskip by -1cm
-  \global\parskip 2pt plus 1pt
-  \global\hsize = 5in
-  \global\vsize=7.5in
-  \global\tolerance=700
-  \global\hfuzz=1pt
-  \global\contentsrightmargin=0pt
-  \global\deftypemargin=0pt
-  \global\defbodyindent=.5cm
-  %
-  \global\pagewidth=\hsize
-  \global\pageheight=\vsize
-  %
-  \global\let\smalllisp=\smalllispx
-  \global\let\smallexample=\smalllispx
-  \global\def\Esmallexample{\Esmalllisp}
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = .15\hsize
+  \fi
 }
 
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading.  The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
+  %
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 2\topandbottommargin
+  \pageheight = \vsize
+  %
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
+  %
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \ifpdf
+    \pdfpageheight #7\relax
+    \pdfpagewidth #8\relax
+  \fi
+  %
+  \setleading{\textleading}
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{46\baselineskip}{6in}%
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{36pt}%
+                    {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.5in}{5in}%
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{16pt}%
+                    {9.25in}{7in}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+  \parskip = 1.5pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.4in}{4.8in}%
+                    {-.2in}{-.4in}%
+                    {0pt}{14pt}%
+                    {9in}{6in}%
+  %
+  \lispnarrowing = 0.25in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .4cm
+}}
+
 % Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
+\def\afourpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % Double-side printing via postscript on Laserjet 4050
+  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+  % To change the settings for a different printer or situation, adjust
+  % \normaloffset until the front-side and back-side texts align.  Then
+  % do the same for \bindingoffset.  You can set these for testing in
+  % your texinfo source file like this:
+  % @tex
+  % \global\normaloffset = -6mm
+  % \global\bindingoffset = 10mm
+  % @end tex
+  \internalpagesizes{51\baselineskip}{160mm}
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{44pt}%
+                    {297mm}{210mm}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 5mm
+}}
 
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize=   5.85in     % A4 wide 10pt
-\global\hsize=  6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+  \parskip = 2pt plus 1pt minus 0.1pt
+  \textleading = 12.5pt
+  %
+  \internalpagesizes{160mm}{120mm}%
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{8pt}%
+                    {210mm}{148mm}%
+  %
+  \lispnarrowing = 0.2in
+  \tolerance = 800
+  \hfuzz = 1.2pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 2mm
+  \tableindent = 12mm
+}}
 
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}%
+                    {\voffset}{4.6mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  %
+  % Must explicitly reset to 0 because we call \afourpaper.
+  \globaldefs = 0
+}}
 
-\bindingoffset=0pt
-\normaloffset=\hoffset
-\pagewidth=\hsize
-\pageheight=\vsize
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{241mm}{165mm}%
+                    {\voffset}{-2.95mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  \globaldefs = 0
+}}
 
-% Allow control of the text dimensions.  Parameters in order: textheight;
-% textwidth; voffset; hoffset; binding offset; topskip.
-% All require a dimension;
-% header is additional; added length extends the bottom of the page.
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{\textleading}%
+  %
+  \dimen0 = #1
+  \advance\dimen0 by \voffset
+  %
+  \dimen2 = \hsize
+  \advance\dimen2 by \normaloffset
+  %
+  \internalpagesizes{#1}{\hsize}%
+                    {\voffset}{\normaloffset}%
+                    {\bindingoffset}{44pt}%
+                    {\dimen0}{\dimen2}%
+}}
 
-\def\changepagesizes#1#2#3#4#5#6{
- \global\vsize= #1
- \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
+% Set default to letter.
+%
+\letterpaper
 
-% A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex
-        {\global\tolerance=700
-        \global\hfuzz=1pt
-        \setleading{12pt}
-        \global\parskip 15pt plus 1pt
-        \advance\baselineskip by 1.6pt
-        \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-        }
 
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{\afourpaper
-\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+\message{and turning on texinfo input format.}
 
 % Define macros to output various characters with catcode for normal text.
 \catcode`\"=\other
@@ -4622,6 +7064,7 @@
 \catcode`\<=\other
 \catcode`\>=\other
 \catcode`\+=\other
+\catcode`\$=\other
 \def\normaldoublequote{"}
 \def\normaltilde{~}
 \def\normalcaret{^}
@@ -4630,9 +7073,10 @@
 \def\normalless{<}
 \def\normalgreater{>}
 \def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
 
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
 % where something hairier probably needs to be done.
 %
 % #1 is what to print if we are indeed using \tt; #2 is what to print
@@ -4640,7 +7084,13 @@
 % interword stretch (and shrink), and it is reasonable to expect all
 % typewriter fonts to have this, we can check that font parameter.
 %
-\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font.  Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts.  But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
 % Turn off all special characters except @
 % (and those which the user can use as if they were ordinary).
@@ -4648,21 +7098,22 @@
 % use math or other variants that look better in normal text.
 
 \catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
+\def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active
-\def~{{\tt \char '176}}
+\def~{{\tt\char126}}
 \chardef\hat=`\^
 \catcode`\^=\active
 \def^{{\tt \hat}}
 
 \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
 % Subroutine for the previous macro.
-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
 
 \catcode`\|=\active
-\def|{{\tt \char '174}}
+\def|{{\tt\char124}}
 \chardef \less=`\<
 \catcode`\<=\active
 \def<{{\tt \less}}
@@ -4671,15 +7122,8 @@
 \def>{{\tt \gtr}}
 \catcode`\+=\active
 \def+{{\tt \char 43}}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
 
 % If a .fmt file is being used, characters that might appear in a file
 % name cannot be active until we have parsed the command line.
@@ -4687,47 +7131,53 @@
 % \otherifyactive is called near the end of this file.
 \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
 
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+  \normalturnoffactive
+  \otherbackslash
+}
+
 \catcode`\@=0
 
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
 
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
 
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
-% \catcode 17=0   % Define control-q
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
 \catcode`\\=\active
+@def@normalbackslash{{@tt@backslashcurfont}}
+% On startup, @fixbackslash assigns:
+%  @let \ = @normalbackslash
 
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
 
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+% 
+@def@normalturnoffactive{%
+  @let\=@normalbackslash
+  @let"=@normaldoublequote
+  @let~=@normaltilde
+  @let^=@normalcaret
+  @let_=@normalunderscore
+  @let|=@normalverticalbar
+  @let<=@normalless
+  @let>=@normalgreater
+  @let+=@normalplus
+  @let$=@normaldollar %$ font-lock fix
+  @unsepspaces
+}
 
 % Make _ and + \other characters, temporarily.
 % This is canceled by @fixbackslash.
@@ -4741,21 +7191,36 @@
 @global@let\ = @eatinput
 
 % On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
+% the first `\' in the file would cause an error. This macro tries to fix
 % that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
+% Also turn back on active characters that might appear in the input
 % file name, in case not using a pre-dumped format.
 %
-@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active @catcode`@_=@active}
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
 
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
 
-@textfonts
-@rm
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
 
 @c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
 @c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
 @c End:
+
+@c vim:sw=2:
+
+@ignore
+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/e2fsck/Android.mk b/e2fsck/Android.mk
index 7d118ec..bb98cf6 100644
--- a/e2fsck/Android.mk
+++ b/e2fsck/Android.mk
@@ -3,20 +3,18 @@
 #########################
 # Build the libext2 profile library
 
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES :=  \
+libext2_profile_src_files :=  \
 	prof_err.c \
 	profile.c
 
-LOCAL_MODULE := libext2_profile
-LOCAL_MODULE_TAGS := eng
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
-	libext2_com_err \
-	libc
+libext2_profile_shared_libraries := \
+	libext2_com_err
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
+libext2_profile_system_shared_libraries := libc
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2_profile_c_includes := external/e2fsprogs/lib
+
+libext2_profile_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
@@ -37,18 +35,41 @@
 	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_profile_src_files)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_profile_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(libext2_profile_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
+LOCAL_CFLAGS := $(libext2_profile_cflags)
 LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_profile
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 
 include $(BUILD_SHARED_LIBRARY)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_profile_src_files)
+LOCAL_SHARED_LIBRARIES := $(libext2_profile_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2_profile_c_includes)
+LOCAL_CFLAGS := $(libext2_profile_cflags)
+LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_profile_host
+LOCAL_MODULE_STEM := libext2_profile
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_SHARED_LIBRARY)
 
 #########################
 # Build the e2fsck binary
 
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES :=  \
+e2fsck_src_files :=  \
+	crc32.c \
 	e2fsck.c \
 	dict.c \
 	super.c \
@@ -74,21 +95,18 @@
 	rehash.c \
 	region.c
 
-LOCAL_MODULE := e2fsck
-LOCAL_MODULE_TAGS := eng
-
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
+e2fsck_shared_libraries := \
 	libext2fs \
 	libext2_blkid \
 	libext2_uuid \
 	libext2_profile \
 	libext2_com_err \
-	libext2_e2p \
-	libc
+	libext2_e2p
+e2fsck_system_shared_libraries := libc
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
+e2fsck_c_includes := external/e2fsprogs/lib
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+e2fsck_cflags := -O2 -g -W -Wall \
 	-DHAVE_DIRENT_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_INTTYPES_H \
@@ -114,7 +132,29 @@
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_TYPE_SSIZE_T \
 	-DHAVE_INTPTR_T \
-	-DENABLE_HTREE=1
+	-DENABLE_HTREE=1 \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(e2fsck_src_files)
+LOCAL_C_INCLUDES := $(e2fsck_c_includes)
+LOCAL_CFLAGS := $(e2fsck_cflags)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(e2fsck_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(e2fsck_shared_libraries)
+LOCAL_MODULE := e2fsck
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 include $(BUILD_EXECUTABLE)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(e2fsck_src_files)
+LOCAL_C_INCLUDES := $(e2fsck_c_includes)
+LOCAL_CFLAGS := $(e2fsck_cflags)
+LOCAL_SHARED_LIBRARIES := $(e2fsck_shared_libraries)
+LOCAL_MODULE := e2fsck_host
+LOCAL_MODULE_STEM := e2fsck
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_EXECUTABLE)
diff --git a/e2fsck/Makefile.in b/e2fsck/Makefile.in
index d5a8887..8296e72 100644
--- a/e2fsck/Makefile.in
+++ b/e2fsck/Makefile.in
@@ -8,7 +8,6 @@
 top_builddir = ..
 my_dir = e2fsck
 INSTALL = @INSTALL@
-LDFLAG_STATIC = @LDFLAG_STATIC@
 
 @MCONFIG@
 
@@ -18,24 +17,25 @@
 XTRA_CFLAGS=	-DRESOURCE_TRACK -I.
 
 LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID) $(LIBINTL) $(LIBE2P)
-DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID) $(DEPLIBE2P)
+DEPLIBS= $(LIBEXT2FS) $(DEPLIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID) \
+	$(DEPLIBE2P)
 
 STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
 	$(STATIC_LIBUUID) $(LIBINTL) $(STATIC_LIBE2P)
-STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(DEPSTATIC_LIBBLKID) \
-	$(DEPSTATIC_LIBUUID) $(DEPSTATIC_LIBE2P)
+STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) \
+	$(DEPSTATIC_LIBBLKID) $(DEPSTATIC_LIBUUID) $(DEPSTATIC_LIBE2P)
 
 PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
 	$(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) $(PROFILED_LIBE2P) $(LIBINTL)
-PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
+PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(DEPPROFILED_LIBCOM_ERR) \
 	$(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) $(DEPPROFILED_LIBE2P)
 
 COMPILE_ET=$(top_builddir)/lib/et/compile_et --build-tree
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
 #
 # Flags for using Checker
@@ -61,22 +61,24 @@
 #
 #MCHECK= -DMCHECK
 
-OBJS= dict.o unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o pass3.o pass4.o \
-	pass5.o journal.o swapfs.o badblocks.o util.o dirinfo.o dx_dirinfo.o \
-	ehandler.o problem.o message.o recovery.o region.o revoke.o \
-	ea_refcount.o rehash.o profile.o prof_err.o $(MTRACE_OBJ)
+OBJS= crc32.o dict.o unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o \
+	pass3.o pass4.o pass5.o journal.o badblocks.o util.o dirinfo.o \
+	dx_dirinfo.o ehandler.o problem.o message.o recovery.o region.o \
+	revoke.o ea_refcount.o rehash.o profile.o prof_err.o $(MTRACE_OBJ)
 
 PROFILED_OBJS= profiled/dict.o profiled/unix.o profiled/e2fsck.o \
 	profiled/super.o profiled/pass1.o profiled/pass1b.o \
 	profiled/pass2.o profiled/pass3.o profiled/pass4.o profiled/pass5.o \
 	profiled/journal.o profiled/badblocks.o profiled/util.o \
 	profiled/dirinfo.o profiled/dx_dirinfo.o profiled/ehandler.o \
-	profiled/message.o profiled/problem.o profiled/swapfs.o \
+	profiled/message.o profiled/problem.o \
 	profiled/recovery.o profiled/region.o profiled/revoke.o \
 	profiled/ea_refcount.o profiled/rehash.o profiled/profile.o \
-	profiled/prof_err.o
+	profiled/crc32.o profiled/prof_err.o
 
 SRCS= $(srcdir)/e2fsck.c \
+	$(srcdir)/crc32.c \
+	$(srcdir)/gen_crc32table.c \
 	$(srcdir)/dict.c \
 	$(srcdir)/super.c \
 	$(srcdir)/pass1.c \
@@ -96,7 +98,6 @@
 	$(srcdir)/ehandler.c \
 	$(srcdir)/problem.c \
 	$(srcdir)/message.c \
-	$(srcdir)/swapfs.c \
 	$(srcdir)/ea_refcount.c \
 	$(srcdir)/rehash.c \
 	$(srcdir)/region.c \
@@ -109,103 +110,138 @@
 @PROFILE_CMT@all:: e2fsck.profiled
 
 prof_err.c prof_err.h: prof_err.et
-	@echo "	COMPILE_ET prof_err.et"
-	@$(COMPILE_ET) $(srcdir)/prof_err.et
+	$(E) "	COMPILE_ET prof_err.et"
+	$(Q) $(COMPILE_ET) $(srcdir)/prof_err.et
 
 e2fsck: $(OBJS)  $(DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o e2fsck $(OBJS) $(LIBS) 
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o e2fsck $(OBJS) $(LIBS) 
 
 e2fsck.static: $(OBJS) $(STATIC_DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) $(LDFLAG_STATIC) -o e2fsck.static $(OBJS) \
-		$(STATIC_LIBS) 
+	$(E) "	LD $@"
+	$(Q) $(LD) $(LDFLAGS_STATIC) -o e2fsck.static $(OBJS) $(STATIC_LIBS) 
 
 e2fsck.profiled: $(PROFILED_OBJS)  $(PROFILED_DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -g -pg -o e2fsck.profiled $(PROFILED_OBJS) \
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -g -pg -o e2fsck.profiled $(PROFILED_OBJS) \
 		$(PROFILED_LIBS) 
 
-tst_refcount: ea_refcount.c
-	@echo "	LD $@"
-	@$(CC) -o tst_refcount $(srcdir)/ea_refcount.c \
-		$(ALL_CFLAGS) -DTEST_PROGRAM -lcom_err
+gen_crc32table: $(srcdir)/gen_crc32table.c
+	$(E) "	CC $@"
+	$(Q) $(BUILD_CC) $(BUILD_CFLAGS) -o gen_crc32table \
+		$(srcdir)/gen_crc32table.c
 
-tst_region: region.c
-	@echo "	LD $@"
-	@$(CC) -o tst_region $(srcdir)/region.c \
-		$(ALL_CFLAGS) -DTEST_PROGRAM -lcom_err
+crc32table.h: gen_crc32table
+	$(E) "	GEN32TABLE $@"
+	$(Q) ./gen_crc32table > crc32table.h
+
+tst_problem: $(srcdir)/problem.c $(srcdir)/problem.h $(LIBEXT2FS) \
+	$(DEPLIBCOM_ERR)
+	$(Q) $(CC) $(BUILD_LDFLAGS) $(ALL_CFLAGS) -o tst_problem \
+		$(srcdir)/problem.c -DUNITTEST $(LIBEXT2FS) $(LIBCOM_ERR)
+
+tst_crc32: $(srcdir)/crc32.c $(LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(Q) $(CC) $(BUILD_LDFLAGS) $(ALL_CFLAGS) -o tst_crc32 $(srcdir)/crc32.c \
+		-DUNITTEST $(LIBEXT2FS) $(LIBCOM_ERR)
+
+tst_refcount: ea_refcount.c $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_refcount $(srcdir)/ea_refcount.c \
+		$(ALL_CFLAGS) -DTEST_PROGRAM $(LIBCOM_ERR) $(LIBEXT2FS) 
+
+tst_region: region.c $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_region $(srcdir)/region.c \
+		$(ALL_CFLAGS) -DTEST_PROGRAM $(LIBCOM_ERR)
+
+check:: tst_refcount tst_region tst_crc32 tst_problem
+	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_refcount
+	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_region
+	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_crc32
+	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_problem
 
 extend: extend.o
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o extend extend.o $(CHECKLIB)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o extend extend.o $(CHECKLIB)
 
 flushb: flushb.o
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o flushb flushb.o $(CHECKLIB)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o flushb flushb.o $(CHECKLIB)
 
 iscan: iscan.o util.o ehandler.o $(DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o iscan iscan.o util.o ehandler.o $(LIBS)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o iscan iscan.o util.o ehandler.o $(LIBS)
 
 test_profile: $(srcdir)/profile.c profile_helpers.o argv_parse.o \
-		prof_err.o profile.h $(STATIC_LIBCOM_ERR)
-	@echo "	LD $@"
-	@$(CC) -o test_profile -DDEBUG_PROGRAM $(srcdir)/profile.c prof_err.o \
+		prof_err.o profile.h $(DEPSTATIC_LIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o test_profile -DDEBUG_PROGRAM $(srcdir)/profile.c prof_err.o \
 		profile_helpers.o argv_parse.o $(STATIC_LIBCOM_ERR) \
 		$(ALL_CFLAGS)
 
 profiled:
-@PROFILE_CMT@	@echo "	MKDIR $@"
-@PROFILE_CMT@	@mkdir profiled
+@PROFILE_CMT@	$(E) "	MKDIR $@"
+@PROFILE_CMT@	$(Q) mkdir profiled
 
 e2fsck.8: $(DEP_SUBSTITUTE) $(srcdir)/e2fsck.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.8.in e2fsck.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.8.in e2fsck.8
 
 e2fsck.conf.5: $(DEP_SUBSTITUTE) $(srcdir)/e2fsck.conf.5.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.conf.5.in e2fsck.conf.5
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.conf.5.in e2fsck.conf.5
 
 installdirs:
-	@echo "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+	$(E) "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
 		$(DESTDIR)$(man8dir) $(DESTDIR)$(man5dir)
 
 install: $(PROGS) $(MANPAGES) $(FMANPAGES) installdirs
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	INSTALL $(root_sbindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	@echo "	LINK $(root_sbindir)/fsck.ext2"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
+	$(E) "	LINK $(root_sbindir)/fsck.ext2"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
 			$(DESTDIR)$(root_sbindir)/fsck.ext2
-	@echo "	LINK $(root_sbindir)/fsck.ext3"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
+	$(E) "	LINK $(root_sbindir)/fsck.ext3"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
 			$(DESTDIR)$(root_sbindir)/fsck.ext3
-	@for i in $(MANPAGES); do \
+	$(E) "	LINK $(root_sbindir)/fsck.ext4"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
+			$(DESTDIR)$(root_sbindir)/fsck.ext4
+	$(E) "	LINK $(root_sbindir)/fsck.ext4dev"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/e2fsck \
+			$(DESTDIR)$(root_sbindir)/fsck.ext4dev
+	$(Q) for i in $(MANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
 		done; \
 		echo "	INSTALL_DATA $(man8dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man8dir)/$$i; \
 	done
-	@for i in $(FMANPAGES); do \
+	$(Q) for i in $(FMANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man5dir)/$$i.$$j; \
 		done; \
 		echo "	INSTALL_DATA $(man5dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man5dir)/$$i; \
 	done
-	@echo "	LINK $(man8dir)/fsck.ext2.8"
-	@$(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
+	$(E) "	LINK $(man8dir)/fsck.ext2.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
 		$(DESTDIR)$(man8dir)/fsck.ext2.8
-	@echo "	LINK $(man8dir)/fsck.ext3.8"
-	@$(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
+	$(E) "	LINK $(man8dir)/fsck.ext3.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
 		$(DESTDIR)$(man8dir)/fsck.ext3.8
+	$(E) "	LINK $(man8dir)/fsck.ext4.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
+		$(DESTDIR)$(man8dir)/fsck.ext4.8
+	$(E) "	LINK $(man8dir)/fsck.ext4.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/e2fsck.8 \
+		$(DESTDIR)$(man8dir)/fsck.ext4dev.8
 
 install-strip: install
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	STRIP $(root_sbindir)/$$i"; \
 		$(STRIP) $(DESTDIR)$(root_sbindir)/$$i; \
 	done
@@ -215,7 +251,9 @@
 		$(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \
 	done
 	$(RM) -f $(DESTDIR)$(root_sbindir)/fsck.ext2 \
-		$(DESTDIR)$(root_sbindir)/fsck.ext3
+		$(DESTDIR)$(root_sbindir)/fsck.ext3 \
+		$(DESTDIR)$(root_sbindir)/fsck.ext4 \
+		$(DESTDIR)$(root_sbindir)/fsck.ext4dev
 	for i in $(MANPAGES); do \
 		$(RM) -f $(DESTDIR)$(man8dir)/$$i; \
 	done
@@ -223,11 +261,16 @@
 		$(RM) -f $(DESTDIR)$(man5dir)/$$i; \
 	done
 	$(RM) -f $(DESTDIR)$(root_sbindir)/fsck.ext2 \
-			$(DESTDIR)$(root_sbindir)/fsck.ext3
+			$(DESTDIR)$(root_sbindir)/fsck.ext3 \
+			$(DESTDIR)$(root_sbindir)/fsck.ext4 \
+			$(DESTDIR)$(root_sbindir)/fsck.ext4dev
 
 clean:
 	$(RM) -f $(PROGS) \#* *\# *.s *.o *.a *~ core e2fsck.static \
-		e2fsck.shared e2fsck.profiled flushb e2fsck.8
+		e2fsck.shared e2fsck.profiled flushb e2fsck.8 \
+		tst_problem tst_crc32 tst_region tst_refcount gen_crc32table \
+		crc32table.h e2fsck.conf.5 prof_err.c prof_err.h \
+		test_profile
 	$(RM) -rf profiled
 
 mostlyclean: clean
@@ -241,171 +284,171 @@
 #
 e2fsck.o: $(srcdir)/e2fsck.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
-dict.o: $(srcdir)/dict.c $(srcdir)/dict.h
-super.o: $(srcdir)/super.c $(top_srcdir)/lib/uuid/uuid.h $(srcdir)/e2fsck.h \
+crc32.o: $(srcdir)/crc32.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/profile.h prof_err.h $(srcdir)/crc32defs.h crc32table.h
+gen_crc32table.o: $(srcdir)/gen_crc32table.c $(srcdir)/crc32defs.h
+dict.o: $(srcdir)/dict.c $(srcdir)/dict.h
+super.o: $(srcdir)/super.c $(srcdir)/e2fsck.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 pass1.o: $(srcdir)/pass1.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
- $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h \
- $(srcdir)/problem.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 pass1b.o: $(srcdir)/pass1b.c $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h $(srcdir)/dict.h
 pass2.o: $(srcdir)/pass2.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h $(srcdir)/dict.h
 pass3.o: $(srcdir)/pass3.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 pass4.o: $(srcdir)/pass4.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 pass5.o: $(srcdir)/pass5.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 journal.o: $(srcdir)/journal.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
  $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
- $(srcdir)/problem.h $(top_srcdir)/lib/uuid/uuid.h
+ $(srcdir)/problem.h
 recovery.o: $(srcdir)/recovery.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
  $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h
 revoke.o: $(srcdir)/revoke.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
  $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h
 badblocks.o: $(srcdir)/badblocks.c $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
 util.o: $(srcdir)/util.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
-unix.o: $(srcdir)/unix.c $(top_srcdir)/lib/et/com_err.h $(srcdir)/e2fsck.h \
+unix.o: $(srcdir)/unix.c $(top_srcdir)/lib/e2p/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_srcdir)/lib/et/com_err.h $(srcdir)/e2fsck.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h $(top_srcdir)/version.h
 dirinfo.o: $(srcdir)/dirinfo.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
- $(srcdir)/profile.h prof_err.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/ext2fs/tdb.h
 dx_dirinfo.o: $(srcdir)/dx_dirinfo.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
 ehandler.o: $(srcdir)/ehandler.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
 problem.o: $(srcdir)/problem.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h $(srcdir)/problemP.h
 message.o: $(srcdir)/message.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
-swapfs.o: $(srcdir)/swapfs.c $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
- $(srcdir)/profile.h prof_err.h
 ea_refcount.o: $(srcdir)/ea_refcount.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
 rehash.o: $(srcdir)/rehash.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
 region.o: $(srcdir)/region.c $(srcdir)/e2fsck.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/profile.h prof_err.h
-profile.o: $(srcdir)/profile.c $(srcdir)/profile.h prof_err.h \
- $(top_srcdir)/lib/et/com_err.h
+profile.o: $(srcdir)/profile.c $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/profile.h prof_err.h
 prof_err.o: prof_err.c
diff --git a/e2fsck/argv_parse.c b/e2fsck/argv_parse.c
index 404d960..c0c5bbe 100644
--- a/e2fsck/argv_parse.c
+++ b/e2fsck/argv_parse.c
@@ -1,7 +1,7 @@
 /*
  * argv_parse.c --- utility function for parsing a string into a
  * 	argc, argv array.
- * 
+ *
  * This file defines a function argv_parse() which parsing a
  * passed-in string, handling double quotes and backslashes, and
  * creates an allocated argv vector which can be freed using the
@@ -10,7 +10,7 @@
  * See argv_parse.h for the formal definition of the functions.
  *
  * Copyright 1999 by Theodore Ts'o.
- * 
+ *
  * Permission to use, copy, modify, and distribute this software for
  * any purpose with or without fee is hereby granted, provided that
  * the above copyright notice and this permission notice appear in all
@@ -66,7 +66,7 @@
 				new_argv = realloc(argv,
 						  (max_argc+1)*sizeof(char *));
 				if (!new_argv) {
-					if (argv) free(argv);
+					free(argv);
 					free(buf);
 					return -1;
 				}
@@ -126,8 +126,7 @@
 
 void argv_free(char **argv)
 {
-	if (*argv)
-		free(*argv);
+	free(*argv);
 	free(argv);
 }
 
diff --git a/e2fsck/argv_parse.h b/e2fsck/argv_parse.h
index 84568e7..86f4564 100644
--- a/e2fsck/argv_parse.h
+++ b/e2fsck/argv_parse.h
@@ -3,7 +3,7 @@
  *
  * This file defines the interface for the functions argv_parse() and
  * argv_free().
- * 
+ *
  ***********************************************************************
  * int argv_parse(char *in_buf, int *ret_argc, char ***ret_argv)
  *
@@ -16,12 +16,12 @@
  * ret_argc and ret_argv, respectively.
  ***********************************************************************
  * extern void argv_free(char **argv);
- * 
+ *
  * This function frees the argument vector created by argv_parse().
  ***********************************************************************
  *
  * Copyright 1999 by Theodore Ts'o.
- * 
+ *
  * Permission to use, copy, modify, and distribute this software for
  * any purpose with or without fee is hereby granted, provided that
  * the above copyright notice and this permission notice appear in all
diff --git a/e2fsck/badblocks.c b/e2fsck/badblocks.c
index 72f88aa..87c6995 100644
--- a/e2fsck/badblocks.c
+++ b/e2fsck/badblocks.c
@@ -1,6 +1,6 @@
 /*
  * badblocks.c --- replace/append bad blocks to the bad block inode
- * 
+ *
  * Copyright (C) 1993, 1994 Theodore Ts'o.  This file may be
  * redistributed under the terms of the GNU Public License.
  */
@@ -45,7 +45,7 @@
 			_("while sanity checking the bad blocks inode"));
 		goto fatal;
 	}
-	
+
 	/*
 	 * If we're appending to the bad blocks inode, read in the
 	 * current bad blocks.
@@ -58,7 +58,7 @@
 			goto fatal;
 		}
 	}
-	
+
 	/*
 	 * Now read in the bad blocks from the file; if
 	 * bad_blocks_file is null, then try to run the badblocks
@@ -84,7 +84,7 @@
 		}
 	}
 	retval = ext2fs_read_bb_FILE(fs, f, &bb_list, invalid_block);
-	if (bad_blocks_file) 
+	if (bad_blocks_file)
 		fclose(f);
 	else
 		pclose(f);
@@ -93,7 +93,7 @@
 			_("while reading in list of bad blocks from file"));
 		goto fatal;
 	}
-	
+
 	/*
 	 * Finally, update the bad blocks from the bad_block_map
 	 */
@@ -107,15 +107,15 @@
 
 	ext2fs_badblocks_list_free(bb_list);
 	return;
-	
+
 fatal:
 	ctx->flags |= E2F_FLAG_ABORT;
 	return;
-	
+
 }
 
-static int check_bb_inode_blocks(ext2_filsys fs, 
-				 blk_t *block_nr, 
+static int check_bb_inode_blocks(ext2_filsys fs,
+				 blk_t *block_nr,
 				 int blockcnt EXT2FS_ATTR((unused)),
 				 void *priv_data EXT2FS_ATTR((unused)))
 {
diff --git a/e2fsck/crc32.c b/e2fsck/crc32.c
new file mode 100644
index 0000000..f092c03
--- /dev/null
+++ b/e2fsck/crc32.c
@@ -0,0 +1,569 @@
+/*
+ * crc32.c --- CRC32 function
+ *
+ * Copyright (C) 2008 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+/*
+ * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
+ * Nicer crc32 functions/docs submitted by linux@horizon.com.  Thanks!
+ * Code was from the public domain, copyright abandoned.  Code was
+ * subsequently included in the kernel, thus was re-licensed under the
+ * GNU GPL v2.
+ *
+ * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
+ * Same crc32 function was used in 5 other places in the kernel.
+ * I made one version, and deleted the others.
+ * There are various incantations of crc32().  Some use a seed of 0 or ~0.
+ * Some xor at the end with ~0.  The generic crc32() function takes
+ * seed as an argument, and doesn't xor at the end.  Then individual
+ * users can do whatever they need.
+ *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
+ *   fs/jffs2 uses seed 0, doesn't xor with ~0.
+ *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
+ *
+ * This source code is licensed under the GNU General Public License,
+ * Version 2.  See the file COPYING for more details.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifdef UNITTEST
+#undef ENABLE_NLS
+#endif
+#include "e2fsck.h"
+
+#include "crc32defs.h"
+#if CRC_LE_BITS == 8
+#define tole(x) __constant_cpu_to_le32(x)
+#define tobe(x) __constant_cpu_to_be32(x)
+#else
+#define tole(x) (x)
+#define tobe(x) (x)
+#endif
+#include "crc32table.h"
+
+#ifdef UNITTEST
+
+/**
+ * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
+ * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
+ *	other uses, or the previous crc32 value if computing incrementally.
+ * @p: pointer to buffer over which CRC is run
+ * @len: length of buffer @p
+ */
+__u32 crc32_le(__u32 crc, unsigned char const *p, size_t len);
+
+#if CRC_LE_BITS == 1
+/*
+ * In fact, the table-based code will work in this case, but it can be
+ * simplified by inlining the table in ?: form.
+ */
+
+__u32 crc32_le(__u32 crc, unsigned char const *p, size_t len)
+{
+	int i;
+	while (len--) {
+		crc ^= *p++;
+		for (i = 0; i < 8; i++)
+			crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
+	}
+	return crc;
+}
+#else				/* Table-based approach */
+
+__u32 crc32_le(__u32 crc, unsigned char const *p, size_t len)
+{
+# if CRC_LE_BITS == 8
+	const __u32      *b =(__u32 *)p;
+	const __u32      *tab = crc32table_le;
+
+# ifdef WORDS_BIGENDIAN
+#  define DO_CRC(x) crc = tab[ ((crc >> 24) ^ (x)) & 255] ^ (crc<<8)
+# else
+#  define DO_CRC(x) crc = tab[ (crc ^ (x)) & 255 ] ^ (crc>>8)
+# endif
+
+	crc = __cpu_to_le32(crc);
+	/* Align it */
+	if(unlikely(((long)b)&3 && len)){
+		do {
+			__u8 *p = (__u8 *)b;
+			DO_CRC(*p++);
+			b = (void *)p;
+		} while ((--len) && ((long)b)&3 );
+	}
+	if(likely(len >= 4)){
+		/* load data 32 bits wide, xor data 32 bits wide. */
+		size_t save_len = len & 3;
+	        len = len >> 2;
+		--b; /* use pre increment below(*++b) for speed */
+		do {
+			crc ^= *++b;
+			DO_CRC(0);
+			DO_CRC(0);
+			DO_CRC(0);
+			DO_CRC(0);
+		} while (--len);
+		b++; /* point to next byte(s) */
+		len = save_len;
+	}
+	/* And the last few bytes */
+	if(len){
+		do {
+			__u8 *p = (__u8 *)b;
+			DO_CRC(*p++);
+			b = (void *)p;
+		} while (--len);
+	}
+
+	return __le32_to_cpu(crc);
+#undef ENDIAN_SHIFT
+#undef DO_CRC
+
+# elif CRC_LE_BITS == 4
+	while (len--) {
+		crc ^= *p++;
+		crc = (crc >> 4) ^ crc32table_le[crc & 15];
+		crc = (crc >> 4) ^ crc32table_le[crc & 15];
+	}
+	return crc;
+# elif CRC_LE_BITS == 2
+	while (len--) {
+		crc ^= *p++;
+		crc = (crc >> 2) ^ crc32table_le[crc & 3];
+		crc = (crc >> 2) ^ crc32table_le[crc & 3];
+		crc = (crc >> 2) ^ crc32table_le[crc & 3];
+		crc = (crc >> 2) ^ crc32table_le[crc & 3];
+	}
+	return crc;
+# endif
+}
+#endif
+
+#endif /* UNITTEST */
+
+/**
+ * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
+ * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
+ *	other uses, or the previous crc32 value if computing incrementally.
+ * @p: pointer to buffer over which CRC is run
+ * @len: length of buffer @p
+ */
+__u32 crc32_be(__u32 crc, unsigned char const *p, size_t len);
+
+#if CRC_BE_BITS == 1
+/*
+ * In fact, the table-based code will work in this case, but it can be
+ * simplified by inlining the table in ?: form.
+ */
+
+__u32 crc32_be(__u32 crc, unsigned char const *p, size_t len)
+{
+	int i;
+	while (len--) {
+		crc ^= *p++ << 24;
+		for (i = 0; i < 8; i++)
+			crc =
+			    (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
+					  0);
+	}
+	return crc;
+}
+
+#else				/* Table-based approach */
+__u32 crc32_be(__u32 crc, unsigned char const *p, size_t len)
+{
+# if CRC_BE_BITS == 8
+	const __u32      *b =(const __u32 *)p;
+	const __u32      *tab = crc32table_be;
+
+# ifdef WORDS_BIGENDIAN
+#  define DO_CRC(x) crc = tab[ ((crc >> 24) ^ (x)) & 255] ^ (crc<<8)
+# else
+#  define DO_CRC(x) crc = tab[ (crc ^ (x)) & 255 ] ^ (crc>>8)
+# endif
+
+	crc = __cpu_to_be32(crc);
+	/* Align it */
+	if(unlikely(((long)b)&3 && len)){
+		do {
+			const __u8 *q = (const __u8 *)b;
+			DO_CRC(*q++);
+			b = (const __u32 *)q;
+		} while ((--len) && ((long)b)&3 );
+	}
+	if(likely(len >= 4)){
+		/* load data 32 bits wide, xor data 32 bits wide. */
+		size_t save_len = len & 3;
+	        len = len >> 2;
+		--b; /* use pre increment below(*++b) for speed */
+		do {
+			crc ^= *++b;
+			DO_CRC(0);
+			DO_CRC(0);
+			DO_CRC(0);
+			DO_CRC(0);
+		} while (--len);
+		b++; /* point to next byte(s) */
+		len = save_len;
+	}
+	/* And the last few bytes */
+	if(len){
+		do {
+			const __u8 *q = (const __u8 *)b;
+			DO_CRC(*q++);
+			b = (const void *)q;
+		} while (--len);
+	}
+	return __be32_to_cpu(crc);
+#undef ENDIAN_SHIFT
+#undef DO_CRC
+
+# elif CRC_BE_BITS == 4
+	while (len--) {
+		crc ^= *p++ << 24;
+		crc = (crc << 4) ^ crc32table_be[crc >> 28];
+		crc = (crc << 4) ^ crc32table_be[crc >> 28];
+	}
+	return crc;
+# elif CRC_BE_BITS == 2
+	while (len--) {
+		crc ^= *p++ << 24;
+		crc = (crc << 2) ^ crc32table_be[crc >> 30];
+		crc = (crc << 2) ^ crc32table_be[crc >> 30];
+		crc = (crc << 2) ^ crc32table_be[crc >> 30];
+		crc = (crc << 2) ^ crc32table_be[crc >> 30];
+	}
+	return crc;
+# endif
+}
+#endif
+
+/*
+ * A brief CRC tutorial.
+ *
+ * A CRC is a long-division remainder.  You add the CRC to the message,
+ * and the whole thing (message+CRC) is a multiple of the given
+ * CRC polynomial.  To check the CRC, you can either check that the
+ * CRC matches the recomputed value, *or* you can check that the
+ * remainder computed on the message+CRC is 0.  This latter approach
+ * is used by a lot of hardware implementations, and is why so many
+ * protocols put the end-of-frame flag after the CRC.
+ *
+ * It's actually the same long division you learned in school, except that
+ * - We're working in binary, so the digits are only 0 and 1, and
+ * - When dividing polynomials, there are no carries.  Rather than add and
+ *   subtract, we just xor.  Thus, we tend to get a bit sloppy about
+ *   the difference between adding and subtracting.
+ *
+ * A 32-bit CRC polynomial is actually 33 bits long.  But since it's
+ * 33 bits long, bit 32 is always going to be set, so usually the CRC
+ * is written in hex with the most significant bit omitted.  (If you're
+ * familiar with the IEEE 754 floating-point format, it's the same idea.)
+ *
+ * Note that a CRC is computed over a string of *bits*, so you have
+ * to decide on the endianness of the bits within each byte.  To get
+ * the best error-detecting properties, this should correspond to the
+ * order they're actually sent.  For example, standard RS-232 serial is
+ * little-endian; the most significant bit (sometimes used for parity)
+ * is sent last.  And when appending a CRC word to a message, you should
+ * do it in the right order, matching the endianness.
+ *
+ * Just like with ordinary division, the remainder is always smaller than
+ * the divisor (the CRC polynomial) you're dividing by.  Each step of the
+ * division, you take one more digit (bit) of the dividend and append it
+ * to the current remainder.  Then you figure out the appropriate multiple
+ * of the divisor to subtract to being the remainder back into range.
+ * In binary, it's easy - it has to be either 0 or 1, and to make the
+ * XOR cancel, it's just a copy of bit 32 of the remainder.
+ *
+ * When computing a CRC, we don't care about the quotient, so we can
+ * throw the quotient bit away, but subtract the appropriate multiple of
+ * the polynomial from the remainder and we're back to where we started,
+ * ready to process the next bit.
+ *
+ * A big-endian CRC written this way would be coded like:
+ * for (i = 0; i < input_bits; i++) {
+ * 	multiple = remainder & 0x80000000 ? CRCPOLY : 0;
+ * 	remainder = (remainder << 1 | next_input_bit()) ^ multiple;
+ * }
+ * Notice how, to get at bit 32 of the shifted remainder, we look
+ * at bit 31 of the remainder *before* shifting it.
+ *
+ * But also notice how the next_input_bit() bits we're shifting into
+ * the remainder don't actually affect any decision-making until
+ * 32 bits later.  Thus, the first 32 cycles of this are pretty boring.
+ * Also, to add the CRC to a message, we need a 32-bit-long hole for it at
+ * the end, so we have to add 32 extra cycles shifting in zeros at the
+ * end of every message,
+ *
+ * So the standard trick is to rearrage merging in the next_input_bit()
+ * until the moment it's needed.  Then the first 32 cycles can be precomputed,
+ * and merging in the final 32 zero bits to make room for the CRC can be
+ * skipped entirely.
+ * This changes the code to:
+ * for (i = 0; i < input_bits; i++) {
+ *      remainder ^= next_input_bit() << 31;
+ * 	multiple = (remainder & 0x80000000) ? CRCPOLY : 0;
+ * 	remainder = (remainder << 1) ^ multiple;
+ * }
+ * With this optimization, the little-endian code is simpler:
+ * for (i = 0; i < input_bits; i++) {
+ *      remainder ^= next_input_bit();
+ * 	multiple = (remainder & 1) ? CRCPOLY : 0;
+ * 	remainder = (remainder >> 1) ^ multiple;
+ * }
+ *
+ * Note that the other details of endianness have been hidden in CRCPOLY
+ * (which must be bit-reversed) and next_input_bit().
+ *
+ * However, as long as next_input_bit is returning the bits in a sensible
+ * order, we can actually do the merging 8 or more bits at a time rather
+ * than one bit at a time:
+ * for (i = 0; i < input_bytes; i++) {
+ * 	remainder ^= next_input_byte() << 24;
+ * 	for (j = 0; j < 8; j++) {
+ * 		multiple = (remainder & 0x80000000) ? CRCPOLY : 0;
+ * 		remainder = (remainder << 1) ^ multiple;
+ * 	}
+ * }
+ * Or in little-endian:
+ * for (i = 0; i < input_bytes; i++) {
+ * 	remainder ^= next_input_byte();
+ * 	for (j = 0; j < 8; j++) {
+ * 		multiple = (remainder & 1) ? CRCPOLY : 0;
+ * 		remainder = (remainder << 1) ^ multiple;
+ * 	}
+ * }
+ * If the input is a multiple of 32 bits, you can even XOR in a 32-bit
+ * word at a time and increase the inner loop count to 32.
+ *
+ * You can also mix and match the two loop styles, for example doing the
+ * bulk of a message byte-at-a-time and adding bit-at-a-time processing
+ * for any fractional bytes at the end.
+ *
+ * The only remaining optimization is to the byte-at-a-time table method.
+ * Here, rather than just shifting one bit of the remainder to decide
+ * in the correct multiple to subtract, we can shift a byte at a time.
+ * This produces a 40-bit (rather than a 33-bit) intermediate remainder,
+ * but again the multiple of the polynomial to subtract depends only on
+ * the high bits, the high 8 bits in this case.
+ *
+ * The multiple we need in that case is the low 32 bits of a 40-bit
+ * value whose high 8 bits are given, and which is a multiple of the
+ * generator polynomial.  This is simply the CRC-32 of the given
+ * one-byte message.
+ *
+ * Two more details: normally, appending zero bits to a message which
+ * is already a multiple of a polynomial produces a larger multiple of that
+ * polynomial.  To enable a CRC to detect this condition, it's common to
+ * invert the CRC before appending it.  This makes the remainder of the
+ * message+crc come out not as zero, but some fixed non-zero value.
+ *
+ * The same problem applies to zero bits prepended to the message, and
+ * a similar solution is used.  Instead of starting with a remainder of
+ * 0, an initial remainder of all ones is used.  As long as you start
+ * the same way on decoding, it doesn't make a difference.
+ */
+
+#ifdef UNITTEST
+
+#include <stdlib.h>
+#include <stdio.h>
+
+const __u8 byte_rev_table[256] = {
+	0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+	0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+	0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+	0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+	0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+	0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+	0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+	0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+	0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+	0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+	0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+	0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+	0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+	0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+	0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+	0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+	0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+	0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+	0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+	0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+	0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+	0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+	0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+	0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+	0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+	0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+	0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+	0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+	0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+	0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+	0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+	0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+};
+
+static inline __u8 bitrev8(__u8 byte)
+{
+	return byte_rev_table[byte];
+}
+
+static inline __u16 bitrev16(__u16 x)
+{
+	return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8);
+}
+
+/**
+ * bitrev32 - reverse the order of bits in a u32 value
+ * @x: value to be bit-reversed
+ */
+static __u32 bitrev32(__u32 x)
+{
+	return (bitrev16(x & 0xffff) << 16) | bitrev16(x >> 16);
+}
+
+#if 0				/*Not used at present */
+
+static void
+buf_dump(char const *prefix, unsigned char const *buf, size_t len)
+{
+	fputs(prefix, stdout);
+	while (len--)
+		printf(" %02x", *buf++);
+	putchar('\n');
+
+}
+#endif
+
+static void bytereverse(unsigned char *buf, size_t len)
+{
+	while (len--) {
+		unsigned char x = bitrev8(*buf);
+		*buf++ = x;
+	}
+}
+
+static void random_garbage(unsigned char *buf, size_t len)
+{
+	while (len--)
+		*buf++ = (unsigned char) random();
+}
+
+#if 0				/* Not used at present */
+static void store_le(__u32 x, unsigned char *buf)
+{
+	buf[0] = (unsigned char) x;
+	buf[1] = (unsigned char) (x >> 8);
+	buf[2] = (unsigned char) (x >> 16);
+	buf[3] = (unsigned char) (x >> 24);
+}
+#endif
+
+static void store_be(__u32 x, unsigned char *buf)
+{
+	buf[0] = (unsigned char) (x >> 24);
+	buf[1] = (unsigned char) (x >> 16);
+	buf[2] = (unsigned char) (x >> 8);
+	buf[3] = (unsigned char) x;
+}
+
+/*
+ * This checks that CRC(buf + CRC(buf)) = 0, and that
+ * CRC commutes with bit-reversal.  This has the side effect
+ * of bytewise bit-reversing the input buffer, and returns
+ * the CRC of the reversed buffer.
+ */
+static __u32 test_step(__u32 init, unsigned char *buf, size_t len)
+{
+	__u32 crc1, crc2;
+	size_t i;
+
+	crc1 = crc32_be(init, buf, len);
+	store_be(crc1, buf + len);
+	crc2 = crc32_be(init, buf, len + 4);
+	if (crc2)
+		printf("\nCRC cancellation fail: 0x%08x should be 0\n",
+		       crc2);
+
+	for (i = 0; i <= len + 4; i++) {
+		crc2 = crc32_be(init, buf, i);
+		crc2 = crc32_be(crc2, buf + i, len + 4 - i);
+		if (crc2)
+			printf("\nCRC split fail: 0x%08x\n", crc2);
+	}
+
+	/* Now swap it around for the other test */
+
+	bytereverse(buf, len + 4);
+	init = bitrev32(init);
+	crc2 = bitrev32(crc1);
+	if (crc1 != bitrev32(crc2))
+		printf("\nBit reversal fail: 0x%08x -> 0x%08x -> 0x%08x\n",
+		       crc1, crc2, bitrev32(crc2));
+	crc1 = crc32_le(init, buf, len);
+	if (crc1 != crc2)
+		printf("\nCRC endianness fail: 0x%08x != 0x%08x\n", crc1,
+		       crc2);
+	crc2 = crc32_le(init, buf, len + 4);
+	if (crc2)
+		printf("\nCRC cancellation fail: 0x%08x should be 0\n",
+		       crc2);
+
+	for (i = 0; i <= len + 4; i++) {
+		crc2 = crc32_le(init, buf, i);
+		crc2 = crc32_le(crc2, buf + i, len + 4 - i);
+		if (crc2)
+			printf("\nCRC split fail: 0x%08x\n", crc2);
+	}
+
+	return crc1;
+}
+
+#define SIZE 64
+#define INIT1 0
+#define INIT2 0
+
+int main(int argc, char **argv)
+{
+	unsigned char buf1[SIZE + 4];
+	unsigned char buf2[SIZE + 4];
+	unsigned char buf3[SIZE + 4];
+	int i, j;
+	__u32 crc1, crc2, crc3;
+	int exit_status = 0;
+
+	for (i = 0; i <= SIZE; i++) {
+		printf("\rTesting length %d...", i);
+		fflush(stdout);
+		random_garbage(buf1, i);
+		random_garbage(buf2, i);
+		for (j = 0; j < i; j++)
+			buf3[j] = buf1[j] ^ buf2[j];
+
+		crc1 = test_step(INIT1, buf1, i);
+		crc2 = test_step(INIT2, buf2, i);
+		/* Now check that CRC(buf1 ^ buf2) = CRC(buf1) ^ CRC(buf2) */
+		crc3 = test_step(INIT1 ^ INIT2, buf3, i);
+		if (crc3 != (crc1 ^ crc2)) {
+			printf("CRC XOR fail: 0x%08x != 0x%08x ^ 0x%08x\n",
+			       crc3, crc1, crc2);
+			exit_status++;
+		}
+	}
+	printf("\nAll test complete.  No failures expected.\n");
+	return 0;
+}
+
+#endif				/* UNITTEST */
diff --git a/e2fsck/crc32defs.h b/e2fsck/crc32defs.h
new file mode 100644
index 0000000..27414d2
--- /dev/null
+++ b/e2fsck/crc32defs.h
@@ -0,0 +1,64 @@
+/*
+ * There are multiple 16-bit CRC polynomials in common use, but this is
+ * *the* standard CRC-32 polynomial, first popularized by Ethernet.
+ * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0
+ */
+#define CRCPOLY_LE 0xedb88320
+#define CRCPOLY_BE 0x04c11db7
+
+/* How many bits at a time to use.  Requires a table of 4<<CRC_xx_BITS bytes. */
+/* For less performance-sensitive, use 4 */
+#ifndef CRC_LE_BITS
+# define CRC_LE_BITS 8
+#endif
+#ifndef CRC_BE_BITS
+# define CRC_BE_BITS 8
+#endif
+
+/*
+ * Little-endian CRC computation.  Used with serial bit streams sent
+ * lsbit-first.  Be sure to use cpu_to_le32() to append the computed CRC.
+ */
+#if CRC_LE_BITS > 8 || CRC_LE_BITS < 1 || CRC_LE_BITS & CRC_LE_BITS-1
+# error CRC_LE_BITS must be a power of 2 between 1 and 8
+#endif
+
+/*
+ * Big-endian CRC computation.  Used with serial bit streams sent
+ * msbit-first.  Be sure to use cpu_to_be32() to append the computed CRC.
+ */
+#if CRC_BE_BITS > 8 || CRC_BE_BITS < 1 || CRC_BE_BITS & CRC_BE_BITS-1
+# error CRC_BE_BITS must be a power of 2 between 1 and 8
+#endif
+
+#define ___constant_swab32(x) \
+	((__u32)( \
+		(((__u32)(x) & (__u32)0x000000ffUL) << 24) | \
+		(((__u32)(x) & (__u32)0x0000ff00UL) <<  8) | \
+		(((__u32)(x) & (__u32)0x00ff0000UL) >>  8) | \
+		(((__u32)(x) & (__u32)0xff000000UL) >> 24) ))
+
+
+#ifdef WORDS_BIGENDIAN
+#define __constant_cpu_to_le32(x) ___constant_swab32((x))
+#define __constant_cpu_to_be32(x) (x)
+#define __be32_to_cpu(x) (x)
+#define __cpu_to_be32(x) (x)
+#define __cpu_to_le32(x) (ext2fs_swab32((x)))
+#define __le32_to_cpu(x) (ext2fs_swab32((x)))
+#else
+#define __constant_cpu_to_le32(x) (x)
+#define __constant_cpu_to_be32(x) ___constant_swab32((x))
+#define __be32_to_cpu(x) (ext2fs_swab32((x)))
+#define __cpu_to_be32(x) (ext2fs_swab32((x)))
+#define __cpu_to_le32(x) (x)
+#define __le32_to_cpu(x) (x)
+#endif
+
+#if (__GNUC__ >= 3)
+#define likely(x)	__builtin_expect(!!(x), 1)
+#define unlikely(x)	__builtin_expect(!!(x), 0)
+#else
+#define likely(x)	(x)
+#define unlikely(x)	(x)
+#endif
diff --git a/e2fsck/crc32table.h b/e2fsck/crc32table.h
new file mode 100644
index 0000000..57a79a2
--- /dev/null
+++ b/e2fsck/crc32table.h
@@ -0,0 +1,136 @@
+/* this file is generated - do not edit */
+
+#ifdef UNITTEST
+static const __u32 crc32table_le[] = {
+tole(0x00000000L), tole(0x77073096L), tole(0xee0e612cL), tole(0x990951baL), 
+tole(0x076dc419L), tole(0x706af48fL), tole(0xe963a535L), tole(0x9e6495a3L), 
+tole(0x0edb8832L), tole(0x79dcb8a4L), tole(0xe0d5e91eL), tole(0x97d2d988L), 
+tole(0x09b64c2bL), tole(0x7eb17cbdL), tole(0xe7b82d07L), tole(0x90bf1d91L), 
+tole(0x1db71064L), tole(0x6ab020f2L), tole(0xf3b97148L), tole(0x84be41deL), 
+tole(0x1adad47dL), tole(0x6ddde4ebL), tole(0xf4d4b551L), tole(0x83d385c7L), 
+tole(0x136c9856L), tole(0x646ba8c0L), tole(0xfd62f97aL), tole(0x8a65c9ecL), 
+tole(0x14015c4fL), tole(0x63066cd9L), tole(0xfa0f3d63L), tole(0x8d080df5L), 
+tole(0x3b6e20c8L), tole(0x4c69105eL), tole(0xd56041e4L), tole(0xa2677172L), 
+tole(0x3c03e4d1L), tole(0x4b04d447L), tole(0xd20d85fdL), tole(0xa50ab56bL), 
+tole(0x35b5a8faL), tole(0x42b2986cL), tole(0xdbbbc9d6L), tole(0xacbcf940L), 
+tole(0x32d86ce3L), tole(0x45df5c75L), tole(0xdcd60dcfL), tole(0xabd13d59L), 
+tole(0x26d930acL), tole(0x51de003aL), tole(0xc8d75180L), tole(0xbfd06116L), 
+tole(0x21b4f4b5L), tole(0x56b3c423L), tole(0xcfba9599L), tole(0xb8bda50fL), 
+tole(0x2802b89eL), tole(0x5f058808L), tole(0xc60cd9b2L), tole(0xb10be924L), 
+tole(0x2f6f7c87L), tole(0x58684c11L), tole(0xc1611dabL), tole(0xb6662d3dL), 
+tole(0x76dc4190L), tole(0x01db7106L), tole(0x98d220bcL), tole(0xefd5102aL), 
+tole(0x71b18589L), tole(0x06b6b51fL), tole(0x9fbfe4a5L), tole(0xe8b8d433L), 
+tole(0x7807c9a2L), tole(0x0f00f934L), tole(0x9609a88eL), tole(0xe10e9818L), 
+tole(0x7f6a0dbbL), tole(0x086d3d2dL), tole(0x91646c97L), tole(0xe6635c01L), 
+tole(0x6b6b51f4L), tole(0x1c6c6162L), tole(0x856530d8L), tole(0xf262004eL), 
+tole(0x6c0695edL), tole(0x1b01a57bL), tole(0x8208f4c1L), tole(0xf50fc457L), 
+tole(0x65b0d9c6L), tole(0x12b7e950L), tole(0x8bbeb8eaL), tole(0xfcb9887cL), 
+tole(0x62dd1ddfL), tole(0x15da2d49L), tole(0x8cd37cf3L), tole(0xfbd44c65L), 
+tole(0x4db26158L), tole(0x3ab551ceL), tole(0xa3bc0074L), tole(0xd4bb30e2L), 
+tole(0x4adfa541L), tole(0x3dd895d7L), tole(0xa4d1c46dL), tole(0xd3d6f4fbL), 
+tole(0x4369e96aL), tole(0x346ed9fcL), tole(0xad678846L), tole(0xda60b8d0L), 
+tole(0x44042d73L), tole(0x33031de5L), tole(0xaa0a4c5fL), tole(0xdd0d7cc9L), 
+tole(0x5005713cL), tole(0x270241aaL), tole(0xbe0b1010L), tole(0xc90c2086L), 
+tole(0x5768b525L), tole(0x206f85b3L), tole(0xb966d409L), tole(0xce61e49fL), 
+tole(0x5edef90eL), tole(0x29d9c998L), tole(0xb0d09822L), tole(0xc7d7a8b4L), 
+tole(0x59b33d17L), tole(0x2eb40d81L), tole(0xb7bd5c3bL), tole(0xc0ba6cadL), 
+tole(0xedb88320L), tole(0x9abfb3b6L), tole(0x03b6e20cL), tole(0x74b1d29aL), 
+tole(0xead54739L), tole(0x9dd277afL), tole(0x04db2615L), tole(0x73dc1683L), 
+tole(0xe3630b12L), tole(0x94643b84L), tole(0x0d6d6a3eL), tole(0x7a6a5aa8L), 
+tole(0xe40ecf0bL), tole(0x9309ff9dL), tole(0x0a00ae27L), tole(0x7d079eb1L), 
+tole(0xf00f9344L), tole(0x8708a3d2L), tole(0x1e01f268L), tole(0x6906c2feL), 
+tole(0xf762575dL), tole(0x806567cbL), tole(0x196c3671L), tole(0x6e6b06e7L), 
+tole(0xfed41b76L), tole(0x89d32be0L), tole(0x10da7a5aL), tole(0x67dd4accL), 
+tole(0xf9b9df6fL), tole(0x8ebeeff9L), tole(0x17b7be43L), tole(0x60b08ed5L), 
+tole(0xd6d6a3e8L), tole(0xa1d1937eL), tole(0x38d8c2c4L), tole(0x4fdff252L), 
+tole(0xd1bb67f1L), tole(0xa6bc5767L), tole(0x3fb506ddL), tole(0x48b2364bL), 
+tole(0xd80d2bdaL), tole(0xaf0a1b4cL), tole(0x36034af6L), tole(0x41047a60L), 
+tole(0xdf60efc3L), tole(0xa867df55L), tole(0x316e8eefL), tole(0x4669be79L), 
+tole(0xcb61b38cL), tole(0xbc66831aL), tole(0x256fd2a0L), tole(0x5268e236L), 
+tole(0xcc0c7795L), tole(0xbb0b4703L), tole(0x220216b9L), tole(0x5505262fL), 
+tole(0xc5ba3bbeL), tole(0xb2bd0b28L), tole(0x2bb45a92L), tole(0x5cb36a04L), 
+tole(0xc2d7ffa7L), tole(0xb5d0cf31L), tole(0x2cd99e8bL), tole(0x5bdeae1dL), 
+tole(0x9b64c2b0L), tole(0xec63f226L), tole(0x756aa39cL), tole(0x026d930aL), 
+tole(0x9c0906a9L), tole(0xeb0e363fL), tole(0x72076785L), tole(0x05005713L), 
+tole(0x95bf4a82L), tole(0xe2b87a14L), tole(0x7bb12baeL), tole(0x0cb61b38L), 
+tole(0x92d28e9bL), tole(0xe5d5be0dL), tole(0x7cdcefb7L), tole(0x0bdbdf21L), 
+tole(0x86d3d2d4L), tole(0xf1d4e242L), tole(0x68ddb3f8L), tole(0x1fda836eL), 
+tole(0x81be16cdL), tole(0xf6b9265bL), tole(0x6fb077e1L), tole(0x18b74777L), 
+tole(0x88085ae6L), tole(0xff0f6a70L), tole(0x66063bcaL), tole(0x11010b5cL), 
+tole(0x8f659effL), tole(0xf862ae69L), tole(0x616bffd3L), tole(0x166ccf45L), 
+tole(0xa00ae278L), tole(0xd70dd2eeL), tole(0x4e048354L), tole(0x3903b3c2L), 
+tole(0xa7672661L), tole(0xd06016f7L), tole(0x4969474dL), tole(0x3e6e77dbL), 
+tole(0xaed16a4aL), tole(0xd9d65adcL), tole(0x40df0b66L), tole(0x37d83bf0L), 
+tole(0xa9bcae53L), tole(0xdebb9ec5L), tole(0x47b2cf7fL), tole(0x30b5ffe9L), 
+tole(0xbdbdf21cL), tole(0xcabac28aL), tole(0x53b39330L), tole(0x24b4a3a6L), 
+tole(0xbad03605L), tole(0xcdd70693L), tole(0x54de5729L), tole(0x23d967bfL), 
+tole(0xb3667a2eL), tole(0xc4614ab8L), tole(0x5d681b02L), tole(0x2a6f2b94L), 
+tole(0xb40bbe37L), tole(0xc30c8ea1L), tole(0x5a05df1bL), tole(0x2d02ef8dL)
+};
+#endif /* UNITTEST */
+static const __u32 crc32table_be[] = {
+tobe(0x00000000L), tobe(0x04c11db7L), tobe(0x09823b6eL), tobe(0x0d4326d9L), 
+tobe(0x130476dcL), tobe(0x17c56b6bL), tobe(0x1a864db2L), tobe(0x1e475005L), 
+tobe(0x2608edb8L), tobe(0x22c9f00fL), tobe(0x2f8ad6d6L), tobe(0x2b4bcb61L), 
+tobe(0x350c9b64L), tobe(0x31cd86d3L), tobe(0x3c8ea00aL), tobe(0x384fbdbdL), 
+tobe(0x4c11db70L), tobe(0x48d0c6c7L), tobe(0x4593e01eL), tobe(0x4152fda9L), 
+tobe(0x5f15adacL), tobe(0x5bd4b01bL), tobe(0x569796c2L), tobe(0x52568b75L), 
+tobe(0x6a1936c8L), tobe(0x6ed82b7fL), tobe(0x639b0da6L), tobe(0x675a1011L), 
+tobe(0x791d4014L), tobe(0x7ddc5da3L), tobe(0x709f7b7aL), tobe(0x745e66cdL), 
+tobe(0x9823b6e0L), tobe(0x9ce2ab57L), tobe(0x91a18d8eL), tobe(0x95609039L), 
+tobe(0x8b27c03cL), tobe(0x8fe6dd8bL), tobe(0x82a5fb52L), tobe(0x8664e6e5L), 
+tobe(0xbe2b5b58L), tobe(0xbaea46efL), tobe(0xb7a96036L), tobe(0xb3687d81L), 
+tobe(0xad2f2d84L), tobe(0xa9ee3033L), tobe(0xa4ad16eaL), tobe(0xa06c0b5dL), 
+tobe(0xd4326d90L), tobe(0xd0f37027L), tobe(0xddb056feL), tobe(0xd9714b49L), 
+tobe(0xc7361b4cL), tobe(0xc3f706fbL), tobe(0xceb42022L), tobe(0xca753d95L), 
+tobe(0xf23a8028L), tobe(0xf6fb9d9fL), tobe(0xfbb8bb46L), tobe(0xff79a6f1L), 
+tobe(0xe13ef6f4L), tobe(0xe5ffeb43L), tobe(0xe8bccd9aL), tobe(0xec7dd02dL), 
+tobe(0x34867077L), tobe(0x30476dc0L), tobe(0x3d044b19L), tobe(0x39c556aeL), 
+tobe(0x278206abL), tobe(0x23431b1cL), tobe(0x2e003dc5L), tobe(0x2ac12072L), 
+tobe(0x128e9dcfL), tobe(0x164f8078L), tobe(0x1b0ca6a1L), tobe(0x1fcdbb16L), 
+tobe(0x018aeb13L), tobe(0x054bf6a4L), tobe(0x0808d07dL), tobe(0x0cc9cdcaL), 
+tobe(0x7897ab07L), tobe(0x7c56b6b0L), tobe(0x71159069L), tobe(0x75d48ddeL), 
+tobe(0x6b93dddbL), tobe(0x6f52c06cL), tobe(0x6211e6b5L), tobe(0x66d0fb02L), 
+tobe(0x5e9f46bfL), tobe(0x5a5e5b08L), tobe(0x571d7dd1L), tobe(0x53dc6066L), 
+tobe(0x4d9b3063L), tobe(0x495a2dd4L), tobe(0x44190b0dL), tobe(0x40d816baL), 
+tobe(0xaca5c697L), tobe(0xa864db20L), tobe(0xa527fdf9L), tobe(0xa1e6e04eL), 
+tobe(0xbfa1b04bL), tobe(0xbb60adfcL), tobe(0xb6238b25L), tobe(0xb2e29692L), 
+tobe(0x8aad2b2fL), tobe(0x8e6c3698L), tobe(0x832f1041L), tobe(0x87ee0df6L), 
+tobe(0x99a95df3L), tobe(0x9d684044L), tobe(0x902b669dL), tobe(0x94ea7b2aL), 
+tobe(0xe0b41de7L), tobe(0xe4750050L), tobe(0xe9362689L), tobe(0xedf73b3eL), 
+tobe(0xf3b06b3bL), tobe(0xf771768cL), tobe(0xfa325055L), tobe(0xfef34de2L), 
+tobe(0xc6bcf05fL), tobe(0xc27dede8L), tobe(0xcf3ecb31L), tobe(0xcbffd686L), 
+tobe(0xd5b88683L), tobe(0xd1799b34L), tobe(0xdc3abdedL), tobe(0xd8fba05aL), 
+tobe(0x690ce0eeL), tobe(0x6dcdfd59L), tobe(0x608edb80L), tobe(0x644fc637L), 
+tobe(0x7a089632L), tobe(0x7ec98b85L), tobe(0x738aad5cL), tobe(0x774bb0ebL), 
+tobe(0x4f040d56L), tobe(0x4bc510e1L), tobe(0x46863638L), tobe(0x42472b8fL), 
+tobe(0x5c007b8aL), tobe(0x58c1663dL), tobe(0x558240e4L), tobe(0x51435d53L), 
+tobe(0x251d3b9eL), tobe(0x21dc2629L), tobe(0x2c9f00f0L), tobe(0x285e1d47L), 
+tobe(0x36194d42L), tobe(0x32d850f5L), tobe(0x3f9b762cL), tobe(0x3b5a6b9bL), 
+tobe(0x0315d626L), tobe(0x07d4cb91L), tobe(0x0a97ed48L), tobe(0x0e56f0ffL), 
+tobe(0x1011a0faL), tobe(0x14d0bd4dL), tobe(0x19939b94L), tobe(0x1d528623L), 
+tobe(0xf12f560eL), tobe(0xf5ee4bb9L), tobe(0xf8ad6d60L), tobe(0xfc6c70d7L), 
+tobe(0xe22b20d2L), tobe(0xe6ea3d65L), tobe(0xeba91bbcL), tobe(0xef68060bL), 
+tobe(0xd727bbb6L), tobe(0xd3e6a601L), tobe(0xdea580d8L), tobe(0xda649d6fL), 
+tobe(0xc423cd6aL), tobe(0xc0e2d0ddL), tobe(0xcda1f604L), tobe(0xc960ebb3L), 
+tobe(0xbd3e8d7eL), tobe(0xb9ff90c9L), tobe(0xb4bcb610L), tobe(0xb07daba7L), 
+tobe(0xae3afba2L), tobe(0xaafbe615L), tobe(0xa7b8c0ccL), tobe(0xa379dd7bL), 
+tobe(0x9b3660c6L), tobe(0x9ff77d71L), tobe(0x92b45ba8L), tobe(0x9675461fL), 
+tobe(0x8832161aL), tobe(0x8cf30badL), tobe(0x81b02d74L), tobe(0x857130c3L), 
+tobe(0x5d8a9099L), tobe(0x594b8d2eL), tobe(0x5408abf7L), tobe(0x50c9b640L), 
+tobe(0x4e8ee645L), tobe(0x4a4ffbf2L), tobe(0x470cdd2bL), tobe(0x43cdc09cL), 
+tobe(0x7b827d21L), tobe(0x7f436096L), tobe(0x7200464fL), tobe(0x76c15bf8L), 
+tobe(0x68860bfdL), tobe(0x6c47164aL), tobe(0x61043093L), tobe(0x65c52d24L), 
+tobe(0x119b4be9L), tobe(0x155a565eL), tobe(0x18197087L), tobe(0x1cd86d30L), 
+tobe(0x029f3d35L), tobe(0x065e2082L), tobe(0x0b1d065bL), tobe(0x0fdc1becL), 
+tobe(0x3793a651L), tobe(0x3352bbe6L), tobe(0x3e119d3fL), tobe(0x3ad08088L), 
+tobe(0x2497d08dL), tobe(0x2056cd3aL), tobe(0x2d15ebe3L), tobe(0x29d4f654L), 
+tobe(0xc5a92679L), tobe(0xc1683bceL), tobe(0xcc2b1d17L), tobe(0xc8ea00a0L), 
+tobe(0xd6ad50a5L), tobe(0xd26c4d12L), tobe(0xdf2f6bcbL), tobe(0xdbee767cL), 
+tobe(0xe3a1cbc1L), tobe(0xe760d676L), tobe(0xea23f0afL), tobe(0xeee2ed18L), 
+tobe(0xf0a5bd1dL), tobe(0xf464a0aaL), tobe(0xf9278673L), tobe(0xfde69bc4L), 
+tobe(0x89b8fd09L), tobe(0x8d79e0beL), tobe(0x803ac667L), tobe(0x84fbdbd0L), 
+tobe(0x9abc8bd5L), tobe(0x9e7d9662L), tobe(0x933eb0bbL), tobe(0x97ffad0cL), 
+tobe(0xafb010b1L), tobe(0xab710d06L), tobe(0xa6322bdfL), tobe(0xa2f33668L), 
+tobe(0xbcb4666dL), tobe(0xb8757bdaL), tobe(0xb5365d03L), tobe(0xb1f740b4L)
+};
diff --git a/e2fsck/dict.c b/e2fsck/dict.c
index bccab8b..722b5b1 100644
--- a/e2fsck/dict.c
+++ b/e2fsck/dict.c
@@ -39,7 +39,7 @@
 /*
  * These macros provide short convenient names for structure members,
  * which are embellished with dict_ prefixes so that they are
- * properly confined to the documented namespace. It's legal for a 
+ * properly confined to the documented namespace. It's legal for a
  * program which uses dict to define, for instance, a macro called ``parent''.
  * Such a macro would interfere with the dnode_t struct definition.
  * In general, highly portable and reusable C modules which expose their
@@ -150,7 +150,7 @@
  * dict_next() successor function, verifying that the key of each node is
  * strictly lower than that of its successor, if duplicates are not allowed,
  * or lower or equal if duplicates are allowed.  This function is used for
- * debugging purposes. 
+ * debugging purposes.
  */
 #ifndef NDEBUG
 static int verify_bintree(dict_t *dict)
@@ -209,7 +209,7 @@
 	if (root->color != dnode_black)
 	    return 0;
 	return height_left + 1;
-    } 
+    }
     return 1;
 }
 
@@ -349,7 +349,7 @@
 }
 
 #ifdef E2FSCK_NOTUSED
-/* 
+/*
  * Initialize a dictionary in the likeness of another dictionary
  */
 
@@ -389,7 +389,7 @@
  * debugging purposes, and should be placed in assert statements.   Just because
  * this function succeeds doesn't mean that the tree is not corrupt. Certain
  * corruptions in the tree may simply cause undefined behavior.
- */ 
+ */
 
 int dict_verify(dict_t *dict)
 {
@@ -446,7 +446,7 @@
 
 /*
  * Locate a node in the dictionary having the given key.
- * If the node is not found, a null a pointer is returned (rather than 
+ * If the node is not found, a null a pointer is returned (rather than
  * a pointer that dictionary's nil sentinel node), otherwise a pointer to the
  * located node is returned.
  */
@@ -511,9 +511,9 @@
 		tentative = root;
 		root = root->left;
 	    }
-	} 
+	}
     }
-    
+
     return tentative;
 }
 
@@ -543,9 +543,9 @@
 		tentative = root;
 		root = root->right;
 	    }
-	} 
+	}
     }
-    
+
     return tentative;
 }
 #endif
@@ -727,10 +727,10 @@
 
 	child = (delete->left != nil) ? delete->left : delete->right;
 
-	child->parent = delparent = delete->parent;	    
+	child->parent = delparent = delete->parent;
 
 	if (delete == delparent->left) {
-	    delparent->left = child;    
+	    delparent->left = child;
 	} else {
 	    assert (delete == delparent->right);
 	    delparent->right = child;
@@ -1058,7 +1058,7 @@
 {
     dict_t *dict = load->dictptr;
     dnode_t *nil = &load->nilnode;
-   
+
     assert (!dnode_is_in_a_dict(newnode));
     assert (dict->nodecount < dict->maxcount);
 
@@ -1164,7 +1164,7 @@
     dict_load_t load;
     dnode_t *leftnode = dict_first(dest), *rightnode = dict_first(source);
 
-    assert (dict_similar(dest, source));	
+    assert (dict_similar(dest, source));
 
     if (source == dest)
 	return;
@@ -1197,7 +1197,7 @@
 	    leftnode = next;
 	    continue;
 	}
-	
+
     copyright:
 	{
 	    dnode_t *next = dict_next(source, rightnode);
@@ -1226,7 +1226,7 @@
 
 static int tokenize(char *string, ...)
 {
-    char **tokptr; 
+    char **tokptr;
     va_list arglist;
     int tokcount = 0;
 
@@ -1290,7 +1290,7 @@
     dnode_t *dn;
     char *tok1, *tok2, *val;
     const char *key;
-    char *help = 
+    char *help =
 	"p                      turn prompt on\n"
 	"q                      finish construction\n"
 	"a <key> <val>          add new entry\n";
diff --git a/e2fsck/dirinfo.c b/e2fsck/dirinfo.c
index f583c62..901235c 100644
--- a/e2fsck/dirinfo.c
+++ b/e2fsck/dirinfo.c
@@ -293,6 +293,9 @@
 			unlink(ctx->dir_info->tdb_fn);
 			free(ctx->dir_info->tdb_fn);
 		}
+		if (ctx->dir_info->array)
+			ext2fs_free_mem(&ctx->dir_info->array);
+		ctx->dir_info->array = 0;
 		ctx->dir_info->size = 0;
 		ctx->dir_info->count = 0;
 		ext2fs_free_mem(&ctx->dir_info);
@@ -326,8 +329,7 @@
 extern void e2fsck_dir_info_iter_end(e2fsck_t ctx EXT2FS_ATTR((unused)),
 				     struct dir_info_iter *iter)
 {
-	if (iter->tdb_iter.dptr)
-		free(iter->tdb_iter.dptr);
+	free(iter->tdb_iter.dptr);
 	ext2fs_free_mem(&iter);
 }
 
diff --git a/e2fsck/dx_dirinfo.c b/e2fsck/dx_dirinfo.c
index 322f516..5c48d32 100644
--- a/e2fsck/dx_dirinfo.c
+++ b/e2fsck/dx_dirinfo.c
@@ -11,7 +11,7 @@
 /*
  * This subroutine is called during pass1 to create a directory info
  * entry.  During pass1, the passed-in parent is 0; it will get filled
- * in during pass2.  
+ * in during pass2.
  */
 void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks)
 {
@@ -31,7 +31,7 @@
 					       * sizeof (struct dx_dir_info),
 					       "directory map");
 	}
-	
+
 	if (ctx->dx_dir_info_count >= ctx->dx_dir_info_size) {
 		old_size = ctx->dx_dir_info_size * sizeof(struct dx_dir_info);
 		ctx->dx_dir_info_size += 10;
@@ -59,12 +59,12 @@
 			if (ctx->dx_dir_info[i-1].ino < ino)
 				break;
 		dir = &ctx->dx_dir_info[i];
-		if (dir->ino != ino) 
+		if (dir->ino != ino)
 			for (j = ctx->dx_dir_info_count++; j > i; j--)
 				ctx->dx_dir_info[j] = ctx->dx_dir_info[j-1];
 	} else
 		dir = &ctx->dx_dir_info[ctx->dx_dir_info_count++];
-	
+
 	dir->ino = ino;
 	dir->numblocks = num_blocks;
 	dir->hashversion = 0;
@@ -112,10 +112,10 @@
 {
 	int	i;
 	struct dx_dir_info *dir;
-	
+
 	if (ctx->dx_dir_info) {
 		dir = ctx->dx_dir_info;
-		for (i=0; i < ctx->dx_dir_info_count; i++) {
+		for (i=0; i < ctx->dx_dir_info_count; i++,dir++) {
 			if (dir->dx_block) {
 				ext2fs_free_mem(&dir->dx_block);
 				dir->dx_block = 0;
diff --git a/e2fsck/e2fsck.8.in b/e2fsck/e2fsck.8.in
index 6cae577..3fb15e6 100644
--- a/e2fsck/e2fsck.8.in
+++ b/e2fsck/e2fsck.8.in
@@ -4,11 +4,11 @@
 .\" 
 .TH E2FSCK 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-e2fsck \- check a Linux ext2/ext3 file system
+e2fsck \- check a Linux ext2/ext3/ext4 file system
 .SH SYNOPSIS
 .B e2fsck
 [
-.B \-pacnyrdfkvstDFSV
+.B \-pacnyrdfkvtDFV
 ]
 [
 .B \-b
@@ -37,17 +37,13 @@
 .I device
 .SH DESCRIPTION
 .B e2fsck
-is used to check a Linux second extended file system (ext2fs).  
-.B E2fsck
-also 
-supports ext2 filesystems containing a journal, which are
-also sometimes known as ext3 filesystems, by first applying the journal 
-to the filesystem before continuing with normal 
+is used to check the ext2/ext3/ext4 family of file systems.   
+For ext3 and ext4 filesystems that use a journal, if the system has been
+shut down uncleanly without any errors, normally, after replaying the
+committed transactions  in the journal, the file system should be
+marked as clean.   Hence, for filesystems that use journalling,
 .B e2fsck
-processing.  After the journal has been applied, a filesystem will
-normally be marked as clean.  Hence, for ext3 filesystems, 
-.B e2fsck
-will normally run the journal and exit, unless its superblock
+will normally replay the journal and exit, unless its superblock
 indicates that further checking is required.
 .PP
 .I device
@@ -139,6 +135,11 @@
 check can be monitored.  This option is typically used by programs 
 which are running
 .BR e2fsck .
+If the file descriptor number is negative, then absolute value of
+the file descriptor will be used, and the progress information will be
+suppressed initially.  It can later be enabled by sending the
+.B e2fsck
+process a SIGUSR1 signal.
 If the file descriptor specified is 0, 
 .B e2fsck
 will print a completion bar as it goes about its business.  This requires
@@ -180,9 +181,14 @@
 .RS 1.2i
 .TP
 .BI ea_ver= extended_attribute_version
-Assume the format of the extended attribute blocks in the filesystem is
-the specified version number.  The version number may be 1 or 2.  The
-default extended attribute version format is 2.
+Set the version of the extended attribute blocks which
+.B e2fsck
+will require while checking the filesystem.  The version number may 
+be 1 or 2.  The default extended attribute version format is 2.
+.TP
+.BI fragcheck
+During pass 1, print a detailed report of any discontiguous blocks for
+files in the filesystem.
 .RE
 .TP
 .B \-f
@@ -236,16 +242,7 @@
 Open the filesystem read-only, and assume an answer of `no' to all
 questions.  Allows
 .B e2fsck
-to be used non-interactively.  (Note: if the 
-.BR \-c ,
-.BR \-l ,
-or
-.B \-L
-options are specified in addition to the 
-.B \-n
-option, then the filesystem will be opened read-write, to permit the
-bad-blocks list to be updated.  However, no other changes will be made
-to the filesystem.)  This option
+to be used non-interactively.  This option
 may not be specified at the same time as the 
 .B \-p
 or
@@ -253,7 +250,7 @@
 options.
 .TP
 .B \-p
-Automatically repair ("preen") the file system.  This option will case
+Automatically repair ("preen") the file system.  This option will cause
 .B e2fsck
 to automatically
 fix any filesystem problems that can be safely fixed without human
@@ -274,17 +271,6 @@
 .B \-r
 This option does nothing at all; it is provided only for backwards
 compatibility.
-.TP 
-.B \-s
-This option will byte-swap the filesystem so that it is using the normalized, 
-standard byte-order (which is i386 or little endian).  If the filesystem is
-already in the standard byte-order, 
-.B e2fsck 
-will take no action.
-.TP
-.B \-S
-This option will byte-swap the filesystem, regardless of its current 
-byte-order.
 .TP
 .B \-t
 Print timing statistics for
@@ -337,14 +323,15 @@
 .B SIGUSR1
 This signal causes
 .B e2fsck
-to start displaying a completion bar.  (See discussion of the 
+to start displaying a completion bar or emitting progress information.  
+(See discussion of the 
 .B \-C
 option.)
 .TP
 .B SIGUSR2
 This signal causes
 .B e2fsck 
-to stop displaying a completion bar.
+to stop displaying a completion bar or emitting progress information.
 .SH REPORTING BUGS
 Almost any piece of software will have bugs.  If you manage to find a
 filesystem which causes 
@@ -403,6 +390,7 @@
 .B e2fsck
 was written by Theodore Ts'o <tytso@mit.edu>.
 .SH SEE ALSO
+.BR e2fsck.conf (5),
 .BR badblocks (8),
 .BR dumpe2fs (8),
 .BR debugfs (8),
diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c
index e2434da..26f7b5e 100644
--- a/e2fsck/e2fsck.c
+++ b/e2fsck/e2fsck.c
@@ -1,6 +1,6 @@
 /*
  * e2fsck.c - a consistency checker for the new extended file system.
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -15,7 +15,7 @@
 #include "problem.h"
 
 /*
- * This function allocates an e2fsck context 
+ * This function allocates an e2fsck context
  */
 errcode_t e2fsck_allocate_context(e2fsck_t *ret)
 {
@@ -26,13 +26,14 @@
 	retval = ext2fs_get_mem(sizeof(struct e2fsck_struct), &context);
 	if (retval)
 		return retval;
-	
+
 	memset(context, 0, sizeof(struct e2fsck_struct));
 
 	context->process_inode_size = 256;
 	context->ext_attr_ver = 2;
 	context->blocks_per_page = 1;
-	
+	context->htree_slack_percentage = 255;
+
 	time_env = getenv("E2FSCK_TIME");
 	if (time_env)
 		context->now = strtoul(time_env, NULL, 0);
@@ -49,6 +50,8 @@
  */
 errcode_t e2fsck_reset_context(e2fsck_t ctx)
 {
+	int	i;
+
 	ctx->flags = 0;
 	ctx->lost_and_found = 0;
 	ctx->bad_lost_and_found = 0;
@@ -150,11 +153,15 @@
 	ctx->fs_dind_count = 0;
 	ctx->fs_tind_count = 0;
 	ctx->fs_fragmented = 0;
+	ctx->fs_fragmented_dir = 0;
 	ctx->large_files = 0;
 
+	for (i=0; i < MAX_EXTENT_DEPTH_COUNT; i++)
+		ctx->extent_depth_count[i] = 0;
+
 	/* Reset the superblock to the user's requested value */
 	ctx->superblock = ctx->use_superblock;
-	
+
 	return 0;
 }
 
@@ -162,14 +169,20 @@
 {
 	if (!ctx)
 		return;
-	
+
 	e2fsck_reset_context(ctx);
 	if (ctx->blkid)
 		blkid_put_cache(ctx->blkid);
 
 	if (ctx->profile)
 		profile_release(ctx->profile);
-			
+
+	if (ctx->filesystem_name)
+		ext2fs_free_mem(&ctx->filesystem_name);
+
+	if (ctx->device_name)
+		ext2fs_free_mem(&ctx->device_name);
+
 	ext2fs_free_mem(&ctx);
 }
 
@@ -197,7 +210,7 @@
 	}
 	ctx->flags |= E2F_FLAG_SETJMP_OK;
 #endif
-		
+
 	for (i=0; (e2fsck_pass = e2fsck_passes[i]); i++) {
 		if (ctx->flags & E2F_FLAG_RUN_RETURN)
 			break;
@@ -206,7 +219,7 @@
 			(void) (ctx->progress)(ctx, 0, 0, 0);
 	}
 	ctx->flags &= ~E2F_FLAG_SETJMP_OK;
-	
+
 	if (ctx->flags & E2F_FLAG_RUN_RETURN)
 		return (ctx->flags & E2F_FLAG_RUN_RETURN);
 	return 0;
diff --git a/e2fsck/e2fsck.conf.5.in b/e2fsck/e2fsck.conf.5.in
index 9d12171..64aafd7 100644
--- a/e2fsck/e2fsck.conf.5.in
+++ b/e2fsck/e2fsck.conf.5.in
@@ -87,25 +87,63 @@
 as containing errors, e2fsck will exit with an exit status of 0 instead
 of 32.  This setting defaults to false.
 .TP
-.I buggy_init_scripts
-Some buggy distributions (such as Ubuntu) have init scripts and/or
-installers which fail to correctly set the system clock before running
-e2fsck and/or formatting the filesystem initially.  Normally this
-happens because the hardware clock is ticking localtime, instead of the
-more proper and less error-prone UTC time.  So while the kernel is
-booting, the system time (which in Linux systems always ticks in UTC
-time) is set from the hardware clock, but since the hardware clock is
-ticking localtime, the system time is incorrect.  Unfortunately, some
-buggy distributions do not correct this before running e2fsck.  If this
-option is set to a boolean value of true, we attempt to work around this
-situation by allowing the superblock last write time, last mount time,
-and last check time to be in the future by up to 24 hours.
+.I accept_time_fudge
+Unfortunately, due to Windows' unfortunate design decision
+to configure the hardware clock to tick localtime, instead
+of the more proper and less error-prone UTC time, many
+users end up in the situation where the system clock is
+incorrectly set at the time when e2fsck is run.
+.IP
+Historically this was usually due to some distributions
+having buggy init scripts and/or installers that didn't
+correctly detect this case and take appropriate
+countermeasures.  However, it's still possible, despite the
+best efforts of init script and installer authors to not be
+able to detect this misconfiguration, usually due to a
+buggy or misconfigured virtualization manager or the
+installer not having access to a network time server
+during the installation process.  So by default, we allow
+the superblock times to be fudged by up to 24 hours.
+This can be disabled by setting
+.I accept_time_fudge
+to the
+boolean value of false.  This setting defaults to true.
+.TP
+.I broken_system_clock
+The
+.BR e2fsck (8)
+program has some hueristics that assume that the system clock is
+correct.  In addition, many system programs make similar assumptions.
+For example, the UUID library depends on time not going backwards in
+order for it to be able to make its guarantees about issuing universally
+unique ID's.  Systems with broken system clocks, are well, broken.
+However, broken system clocks, particularly in embedded systems, do
+exist.  If true, e2fsck will not abort a preen check if it detects a
+last mounted or last write time in the superblock in the future.  This
+setting defaults to false.
+.TP
+.I clear_test_fs_flag
+This boolean relation controls whether or not 
+.BR e2fsck (8)
+will offer to clear
+the test_fs flag if the ext4 filesystem is available on the system.  It
+defaults to true.
 .TP 
 .I defer_check_on_battery
 This boolean relation controls whether or not the interval between 
 filesystem checks (either based on time or number of mounts) should 
-be doubled if the system is running on battery.  It defaults to 
+be doubled if the system is running on battery.  This setting defaults to 
 true.
+.TP
+.I indexed_dir_slack_percentage
+When
+.BR e2fsck (8)
+repacks a indexed directory, reserve the specified percentage of
+empty space in each leaf nodes so that a few new entries can
+be added to the directory without splitting leaf nodes, so that
+the average fill ratio of directories can be maintained at a
+higher, more efficient level.  This relation defaults to 20
+percent.
 .SH THE [problems] STANZA
 Each tag in the
 .I [problems] 
diff --git a/e2fsck/e2fsck.h b/e2fsck/e2fsck.h
index 5af82d5..e763b89 100644
--- a/e2fsck/e2fsck.h
+++ b/e2fsck/e2fsck.h
@@ -1,9 +1,9 @@
 /*
  * e2fsck.h
- * 
+ *
  * Copyright (C) 1993, 1994 Theodore Ts'o.  This file may be
  * redistributed under the terms of the GNU Public License.
- * 
+ *
  */
 
 #ifndef _E2FSCK_H
@@ -114,9 +114,9 @@
 	blk_t		phys;
 	int		flags;
 	blk_t		parent;
-	ext2_dirhash_t	min_hash; 
+	ext2_dirhash_t	min_hash;
 	ext2_dirhash_t	max_hash;
-	ext2_dirhash_t	node_min_hash; 
+	ext2_dirhash_t	node_min_hash;
 	ext2_dirhash_t	node_max_hash;
 };
 
@@ -135,6 +135,8 @@
 	struct timeval user_start;
 	struct timeval system_start;
 	void	*brk_start;
+	unsigned long long bytes_read;
+	unsigned long long bytes_written;
 };
 #endif
 
@@ -152,6 +154,7 @@
 #define E2F_OPT_FORCE		0x0100
 #define E2F_OPT_WRITECHECK	0x0200
 #define E2F_OPT_COMPRESS_DIRS	0x0400
+#define E2F_OPT_FRAGCHECK	0x0800
 
 /*
  * E2fsck flags
@@ -160,17 +163,19 @@
 #define E2F_FLAG_CANCEL		0x0002 /* Cancel signaled */
 #define E2F_FLAG_SIGNAL_MASK	0x0003
 #define E2F_FLAG_RESTART	0x0004 /* Restart signaled */
+#define E2F_FLAG_RESTART_LATER	0x0008 /* Restart after all iterations done */
 
 #define E2F_FLAG_SETJMP_OK	0x0010 /* Setjmp valid for abort */
 
 #define E2F_FLAG_PROG_BAR	0x0020 /* Progress bar on screen */
 #define E2F_FLAG_PROG_SUPPRESS	0x0040 /* Progress suspended */
 #define E2F_FLAG_JOURNAL_INODE	0x0080 /* Create a new ext3 journal inode */
-#define E2F_FLAG_SB_SPECIFIED	0x0100 /* The superblock was explicitly 
+#define E2F_FLAG_SB_SPECIFIED	0x0100 /* The superblock was explicitly
 					* specified by the user */
 #define E2F_FLAG_RESTARTED	0x0200 /* E2fsck has been restarted */
 #define E2F_FLAG_RESIZE_INODE	0x0400 /* Request to recreate resize inode */
 #define E2F_FLAG_GOT_DEVSIZE	0x0800 /* Device size has been fetched */
+#define E2F_FLAG_EXITING	0x1000 /* E2fsck exiting due to errors */
 
 /*
  * Defines for indicating the e2fsck pass number
@@ -192,6 +197,8 @@
  */
 typedef struct e2fsck_struct *e2fsck_t;
 
+#define MAX_EXTENT_DEPTH_COUNT 5
+
 struct e2fsck_struct {
 	ext2_filsys fs;
 	const char *program_name;
@@ -203,7 +210,7 @@
 	blk_t	use_superblock;	/* sb requested by user */
 	blk_t	superblock;	/* sb used to open fs */
 	int	blocksize;	/* blocksize */
-	blk_t	num_blocks;	/* Total number of blocks */
+	blk64_t	num_blocks;	/* Total number of blocks */
 	int	mount_flags;
 	blkid_cache blkid;	/* blkid cache */
 
@@ -260,7 +267,7 @@
 	 */
 	ext2_ino_t lost_and_found;
 	int bad_lost_and_found;
-	
+
 	/*
 	 * Directory information
 	 */
@@ -283,6 +290,7 @@
 	 */
 	int process_inode_size;
 	int inode_buffer_blocks;
+	unsigned int htree_slack_percentage;
 
 	/*
 	 * ext3 journal support
@@ -306,7 +314,7 @@
 	unsigned int progress_last_time;
 	int interactive;	/* Are we connected directly to a tty? */
 	char start_meta[2], stop_meta[2];
-	
+
 	/* File counts */
 	__u32 fs_directory_count;
 	__u32 fs_regular_count;
@@ -323,9 +331,11 @@
 	__u32 fs_dind_count;
 	__u32 fs_tind_count;
 	__u32 fs_fragmented;
+	__u32 fs_fragmented_dir;
 	__u32 large_files;
 	__u32 fs_ext_attr_inodes;
 	__u32 fs_ext_attr_blocks;
+	__u32 extent_depth_count[MAX_EXTENT_DEPTH_COUNT];
 
 	/* misc fields */
 	time_t now;
@@ -372,21 +382,24 @@
 extern void read_bad_blocks_file(e2fsck_t ctx, const char *bad_blocks_file,
 				 int replace_bad_blocks);
 
+/* crc32.c */
+extern __u32 crc32_be(__u32 crc, unsigned char const *p, size_t len);
+
 /* dirinfo.c */
 extern void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent);
 extern void e2fsck_free_dir_info(e2fsck_t ctx);
 extern int e2fsck_get_num_dirinfo(e2fsck_t ctx);
 extern struct dir_info_iter *e2fsck_dir_info_iter_begin(e2fsck_t ctx);
-extern struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, 
+extern struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx,
 					     struct dir_info_iter *);
 extern void e2fsck_dir_info_iter_end(e2fsck_t ctx, struct dir_info_iter *);
-extern int e2fsck_dir_info_set_parent(e2fsck_t ctx, ext2_ino_t ino, 
+extern int e2fsck_dir_info_set_parent(e2fsck_t ctx, ext2_ino_t ino,
 				      ext2_ino_t parent);
-extern int e2fsck_dir_info_set_dotdot(e2fsck_t ctx, ext2_ino_t ino, 
+extern int e2fsck_dir_info_set_dotdot(e2fsck_t ctx, ext2_ino_t ino,
 				      ext2_ino_t dotdot);
-extern int e2fsck_dir_info_get_parent(e2fsck_t ctx, ext2_ino_t ino, 
+extern int e2fsck_dir_info_get_parent(e2fsck_t ctx, ext2_ino_t ino,
 				      ext2_ino_t *parent);
-extern int e2fsck_dir_info_get_dotdot(e2fsck_t ctx, ext2_ino_t ino, 
+extern int e2fsck_dir_info_get_dotdot(e2fsck_t ctx, ext2_ino_t ino,
 				      ext2_ino_t *dotdot);
 
 /* dx_dirinfo.c */
@@ -422,13 +435,16 @@
 extern int e2fsck_fix_ext3_journal_hint(e2fsck_t ctx);
 
 /* pass1.c */
-extern void e2fsck_setup_tdb_icount(e2fsck_t ctx, int flags, 
+extern void e2fsck_setup_tdb_icount(e2fsck_t ctx, int flags,
 				    ext2_icount_t *ret);
 extern void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool);
 extern int e2fsck_pass1_check_device_inode(ext2_filsys fs,
 					   struct ext2_inode *inode);
-extern int e2fsck_pass1_check_symlink(ext2_filsys fs,
+extern int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
 				      struct ext2_inode *inode, char *buf);
+extern void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
+			       struct ext2_inode *inode, int restart_flag,
+			       const char *source);
 
 /* pass2.c */
 extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
@@ -439,7 +455,7 @@
 extern errcode_t e2fsck_expand_directory(e2fsck_t ctx, ext2_ino_t dir,
 					 int num, int gauranteed_size);
 extern ext2_ino_t e2fsck_get_lost_and_found(e2fsck_t ctx, int fix);
-extern errcode_t e2fsck_adjust_inode_count(e2fsck_t ctx, ext2_ino_t ino, 
+extern errcode_t e2fsck_adjust_inode_count(e2fsck_t ctx, ext2_ino_t ino,
 					   int adj);
 
 
@@ -455,9 +471,7 @@
 /* super.c */
 void check_super_block(e2fsck_t ctx);
 int check_backup_super_block(e2fsck_t ctx);
-
-/* swapfs.c */
-void swap_filesys(e2fsck_t ctx);
+void check_resize_inode(e2fsck_t ctx);
 
 /* util.c */
 extern void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
@@ -469,14 +483,27 @@
 extern void e2fsck_write_bitmaps(e2fsck_t ctx);
 extern void preenhalt(e2fsck_t ctx);
 extern char *string_copy(e2fsck_t ctx, const char *str, int len);
+extern errcode_t e2fsck_zero_blocks(ext2_filsys fs, blk_t blk, int num,
+				    blk_t *ret_blk, int *ret_count);
+extern int fs_proc_check(const char *fs_name);
+extern int check_for_modules(const char *fs_name);
 #ifdef RESOURCE_TRACK
-extern void print_resource_track(const char *desc,
-				 struct resource_track *track);
-extern void init_resource_track(struct resource_track *track);
+extern void print_resource_track(e2fsck_t ctx,
+				 const char *desc,
+				 struct resource_track *track,
+				 io_channel channel);
+extern void init_resource_track(struct resource_track *track,
+				io_channel channel);
+#else
+#define print_resource_track(ctx, desc, track, channel) do { } while (0)
+#define init_resource_track(track, channel) do { } while (0)
 #endif
 extern int inode_has_valid_blocks(struct ext2_inode *inode);
 extern void e2fsck_read_inode(e2fsck_t ctx, unsigned long ino,
 			      struct ext2_inode * inode, const char * proc);
+extern void e2fsck_read_inode_full(e2fsck_t ctx, unsigned long ino,
+				   struct ext2_inode *inode,
+				   const int bufsize, const char *proc);
 extern void e2fsck_write_inode(e2fsck_t ctx, unsigned long ino,
 			       struct ext2_inode * inode, const char * proc);
 extern void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino,
@@ -488,6 +515,7 @@
 extern blk_t get_backup_sb(e2fsck_t ctx, ext2_filsys fs,
 			   const char *name, io_manager manager);
 extern int ext2_file_type(unsigned int mode);
+extern int write_all(int fd, char *buf, size_t count);
 
 /* unix.c */
 extern void e2fsck_clear_progbar(e2fsck_t ctx);
diff --git a/e2fsck/ea_refcount.c b/e2fsck/ea_refcount.c
index 6420c72..39f2db7 100644
--- a/e2fsck/ea_refcount.c
+++ b/e2fsck/ea_refcount.c
@@ -1,6 +1,6 @@
 /*
  * ea_refcount.c
- * 
+ *
  * Copyright (C) 2001 Theodore Ts'o.  This file may be
  * redistributed under the terms of the GNU Public License.
  */
@@ -11,6 +11,9 @@
 #include <string.h>
 #include <stdio.h>
 
+#ifdef TEST_PROGRAM
+#undef ENABLE_NLS
+#endif
 #include "e2fsck.h"
 
 /*
@@ -18,7 +21,7 @@
  * follows.  We keep a sorted array of first EA blocks and its
  * reference counts.  Once the refcount has dropped to zero, it is
  * removed from the array to save memory space.  Once the EA block is
- * checked, its bit is set in the block_ea_map bitmap.  
+ * checked, its bit is set in the block_ea_map bitmap.
  */
 struct ea_refcount_el {
 	blk_t	ea_blk;
@@ -118,7 +121,7 @@
 		new_size = refcount->size + 100;
 #ifdef DEBUG
 		printf("Reallocating refcount %d entries...\n", new_size);
-#endif	
+#endif
 		retval = ext2fs_resize_mem((size_t) refcount->size *
 					   sizeof(struct ea_refcount_el),
 					   (size_t) new_size *
@@ -170,7 +173,7 @@
 	}
 	if (refcount->count == 0)
 		return 0;
-	
+
 	if (refcount->cursor >= refcount->count)
 		refcount->cursor = 0;
 	if (blk == refcount->list[refcount->cursor].ea_blk)
@@ -193,7 +196,7 @@
 				range = 0;
 			else if (blk > highval)
 				range = 1;
-			else 
+			else
 				range = ((float) (blk - lowval)) /
 					(highval - lowval);
 			mid = low + ((int) (range * (high-low)));
@@ -227,7 +230,7 @@
 				int *ret)
 {
 	struct ea_refcount_el	*el;
-	
+
 	el = get_refcount_el(refcount, blk, 0);
 	if (!el) {
 		*ret = 0;
@@ -298,7 +301,7 @@
 				int *ret)
 {
 	struct ea_refcount_el	*list;
-	
+
 	while (1) {
 		if (refcount->cursor >= refcount->count)
 			return 0;
@@ -320,7 +323,7 @@
 	errcode_t	ret = 0;
 	int		i;
 	const char *bad = "bad refcount";
-	
+
 	if (refcount->count > refcount->size) {
 		fprintf(out, "%s: count > size\n", bad);
 		return EXT2_ET_INVALID_ARGUMENT;
@@ -460,7 +463,7 @@
 		case BCODE_LIST:
 			ea_refcount_intr_begin(refcount);
 			while (1) {
-				blk = ea_refcount_intr_next(refcount, 
+				blk = ea_refcount_intr_next(refcount,
 								&arg);
 				if (!blk)
 					break;
@@ -472,7 +475,7 @@
 			refcount_collapse(refcount);
 			break;
 		}
-		
+
 	}
 }
 
diff --git a/e2fsck/ehandler.c b/e2fsck/ehandler.c
index 16d6d4f..f9021f0 100644
--- a/e2fsck/ehandler.c
+++ b/e2fsck/ehandler.c
@@ -1,7 +1,7 @@
 /*
  * ehandler.c --- handle bad block errors which come up during the
  * 	course of an e2fsck session.
- * 
+ *
  * Copyright (C) 1994 Theodore Ts'o.  This file may be redistributed
  * under the terms of the GNU Public License.
  */
@@ -33,7 +33,8 @@
 	e2fsck_t ctx;
 
 	ctx = (e2fsck_t) fs->priv_data;
-
+	if (ctx->flags & E2F_FLAG_EXITING)
+		return 0;
 	/*
 	 * If more than one block was read, try reading each block
 	 * separately.  We could use the actual bytes read to figure
@@ -77,8 +78,10 @@
 	const char	*p;
 	ext2_filsys fs = (ext2_filsys) channel->app_data;
 	e2fsck_t ctx;
-	
+
 	ctx = (e2fsck_t) fs->priv_data;
+	if (ctx->flags & E2F_FLAG_EXITING)
+		return 0;
 
 	/*
 	 * If more than one block was written, try writing each block
@@ -95,7 +98,7 @@
 		}
 		return 0;
 	}
-	
+
 	if (operation)
 		printf(_("Error writing block %lu (%s) while %s.  "), block,
 		       error_message(error), operation);
diff --git a/e2fsck/emptydir.c b/e2fsck/emptydir.c
index 5dbf021..e03db56 100644
--- a/e2fsck/emptydir.c
+++ b/e2fsck/emptydir.c
@@ -1,6 +1,6 @@
 /*
  * emptydir.c --- clear empty directory blocks
- * 
+ *
  * Copyright (C) 1998 Theodore Ts'o
  *
  * %Begin-Header%
@@ -52,7 +52,7 @@
 	retval = ext2fs_init_dblist(ctx->fs, &edi->empty_dblist);
 	if (retval)
 		goto errout;
-	
+
 	retval = ext2fs_allocate_block_bitmap(ctx->fs, _("empty dirblocks"),
 					      &edi->empty_dir_blocks);
 	if (retval)
@@ -122,7 +122,7 @@
 	empty_dir_info edi = (empty_dir_info) priv_data;
 	blk_t	block, new_block;
 	errcode_t	retval;
-	
+
 	if (blockcnt < 0)
 		return 0;
 	block = *block_nr;
@@ -150,7 +150,7 @@
 			 void *priv_data)
 {
 	errcode_t	retval;
-	
+
 	empty_dir_info edi = (empty_dir_info) priv_data;
 
 	edi->logblk = 0;
@@ -168,8 +168,7 @@
 
 	if (edi->freed_blocks) {
 		edi->inode.i_size -= edi->freed_blocks * fs->blocksize;
-		edi->inode.i_blocks -= edi->freed_blocks *
-			(fs->blocksize / 512);
+		ext2fs_iblk_add_blocks(fs, &edi->inode, edi->freed_blocks);
 		retval = ext2fs_write_inode(fs, db->ino, &edi->inode);
 		if (retval)
 			return 0;
diff --git a/e2fsck/extend.c b/e2fsck/extend.c
index 3a92c0e..2a849b2 100644
--- a/e2fsck/extend.c
+++ b/e2fsck/extend.c
@@ -1,7 +1,7 @@
 /*
  * extend.c --- extend a file so that it has at least a specified
  * 	number of blocks.
- * 
+ *
  * Copyright (C) 1993, 1994, 1995 Theodore Ts'o.
  *
  * This file may be redistributed under the terms of the GNU Public
diff --git a/e2fsck/flushb.c b/e2fsck/flushb.c
index c207550..95ca6f8 100644
--- a/e2fsck/flushb.c
+++ b/e2fsck/flushb.c
@@ -2,7 +2,7 @@
  * flushb.c --- This routine flushes the disk buffers for a disk
  *
  * Copyright 1997, 2000, by Theodore Ts'o.
- * 
+ *
  * WARNING: use of flushb on some older 2.2 kernels on a heavily loaded
  * system will corrupt filesystems.  This program is not really useful
  * beyond for benchmarking scripts.
@@ -33,12 +33,12 @@
 {
 	fprintf(stderr, _("Usage: %s disk\n"), progname);
 	exit(1);
-}	
-	
+}
+
 int main(int argc, char **argv)
 {
 	int	fd;
-	
+
 	progname = argv[0];
 	if (argc != 2)
 		usage();
diff --git a/e2fsck/gen_crc32table.c b/e2fsck/gen_crc32table.c
new file mode 100644
index 0000000..2c1aa8e
--- /dev/null
+++ b/e2fsck/gen_crc32table.c
@@ -0,0 +1,101 @@
+/*
+ * gen_crc32table.c --- Generate CRC32 tables.
+ *
+ * Copyright (C) 2008 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include <stdio.h>
+#include "crc32defs.h"
+#include <inttypes.h>
+
+#define ENTRIES_PER_LINE 4
+
+#define LE_TABLE_SIZE (1 << CRC_LE_BITS)
+#define BE_TABLE_SIZE (1 << CRC_BE_BITS)
+
+static uint32_t crc32table_le[LE_TABLE_SIZE];
+static uint32_t crc32table_be[BE_TABLE_SIZE];
+
+/**
+ * crc32init_le() - allocate and initialize LE table data
+ *
+ * crc is the crc of the byte i; other entries are filled in based on the
+ * fact that crctable[i^j] = crctable[i] ^ crctable[j].
+ *
+ */
+static void crc32init_le(void)
+{
+	unsigned i, j;
+	uint32_t crc = 1;
+
+	crc32table_le[0] = 0;
+
+	for (i = 1 << (CRC_LE_BITS - 1); i; i >>= 1) {
+		crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
+		for (j = 0; j < LE_TABLE_SIZE; j += 2 * i)
+			crc32table_le[i + j] = crc ^ crc32table_le[j];
+	}
+}
+
+/**
+ * crc32init_be() - allocate and initialize BE table data
+ */
+static void crc32init_be(void)
+{
+	unsigned i, j;
+	uint32_t crc = 0x80000000;
+
+	crc32table_be[0] = 0;
+
+	for (i = 1; i < BE_TABLE_SIZE; i <<= 1) {
+		crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0);
+		for (j = 0; j < i; j++)
+			crc32table_be[i + j] = crc ^ crc32table_be[j];
+	}
+}
+
+static void output_table(uint32_t table[], int len, const char *trans)
+{
+	int i;
+
+	for (i = 0; i < len - 1; i++) {
+		if (i % ENTRIES_PER_LINE == 0)
+			printf("\n");
+		printf("%s(0x%8.8xL), ", trans, table[i]);
+	}
+	printf("%s(0x%8.8xL)\n", trans, table[len - 1]);
+}
+
+#ifdef __GNUC__
+#define ATTR(x) __attribute__(x)
+#else
+#define ATTR(x)
+#endif
+
+int main(int argc ATTR((unused)), char** argv ATTR((unused)))
+{
+	printf("/* this file is generated - do not edit */\n\n");
+
+	printf("#ifdef UNITTEST\n");
+	if (CRC_LE_BITS > 1) {
+		crc32init_le();
+		printf("static const __u32 crc32table_le[] = {");
+		output_table(crc32table_le, LE_TABLE_SIZE, "tole");
+		printf("};\n");
+	}
+	printf("#endif /* UNITTEST */\n");
+
+	if (CRC_BE_BITS > 1) {
+		crc32init_be();
+		printf("static const __u32 crc32table_be[] = {");
+		output_table(crc32table_be, BE_TABLE_SIZE, "tobe");
+		printf("};\n");
+	}
+
+	return 0;
+}
diff --git a/e2fsck/iscan.c b/e2fsck/iscan.c
index 7e1bbd3..e9fa076 100644
--- a/e2fsck/iscan.c
+++ b/e2fsck/iscan.c
@@ -60,7 +60,7 @@
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	initialize_ext2_error_table();
-	
+
 	if (argc && *argv)
 		program_name = *argv;
 	while ((c = getopt (argc, argv, "FI")) != EOF)
@@ -91,7 +91,7 @@
 		close(fd);
 	}
 }
-					
+
 int main (int argc, char *argv[])
 {
 	errcode_t	retval = 0;
@@ -101,7 +101,7 @@
 	__u32	num_inodes = 0;
 	struct ext2_inode inode;
 	ext2_inode_scan	scan;
-	
+
 	init_resource_track(&global_rtrack);
 
 	PRS(argc, argv);
@@ -115,7 +115,7 @@
 	}
 
 	ehandler_init(fs->io);
-	
+
 	retval = ext2fs_open_inode_scan(fs, inode_buffer_blocks, &scan);
 	if (retval) {
 		com_err(program_name, retval, _("while opening inode scan"));
@@ -133,9 +133,9 @@
 			break;
 		num_inodes++;
 	}
-	
+
 	print_resource_track(NULL, &global_rtrack);
 	printf(_("%u inodes scanned.\n"), num_inodes);
-	
+
 	exit(0);
 }
diff --git a/e2fsck/jfs_user.h b/e2fsck/jfs_user.h
index c38def3..eedf21e 100644
--- a/e2fsck/jfs_user.h
+++ b/e2fsck/jfs_user.h
@@ -15,7 +15,6 @@
 #include "e2fsck.h"
 
 struct buffer_head {
-	char		b_data[8192];
 	e2fsck_t	b_ctx;
 	io_channel 	b_io;
 	int	 	b_size;
@@ -23,6 +22,7 @@
 	int	 	b_dirty;
 	int	 	b_uptodate;
 	int	 	b_err;
+	char		b_data[1024];
 };
 
 struct inode {
@@ -45,12 +45,12 @@
 #define unlock_buffer(bh) do {} while(0)
 #define buffer_req(bh) 1
 #define do_readahead(journal, start) do {} while(0)
-	
+
 extern e2fsck_t e2fsck_global_ctx;  /* Try your very best not to use this! */
 
 typedef struct {
 	int	object_length;
-} kmem_cache_t;
+} lkmem_cache_t;
 
 #define kmem_cache_alloc(cache,flags) malloc((cache)->object_length)
 #define kmem_cache_free(cache,obj) free(obj)
@@ -59,13 +59,27 @@
 #define kmalloc(len,flags) malloc(len)
 #define kfree(p) free(p)
 
+#define cond_resched()	do { } while (0)
+
+#ifndef __BIONIC__
+typedef unsigned int __be32;
+#endif
+
+#define __init
+
+/*
+ * Now pull in the real linux/jfs.h definitions.
+ */
+#include <ext2fs/kernel-jbd.h>
+
 /*
  * We use the standard libext2fs portability tricks for inline
- * functions.  
+ * functions.
  */
-extern kmem_cache_t * do_cache_create(int len);
-extern void do_cache_destroy(kmem_cache_t *cache);
-	
+extern lkmem_cache_t * do_cache_create(int len);
+extern void do_cache_destroy(lkmem_cache_t *cache);
+extern size_t journal_tag_bytes(journal_t *journal);
+
 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 #ifdef E2FSCK_INCLUDE_INLINE_FUNCS
 #define _INLINE_ extern
@@ -77,28 +91,33 @@
 #endif
 #endif
 
-_INLINE_ kmem_cache_t * do_cache_create(int len)
+_INLINE_ lkmem_cache_t * do_cache_create(int len)
 {
-	kmem_cache_t *new_cache;
+	lkmem_cache_t *new_cache;
 	new_cache = malloc(sizeof(*new_cache));
 	if (new_cache)
 		new_cache->object_length = len;
 	return new_cache;
 }
 
-_INLINE_ void do_cache_destroy(kmem_cache_t *cache)
+_INLINE_ void do_cache_destroy(lkmem_cache_t *cache)
 {
 	free(cache);
 }
-#undef _INLINE_
-#endif
-
-#define __init
 
 /*
- * Now pull in the real linux/jfs.h definitions.
+ * helper functions to deal with 32 or 64bit block numbers.
  */
-#include <ext2fs/kernel-jbd.h>
+_INLINE_ size_t journal_tag_bytes(journal_t *journal)
+{
+	if (JFS_HAS_INCOMPAT_FEATURE(journal, JFS_FEATURE_INCOMPAT_64BIT))
+		return JBD_TAG_SIZE64;
+	else
+		return JBD_TAG_SIZE32;
+}
+
+#undef _INLINE_
+#endif
 
 /*
  * Kernel compatibility functions are defined in journal.c
diff --git a/e2fsck/journal.c b/e2fsck/journal.c
index dbe1bf1..155857d 100644
--- a/e2fsck/journal.c
+++ b/e2fsck/journal.c
@@ -58,7 +58,7 @@
 		return 0;
 	}
 
-	retval= ext2fs_bmap(inode->i_ctx->fs, inode->i_ino, 
+	retval= ext2fs_bmap(inode->i_ctx->fs, inode->i_ino,
 			    &inode->i_ext2, NULL, 0, block, &pblk);
 	*phys = pblk;
 	return (retval);
@@ -68,18 +68,24 @@
 struct buffer_head *getblk(kdev_t kdev, blk_t blocknr, int blocksize)
 {
 	struct buffer_head *bh;
+	int bufsize = sizeof(*bh) + kdev->k_ctx->fs->blocksize -
+		sizeof(bh->b_data);
 
-	bh = e2fsck_allocate_memory(kdev->k_ctx, sizeof(*bh), "block buffer");
+	bh = e2fsck_allocate_memory(kdev->k_ctx, bufsize, "block buffer");
 	if (!bh)
 		return NULL;
 
+#ifdef CONFIG_JBD_DEBUG
+	if (journal_enable_debug >= 3)
+		bh_count++;
+#endif
 	jfs_debug(4, "getblk for block %lu (%d bytes)(total %d)\n",
-		  (unsigned long) blocknr, blocksize, ++bh_count);
+		  (unsigned long) blocknr, blocksize, bh_count);
 
 	bh->b_ctx = kdev->k_ctx;
 	if (kdev->k_dev == K_DEV_FS)
 		bh->b_io = kdev->k_ctx->fs->io;
-	else 
+	else
 		bh->b_io = kdev->k_ctx->journal_io;
 	bh->b_size = blocksize;
 	bh->b_blocknr = blocknr;
@@ -93,7 +99,7 @@
 
 	if (kdev->k_dev == K_DEV_FS)
 		io = kdev->k_ctx->fs->io;
-	else 
+	else
 		io = kdev->k_ctx->journal_io;
 
 	io_channel_flush(io);
@@ -107,28 +113,28 @@
 	for (; nr > 0; --nr) {
 		bh = *bhp++;
 		if (rw == READ && !bh->b_uptodate) {
-			jfs_debug(3, "reading block %lu/%p\n", 
+			jfs_debug(3, "reading block %lu/%p\n",
 				  (unsigned long) bh->b_blocknr, (void *) bh);
-			retval = io_channel_read_blk(bh->b_io, 
+			retval = io_channel_read_blk(bh->b_io,
 						     bh->b_blocknr,
 						     1, bh->b_data);
 			if (retval) {
 				com_err(bh->b_ctx->device_name, retval,
-					"while reading block %lu\n", 
+					"while reading block %lu\n",
 					(unsigned long) bh->b_blocknr);
 				bh->b_err = retval;
 				continue;
 			}
 			bh->b_uptodate = 1;
 		} else if (rw == WRITE && bh->b_dirty) {
-			jfs_debug(3, "writing block %lu/%p\n", 
+			jfs_debug(3, "writing block %lu/%p\n",
 				  (unsigned long) bh->b_blocknr, (void *) bh);
-			retval = io_channel_write_blk(bh->b_io, 
+			retval = io_channel_write_blk(bh->b_io,
 						      bh->b_blocknr,
 						      1, bh->b_data);
 			if (retval) {
 				com_err(bh->b_ctx->device_name, retval,
-					"while writing block %lu\n", 
+					"while writing block %lu\n",
 					(unsigned long) bh->b_blocknr);
 				bh->b_err = retval;
 				continue;
@@ -137,7 +143,7 @@
 			bh->b_uptodate = 1;
 		} else {
 			jfs_debug(3, "no-op %s for block %lu\n",
-				  rw == READ ? "read" : "write", 
+				  rw == READ ? "read" : "write",
 				  (unsigned long) bh->b_blocknr);
 		}
 	}
@@ -280,7 +286,7 @@
 			    tried_backup_jnl)
 				goto errout;
 			memset(&j_inode->i_ext2, 0, sizeof(struct ext2_inode));
-			memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks, 
+			memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks,
 			       EXT2_N_BLOCKS*4);
 			j_inode->i_ext2.i_size = sb->s_jnl_blocks[16];
 			j_inode->i_ext2.i_links_count = 1;
@@ -302,9 +308,9 @@
 		}
 		pb.last_block = -1;
 		retval = ext2fs_block_iterate2(ctx->fs, j_inode->i_ino,
-					       BLOCK_FLAG_HOLE, 0, 
+					       BLOCK_FLAG_HOLE, 0,
 					       process_journal_block, &pb);
-		if ((pb.last_block+1) * ctx->fs->blocksize < 
+		if ((pb.last_block+1) * ctx->fs->blocksize <
 		    j_inode->i_ext2.i_size) {
 			retval = EXT2_ET_JOURNAL_TOO_SMALL;
 			goto try_backup_journal;
@@ -385,8 +391,8 @@
 		memcpy(&jsuper, start ? bh->b_data :  bh->b_data + 1024,
 		       sizeof(jsuper));
 		brelse(bh);
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if (jsuper.s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC)) 
+#ifdef WORDS_BIGENDIAN
+		if (jsuper.s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC))
 			ext2fs_swap_super(&jsuper);
 #endif
 		if (jsuper.s_magic != EXT2_SUPER_MAGIC ||
@@ -516,7 +522,7 @@
 		    jsb->s_nr_users)
 			clear_v2_journal_fields(journal);
 		break;
-		
+
 	case JFS_SUPERBLOCK_V2:
 		journal->j_format_version = 2;
 		if (ntohl(jsb->s_nr_users) > 1 &&
@@ -536,7 +542,7 @@
 	case JFS_COMMIT_BLOCK:
 	case JFS_REVOKE_BLOCK:
 		return EXT2_ET_CORRUPT_SUPERBLOCK;
-		
+
 	/* If we don't understand the superblock major type, but there
 	 * is a magic number, then it is likely to be a new format we
 	 * just don't understand, so leave it alone. */
@@ -546,7 +552,7 @@
 
 	if (JFS_HAS_INCOMPAT_FEATURE(journal, ~JFS_KNOWN_INCOMPAT_FEATURES))
 		return EXT2_ET_UNSUPP_FEATURE;
-	
+
 	if (JFS_HAS_RO_COMPAT_FEATURE(journal, ~JFS_KNOWN_ROCOMPAT_FEATURES))
 		return EXT2_ET_RO_UNSUPP_FEATURE;
 
@@ -592,7 +598,7 @@
 	/* Leave a valid existing V1 superblock signature alone.
 	 * Anything unrecognisable we overwrite with a new V2
 	 * signature. */
-	
+
 	if (jsb->s_header.h_magic != htonl(JFS_MAGIC_NUMBER) ||
 	    jsb->s_header.h_blocktype != htonl(JFS_SUPERBLOCK_V1)) {
 		jsb->s_header.h_magic = htonl(JFS_MAGIC_NUMBER);
@@ -600,7 +606,7 @@
 	}
 
 	/* Zero out everything else beyond the superblock header */
-	
+
 	p = ((char *) jsb) + sizeof(journal_header_t);
 	memset (p, 0, ctx->fs->blocksize-sizeof(journal_header_t));
 
@@ -666,7 +672,7 @@
 			io_channel_close(ctx->journal_io);
 		ctx->journal_io = 0;
 	}
-	
+
 #ifndef USE_INODE_IO
 	if (journal->j_inode)
 		ext2fs_free_mem(&journal->j_inode);
@@ -784,7 +790,7 @@
 		 * ignore the fact that journal apparently has data;
 		 * accidentally replaying over valid data would be far
 		 * worse than skipping a questionable recovery.
-		 * 
+		 *
 		 * XXX should we abort with a fatal error here?  What
 		 * will the ext3 kernel code do if a filesystem with
 		 * !NEEDS_RECOVERY but with a non-zero
@@ -798,9 +804,12 @@
 
 static errcode_t recover_ext3_journal(e2fsck_t ctx)
 {
+	struct problem_context	pctx;
 	journal_t *journal;
 	int retval;
 
+	clear_problem_context(&pctx);
+
 	journal_init_revoke_caches();
 	retval = e2fsck_get_journal(ctx, &journal);
 	if (retval)
@@ -813,18 +822,26 @@
 	retval = journal_init_revoke(journal, 1024);
 	if (retval)
 		goto errout;
-	
+
 	retval = -journal_recover(journal);
 	if (retval)
 		goto errout;
-	
+
+	if (journal->j_failed_commit) {
+		pctx.ino = journal->j_failed_commit;
+		fix_problem(ctx, PR_0_JNL_TXN_CORRUPT, &pctx);
+		ctx->fs->super->s_state |= EXT2_ERROR_FS;
+		ext2fs_mark_super_dirty(ctx->fs);
+	}
+
+
 	if (journal->j_superblock->s_errno) {
 		ctx->fs->super->s_state |= EXT2_ERROR_FS;
 		ext2fs_mark_super_dirty(ctx->fs);
 		journal->j_superblock->s_errno = 0;
 		mark_buffer_dirty(journal->j_sb_buffer);
 	}
-		
+
 errout:
 	journal_destroy_revoke(journal);
 	journal_destroy_revoke_caches();
@@ -837,6 +854,8 @@
 	io_manager io_ptr = ctx->fs->io->manager;
 	int blocksize = ctx->fs->blocksize;
 	errcode_t	retval, recover_retval;
+	io_stats	stats = 0;
+	unsigned long long kbytes_written = 0;
 
 	printf(_("%s: recovering journal\n"), ctx->device_name);
 	if (ctx->options & E2F_OPT_READONLY) {
@@ -849,16 +868,20 @@
 		ext2fs_flush(ctx->fs);	/* Force out any modifications */
 
 	recover_retval = recover_ext3_journal(ctx);
-	
+
 	/*
 	 * Reload the filesystem context to get up-to-date data from disk
 	 * because journal recovery will change the filesystem under us.
 	 */
-	ext2fs_close(ctx->fs);
+	if (ctx->fs->super->s_kbytes_written &&
+	    ctx->fs->io->manager->get_stats)
+		ctx->fs->io->manager->get_stats(ctx->fs->io, &stats);
+	if (stats && stats->bytes_written)
+		kbytes_written = stats->bytes_written >> 10;
+	ext2fs_free(ctx->fs);
 	retval = ext2fs_open(ctx->filesystem_name, EXT2_FLAG_RW,
 			     ctx->superblock, blocksize, io_ptr,
 			     &ctx->fs);
-
 	if (retval) {
 		com_err(ctx->program_name, retval,
 			_("while trying to re-open %s"),
@@ -868,6 +891,7 @@
 	ctx->fs->priv_data = ctx;
 	ctx->fs->now = ctx->now;
 	ctx->fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
+	ctx->fs->super->s_kbytes_written += kbytes_written;
 
 	/* Set the superblock flags */
 	e2fsck_clear_recover(ctx, recover_retval);
@@ -891,7 +915,7 @@
 	errcode_t		retval;
 	const char * const *	cpp;
 	int			group, mount_flags;
-	
+
 	clear_problem_context(&pctx);
 
 	/*
@@ -930,7 +954,7 @@
 	 */
 	if (sb->s_journal_inum == EXT2_JOURNAL_INO)
 		return;
-	
+
 	/*
 	 * The journal inode had better have only one link and not be readable.
 	 */
@@ -966,7 +990,7 @@
 	pctx.str = *cpp;
 	if (!fix_problem(ctx, PR_0_MOVE_JOURNAL, &pctx))
 		return;
-		
+
 	/*
 	 * OK, we've done all the checks, let's actually move the
 	 * journal inode.  Errors at this point mean we need to force
@@ -988,6 +1012,7 @@
 	ext2fs_unmark_inode_bitmap(fs->inode_map, ino);
 	ext2fs_mark_ib_dirty(fs);
 	fs->group_desc[group].bg_free_inodes_count++;
+	ext2fs_group_desc_csum_set(fs, group);
 	fs->super->s_free_inodes_count++;
 	return;
 
diff --git a/e2fsck/message.c b/e2fsck/message.c
index b2e3e0f..9aaedc5 100644
--- a/e2fsck/message.c
+++ b/e2fsck/message.c
@@ -14,7 +14,7 @@
  * The following % expansions are supported:
  *
  * 	%b	<blk>			block number
- * 	%B	<blkcount>		integer
+ * 	%B	<blkcount>		interpret blkcount as blkcount
  * 	%c	<blk2>			block number
  * 	%Di	<dirent>->ino		inode number
  * 	%Dn	<dirent>->name		string
@@ -46,6 +46,7 @@
  * 	%q	ext2fs_get_pathname of directory <dir>
  * 	%Q	ext2fs_get_pathname of directory <ino> with <dir> as
  * 			the containing directory.
+ * 	%r	<blkcount>		interpret blkcount as refcount
  * 	%s	<str>			miscellaneous string
  * 	%S	backup superblock
  * 	%X	<num> hexadecimal format
@@ -76,10 +77,11 @@
  * 	@o	orphaned
  * 	@p	problem in
  * 	@r	root inode
- * 	@s	should be 
+ * 	@s	should be
  * 	@S	superblock
  * 	@u	unattached
  * 	@v	device
+ *	@x	extent
  * 	@z	zero-length
  */
 
@@ -134,6 +136,7 @@
 	N_("Ssuper@b"),
 	N_("uunattached"),
 	N_("vdevice"),
+	N_("xextent"),
 	N_("zzero-length"),
 	"@@",
 	0
@@ -197,7 +200,7 @@
 		fputs(_(special_inode_name[ino]), stdout);
 		return;
 	}
-	
+
 	retval = ext2fs_get_pathname(fs, dir, ino, &path);
 	if (retval)
 		fputs("???", stdout);
@@ -207,17 +210,35 @@
 	}
 }
 
+static void print_time(time_t t)
+{
+	const char *		time_str;
+	static int		do_gmt = -1;
+
+#ifdef __dietlibc__
+		/* The diet libc doesn't respect the TZ environemnt variable */
+		if (do_gmt == -1) {
+			time_str = getenv("TZ");
+			if (!time_str)
+				time_str = "";
+			do_gmt = !strcmp(time_str, "GMT0");
+		}
+#endif
+		time_str = asctime((do_gmt > 0) ? gmtime(&t) : localtime(&t));
+		printf("%.24s", time_str);
+}
+
 /*
  * This function handles the '@' expansion.  We allow recursive
  * expansion; an @ expression can contain further '@' and '%'
- * expressions. 
+ * expressions.
  */
 static _INLINE_ void expand_at_expression(e2fsck_t ctx, char ch,
 					  struct problem_context *pctx,
 					  int *first, int recurse)
 {
 	const char **cpp, *str;
-	
+
 	/* Search for the abbreviation */
 	for (cpp = abbrevs; *cpp; cpp++) {
 		if (ch == *cpp[0])
@@ -237,18 +258,16 @@
 /*
  * This function expands '%IX' expressions
  */
-static _INLINE_ void expand_inode_expression(char ch, 
+static _INLINE_ void expand_inode_expression(ext2_filsys fs, char ch,
 					     struct problem_context *ctx)
 {
 	struct ext2_inode	*inode;
 	struct ext2_inode_large	*large_inode;
-	const char *		time_str;
 	time_t			t;
-	int			do_gmt = -1;
 
 	if (!ctx || !ctx->inode)
 		goto no_inode;
-	
+
 	inode = ctx->inode;
 	large_inode = (struct ext2_inode_large *) inode;
 
@@ -273,7 +292,13 @@
 		printf("%u", large_inode->i_extra_isize);
 		break;
 	case 'b':
-		printf("%u", inode->i_blocks);
+		if (fs->super->s_feature_ro_compat &
+		    EXT4_FEATURE_RO_COMPAT_HUGE_FILE) 
+			printf("%llu", inode->i_blocks +
+			       (((long long) inode->osd2.linux2.l_i_blocks_hi)
+				<< 32));
+		else
+			printf("%u", inode->i_blocks);
 		break;
 	case 'l':
 		printf("%d", inode->i_links_count);
@@ -282,16 +307,7 @@
 		printf("0%o", inode->i_mode);
 		break;
 	case 'M':
-		/* The diet libc doesn't respect the TZ environemnt variable */
-		if (do_gmt == -1) {
-			time_str = getenv("TZ");
-			if (!time_str)
-				time_str = "";
-			do_gmt = !strcmp(time_str, "GMT");
-		}
-		t = inode->i_mtime;
-		time_str = asctime(do_gmt ? gmtime(&t) : localtime(&t));
-		printf("%.24s", time_str);
+		print_time(inode->i_mtime);
 		break;
 	case 'F':
 		printf("%u", inode->i_faddr);
@@ -310,17 +326,17 @@
 		printf("%d", inode_gid(*inode));
 		break;
 	case 't':
-		if (LINUX_S_ISREG(inode->i_mode)) 
+		if (LINUX_S_ISREG(inode->i_mode))
 			printf(_("regular file"));
-		else if (LINUX_S_ISDIR(inode->i_mode)) 
+		else if (LINUX_S_ISDIR(inode->i_mode))
 			printf(_("directory"));
-		else if (LINUX_S_ISCHR(inode->i_mode)) 
+		else if (LINUX_S_ISCHR(inode->i_mode))
 			printf(_("character device"));
-		else if (LINUX_S_ISBLK(inode->i_mode)) 
+		else if (LINUX_S_ISBLK(inode->i_mode))
 			printf(_("block device"));
-		else if (LINUX_S_ISFIFO(inode->i_mode)) 
+		else if (LINUX_S_ISFIFO(inode->i_mode))
 			printf(_("named pipe"));
-		else if (LINUX_S_ISLNK(inode->i_mode)) 
+		else if (LINUX_S_ISLNK(inode->i_mode))
 			printf(_("symbolic link"));
 		else if (LINUX_S_ISSOCK(inode->i_mode))
 			printf(_("socket"));
@@ -338,17 +354,18 @@
 /*
  * This function expands '%dX' expressions
  */
-static _INLINE_ void expand_dirent_expression(char ch,
+static _INLINE_ void expand_dirent_expression(ext2_filsys fs, char ch,
 					      struct problem_context *ctx)
 {
 	struct ext2_dir_entry	*dirent;
+	unsigned int rec_len;
 	int	len;
-	
+
 	if (!ctx || !ctx->dirent)
 		goto no_dirent;
-	
+
 	dirent = ctx->dirent;
-	
+
 	switch (ch) {
 	case 'i':
 		printf("%u", dirent->inode);
@@ -357,12 +374,14 @@
 		len = dirent->name_len & 0xFF;
 		if (len > EXT2_NAME_LEN)
 			len = EXT2_NAME_LEN;
-		if (len > dirent->rec_len)
-			len = dirent->rec_len;
+		if ((ext2fs_get_rec_len(fs, dirent, &rec_len) == 0) &&
+		    (len > rec_len))
+			len = rec_len;
 		safe_print(dirent->name, len);
 		break;
 	case 'r':
-		printf("%u", dirent->rec_len);
+		(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+		printf("%u", rec_len);
 		break;
 	case 'l':
 		printf("%u", dirent->name_len & 0xFF);
@@ -378,27 +397,54 @@
 }
 
 static _INLINE_ void expand_percent_expression(ext2_filsys fs, char ch,
+					       int *first,
 					       struct problem_context *ctx)
 {
+	e2fsck_t e2fsck_ctx = fs ? (e2fsck_t) fs->priv_data : NULL;
+	const char *m;
+
 	if (!ctx)
 		goto no_context;
-	
+
 	switch (ch) {
 	case '%':
 		fputc('%', stdout);
 		break;
 	case 'b':
-		printf("%u", ctx->blk);
-		break;
-	case 'B':
 #ifdef EXT2_NO_64_TYPE
-		printf("%d", ctx->blkcount);
+		printf("%u", (unsigned long) ctx->blk);
 #else
-		printf("%lld", (long long)ctx->blkcount);
+		printf("%llu", (unsigned long long) ctx->blk);
 #endif
 		break;
+	case 'B':
+		if (ctx->blkcount == BLOCK_COUNT_IND)
+			m = _("indirect block");
+		else if (ctx->blkcount == BLOCK_COUNT_DIND)
+			m = _("double indirect block");
+		else if (ctx->blkcount == BLOCK_COUNT_TIND)
+			m = _("triple indirect block");
+		else if (ctx->blkcount == BLOCK_COUNT_TRANSLATOR)
+			m = _("translator block");
+		else
+			m = _("block #");
+		if (*first && islower(m[0]))
+			fputc(toupper(*m++), stdout);
+		fputs(m, stdout);
+		if (ctx->blkcount >= 0) {
+#ifdef EXT2_NO_64_TYPE
+			printf("%d", ctx->blkcount);
+#else
+			printf("%lld", (long long) ctx->blkcount);
+#endif
+		}
+		break;
 	case 'c':
-		printf("%u", ctx->blk2);
+#ifdef EXT2_NO_64_TYPE
+		printf("%u", (unsigned long) ctx->blk2);
+#else
+		printf("%llu", (unsigned long long) ctx->blk2);
+#endif
 		break;
 	case 'd':
 		printf("%u", ctx->dir);
@@ -435,12 +481,25 @@
 	case 'Q':
 		print_pathname(fs, ctx->dir, ctx->ino);
 		break;
+	case 'r':
+#ifdef EXT2_NO_64_TYPE
+		printf("%d", ctx->blkcount);
+#else
+		printf("%lld", (long long) ctx->blkcount);
+#endif
+		break;
 	case 'S':
 		printf("%u", get_backup_sb(NULL, fs, NULL, NULL));
 		break;
 	case 's':
 		printf("%s", ctx->str ? ctx->str : "NULL");
 		break;
+	case 't':
+		print_time((time_t) ctx->num);
+		break;
+	case 'T':
+		print_time(e2fsck_ctx ? e2fsck_ctx->now : time(0));
+		break;
 	case 'X':
 #ifdef EXT2_NO_64_TYPE
 		printf("0x%x", ctx->num);
@@ -453,7 +512,7 @@
 		printf("%%%c", ch);
 		break;
 	}
-}	
+}
 
 void print_e2fsck_message(e2fsck_t ctx, const char *msg,
 			  struct problem_context *pctx, int first,
@@ -470,13 +529,13 @@
 			expand_at_expression(ctx, *cp, pctx, &first, recurse);
 		} else if (cp[0] == '%' && cp[1] == 'I') {
 			cp += 2;
-			expand_inode_expression(*cp, pctx);
+			expand_inode_expression(fs, *cp, pctx);
 		} else if (cp[0] == '%' && cp[1] == 'D') {
 			cp += 2;
-			expand_dirent_expression(*cp, pctx);
+			expand_dirent_expression(fs, *cp, pctx);
 		} else if ((cp[0] == '%')) {
 			cp++;
-			expand_percent_expression(fs, *cp, pctx);
+			expand_percent_expression(fs, *cp, &first, pctx);
 		} else {
 			for (i=0; cp[i]; i++)
 				if ((cp[i] == '@') || cp[i] == '%')
diff --git a/e2fsck/mtrace.c b/e2fsck/mtrace.c
index 0e03247..f34f19a 100644
--- a/e2fsck/mtrace.c
+++ b/e2fsck/mtrace.c
@@ -47,7 +47,7 @@
 static __ptr_t (*tr_old_realloc_hook) __P ((__ptr_t ptr, size_t size));
 
 /*
- * Added by TYT, 10/10/93 --- so that we can print 
+ * Added by TYT, 10/10/93 --- so that we can print
  */
 FILE *malloc_get_mallstream()
 {
diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
index 839f099..c39d837 100644
--- a/e2fsck/pass1.c
+++ b/e2fsck/pass1.c
@@ -1,13 +1,13 @@
 /*
  * pass1.c -- pass #1 of e2fsck: sequential scan of the inode table
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Pass 1 of e2fsck iterates over all the inodes in the filesystems,
  * and applies the following tests to each inode:
  *
@@ -56,7 +56,7 @@
 #endif
 
 static int process_block(ext2_filsys fs, blk_t	*blocknr,
-			 e2_blkcnt_t blockcnt, blk_t ref_blk, 
+			 e2_blkcnt_t blockcnt, blk_t ref_blk,
 			 int ref_offset, void *priv_data);
 static int process_bad_block(ext2_filsys fs, blk_t *block_nr,
 			     e2_blkcnt_t blockcnt, blk_t ref_blk,
@@ -72,7 +72,7 @@
 static EXT2_QSORT_TYPE process_inode_cmp(const void *a, const void *b);
 static errcode_t scan_callback(ext2_filsys fs, ext2_inode_scan scan,
 				  dgrp_t group, void * priv_data);
-static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount, 
+static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount,
 				    char *block_buf, int adjust_sign);
 /* static char *describe_illegal_block(ext2_filsys fs, blk_t block); */
 
@@ -83,6 +83,7 @@
 	blk_t		num_blocks;
 	blk_t		max_blocks;
 	e2_blkcnt_t	last_block;
+	e2_blkcnt_t	last_db_block;
 	int		num_illegal_blocks;
 	blk_t		previous_block;
 	struct ext2_inode *inode;
@@ -126,9 +127,9 @@
  *
  * Note: this routine is now also used to check FIFO's and Sockets,
  * since they have the same requirement; the i_block fields should be
- * zero. 
+ * zero.
  */
-int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)), 
+int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
 				    struct ext2_inode *inode)
 {
 	int	i;
@@ -152,7 +153,7 @@
 	 * the kernel has been fixed we can change this...
 	 */
 	if (inode->i_flags & (EXT2_IMMUTABLE_FL | EXT2_APPEND_FL)) {
-		for (i=4; i < EXT2_N_BLOCKS; i++) 
+		for (i=4; i < EXT2_N_BLOCKS; i++)
 			if (inode->i_block[i])
 				return 0;
 	}
@@ -163,17 +164,42 @@
  * Check to make sure a symlink inode is real.  Returns 1 if the symlink
  * checks out, 0 if not.
  */
-int e2fsck_pass1_check_symlink(ext2_filsys fs, struct ext2_inode *inode,
-			       char *buf)
+int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
+			       struct ext2_inode *inode, char *buf)
 {
 	unsigned int len;
 	int i;
 	blk_t	blocks;
+	ext2_extent_handle_t	handle;
+	struct ext2_extent_info	info;
+	struct ext2fs_extent	extent;
 
 	if ((inode->i_size_high || inode->i_size == 0) ||
 	    (inode->i_flags & EXT2_INDEX_FL))
 		return 0;
 
+	if (inode->i_flags & EXT4_EXTENTS_FL) {
+		if (inode->i_size > fs->blocksize)
+			return 0;
+		if (ext2fs_extent_open2(fs, ino, inode, &handle))
+			return 0;
+		i = 0;
+		if (ext2fs_extent_get_info(handle, &info) ||
+		    (info.num_entries != 1) ||
+		    (info.max_depth != 0))
+			goto exit_extent;
+		if (ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent) ||
+		    (extent.e_lblk != 0) ||
+		    (extent.e_len != 1) ||
+		    (extent.e_pblk < fs->super->s_first_data_block) ||
+		    (extent.e_pblk >= fs->super->s_blocks_count))
+			goto exit_extent;
+		i = 1;
+	exit_extent:
+		ext2fs_extent_free(handle);
+		return i;
+	}
+
 	blocks = ext2fs_inode_data_blocks(fs, inode);
 	if (blocks) {
 		if ((inode->i_size >= fs->blocksize) ||
@@ -229,18 +255,18 @@
 static void check_size(e2fsck_t ctx, struct problem_context *pctx)
 {
 	struct ext2_inode *inode = pctx->inode;
-	
+
 	if ((inode->i_size == 0) && (inode->i_size_high == 0))
 		return;
-	
+
 	if (!fix_problem(ctx, PR_1_SET_NONZSIZE, pctx))
 		return;
-	
+
 	inode->i_size = 0;
 	inode->i_size_high = 0;
 	e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
 }
-	
+
 static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
 {
 	struct ext2_super_block *sb = ctx->fs->super;
@@ -261,13 +287,14 @@
 	/* scan all entry's headers first */
 
 	/* take finish entry 0UL into account */
-	remain = storage_size - sizeof(__u32); 
+	remain = storage_size - sizeof(__u32);
 
 	while (!EXT2_EXT_IS_LAST_ENTRY(entry)) {
+		__u32 hash;
 
 		/* header eats this space */
 		remain -= sizeof(struct ext2_ext_attr_entry);
-		
+
 		/* is attribute name valid? */
 		if (EXT2_EXT_ATTR_SIZE(entry->e_name_len) > remain) {
 			pctx->num = entry->e_name_len;
@@ -291,9 +318,12 @@
 			problem = PR_1_ATTR_VALUE_BLOCK;
 			goto fix;
 		}
-		
-		/* e_hash must be 0 in inode's ea */
-		if (entry->e_hash != 0) {
+
+		hash = ext2fs_ext_attr_hash_entry(entry,
+						  start + entry->e_value_offs);
+
+		/* e_hash may be 0 in older inode's ea */
+		if (entry->e_hash != 0 && entry->e_hash != hash) {
 			pctx->num = entry->e_hash;
 			problem = PR_1_ATTR_HASH;
 			goto fix;
@@ -308,15 +338,12 @@
 	 * it seems like a corruption. it's very unlikely we could repair
 	 * EA(s) in automatic fashion -bzzz
 	 */
-#if 0
-	problem = PR_1_ATTR_HASH;
-#endif
 	if (problem == 0 || !fix_problem(ctx, problem, pctx))
 		return;
 
-	/* simple remove all possible EA(s) */
+	/* simply remove all possible EA(s) */
 	*((__u32 *)start) = 0UL;
-	e2fsck_write_inode_full(ctx, pctx->ino, (struct ext2_inode *) inode,
+	e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
 				EXT2_INODE_SIZE(sb), "pass1");
 }
 
@@ -336,11 +363,11 @@
 #if 0
 	printf("inode #%u, i_extra_size %d\n", pctx->ino,
 			inode->i_extra_isize);
-#endif	
+#endif
 	/* i_extra_isize must cover i_extra_isize + i_pad1 at least */
 	min = sizeof(inode->i_extra_isize) + sizeof(inode->i_pad1);
 	max = EXT2_INODE_SIZE(sb) - EXT2_GOOD_OLD_INODE_SIZE;
-	/* 
+	/*
 	 * For now we will allow i_extra_isize to be 0, but really
 	 * implementations should never allow i_extra_isize to be 0
 	 */
@@ -362,7 +389,7 @@
 	}
 }
 
-/* 
+/*
  * Check to see if the inode might really be a directory, despite i_mode
  *
  * This is a lot of complexity for something for which I'm not really
@@ -378,61 +405,111 @@
 	const char		*old_op;
 	errcode_t		retval;
 	blk_t			blk;
-	int			i, not_device = 0;
+	blk64_t			first_dir_blk;
+	unsigned int		i, rec_len, not_device = 0;
+	int			extent_fs;
 
+	/*
+	 * If the mode looks OK, we believe it.  If the first block in
+	 * the i_block array is 0, this cannot be a directory. If the
+	 * inode is extent-mapped, it is still the case that the latter
+	 * cannot be 0 - the magic number in the extent header would make
+	 * it nonzero.
+	 */
 	if (LINUX_S_ISDIR(inode->i_mode) || LINUX_S_ISREG(inode->i_mode) ||
 	    LINUX_S_ISLNK(inode->i_mode) || inode->i_block[0] == 0)
 		return;
 
-	for (i=0; i < EXT2_N_BLOCKS; i++) {
-		blk = inode->i_block[i];
-		if (!blk)
-			continue;
-		if (i >= 4)
-			not_device++;
+	/* 
+	 * Check the block numbers in the i_block array for validity:
+	 * zero blocks are skipped (but the first one cannot be zero -
+	 * see above), other blocks are checked against the first and
+	 * max data blocks (from the the superblock) and against the
+	 * block bitmap. Any invalid block found means this cannot be
+	 * a directory.
+	 * 
+	 * If there are non-zero blocks past the fourth entry, then
+	 * this cannot be a device file: we remember that for the next
+	 * check.
+	 *
+	 * For extent mapped files, we don't do any sanity checking:
+	 * just try to get the phys block of logical block 0 and run
+	 * with it.
+	 */
 
-		if (blk < ctx->fs->super->s_first_data_block ||
-		    blk >= ctx->fs->super->s_blocks_count ||
-		    ext2fs_fast_test_block_bitmap(ctx->block_found_map, blk))
-			return;	/* Invalid block, can't be dir */
+	extent_fs = (ctx->fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS);
+	if (extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) {
+		/* extent mapped */
+		if  (ext2fs_bmap(ctx->fs, pctx->ino, inode, 0, 0, 0,
+				 &blk))
+			return;
+		/* device files are never extent mapped */
+		not_device++;
+	} else {
+		for (i=0; i < EXT2_N_BLOCKS; i++) {
+			blk = inode->i_block[i];
+			if (!blk)
+				continue;
+			if (i >= 4)
+				not_device++;
+
+			if (blk < ctx->fs->super->s_first_data_block ||
+			    blk >= ctx->fs->super->s_blocks_count ||
+			    ext2fs_fast_test_block_bitmap(ctx->block_found_map,
+							  blk))
+				return;	/* Invalid block, can't be dir */
+		}
+		blk = inode->i_block[0];
 	}
 
-	if ((LINUX_S_ISCHR(inode->i_mode) || LINUX_S_ISBLK(inode->i_mode)) && 
+	/*
+	 * If the mode says this is a device file and the i_links_count field
+	 * is sane and we have not ruled it out as a device file previously,
+	 * we declare it a device file, not a directory.
+	 */
+	if ((LINUX_S_ISCHR(inode->i_mode) || LINUX_S_ISBLK(inode->i_mode)) &&
 	    (inode->i_links_count == 1) && !not_device)
 		return;
 
+	/* read the first block */
 	old_op = ehandler_operation(_("reading directory block"));
-	retval = ext2fs_read_dir_block(ctx->fs, inode->i_block[0], buf);
+	retval = ext2fs_read_dir_block(ctx->fs, blk, buf);
 	ehandler_operation(0);
 	if (retval)
 		return;
 
 	dirent = (struct ext2_dir_entry *) buf;
+	retval = ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
+	if (retval)
+		return;
 	if (((dirent->name_len & 0xFF) != 1) ||
 	    (dirent->name[0] != '.') ||
 	    (dirent->inode != pctx->ino) ||
-	    (dirent->rec_len < 12) ||
-	    (dirent->rec_len % 4) ||
-	    (dirent->rec_len >= ctx->fs->blocksize - 12))
+	    (rec_len < 12) ||
+	    (rec_len % 4) ||
+	    (rec_len >= ctx->fs->blocksize - 12))
 		return;
 
-	dirent = (struct ext2_dir_entry *) (buf + dirent->rec_len);
+	dirent = (struct ext2_dir_entry *) (buf + rec_len);
+	retval = ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
+	if (retval)
+		return;
 	if (((dirent->name_len & 0xFF) != 2) ||
 	    (dirent->name[0] != '.') ||
 	    (dirent->name[1] != '.') ||
-	    (dirent->rec_len < 12) ||
-	    (dirent->rec_len % 4))
+	    (rec_len < 12) ||
+	    (rec_len % 4))
 		return;
 
 	if (fix_problem(ctx, PR_1_TREAT_AS_DIRECTORY, pctx)) {
 		inode->i_mode = (inode->i_mode & 07777) | LINUX_S_IFDIR;
-		e2fsck_write_inode_full(ctx, pctx->ino, inode, 
-					EXT2_INODE_SIZE(ctx->fs->super), 
+		e2fsck_write_inode_full(ctx, pctx->ino, inode,
+					EXT2_INODE_SIZE(ctx->fs->super),
 					"check_is_really_dir");
 	}
 }
 
-extern void e2fsck_setup_tdb_icount(e2fsck_t ctx, int flags, 
+extern void e2fsck_setup_tdb_icount(e2fsck_t ctx, int flags,
 				    ext2_icount_t *ret)
 {
 	unsigned int		threshold;
@@ -480,13 +557,11 @@
 	struct		scan_callback_struct scan_struct;
 	struct ext2_super_block *sb = ctx->fs->super;
 	const char	*old_op;
-	int		imagic_fs;
+	int		imagic_fs, extent_fs;
 	int		busted_fs_time = 0;
 	int		inode_size;
-	
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
+
+	init_resource_track(&rtrack, ctx->fs->io);
 	clear_problem_context(&pctx);
 
 	if (!(ctx->options & E2F_OPT_PREEN))
@@ -514,6 +589,7 @@
 #undef EXT2_BPP
 
 	imagic_fs = (sb->s_feature_compat & EXT2_FEATURE_COMPAT_IMAGIC_INODES);
+	extent_fs = (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS);
 
 	/*
 	 * Allocate bitmaps structures
@@ -597,7 +673,7 @@
 						    "block interate buffer");
 	e2fsck_use_inode_shortcuts(ctx, 1);
 	old_op = ehandler_operation(_("opening inode scan"));
-	pctx.errcode = ext2fs_open_inode_scan(fs, ctx->inode_buffer_blocks, 
+	pctx.errcode = ext2fs_open_inode_scan(fs, ctx->inode_buffer_blocks,
 					      &scan);
 	ehandler_operation(old_op);
 	if (pctx.errcode) {
@@ -621,7 +697,7 @@
 
 	while (1) {
 		old_op = ehandler_operation(_("getting next inode from scan"));
-		pctx.errcode = ext2fs_get_next_inode_full(scan, &ino, 
+		pctx.errcode = ext2fs_get_next_inode_full(scan, &ino,
 							  inode, inode_size);
 		ehandler_operation(old_op);
 		if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
@@ -644,7 +720,7 @@
 		pctx.inode = inode;
 		ctx->stashed_ino = ino;
 		if (inode->i_links_count) {
-			pctx.errcode = ext2fs_icount_store(ctx->inode_link_info, 
+			pctx.errcode = ext2fs_icount_store(ctx->inode_link_info,
 					   ino, inode->i_links_count);
 			if (pctx.errcode) {
 				pctx.num = inode->i_links_count;
@@ -653,9 +729,79 @@
 				return;
 			}
 		}
+
+		/*
+		 * Test for incorrect extent flag settings.
+		 *
+		 * On big-endian machines we must be careful:
+		 * When the inode is read, the i_block array is not swapped
+		 * if the extent flag is set.  Therefore if we are testing
+		 * for or fixing a wrongly-set flag, we must potentially
+		 * (un)swap before testing, or after fixing.
+		 */
+
+		/*
+		 * In this case the extents flag was set when read, so
+		 * extent_header_verify is ok.  If the inode is cleared,
+		 * no need to swap... so no extra swapping here.
+		 */
+		if ((inode->i_flags & EXT4_EXTENTS_FL) && !extent_fs &&
+		    (inode->i_links_count || (ino == EXT2_BAD_INO) ||
+		     (ino == EXT2_ROOT_INO) || (ino == EXT2_JOURNAL_INO))) {
+			if ((ext2fs_extent_header_verify(inode->i_block,
+						 sizeof(inode->i_block)) == 0) &&
+			    fix_problem(ctx, PR_1_EXTENT_FEATURE, &pctx)) {
+				sb->s_feature_incompat |= EXT3_FEATURE_INCOMPAT_EXTENTS;
+				ext2fs_mark_super_dirty(fs);
+				extent_fs = 1;
+			} else if (fix_problem(ctx, PR_1_EXTENTS_SET, &pctx)) {
+			clear_inode:
+				e2fsck_clear_inode(ctx, ino, inode, 0, "pass1");
+				if (ino == EXT2_BAD_INO)
+					ext2fs_mark_inode_bitmap(ctx->inode_used_map,
+								 ino);
+				continue;
+			}
+		}
+
+		/*
+		 * For big-endian machines:
+		 * If the inode didn't have the extents flag set when it
+		 * was read, then the i_blocks array was swapped.  To test
+		 * as an extents header, we must swap it back first.
+		 * IF we then set the extents flag, the entire i_block
+		 * array must be un/re-swapped to make it proper extents data.
+		 */
+		if (extent_fs && !(inode->i_flags & EXT4_EXTENTS_FL) &&
+		    (inode->i_links_count || (ino == EXT2_BAD_INO) ||
+		     (ino == EXT2_ROOT_INO) || (ino == EXT2_JOURNAL_INO)) &&
+		    (LINUX_S_ISREG(inode->i_mode) ||
+		     LINUX_S_ISDIR(inode->i_mode))) {
+			void *ehp;
+#ifdef WORDS_BIGENDIAN
+			__u32 tmp_block[EXT2_N_BLOCKS];
+
+			for (i = 0; i < EXT2_N_BLOCKS; i++)
+				tmp_block[i] = ext2fs_swab32(inode->i_block[i]);
+			ehp = tmp_block;
+#else
+			ehp = inode->i_block;
+#endif
+			if ((ext2fs_extent_header_verify(ehp,
+					 sizeof(inode->i_block)) == 0) &&
+			    (fix_problem(ctx, PR_1_UNSET_EXTENT_FL, &pctx))) {
+				inode->i_flags |= EXT4_EXTENTS_FL;
+#ifdef WORDS_BIGENDIAN
+				memcpy(inode->i_block, tmp_block,
+				       sizeof(inode->i_block));
+#endif
+				e2fsck_write_inode(ctx, ino, inode, "pass1");
+			}
+		}
+
 		if (ino == EXT2_BAD_INO) {
 			struct process_block_struct pb;
-			
+
 			pctx.errcode = ext2fs_copy_bitmap(ctx->block_found_map,
 							  &pb.fs_meta_blocks);
 			if (pctx.errcode) {
@@ -666,13 +812,14 @@
 			}
 			pb.ino = EXT2_BAD_INO;
 			pb.num_blocks = pb.last_block = 0;
+			pb.last_db_block = -1;
 			pb.num_illegal_blocks = 0;
 			pb.suppress = 0; pb.clear = 0; pb.is_dir = 0;
 			pb.is_reg = 0; pb.fragmented = 0; pb.bbcheck = 0;
 			pb.inode = inode;
 			pb.pctx = &pctx;
 			pb.ctx = ctx;
-			pctx.errcode = ext2fs_block_iterate2(fs, ino, 0, 
+			pctx.errcode = ext2fs_block_iterate2(fs, ino, 0,
 				     block_buf, process_bad_block, &pb);
 			ext2fs_free_block_bitmap(pb.fs_meta_blocks);
 			if (pctx.errcode) {
@@ -695,15 +842,8 @@
 			 * regnerated in pass #3.
 			 */
 			if (!LINUX_S_ISDIR(inode->i_mode)) {
-				if (fix_problem(ctx, PR_1_ROOT_NO_DIR, &pctx)) {
-					inode->i_dtime = ctx->now;
-					inode->i_links_count = 0;
-					ext2fs_icount_store(ctx->inode_link_info,
-							    ino, 0);
-					e2fsck_write_inode(ctx, ino, inode,
-							   "pass1");
-				}
-
+				if (fix_problem(ctx, PR_1_ROOT_NO_DIR, &pctx))
+					goto clear_inode;
 			}
 			/*
 			 * If dtime is set, offer to clear it.  mke2fs
@@ -736,17 +876,17 @@
 			}
 			if ((inode->i_links_count || inode->i_blocks ||
 			     inode->i_blocks || inode->i_block[0]) &&
-			    fix_problem(ctx, PR_1_JOURNAL_INODE_NOT_CLEAR, 
+			    fix_problem(ctx, PR_1_JOURNAL_INODE_NOT_CLEAR,
 					&pctx)) {
 				memset(inode, 0, inode_size);
 				ext2fs_icount_store(ctx->inode_link_info,
 						    ino, 0);
-				e2fsck_write_inode_full(ctx, ino, inode, 
+				e2fsck_write_inode_full(ctx, ino, inode,
 							inode_size, "pass1");
 			}
 		} else if (ino < EXT2_FIRST_INODE(fs->super)) {
 			int	problem = 0;
-			
+
 			ext2fs_mark_inode_bitmap(ctx->inode_used_map, ino);
 			if (ino == EXT2_BOOT_LOADER_INO) {
 				if (LINUX_S_ISDIR(inode->i_mode))
@@ -774,7 +914,7 @@
 		 * orphaned list linked list.  They should have gotten
 		 * dealt with by now, unless the list had somehow been
 		 * corrupted.
-		 * 
+		 *
 		 * FIXME: In the future, inodes which are still in use
 		 * (and which are therefore) pending truncation should
 		 * be handled specially.  Right now we just clear the
@@ -795,10 +935,10 @@
 						   "pass1");
 			}
 		}
-		
+
 		/*
 		 * This code assumes that deleted inodes have
-		 * i_links_count set to 0.  
+		 * i_links_count set to 0.
 		 */
 		if (!inode->i_links_count) {
 			if (!inode->i_dtime && inode->i_mode) {
@@ -819,7 +959,7 @@
 		 * we now assume that the case of non-zero
 		 * i_links_count and non-zero dtime means that we
 		 * should keep the file, not delete it.
-		 * 
+		 *
 		 */
 		if (inode->i_dtime) {
 			if (fix_problem(ctx, PR_1_SET_DTIME, &pctx)) {
@@ -827,26 +967,26 @@
 				e2fsck_write_inode(ctx, ino, inode, "pass1");
 			}
 		}
-		
+
 		ext2fs_mark_inode_bitmap(ctx->inode_used_map, ino);
 		switch (fs->super->s_creator_os) {
 		    case EXT2_OS_HURD:
 			frag = inode->osd2.hurd2.h_i_frag;
 			fsize = inode->osd2.hurd2.h_i_fsize;
 			break;
-		    case EXT2_OS_MASIX:
-			frag = inode->osd2.masix2.m_i_frag;
-			fsize = inode->osd2.masix2.m_i_fsize;
-			break;
 		    default:
 			frag = fsize = 0;
 		}
-		
+
 		if (inode->i_faddr || frag || fsize ||
 		    (LINUX_S_ISDIR(inode->i_mode) && inode->i_dir_acl))
 			mark_inode_bad(ctx, ino);
+		if (!(fs->super->s_feature_incompat & 
+		      EXT4_FEATURE_INCOMPAT_64BIT) &&
+		    inode->osd2.linux2.l_i_file_acl_high != 0)
+			mark_inode_bad(ctx, ino);
 		if ((fs->super->s_creator_os == EXT2_OS_LINUX) &&
-		    !(fs->super->s_feature_ro_compat & 
+		    !(fs->super->s_feature_ro_compat &
 		      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
 		    (inode->osd2.linux2.l_i_blocks_hi != 0))
 			mark_inode_bad(ctx, ino);
@@ -868,6 +1008,18 @@
 		check_inode_extra_space(ctx, &pctx);
 		check_is_really_dir(ctx, &pctx, block_buf);
 
+		/*
+		 * ext2fs_inode_has_valid_blocks does not actually look
+		 * at i_block[] values, so not endian-sensitive here.
+		 */
+		if (extent_fs && (inode->i_flags & EXT4_EXTENTS_FL) &&
+		    LINUX_S_ISLNK(inode->i_mode) &&
+		    !ext2fs_inode_has_valid_blocks(inode) &&
+		    fix_problem(ctx, PR_1_FAST_SYMLINK_EXTENT_FL, &pctx)) {
+			inode->i_flags &= ~EXT4_EXTENTS_FL;
+			e2fsck_write_inode(ctx, ino, inode, "pass1");
+		}
+
 		if (LINUX_S_ISDIR(inode->i_mode)) {
 			ext2fs_mark_inode_bitmap(ctx->inode_dir_map, ino);
 			e2fsck_add_dir_info(ctx, ino, 0);
@@ -886,7 +1038,8 @@
 			check_size(ctx, &pctx);
 			ctx->fs_blockdev_count++;
 		} else if (LINUX_S_ISLNK (inode->i_mode) &&
-			   e2fsck_pass1_check_symlink(fs, inode, block_buf)) {
+			   e2fsck_pass1_check_symlink(fs, ino, inode,
+						      block_buf)) {
 			check_immutable(ctx, &pctx);
 			ctx->fs_symlinks_count++;
 			if (ext2fs_inode_data_blocks(fs, inode) == 0) {
@@ -907,16 +1060,19 @@
 			ctx->fs_sockets_count++;
 		} else
 			mark_inode_bad(ctx, ino);
-		if (inode->i_block[EXT2_IND_BLOCK])
-			ctx->fs_ind_count++;
-		if (inode->i_block[EXT2_DIND_BLOCK])
-			ctx->fs_dind_count++;
-		if (inode->i_block[EXT2_TIND_BLOCK])
-			ctx->fs_tind_count++;
-		if (inode->i_block[EXT2_IND_BLOCK] ||
-		    inode->i_block[EXT2_DIND_BLOCK] ||
-		    inode->i_block[EXT2_TIND_BLOCK] ||
-		    inode->i_file_acl) {
+		if (!(inode->i_flags & EXT4_EXTENTS_FL)) {
+			if (inode->i_block[EXT2_IND_BLOCK])
+				ctx->fs_ind_count++;
+			if (inode->i_block[EXT2_DIND_BLOCK])
+				ctx->fs_dind_count++;
+			if (inode->i_block[EXT2_TIND_BLOCK])
+				ctx->fs_tind_count++;
+		}
+		if (!(inode->i_flags & EXT4_EXTENTS_FL) &&
+		    (inode->i_block[EXT2_IND_BLOCK] ||
+		     inode->i_block[EXT2_DIND_BLOCK] ||
+		     inode->i_block[EXT2_TIND_BLOCK] ||
+		     inode->i_file_acl)) {
 			inodes_to_process[process_inode_count].ino = ino;
 			inodes_to_process[process_inode_count].inode = *inode;
 			process_inode_count++;
@@ -952,7 +1108,7 @@
 		ea_refcount_free(ctx->refcount_extra);
 		ctx->refcount_extra = 0;
 	}
-		
+
 	if (ctx->invalid_bitmaps)
 		handle_fs_bad_blocks(ctx);
 
@@ -978,12 +1134,12 @@
 		e2fsck_read_inode(ctx, EXT2_RESIZE_INO, inode,
 				  "recreate inode");
 		inode->i_mtime = ctx->now;
-		e2fsck_write_inode(ctx, EXT2_RESIZE_INO, inode, 
+		e2fsck_write_inode(ctx, EXT2_RESIZE_INO, inode,
 				   "recreate inode");
 		fs->block_map = save_bmap;
 		ctx->flags &= ~E2F_FLAG_RESIZE_INODE;
 	}
-		       
+
 	if (ctx->flags & E2F_FLAG_RESTART) {
 		/*
 		 * Only the master copy of the superblock and block
@@ -1006,23 +1162,18 @@
 	ext2fs_free_mem(&inodes_to_process);
 endit:
 	e2fsck_use_inode_shortcuts(ctx, 0);
-	
+
 	ext2fs_free_mem(&block_buf);
 	ext2fs_free_mem(&inode);
 
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Pass 1"), &rtrack);
-	}
-#endif
+	print_resource_track(ctx, _("Pass 1"), &rtrack, ctx->fs->io);
 }
 
 /*
  * When the inode_scan routines call this callback at the end of the
  * glock group, call process_inodes.
  */
-static errcode_t scan_callback(ext2_filsys fs, 
+static errcode_t scan_callback(ext2_filsys fs,
 			       ext2_inode_scan scan EXT2FS_ATTR((unused)),
 			       dgrp_t group, void * priv_data)
 {
@@ -1031,7 +1182,7 @@
 
 	scan_struct = (struct scan_callback_struct *) priv_data;
 	ctx = scan_struct->ctx;
-	
+
 	process_inodes((e2fsck_t) fs->priv_data, scan_struct->block_buf);
 
 	if (ctx->progress)
@@ -1053,7 +1204,7 @@
 	const char		*old_operation;
 	char			buf[80];
 	struct problem_context	pctx;
-	
+
 #if 0
 	printf("begin process_inodes: ");
 #endif
@@ -1068,7 +1219,7 @@
 	for (i=0; i < process_inode_count; i++) {
 		pctx.inode = ctx->stashed_inode = &inodes_to_process[i].inode;
 		pctx.ino = ctx->stashed_ino = inodes_to_process[i].ino;
-		
+
 #if 0
 		printf("%u ", pctx.ino);
 #endif
@@ -1095,11 +1246,13 @@
 	const struct process_inode_block *ib_b =
 		(const struct process_inode_block *) b;
 	int	ret;
-	
+
 	ret = (ib_a->inode.i_block[EXT2_IND_BLOCK] -
 	       ib_b->inode.i_block[EXT2_IND_BLOCK]);
 	if (ret == 0)
 		ret = ib_a->inode.i_file_acl - ib_b->inode.i_file_acl;
+	if (ret == 0)
+		ret = ib_a->ino - ib_b->ino;
 	return ret;
 }
 
@@ -1112,7 +1265,7 @@
 
 	if (!ctx->inode_bad_map) {
 		clear_problem_context(&pctx);
-	
+
 		pctx.errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
 			    _("bad inode map"), &ctx->inode_bad_map);
 		if (pctx.errcode) {
@@ -1133,7 +1286,7 @@
 static void alloc_bb_map(e2fsck_t ctx)
 {
 	struct		problem_context pctx;
-	
+
 	clear_problem_context(&pctx);
 	pctx.errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
 					      _("inode in bad block map"),
@@ -1153,7 +1306,7 @@
 static void alloc_imagic_map(e2fsck_t ctx)
 {
 	struct		problem_context pctx;
-	
+
 	clear_problem_context(&pctx);
 	pctx.errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
 					      _("imagic inode map"),
@@ -1177,9 +1330,9 @@
 static _INLINE_ void mark_block_used(e2fsck_t ctx, blk_t block)
 {
 	struct		problem_context pctx;
-	
+
 	clear_problem_context(&pctx);
-	
+
 	if (ext2fs_fast_test_block_bitmap(ctx->block_found_map, block)) {
 		if (!ctx->block_dup_map) {
 			pctx.errcode = ext2fs_allocate_block_bitmap(ctx->fs,
@@ -1187,7 +1340,7 @@
 			      &ctx->block_dup_map);
 			if (pctx.errcode) {
 				pctx.num = 3;
-				fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR, 
+				fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR,
 					    &pctx);
 				/* Should never get here */
 				ctx->flags |= E2F_FLAG_ABORT;
@@ -1207,7 +1360,7 @@
  * EA blocks that had extra references as accounted for in
  * ctx->refcount_extra.
  */
-static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount, 
+static void adjust_extattr_refcount(e2fsck_t ctx, ext2_refcount_t refcount,
 				    char *block_buf, int adjust_sign)
 {
 	struct ext2_ext_attr_header 	*header;
@@ -1218,7 +1371,7 @@
 	int				count;
 
 	clear_problem_context(&pctx);
-	
+
 	ea_refcount_intr_begin(refcount);
 	while (1) {
 		if ((blk = ea_refcount_intr_next(refcount, &count)) == 0)
@@ -1364,10 +1517,13 @@
 	entry = (struct ext2_ext_attr_entry *)(header+1);
 	end = block_buf + fs->blocksize;
 	while ((char *)entry < end && *(__u32 *)entry) {
+		__u32 hash;
+
 		if (region_allocate(region, (char *)entry - (char *)header,
 			           EXT2_EXT_ATTR_LEN(entry->e_name_len))) {
 			if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
 				goto clear_extattr;
+			break;
 		}
 		if ((ctx->ext_attr_ver == 1 &&
 		     (entry->e_name_len == 0 || entry->e_name_index != 0)) ||
@@ -1375,6 +1531,7 @@
 		     entry->e_name_index == 0)) {
 			if (fix_problem(ctx, PR_1_EA_BAD_NAME, pctx))
 				goto clear_extattr;
+			break;
 		}
 		if (entry->e_value_block != 0) {
 			if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
@@ -1391,6 +1548,17 @@
 			if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
 				goto clear_extattr;
 		}
+
+		hash = ext2fs_ext_attr_hash_entry(entry, block_buf +
+							 entry->e_value_offs);
+
+		if (entry->e_hash != hash) {
+			pctx->num = entry->e_hash;
+			if (fix_problem(ctx, PR_1_ATTR_HASH, pctx))
+				goto clear_extattr;
+			entry->e_hash = hash;
+		}
+
 		entry = EXT2_EXT_ATTR_NEXT(entry);
 	}
 	if (region_allocate(region, (char *)entry - (char *)header, 4)) {
@@ -1416,8 +1584,7 @@
 
 /* Returns 1 if bad htree, 0 if OK */
 static int handle_htree(e2fsck_t ctx, struct problem_context *pctx,
-			ext2_ino_t ino EXT2FS_ATTR((unused)),
-			struct ext2_inode *inode,
+			ext2_ino_t ino, struct ext2_inode *inode,
 			char *block_buf)
 {
 	struct ext2_dx_root_info	*root;
@@ -1431,17 +1598,22 @@
 	     fix_problem(ctx, PR_1_HTREE_SET, pctx)))
 		return 1;
 
-	blk = inode->i_block[0];
-	if (((blk == 0) ||
-	     (blk < fs->super->s_first_data_block) ||
-	     (blk >= fs->super->s_blocks_count)) &&
-	    fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
-		return 1;
+	pctx->errcode = ext2fs_bmap(fs, ino, inode, 0, 0, 0, &blk);
+
+	if ((pctx->errcode) ||
+	    (blk == 0) ||
+	    (blk < fs->super->s_first_data_block) ||
+	    (blk >= fs->super->s_blocks_count)) {
+		if (fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
+			return 1;
+		else
+			return 0;
+	}
 
 	retval = io_channel_read_blk(fs->io, blk, 1, block_buf);
 	if (retval && fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
 		return 1;
-	
+
 	/* XXX should check that beginning matches a directory */
 	root = (struct ext2_dx_root_info *) (block_buf + 24);
 
@@ -1455,7 +1627,7 @@
 	    (root->hash_version != EXT2_HASH_TEA) &&
 	    fix_problem(ctx, PR_1_HTREE_HASHV, pctx))
 		return 1;
-		
+
 	if ((root->unused_flags & EXT2_HASH_FLAG_INCOMPAT) &&
 	    fix_problem(ctx, PR_1_HTREE_INCOMPAT, pctx))
 		return 1;
@@ -1464,10 +1636,230 @@
 	if ((root->indirect_levels > 1) &&
 	    fix_problem(ctx, PR_1_HTREE_DEPTH, pctx))
 		return 1;
-	
+
 	return 0;
 }
 
+void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
+			struct ext2_inode *inode, int restart_flag,
+			const char *source)
+{
+	inode->i_flags = 0;
+	inode->i_links_count = 0;
+	ext2fs_icount_store(ctx->inode_link_info, ino, 0);
+	inode->i_dtime = ctx->now;
+
+	ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
+	ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
+	if (ctx->inode_reg_map)
+		ext2fs_unmark_inode_bitmap(ctx->inode_reg_map, ino);
+	if (ctx->inode_bad_map)
+		ext2fs_unmark_inode_bitmap(ctx->inode_bad_map, ino);
+
+	/*
+	 * If the inode was partially accounted for before processing
+	 * was aborted, we need to restart the pass 1 scan.
+	 */
+	ctx->flags |= restart_flag;
+
+	e2fsck_write_inode(ctx, ino, inode, source);
+}
+
+static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
+			     struct process_block_struct *pb,
+			     blk64_t start_block,
+			     ext2_extent_handle_t ehandle)
+{
+	struct ext2fs_extent	extent;
+	blk_t			blk;
+	e2_blkcnt_t		blockcnt;
+	unsigned int		i;
+	int			is_dir, is_leaf;
+	errcode_t		problem;
+	struct ext2_extent_info	info;
+
+	pctx->errcode = ext2fs_extent_get_info(ehandle, &info);
+	if (pctx->errcode)
+		return;
+
+	pctx->errcode = ext2fs_extent_get(ehandle, EXT2_EXTENT_FIRST_SIB,
+					  &extent);
+	while (!pctx->errcode && info.num_entries-- > 0) {
+		is_leaf = extent.e_flags & EXT2_EXTENT_FLAGS_LEAF;
+		is_dir = LINUX_S_ISDIR(pctx->inode->i_mode);
+
+		problem = 0;
+		if (extent.e_pblk < ctx->fs->super->s_first_data_block ||
+		    extent.e_pblk >= ctx->fs->super->s_blocks_count)
+			problem = PR_1_EXTENT_BAD_START_BLK;
+		else if (extent.e_lblk < start_block)
+			problem = PR_1_OUT_OF_ORDER_EXTENTS;
+		else if (is_leaf &&
+			 (extent.e_pblk + extent.e_len) >
+			 ctx->fs->super->s_blocks_count)
+			problem = PR_1_EXTENT_ENDS_BEYOND;
+
+		if (problem) {
+		report_problem:
+			pctx->blk = extent.e_pblk;
+			pctx->blk2 = extent.e_lblk;
+			pctx->num = extent.e_len;
+			if (fix_problem(ctx, problem, pctx)) {
+				pctx->errcode =
+					ext2fs_extent_delete(ehandle, 0);
+				if (pctx->errcode) {
+					pctx->str = "ext2fs_extent_delete";
+					return;
+				}
+				pctx->errcode = ext2fs_extent_get(ehandle,
+								  EXT2_EXTENT_CURRENT,
+								  &extent);
+				if (pctx->errcode == EXT2_ET_NO_CURRENT_NODE) {
+					pctx->errcode = 0;
+					break;
+				}
+				continue;
+			}
+			goto next;
+		}
+
+		if (!is_leaf) {
+			blk = extent.e_pblk;
+			pctx->errcode = ext2fs_extent_get(ehandle,
+						  EXT2_EXTENT_DOWN, &extent);
+			if (pctx->errcode) {
+				pctx->str = "EXT2_EXTENT_DOWN";
+				problem = PR_1_EXTENT_HEADER_INVALID;
+				if (pctx->errcode == EXT2_ET_EXTENT_HEADER_BAD)
+					goto report_problem;
+				return;
+			}
+			scan_extent_node(ctx, pctx, pb, extent.e_lblk, ehandle);
+			if (pctx->errcode)
+				return;
+			pctx->errcode = ext2fs_extent_get(ehandle,
+						  EXT2_EXTENT_UP, &extent);
+			if (pctx->errcode) {
+				pctx->str = "EXT2_EXTENT_UP";
+				return;
+			}
+			mark_block_used(ctx, blk);
+			pb->num_blocks++;
+			goto next;
+		}
+
+		if ((pb->previous_block != 0) &&
+		    (pb->previous_block+1 != extent.e_pblk)) {
+			if (ctx->options & E2F_OPT_FRAGCHECK) {
+				char type = '?';
+
+				if (pb->is_dir)
+					type = 'd';
+				else if (pb->is_reg)
+					type = 'f';
+
+				printf(("%6lu(%c): expecting %6lu "
+					"actual extent "
+					"phys %6lu log %lu len %lu\n"),
+				       (unsigned long) pctx->ino, type,
+				       (unsigned long) pb->previous_block+1,
+				       (unsigned long) extent.e_pblk,
+				       (unsigned long) extent.e_lblk,
+				       (unsigned long) extent.e_len);
+			}
+			pb->fragmented = 1;
+		}
+		while (is_dir && ++pb->last_db_block < extent.e_lblk) {
+			pctx->errcode = ext2fs_add_dir_block(ctx->fs->dblist,
+							     pb->ino, 0,
+							     pb->last_db_block);
+			if (pctx->errcode) {
+				pctx->blk = 0;
+				pctx->num = pb->last_db_block;
+				goto failed_add_dir_block;
+			}
+		}
+		for (blk = extent.e_pblk, blockcnt = extent.e_lblk, i = 0;
+		     i < extent.e_len;
+		     blk++, blockcnt++, i++) {
+			mark_block_used(ctx, blk);
+
+			if (is_dir) {
+				pctx->errcode = ext2fs_add_dir_block(ctx->fs->dblist, pctx->ino, blk, blockcnt);
+				if (pctx->errcode) {
+					pctx->blk = blk;
+					pctx->num = blockcnt;
+				failed_add_dir_block:
+					fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
+					/* Should never get here */
+					ctx->flags |= E2F_FLAG_ABORT;
+					return;
+				}
+			}
+		}
+		if (is_dir && extent.e_len > 0)
+			pb->last_db_block = blockcnt - 1;
+		pb->num_blocks += extent.e_len;
+		pb->previous_block = extent.e_pblk + extent.e_len - 1;
+		start_block = extent.e_lblk + extent.e_len - 1;
+		if (!(extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT))
+			pb->last_block = start_block;
+	next:
+		pctx->errcode = ext2fs_extent_get(ehandle,
+						  EXT2_EXTENT_NEXT_SIB,
+						  &extent);
+	}
+	if (pctx->errcode == EXT2_ET_EXTENT_NO_NEXT)
+		pctx->errcode = 0;
+}
+
+static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
+				 struct process_block_struct *pb)
+{
+	struct ext2_extent_info info;
+	struct ext2_inode	*inode = pctx->inode;
+	ext2_extent_handle_t	ehandle;
+	ext2_filsys		fs = ctx->fs;
+	ext2_ino_t		ino = pctx->ino;
+	errcode_t		retval;
+
+	pctx->errcode = ext2fs_extent_open2(fs, ino, inode, &ehandle);
+	if (pctx->errcode) {
+		if (fix_problem(ctx, PR_1_READ_EXTENT, pctx))
+			e2fsck_clear_inode(ctx, ino, inode, 0,
+					   "check_blocks_extents");
+		pctx->errcode = 0;
+		return;
+	}
+
+	retval = ext2fs_extent_get_info(ehandle, &info);
+	if (retval == 0) {
+		if (info.max_depth >= MAX_EXTENT_DEPTH_COUNT)
+			info.max_depth = MAX_EXTENT_DEPTH_COUNT-1;
+		ctx->extent_depth_count[info.max_depth]++;
+	}
+
+	scan_extent_node(ctx, pctx, pb, 0, ehandle);
+	if (pctx->errcode &&
+	    fix_problem(ctx, PR_1_EXTENT_ITERATE_FAILURE, pctx)) {
+		pb->num_blocks = 0;
+		inode->i_blocks = 0;
+		e2fsck_clear_inode(ctx, ino, inode, E2F_FLAG_RESTART,
+				   "check_blocks_extents");
+		pctx->errcode = 0;
+	}
+	ext2fs_extent_free(ehandle);
+}
+
+static blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
+				     struct ext2_inode *inode)
+{
+	return (inode->i_blocks |
+		(fs->super->s_feature_ro_compat & 
+		 EXT4_FEATURE_RO_COMPAT_HUGE_FILE ?
+		 (__u64)inode->osd2.linux2.l_i_blocks_hi << 32 : 0));
+}
+
 /*
  * This subroutine is called on each inode to account for all of the
  * blocks used by that inode.
@@ -1481,11 +1873,13 @@
 	struct ext2_inode *inode = pctx->inode;
 	int		bad_size = 0;
 	int		dirty_inode = 0;
+	int		extent_fs;
 	__u64		size;
-	
+
 	pb.ino = ino;
 	pb.num_blocks = 0;
 	pb.last_block = -1;
+	pb.last_db_block = -1;
 	pb.num_illegal_blocks = 0;
 	pb.suppress = 0; pb.clear = 0;
 	pb.fragmented = 0;
@@ -1500,6 +1894,9 @@
 	pctx->ino = ino;
 	pctx->errcode = 0;
 
+	extent_fs = (ctx->fs->super->s_feature_incompat &
+                     EXT3_FEATURE_INCOMPAT_EXTENTS);
+
 	if (inode->i_flags & EXT2_COMPRBLK_FL) {
 		if (fs->super->s_feature_incompat &
 		    EXT2_FEATURE_INCOMPAT_COMPRESSION)
@@ -1512,13 +1909,20 @@
 		}
 	}
 
-	if (inode->i_file_acl && check_ext_attr(ctx, pctx, block_buf))
+	if (inode->i_file_acl && check_ext_attr(ctx, pctx, block_buf)) {
+		if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
+			goto out;
 		pb.num_blocks++;
+	}
 
-	if (ext2fs_inode_has_valid_blocks(inode))
-		pctx->errcode = ext2fs_block_iterate2(fs, ino,
-				       pb.is_dir ? BLOCK_FLAG_HOLE : 0,
-				       block_buf, process_block, &pb);
+	if (ext2fs_inode_has_valid_blocks(inode)) {
+		if (extent_fs && (inode->i_flags & EXT4_EXTENTS_FL))
+			check_blocks_extents(ctx, pctx, &pb);
+		else
+			pctx->errcode = ext2fs_block_iterate2(fs, ino,
+						pb.is_dir ? BLOCK_FLAG_HOLE : 0,
+						block_buf, process_block, &pb);
+	}
 	end_problem_latch(ctx, PR_LATCH_BLOCK);
 	end_problem_latch(ctx, PR_LATCH_TOOBIG);
 	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
@@ -1526,44 +1930,17 @@
 	if (pctx->errcode)
 		fix_problem(ctx, PR_1_BLOCK_ITERATE, pctx);
 
-	if (pb.fragmented && pb.num_blocks < fs->super->s_blocks_per_group)
-		ctx->fs_fragmented++;
+	if (pb.fragmented && pb.num_blocks < fs->super->s_blocks_per_group) {
+		if (LINUX_S_ISDIR(inode->i_mode))
+			ctx->fs_fragmented_dir++;
+		else
+			ctx->fs_fragmented++;
+	}
 
 	if (pb.clear) {
-		inode->i_links_count = 0;
-		ext2fs_icount_store(ctx->inode_link_info, ino, 0);
-		inode->i_dtime = ctx->now;
-		dirty_inode++;
-		ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
-		ext2fs_unmark_inode_bitmap(ctx->inode_reg_map, ino);
-		ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
-		/*
-		 * The inode was probably partially accounted for
-		 * before processing was aborted, so we need to
-		 * restart the pass 1 scan.
-		 */
-		ctx->flags |= E2F_FLAG_RESTART;
-		goto out;
-	}
-	
-	if (pb.is_dir) {
-		while (1) {
-			struct ext2_db_entry *entry;
-
-			if (ext2fs_dblist_get_last(fs->dblist, &entry) ||
-			    (entry->ino != ino) ||
-			    (entry->blk != 0) ||
-			    (entry->blockcnt == 0))
-				break;
-			/* printf("Dropping ino %lu blk %lu blockcnt %d\n", 
-				  entry->ino, entry->blk, entry->blockcnt); */
-			ext2fs_dblist_drop_last(fs->dblist);
-			if (ext2fs_dblist_get_last(fs->dblist, &entry) ||
-			    (entry->ino != ino))
-				pb.last_block--;
-			else
-				pb.last_block = entry->blockcnt;
-		}
+		e2fsck_clear_inode(ctx, ino, inode, E2F_FLAG_RESTART,
+				   "check_blocks");
+		return;
 	}
 
 	if (inode->i_flags & EXT2_INDEX_FL) {
@@ -1576,26 +1953,19 @@
 #endif
 		}
 	}
-	if (ctx->dirs_to_hash && pb.is_dir &&
-	    !(inode->i_flags & EXT2_INDEX_FL) &&
-	    ((inode->i_size / fs->blocksize) >= 3))
-		ext2fs_u32_list_add(ctx->dirs_to_hash, ino);
-		
+
 	if (!pb.num_blocks && pb.is_dir) {
 		if (fix_problem(ctx, PR_1_ZERO_LENGTH_DIR, pctx)) {
-			inode->i_links_count = 0;
-			ext2fs_icount_store(ctx->inode_link_info, ino, 0);
-			inode->i_dtime = ctx->now;
-			dirty_inode++;
-			ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
-			ext2fs_unmark_inode_bitmap(ctx->inode_reg_map, ino);
-			ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
+			e2fsck_clear_inode(ctx, ino, inode, 0, "check_blocks");
 			ctx->fs_directory_count--;
-			goto out;
+			return;
 		}
 	}
 
-	pb.num_blocks *= (fs->blocksize / 512);
+	if (!(fs->super->s_feature_ro_compat &
+	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
+	    !(inode->i_flags & EXT4_HUGE_FILE_FL))
+		pb.num_blocks *= (fs->blocksize / 512);
 #if 0
 	printf("inode %u, i_size = %lu, last_block = %lld, i_blocks=%lu, num_blocks = %lu\n",
 	       ino, inode->i_size, pb.last_block, inode->i_blocks,
@@ -1603,7 +1973,7 @@
 #endif
 	if (pb.is_dir) {
 		int nblock = inode->i_size >> EXT2_BLOCK_SIZE_BITS(fs->super);
-		if (inode->i_size & (fs->blocksize - 1)) 
+		if (inode->i_size & (fs->blocksize - 1))
 			bad_size = 5;
 		else if (nblock > (pb.last_block + 1))
 			bad_size = 1;
@@ -1620,14 +1990,23 @@
 		    /* allow allocated blocks to end of PAGE_SIZE */
 		    (size < (__u64)pb.last_block * fs->blocksize) &&
 		    (pb.last_block / blkpg * blkpg != pb.last_block ||
-		     size < (__u64)(pb.last_block & ~(blkpg-1)) *fs->blocksize))
+		     size < (__u64)(pb.last_block & ~(blkpg-1)) *fs->blocksize) &&
+		    !(inode->i_flags & EXT4_EOFBLOCKS_FL))
 			bad_size = 3;
-		else if (size > ext2_max_sizes[fs->super->s_log_block_size])
+		else if (!(extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) &&
+			 size > ext2_max_sizes[fs->super->s_log_block_size])
+			/* too big for a direct/indirect-mapped file */
 			bad_size = 4;
+		else if ((extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) &&
+			 size >
+			 ((1ULL << (32 + EXT2_BLOCK_SIZE_BITS(fs->super))) - 1))
+			/* too big for an extent-based file - 32bit ee_block */
+			bad_size = 6;
 	}
 	/* i_size for symlinks is checked elsewhere */
 	if (bad_size && !LINUX_S_ISLNK(inode->i_mode)) {
 		pctx->num = (pb.last_block+1) * fs->blocksize;
+		pctx->group = bad_size;
 		if (fix_problem(ctx, PR_1_BAD_I_SIZE, pctx)) {
 			inode->i_size = pctx->num;
 			if (!LINUX_S_ISDIR(inode->i_mode))
@@ -1639,14 +2018,25 @@
 	if (LINUX_S_ISREG(inode->i_mode) &&
 	    (inode->i_size_high || inode->i_size & 0x80000000UL))
 		ctx->large_files++;
-	if (pb.num_blocks != inode->i_blocks) {
+	if ((pb.num_blocks != ext2fs_inode_i_blocks(fs, inode)) ||
+	    ((fs->super->s_feature_ro_compat &
+	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
+	     (inode->i_flags & EXT4_HUGE_FILE_FL) &&
+	     (inode->osd2.linux2.l_i_blocks_hi != 0))) {
 		pctx->num = pb.num_blocks;
 		if (fix_problem(ctx, PR_1_BAD_I_BLOCKS, pctx)) {
 			inode->i_blocks = pb.num_blocks;
+			inode->osd2.linux2.l_i_blocks_hi = 0;
 			dirty_inode++;
 		}
 		pctx->num = 0;
 	}
+
+	if (ctx->dirs_to_hash && pb.is_dir &&
+	    !(inode->i_flags & EXT2_INDEX_FL) &&
+	    ((inode->i_size / fs->blocksize) >= 3))
+		ext2fs_u32_list_add(ctx->dirs_to_hash, ino);
+
 out:
 	if (dirty_inode)
 		e2fsck_write_inode(ctx, ino, inode, "check_blocks");
@@ -1747,45 +2137,38 @@
 		return 0;
 	}
 
-	if (blk == 0) {
-		if (p->is_dir == 0) {
-			/*
-			 * Should never happen, since only directories
-			 * get called with BLOCK_FLAG_HOLE
-			 */
-#if DEBUG_E2FSCK
-			printf("process_block() called with blk == 0, "
-			       "blockcnt=%d, inode %lu???\n",
-			       blockcnt, p->ino);
-#endif
-			return 0;
-		}
-		if (blockcnt < 0)
-			return 0;
-		if (blockcnt * fs->blocksize < p->inode->i_size) {
-#if 0
-			printf("Missing block (#%d) in directory inode %lu!\n",
-			       blockcnt, p->ino);
-#endif
-			p->last_block = blockcnt;
-			goto mark_dir;
-		}
+	if (blk == 0)
 		return 0;
-	}
 
 #if 0
 	printf("Process_block, inode %lu, block %u, #%d\n", p->ino, blk,
 	       blockcnt);
 #endif
-	
+
 	/*
 	 * Simplistic fragmentation check.  We merely require that the
 	 * file be contiguous.  (Which can never be true for really
 	 * big files that are greater than a block group.)
 	 */
-	if (!HOLE_BLKADDR(p->previous_block)) {
-		if (p->previous_block+1 != blk)
+	if (!HOLE_BLKADDR(p->previous_block) && p->ino != EXT2_RESIZE_INO) {
+		if (p->previous_block+1 != blk) {
+			if (ctx->options & E2F_OPT_FRAGCHECK) {
+				char type = '?';
+
+				if (p->is_dir)
+					type = 'd';
+				else if (p->is_reg)
+					type = 'f';
+
+				printf(_("%6lu(%c): expecting %6lu "
+					 "got phys %6lu (blkcnt %lld)\n"),
+				       (unsigned long) pctx->ino, type,
+				       (unsigned long) p->previous_block+1,
+				       (unsigned long) blk,
+				       blockcnt);
+			}
 			p->fragmented = 1;
+		}
 	}
 	p->previous_block = blk;
 
@@ -1795,7 +2178,7 @@
 		problem = PR_1_TOOBIG_REG;
 	if (!p->is_dir && !p->is_reg && blockcnt > 0)
 		problem = PR_1_TOOBIG_SYMLINK;
-	    
+
 	if (blk < fs->super->s_first_data_block ||
 	    blk >= fs->super->s_blocks_count)
 		problem = PR_1_ILLEGAL_BLOCK_NUM;
@@ -1824,7 +2207,7 @@
 	}
 
 	if (p->ino == EXT2_RESIZE_INO) {
-		/* 
+		/*
 		 * The resize inode has already be sanity checked
 		 * during pass #0 (the superblock checks).  All we
 		 * have to do is mark the double indirect block as
@@ -1840,11 +2223,22 @@
 		p->last_block = blockcnt;
 mark_dir:
 	if (p->is_dir && (blockcnt >= 0)) {
+		while (++p->last_db_block < blockcnt) {
+			pctx->errcode = ext2fs_add_dir_block(fs->dblist,
+							     p->ino, 0,
+							     p->last_db_block);
+			if (pctx->errcode) {
+				pctx->blk = 0;
+				pctx->num = p->last_db_block;
+				goto failed_add_dir_block;
+			}
+		}
 		pctx->errcode = ext2fs_add_dir_block(fs->dblist, p->ino,
 						    blk, blockcnt);
 		if (pctx->errcode) {
 			pctx->blk = blk;
 			pctx->num = blockcnt;
+		failed_add_dir_block:
 			fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
 			/* Should never get here */
 			ctx->flags |= E2F_FLAG_ABORT;
@@ -1875,11 +2269,11 @@
 
 	if (!blk)
 		return 0;
-	
+
 	p = (struct process_block_struct *) priv_data;
 	ctx = p->ctx;
 	pctx = p->pctx;
-	
+
 	pctx->ino = EXT2_BAD_INO;
 	pctx->blk = blk;
 	pctx->blkcount = blockcnt;
@@ -1900,10 +2294,10 @@
 				*block_nr = 0;
 				return BLOCK_CHANGED;
 			}
-		} else if (ext2fs_test_block_bitmap(ctx->block_found_map, 
+		} else if (ext2fs_test_block_bitmap(ctx->block_found_map,
 						    blk)) {
 			p->bbcheck = 1;
-			if (fix_problem(ctx, PR_1_BBINODE_BAD_METABLOCK, 
+			if (fix_problem(ctx, PR_1_BBINODE_BAD_METABLOCK,
 					pctx)) {
 				*block_nr = 0;
 				return BLOCK_CHANGED;
@@ -1914,7 +2308,7 @@
 			mark_block_used(ctx, blk);
 		return 0;
 	}
-#if 0 
+#if 0
 	printf ("DEBUG: Marking %u as bad.\n", blk);
 #endif
 	ctx->fs_badblocks_count++;
@@ -1932,7 +2326,7 @@
 	 * Try to find the where the filesystem block was used...
 	 */
 	first_block = fs->super->s_first_data_block;
-	
+
 	for (i = 0; i < fs->group_desc_count; i++ ) {
 		pctx->group = i;
 		pctx->blk = blk;
@@ -2018,13 +2412,14 @@
 	return 0;
 }
 
-static void new_table_block(e2fsck_t ctx, blk_t first_block, int group, 
+static void new_table_block(e2fsck_t ctx, blk_t first_block, int group,
 			    const char *name, int num, blk_t *new_block)
 {
 	ext2_filsys fs = ctx->fs;
+	dgrp_t		last_grp;
 	blk_t		old_block = *new_block;
 	blk_t		last_block;
-	int		i;
+	int		i, is_flexbg, flexbg, flexbg_size;
 	char		*buf;
 	struct problem_context	pctx;
 
@@ -2034,19 +2429,44 @@
 	pctx.blk = old_block;
 	pctx.str = name;
 
-	last_block = ext2fs_group_last_block(fs, group);
+	/*
+	 * For flex_bg filesystems, first try to allocate the metadata
+	 * within the flex_bg, and if that fails then try finding the
+	 * space anywhere in the filesystem.
+	 */
+	is_flexbg = EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+					      EXT4_FEATURE_INCOMPAT_FLEX_BG);
+	if (is_flexbg) {
+		flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+		flexbg = group / flexbg_size;
+		first_block = ext2fs_group_first_block(fs,
+						       flexbg_size * flexbg);
+		last_grp = group | (flexbg_size - 1);
+		if (last_grp > fs->group_desc_count)
+			last_grp = fs->group_desc_count;
+		last_block = ext2fs_group_last_block(fs, last_grp);
+	} else
+		last_block = ext2fs_group_last_block(fs, group);
 	pctx.errcode = ext2fs_get_free_blocks(fs, first_block, last_block,
-					num, ctx->block_found_map, new_block);
+					      num, ctx->block_found_map,
+					      new_block);
+	if (is_flexbg && (pctx.errcode == EXT2_ET_BLOCK_ALLOC_FAIL))
+		pctx.errcode = ext2fs_get_free_blocks(fs,
+				fs->super->s_first_data_block,
+				fs->super->s_blocks_count,
+				num, ctx->block_found_map, new_block);
 	if (pctx.errcode) {
 		pctx.num = num;
 		fix_problem(ctx, PR_1_RELOC_BLOCK_ALLOCATE, &pctx);
 		ext2fs_unmark_valid(fs);
+		ctx->flags |= E2F_FLAG_ABORT;
 		return;
 	}
 	pctx.errcode = ext2fs_get_mem(fs->blocksize, &buf);
 	if (pctx.errcode) {
 		fix_problem(ctx, PR_1_RELOC_MEMORY_ALLOCATE, &pctx);
 		ext2fs_unmark_valid(fs);
+		ctx->flags |= E2F_FLAG_ABORT;
 		return;
 	}
 	ext2fs_mark_super_dirty(fs);
@@ -2101,7 +2521,7 @@
 		}
 		if (ctx->invalid_inode_table_flag[i]) {
 			new_table_block(ctx, first_block, i, _("inode table"),
-					fs->inode_blocks_per_group, 
+					fs->inode_blocks_per_group,
 					&fs->group_desc[i].bg_inode_table);
 			ctx->flags |= E2F_FLAG_RESTART;
 		}
@@ -2120,9 +2540,9 @@
 	dgrp_t	i;
 	int	j;
 	struct problem_context pctx;
-	
+
 	clear_problem_context(&pctx);
-	
+
 	for (i = 0; i < fs->group_desc_count; i++) {
 		pctx.group = i;
 
@@ -2138,7 +2558,8 @@
 				if (ext2fs_test_block_bitmap(ctx->block_found_map,
 							     b)) {
 					pctx.blk = b;
-					if (fix_problem(ctx,
+					if (!ctx->invalid_inode_table_flag[i] &&
+					    fix_problem(ctx,
 						PR_1_ITABLE_CONFLICT, &pctx)) {
 						ctx->invalid_inode_table_flag[i]++;
 						ctx->invalid_bitmaps++;
@@ -2149,9 +2570,9 @@
 			    	}
 			}
 		}
-			    
+
 		/*
-		 * Mark block used for the block bitmap 
+		 * Mark block used for the block bitmap
 		 */
 		if (fs->group_desc[i].bg_block_bitmap) {
 			if (ext2fs_test_block_bitmap(ctx->block_found_map,
@@ -2165,10 +2586,10 @@
 			    ext2fs_mark_block_bitmap(ctx->block_found_map,
 				     fs->group_desc[i].bg_block_bitmap);
 		    }
-			
+
 		}
 		/*
-		 * Mark block used for the inode bitmap 
+		 * Mark block used for the inode bitmap
 		 */
 		if (fs->group_desc[i].bg_inode_bitmap) {
 			if (ext2fs_test_block_bitmap(ctx->block_found_map,
@@ -2177,7 +2598,7 @@
 				if (fix_problem(ctx, PR_1_IB_CONFLICT, &pctx)) {
 					ctx->invalid_inode_bitmap_flag[i]++;
 					ctx->invalid_bitmaps++;
-				} 
+				}
 			} else {
 			    ext2fs_mark_block_bitmap(ctx->block_found_map,
 				     fs->group_desc[i].bg_inode_bitmap);
@@ -2185,7 +2606,7 @@
 		}
 	}
 }
-	
+
 /*
  * Thes subroutines short circuits ext2fs_get_blocks and
  * ext2fs_check_directory; we use them since we already have the inode
@@ -2197,7 +2618,7 @@
 {
 	e2fsck_t ctx = (e2fsck_t) fs->priv_data;
 	int	i;
-	
+
 	if ((ino != ctx->stashed_ino) || !ctx->stashed_inode)
 		return EXT2_ET_CALLBACK_NOTHANDLED;
 
@@ -2240,6 +2661,52 @@
 	return 0;
 }
 
+static errcode_t e2fsck_get_alloc_block(ext2_filsys fs, blk64_t goal,
+					blk64_t *ret)
+{
+	e2fsck_t ctx = (e2fsck_t) fs->priv_data;
+	errcode_t	retval;
+	blk_t		new_block;
+
+	if (ctx->block_found_map) {
+		retval = ext2fs_new_block(fs, (blk_t) goal,
+					  ctx->block_found_map, &new_block);
+		if (retval)
+			return retval;
+		if (fs->block_map) {
+			ext2fs_mark_block_bitmap(fs->block_map, new_block);
+			ext2fs_mark_bb_dirty(fs);
+		}
+	} else {
+		if (!fs->block_map) {
+			retval = ext2fs_read_block_bitmap(fs);
+			if (retval)
+				return retval;
+		}
+
+		retval = ext2fs_new_block(fs, (blk_t) goal, 0, &new_block);
+		if (retval)
+			return retval;
+	}
+
+	*ret = new_block;
+	return (0);
+}
+
+static void e2fsck_block_alloc_stats(ext2_filsys fs, blk64_t blk, int inuse)
+{
+	e2fsck_t ctx = (e2fsck_t) fs->priv_data;
+
+	if (ctx->block_found_map) {
+		if (inuse > 0)
+			ext2fs_mark_block_bitmap(ctx->block_found_map,
+						 (blk_t) blk);
+		else
+			ext2fs_unmark_block_bitmap(ctx->block_found_map,
+						   (blk_t) blk);
+	}
+}
+
 void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool)
 {
 	ext2_filsys fs = ctx->fs;
@@ -2250,6 +2717,11 @@
 		fs->read_inode = pass1_read_inode;
 		fs->write_inode = pass1_write_inode;
 		ctx->stashed_ino = 0;
+		ext2fs_set_alloc_block_callback(fs, e2fsck_get_alloc_block,
+						0);
+		ext2fs_set_block_alloc_stats_callback(fs,
+						      e2fsck_block_alloc_stats,
+						      0);
 	} else {
 		fs->get_blocks = 0;
 		fs->check_directory = 0;
diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c
index dab3134..99f0a3c 100644
--- a/e2fsck/pass1b.c
+++ b/e2fsck/pass1b.c
@@ -4,7 +4,7 @@
  * This file contains pass1B, pass1C, and pass1D of e2fsck.  They are
  * only invoked if pass 1 discovered blocks which are in use by more
  * than one inode.
- * 
+ *
  * Pass1B scans the data blocks of all the inodes again, generating a
  * complete list of duplicate blocks and which inodes have claimed
  * them.
@@ -17,14 +17,14 @@
  * blocks, the user is prompted if s/he would like to clone the file
  * (so that the file gets a fresh copy of the duplicated blocks) or
  * simply to delete the file.
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <time.h>
@@ -83,7 +83,7 @@
 };
 
 static int process_pass1b_block(ext2_filsys fs, blk_t	*blocknr,
-				e2_blkcnt_t blockcnt, blk_t ref_blk, 
+				e2_blkcnt_t blockcnt, blk_t ref_blk,
 				int ref_offset, void *priv_data);
 static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
 			struct dup_inode *dp, char *block_buf);
@@ -169,7 +169,7 @@
 /*
  * Free a duplicate inode record
  */
-static void inode_dnode_free(dnode_t *node, 
+static void inode_dnode_free(dnode_t *node,
 			     void *context EXT2FS_ATTR((unused)))
 {
 	struct dup_inode	*di;
@@ -180,13 +180,14 @@
 		next = p->next;
 		free(p);
 	}
+	free(di);
 	free(node);
 }
 
 /*
  * Free a duplicate block record
  */
-static void block_dnode_free(dnode_t *node, 
+static void block_dnode_free(dnode_t *node,
 			     void *context EXT2FS_ATTR((unused)))
 {
 	struct dup_block	*db;
@@ -197,6 +198,7 @@
 		next = p->next;
 		free(p);
 	}
+	free(db);
 	free(node);
 }
 
@@ -208,9 +210,12 @@
 {
 	ext2_filsys 		fs = ctx->fs;
 	struct problem_context	pctx;
+#ifdef RESOURCE_TRACK
+	struct resource_track	rtrack;
+#endif
 
 	clear_problem_context(&pctx);
-	
+
 	pctx.errcode = ext2fs_allocate_inode_bitmap(fs,
 		      _("multiply claimed inode map"), &inode_dup_map);
 	if (pctx.errcode) {
@@ -223,10 +228,18 @@
 	dict_init(&blk_dict, DICTCOUNT_T_MAX, dict_int_cmp);
 	dict_set_allocator(&ino_dict, NULL, inode_dnode_free, NULL);
 	dict_set_allocator(&blk_dict, NULL, block_dnode_free, NULL);
-	
+
+	init_resource_track(&rtrack, ctx->fs->io);
 	pass1b(ctx, block_buf);
+	print_resource_track(ctx, "Pass 1b", &rtrack, ctx->fs->io);
+
+	init_resource_track(&rtrack, ctx->fs->io);
 	pass1c(ctx, block_buf);
+	print_resource_track(ctx, "Pass 1c", &rtrack, ctx->fs->io);
+
+	init_resource_track(&rtrack, ctx->fs->io);
 	pass1d(ctx, block_buf);
+	print_resource_track(ctx, "Pass 1d", &rtrack, ctx->fs->io);
 
 	/*
 	 * Time to free all of the accumulated data structures that we
@@ -234,6 +247,7 @@
 	 */
 	dict_free_nodes(&ino_dict);
 	dict_free_nodes(&blk_dict);
+	ext2fs_free_inode_bitmap(inode_dup_map);
 }
 
 /*
@@ -255,9 +269,9 @@
 	ext2_inode_scan	scan;
 	struct process_block_struct pb;
 	struct problem_context pctx;
-	
+
 	clear_problem_context(&pctx);
-	
+
 	if (!(ctx->options & E2F_OPT_PREEN))
 		fix_problem(ctx, PR_1B_PASS_HEADER, &pctx);
 	pctx.errcode = ext2fs_open_inode_scan(fs, ctx->inode_buffer_blocks,
@@ -294,7 +308,8 @@
 		if (ext2fs_inode_has_valid_blocks(&inode) ||
 		    (ino == EXT2_BAD_INO))
 			pctx.errcode = ext2fs_block_iterate2(fs, ino,
-				     0, block_buf, process_pass1b_block, &pb);
+					     BLOCK_FLAG_READ_ONLY, block_buf,
+					     process_pass1b_block, &pb);
 		if (inode.i_file_acl)
 			process_pass1b_block(fs, &inode.i_file_acl,
 					     BLOCK_COUNT_EXTATTR, 0, 0, &pb);
@@ -314,7 +329,7 @@
 static int process_pass1b_block(ext2_filsys fs EXT2FS_ATTR((unused)),
 				blk_t	*block_nr,
 				e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
-				blk_t ref_blk EXT2FS_ATTR((unused)), 
+				blk_t ref_blk EXT2FS_ATTR((unused)),
 				int ref_offset EXT2FS_ATTR((unused)),
 				void *priv_data)
 {
@@ -325,10 +340,10 @@
 		return 0;
 	p = (struct process_block_struct *) priv_data;
 	ctx = p->ctx;
-	
+
 	if (!ext2fs_test_block_bitmap(ctx->block_dup_map, *block_nr))
 		return 0;
-	
+
 	/* OK, this is a duplicate block */
 	if (p->ino != EXT2_BAD_INO) {
 		p->pctx->blk = *block_nr;
@@ -338,7 +353,7 @@
 	ext2fs_mark_inode_bitmap(inode_dup_map, p->ino);
 
 	add_dupe(ctx, p->ino, *block_nr, p->inode);
-	
+
 	return 0;
 }
 
@@ -355,9 +370,9 @@
 
 static int search_dirent_proc(ext2_ino_t dir, int entry,
 			      struct ext2_dir_entry *dirent,
-			      int offset EXT2FS_ATTR((unused)), 
+			      int offset EXT2FS_ATTR((unused)),
 			      int blocksize EXT2FS_ATTR((unused)),
-			      char *buf EXT2FS_ATTR((unused)), 
+			      char *buf EXT2FS_ATTR((unused)),
 			      void *priv_data)
 {
 	struct search_dir_struct *sd;
@@ -368,7 +383,7 @@
 
 	if (dirent->inode > sd->max_inode)
 		/* Should abort this inode, but not everything */
-		return 0;	
+		return 0;
 
 	if ((dirent->inode < sd->first_inode) || (entry < DIRENT_OTHER_FILE) ||
 	    !ext2fs_test_inode_bitmap(inode_dup_map, dirent->inode))
@@ -407,7 +422,7 @@
 	sd.max_inode = fs->super->s_inodes_count;
 	ext2fs_dblist_dir_iterate(fs->dblist, 0, block_buf,
 				  search_dirent_proc, &sd);
-}	
+}
 
 static void pass1d(e2fsck_t ctx, char *block_buf)
 {
@@ -423,9 +438,9 @@
 	dnode_t	*n, *m;
 	struct block_el	*s;
 	struct inode_el *r;
-	
+
 	clear_problem_context(&pctx);
-	
+
 	if (!(ctx->options & E2F_OPT_PREEN))
 		fix_problem(ctx, PR_1D_PASS_HEADER, &pctx);
 	e2fsck_read_bitmaps(ctx);
@@ -460,7 +475,7 @@
 				file_ok = 0;
 				meta_data = 1;
 			}
-			
+
 			/*
 			 * Add all inodes used by this block to the
 			 * shared[] --- which is a unique list, so
@@ -490,10 +505,10 @@
 		fix_problem(ctx, PR_1D_DUP_FILE, &pctx);
 		pctx.blkcount = 0;
 		pctx.num = 0;
-		
+
 		if (meta_data)
 			fix_problem(ctx, PR_1D_SHARE_METADATA, &pctx);
-		
+
 		for (i = 0; i < shared_len; i++) {
 			m = dict_lookup(&ino_dict, INT_TO_VOIDPTR(shared[i]));
 			if (!m)
@@ -569,10 +584,10 @@
 		ext2fs_unmark_block_bitmap(ctx->block_found_map, *block_nr);
 		ext2fs_block_alloc_stats(fs, *block_nr, -1);
 	}
-		
+
 	return 0;
 }
-		
+
 static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
 			struct dup_inode *dp, char* block_buf)
 {
@@ -590,20 +605,17 @@
 
 	e2fsck_read_inode(ctx, ino, &inode, "delete_file");
 	if (ext2fs_inode_has_valid_blocks(&inode))
-		pctx.errcode = ext2fs_block_iterate2(fs, ino, 0, block_buf,
-						     delete_file_block, &pb);
+		pctx.errcode = ext2fs_block_iterate2(fs, ino, BLOCK_FLAG_READ_ONLY,
+						     block_buf, delete_file_block, &pb);
 	if (pctx.errcode)
 		fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
-	ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
-	ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
 	if (ctx->inode_bad_map)
 		ext2fs_unmark_inode_bitmap(ctx->inode_bad_map, ino);
 	ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(inode.i_mode));
 
 	/* Inode may have changed by block_iterate, so reread it */
 	e2fsck_read_inode(ctx, ino, &inode, "delete_file");
-	inode.i_links_count = 0;
-	inode.i_dtime = ctx->now;
+	e2fsck_clear_inode(ctx, ino, &inode, 0, "delete_file");
 	if (inode.i_file_acl &&
 	    (fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR)) {
 		count = 1;
@@ -625,11 +637,10 @@
 		 */
 		if ((count == 0) ||
 		    ext2fs_test_block_bitmap(ctx->block_dup_map,
-					     inode.i_file_acl)) 
+					     inode.i_file_acl))
 			delete_file_block(fs, &inode.i_file_acl,
 					  BLOCK_COUNT_EXTATTR, 0, 0, &pb);
 	}
-	e2fsck_write_inode(ctx, ino, &inode, "delete_file");
 }
 
 struct clone_struct {
@@ -654,7 +665,7 @@
 	e2fsck_t ctx;
 
 	ctx = cs->ctx;
-	
+
 	if (HOLE_BLKADDR(*block_nr))
 		return 0;
 
@@ -705,7 +716,7 @@
 	}
 	return 0;
 }
-		
+
 static int clone_file(e2fsck_t ctx, ext2_ino_t ino,
 		      struct dup_inode *dp, char* block_buf)
 {
@@ -761,7 +772,7 @@
 		 */
 		n = dict_lookup(&blk_dict, INT_TO_VOIDPTR(blk));
 		if (!n) {
-			com_err("clone_file", 0, 
+			com_err("clone_file", 0,
 				_("internal error: couldn't lookup EA "
 				  "block record for %u"), blk);
 			retval = 0; /* OK to stumble on... */
@@ -773,9 +784,9 @@
 				continue;
 			n = dict_lookup(&ino_dict, INT_TO_VOIDPTR(ino_el->inode));
 			if (!n) {
-				com_err("clone_file", 0, 
+				com_err("clone_file", 0,
 					_("internal error: couldn't lookup EA "
-					  "inode record for %u"), 
+					  "inode record for %u"),
 					ino_el->inode);
 				retval = 0; /* OK to stumble on... */
 				goto errout;
@@ -804,7 +815,7 @@
 	ext2_filsys fs = ctx->fs;
 	blk_t	first_block;
 	dgrp_t	i;
-	
+
 	first_block = fs->super->s_first_data_block;
 	for (i = 0; i < fs->group_desc_count; i++) {
 
@@ -814,7 +825,7 @@
 			    (test_block <= first_block + fs->desc_blocks))
 				return 1;
 		}
-		
+
 		/* Check the inode table */
 		if ((fs->group_desc[i].bg_inode_table) &&
 		    (test_block >= fs->group_desc[i].bg_inode_table) &&
@@ -826,7 +837,7 @@
 		if ((test_block == fs->group_desc[i].bg_block_bitmap) ||
 		    (test_block == fs->group_desc[i].bg_inode_bitmap))
 			return 1;
-		
+
 		first_block += fs->super->s_blocks_per_group;
 	}
 	return 0;
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
index b79461d..761c2f1 100644
--- a/e2fsck/pass2.c
+++ b/e2fsck/pass2.c
@@ -1,13 +1,13 @@
 /*
  * pass2.c --- check directory structure
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Pass 2 of e2fsck iterates through all active directory inodes, and
  * applies to following tests to each directory entry in the directory
  * blocks in the inodes:
@@ -16,7 +16,7 @@
  * 		least 8 bytes, and no more than the remaining space
  * 		left in the directory block.
  * 	- The length of the name in the directory entry (name_len)
- * 		should be less than (rec_len - 8).  
+ * 		should be less than (rec_len - 8).
  *	- The inode number in the directory entry should be within
  * 		legal bounds.
  * 	- The inode number should refer to a in-use inode.
@@ -66,12 +66,6 @@
 static int allocate_dir_block(e2fsck_t ctx,
 			      struct ext2_db_entry *dir_blocks_info,
 			      char *buf, struct problem_context *pctx);
-static int update_dir_block(ext2_filsys fs,
-			    blk_t	*block_nr,
-			    e2_blkcnt_t blockcnt,
-			    blk_t	ref_block,
-			    int		ref_offset, 
-			    void	*priv_data);
 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino);
 static int htree_depth(struct dx_dir_info *dx_dir,
 		       struct dx_dirblock_info *dx_db);
@@ -82,7 +76,7 @@
 	struct problem_context	pctx;
 	int	count, max;
 	e2fsck_t ctx;
-};	
+};
 
 void e2fsck_pass2(e2fsck_t ctx)
 {
@@ -101,10 +95,7 @@
 	problem_t		code;
 	int			bad_dir;
 
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
-
+	init_resource_track(&rtrack, ctx->fs->io);
 	clear_problem_context(&cd.pctx);
 
 #ifdef MTRACE
@@ -114,12 +105,12 @@
 	if (!(ctx->options & E2F_OPT_PREEN))
 		fix_problem(ctx, PR_2_PASS_HEADER, &cd.pctx);
 
-	e2fsck_setup_tdb_icount(ctx, EXT2_ICOUNT_OPT_INCREMENT, 
+	e2fsck_setup_tdb_icount(ctx, EXT2_ICOUNT_OPT_INCREMENT,
 				&ctx->inode_count);
 	if (ctx->inode_count)
 		cd.pctx.errcode = 0;
-	else 
-		cd.pctx.errcode = ext2fs_create_icount2(fs, 
+	else
+		cd.pctx.errcode = ext2fs_create_icount2(fs,
 						EXT2_ICOUNT_OPT_INCREMENT,
 						0, ctx->inode_link_info,
 						&ctx->inode_count);
@@ -148,11 +139,17 @@
 
 	if (fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX)
 		ext2fs_dblist_sort(fs->dblist, special_dir_block_cmp);
-	
+
 	cd.pctx.errcode = ext2fs_dblist_iterate(fs->dblist, check_dir_block,
 						&cd);
-	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
+	if (ctx->flags & E2F_FLAG_SIGNAL_MASK || ctx->flags & E2F_FLAG_RESTART)
 		return;
+
+	if (ctx->flags & E2F_FLAG_RESTART_LATER) {
+		ctx->flags |= E2F_FLAG_RESTART;
+		return;
+	}
+
 	if (cd.pctx.errcode) {
 		fix_problem(ctx, PR_2_DBLIST_ITERATE, &cd.pctx);
 		ctx->flags |= E2F_FLAG_ABORT;
@@ -195,7 +192,7 @@
 			if (dx_db->flags & DX_FLAG_LAST)
 				dx_parent->max_hash = dx_db->max_hash;
 		}
-				
+
 		for (b=0, dx_db = dx_dir->dx_block;
 		     b < dx_dir->numblocks;
 		     b++, dx_db++) {
@@ -213,13 +210,14 @@
 			if (dx_db->type == DX_DIRBLOCK_LEAF) {
 				depth = htree_depth(dx_dir, dx_db);
 				if (depth != dx_dir->depth) {
+					pctx.num = dx_dir->depth;
 					code = PR_2_HTREE_BAD_DEPTH;
 					fix_problem(ctx, code, &pctx);
 					bad_dir++;
 				}
 			}
 			/*
-			 * This test doesn't apply for the root block 
+			 * This test doesn't apply for the root block
 			 * at block #0
 			 */
 			if (b &&
@@ -239,14 +237,13 @@
 				fix_problem(ctx, code, &pctx);
 				bad_dir++;
 			}
-			if (code == 0)
-				continue;
 		}
 		if (bad_dir && fix_problem(ctx, PR_2_HTREE_CLEAR, &pctx)) {
 			clear_htree(ctx, dx_dir->ino);
 			dx_dir->numblocks = 0;
 		}
 	}
+	e2fsck_free_dx_dir_info(ctx);
 #endif
 	ext2fs_free_mem(&buf);
 	ext2fs_free_dblist(fs->dblist);
@@ -276,13 +273,8 @@
 			ext2fs_mark_super_dirty(fs);
 		}
 	}
-	
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Pass 2"), &rtrack);
-	}
-#endif
+
+	print_resource_track(ctx, _("Pass 2"), &rtrack, fs->io);
 }
 
 #define MAX_DEPTH 32000
@@ -332,10 +324,10 @@
 
 	if (!db_a->blockcnt && db_b->blockcnt)
 		return -1;
-	
+
 	if (db_a->blk != db_b->blk)
 		return (int) (db_a->blk - db_b->blk);
-	
+
 	if (db_a->ino != db_b->ino)
 		return (int) (db_a->ino - db_b->ino);
 
@@ -352,11 +344,11 @@
 		     ext2_ino_t ino, struct problem_context *pctx)
 {
 	struct ext2_dir_entry *nextdir;
+	unsigned int	rec_len, new_len;
 	int	status = 0;
 	int	created = 0;
-	int	new_len;
 	int	problem = 0;
-	
+
 	if (!dirent->inode)
 		problem = PR_2_MISSING_DOT;
 	else if (((dirent->name_len & 0xFF) != 1) ||
@@ -364,11 +356,12 @@
 		problem = PR_2_1ST_NOT_DOT;
 	else if (dirent->name[1] != '\0')
 		problem = PR_2_DOT_NULL_TERM;
-	
+
+	(void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
 	if (problem) {
 		if (fix_problem(ctx, problem, pctx)) {
-			if (dirent->rec_len < 12)
-				dirent->rec_len = 12;
+			if (rec_len < 12)
+				rec_len = dirent->rec_len = 12;
 			dirent->inode = ino;
 			dirent->name_len = 1;
 			dirent->name[0] = '.';
@@ -383,15 +376,16 @@
 			status = 1;
 		}
 	}
-	if (dirent->rec_len > 12) {
-		new_len = dirent->rec_len - 12;
+	if (rec_len > 12) {
+		new_len = rec_len - 12;
 		if (new_len > 12) {
 			if (created ||
 			    fix_problem(ctx, PR_2_SPLIT_DOT, pctx)) {
 				nextdir = (struct ext2_dir_entry *)
 					((char *) dirent + 12);
 				dirent->rec_len = 12;
-				nextdir->rec_len = new_len;
+				(void) ext2fs_set_rec_len(ctx->fs, new_len,
+							  nextdir);
 				nextdir->inode = 0;
 				nextdir->name_len = 0;
 				status = 1;
@@ -410,8 +404,8 @@
 			struct ext2_dir_entry *dirent,
 			ext2_ino_t ino, struct problem_context *pctx)
 {
-	int			problem = 0;
-	
+	int	rec_len, problem = 0;
+
 	if (!dirent->inode)
 		problem = PR_2_MISSING_DOT_DOT;
 	else if (((dirent->name_len & 0xFF) != 2) ||
@@ -421,9 +415,10 @@
 	else if (dirent->name[2] != '\0')
 		problem = PR_2_DOT_DOT_NULL_TERM;
 
+	(void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
 	if (problem) {
 		if (fix_problem(ctx, problem, pctx)) {
-			if (dirent->rec_len < 12)
+			if (rec_len < 12)
 				dirent->rec_len = 12;
 			/*
 			 * Note: we don't have the parent inode just
@@ -436,7 +431,7 @@
 			dirent->name[1] = '.';
 			dirent->name[2] = '\0';
 			return 1;
-		} 
+		}
 		return 0;
 	}
 	if (e2fsck_dir_info_set_dotdot(ctx, ino, dirent->inode)) {
@@ -452,13 +447,13 @@
  */
 static int check_name(e2fsck_t ctx,
 		      struct ext2_dir_entry *dirent,
-		      ext2_ino_t dir_ino EXT2FS_ATTR((unused)), 
+		      ext2_ino_t dir_ino EXT2FS_ATTR((unused)),
 		      struct problem_context *pctx)
 {
 	int	i;
 	int	fixup = -1;
 	int	ret = 0;
-	
+
 	for ( i = 0; i < (dirent->name_len & 0xFF); i++) {
 		if (dirent->name[i] == '/' || dirent->name[i] == '\0') {
 			if (fixup < 0) {
@@ -515,7 +510,7 @@
 	if (fix_problem(ctx, filetype ? PR_2_BAD_FILETYPE : PR_2_SET_FILETYPE,
 			pctx) == 0)
 		return 0;
-			
+
 	dirent->name_len = (dirent->name_len & 0xFF) | should_be << 8;
 	return 1;
 }
@@ -539,7 +534,7 @@
 
 	if (db->blockcnt == 0) {
 		root = (struct ext2_dx_root_info *) (block_buf + 24);
-		
+
 #ifdef DX_DEBUG
 		printf("Root node dump:\n");
 		printf("\t Reserved zero: %u\n", root->reserved_zero);
@@ -556,9 +551,9 @@
 	limit = (struct ext2_dx_countlimit *) ent;
 
 #ifdef DX_DEBUG
-	printf("Number of entries (count): %d\n", 
+	printf("Number of entries (count): %d\n",
 	       ext2fs_le16_to_cpu(limit->count));
-	printf("Number of entries (limit): %d\n", 
+	printf("Number of entries (limit): %d\n",
 	       ext2fs_le16_to_cpu(limit->limit));
 #endif
 
@@ -576,7 +571,7 @@
 			goto clear_and_exit;
 		count = expect_limit;
 	}
-	
+
 	for (i=0; i < count; i++) {
 		prev_hash = hash;
 		hash = i ? (ext2fs_le32_to_cpu(ent[i].hash) & ~1) : 0;
@@ -609,7 +604,7 @@
 			max_hash = hash;
 		dx_db->node_min_hash = hash;
 		if ((i+1) < count)
-			dx_db->node_max_hash = 
+			dx_db->node_max_hash =
 			  ext2fs_le32_to_cpu(ent[i+1].hash) & ~1;
 		else {
 			dx_db->node_max_hash = 0xfffffffe;
@@ -635,7 +630,7 @@
 
 /*
  * Given a busted directory, try to salvage it somehow.
- * 
+ *
  */
 static void salvage_directory(ext2_filsys fs,
 			      struct ext2_dir_entry *dirent,
@@ -643,14 +638,18 @@
 			      unsigned int *offset)
 {
 	char	*cp = (char *) dirent;
-	int left = fs->blocksize - *offset - dirent->rec_len;
+	int left;
+	unsigned int rec_len, prev_rec_len;
 	unsigned int name_len = dirent->name_len & 0xFF;
 
+	(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+	left = fs->blocksize - *offset - rec_len;
+
 	/*
 	 * Special case of directory entry of size 8: copy what's left
 	 * of the directory block up to cover up the invalid hole.
 	 */
-	if ((left >= 12) && (dirent->rec_len == 8)) {
+	if ((left >= 12) && (rec_len == 8)) {
 		memmove(cp, cp+8, left);
 		memset(cp + left, 0, 8);
 		return;
@@ -661,10 +660,11 @@
 	 * record length.
 	 */
 	if ((left < 0) &&
-	    (name_len + 8 <= dirent->rec_len + (unsigned) left) &&
+	    ((int) rec_len + left > 8) &&
+	    (name_len + 8 <= (int) rec_len + left) &&
 	    dirent->inode <= fs->super->s_inodes_count &&
 	    strnlen(dirent->name, name_len) == name_len) {
-		dirent->rec_len += left;
+		(void) ext2fs_set_rec_len(fs, (int) rec_len + left, dirent);
 		return;
 	}
 	/*
@@ -672,10 +672,12 @@
 	 * of four, and not too big, such that it is valid, let the
 	 * previous directory entry absorb the invalid one.
 	 */
-	if (prev && dirent->rec_len && (dirent->rec_len % 4) == 0 &&
-	    (*offset + dirent->rec_len <= fs->blocksize)) {
-		prev->rec_len += dirent->rec_len;
-		*offset += dirent->rec_len;
+	if (prev && rec_len && (rec_len % 4) == 0 &&
+	    (*offset + rec_len <= fs->blocksize)) {
+		(void) ext2fs_get_rec_len(fs, prev, &prev_rec_len);
+		prev_rec_len += rec_len;
+		(void) ext2fs_set_rec_len(fs, prev_rec_len, prev);
+		*offset += rec_len;
 		return;
 	}
 	/*
@@ -685,10 +687,13 @@
 	 * new empty directory entry the rest of the directory block.
 	 */
 	if (prev) {
-		prev->rec_len += fs->blocksize - *offset;
+		(void) ext2fs_get_rec_len(fs, prev, &prev_rec_len);
+		prev_rec_len += fs->blocksize - *offset;
+		(void) ext2fs_set_rec_len(fs, prev_rec_len, prev);
 		*offset = fs->blocksize;
 	} else {
-		dirent->rec_len = fs->blocksize - *offset;
+		rec_len = fs->blocksize - *offset;
+		(void) ext2fs_set_rec_len(fs, rec_len, dirent);
 		dirent->name_len = 0;
 		dirent->inode = 0;
 	}
@@ -708,6 +713,7 @@
 	const char *		old_op;
 	int			dir_modified = 0;
 	int			dot_state;
+	unsigned int		rec_len;
 	blk_t			block_nr = db->blk;
 	ext2_ino_t 		ino = db->ino;
 	ext2_ino_t 		subdir_parent;
@@ -727,17 +733,17 @@
 	buf = cd->buf;
 	ctx = cd->ctx;
 
-	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
+	if (ctx->flags & E2F_FLAG_SIGNAL_MASK || ctx->flags & E2F_FLAG_RESTART)
 		return DIRENT_ABORT;
-	
+
 	if (ctx->progress && (ctx->progress)(ctx, 2, cd->count++, cd->max))
 		return DIRENT_ABORT;
-	
+
 	/*
-	 * Make sure the inode is still in use (could have been 
+	 * Make sure the inode is still in use (could have been
 	 * deleted in the duplicate/bad blocks pass.
 	 */
-	if (!(ext2fs_test_inode_bitmap(ctx->inode_used_map, ino))) 
+	if (!(ext2fs_test_inode_bitmap(ctx->inode_used_map, ino)))
 		return 0;
 
 	cd->pctx.ino = ino;
@@ -752,7 +758,7 @@
 			return 0;
 		block_nr = db->blk;
 	}
-	
+
 	if (db->blockcnt)
 		dot_state = 2;
 	else
@@ -766,7 +772,7 @@
 	printf("In process_dir_block block %lu, #%d, inode %lu\n", block_nr,
 	       db->blockcnt, ino);
 #endif
-	
+
 	old_op = ehandler_operation(_("reading directory block"));
 	cd->pctx.errcode = ext2fs_read_dir_block(fs, block_nr, buf);
 	ehandler_operation(0);
@@ -783,7 +789,7 @@
 	dx_dir = e2fsck_get_dx_dir_info(ctx, ino);
 	if (dx_dir && dx_dir->numblocks) {
 		if (db->blockcnt >= dx_dir->numblocks) {
-			if (fix_problem(ctx, PR_2_UNEXPECTED_HTREE_BLOCK, 
+			if (fix_problem(ctx, PR_2_UNEXPECTED_HTREE_BLOCK,
 					&pctx)) {
 				clear_htree(ctx, ino);
 				dx_dir->numblocks = 0;
@@ -797,8 +803,9 @@
 		dx_db->phys = block_nr;
 		dx_db->min_hash = ~0;
 		dx_db->max_hash = 0;
-			
+
 		dirent = (struct ext2_dir_entry *) buf;
+		(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
 		limit = (struct ext2_dx_countlimit *) (buf+8);
 		if (db->blockcnt == 0) {
 			root = (struct ext2_dx_root_info *) (buf + 24);
@@ -818,10 +825,10 @@
 				dx_dir->hashversion += 3;
 			dx_dir->depth = root->indirect_levels + 1;
 		} else if ((dirent->inode == 0) &&
-			   (dirent->rec_len == fs->blocksize) &&
+			   (rec_len == fs->blocksize) &&
 			   (dirent->name_len == 0) &&
-			   (ext2fs_le16_to_cpu(limit->limit) == 
-			    ((fs->blocksize-8) / 
+			   (ext2fs_le16_to_cpu(limit->limit) ==
+			    ((fs->blocksize-8) /
 			     sizeof(struct ext2_dx_entry))))
 			dx_db->type = DX_DIRBLOCK_NODE;
 	}
@@ -831,14 +838,18 @@
 	dict_init(&de_dict, DICTCOUNT_T_MAX, dict_de_cmp);
 	prev = 0;
 	do {
+		int group;
+		ext2_ino_t first_unused_inode;
+
 		problem = 0;
 		dirent = (struct ext2_dir_entry *) (buf + offset);
+		(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
 		cd->pctx.dirent = dirent;
 		cd->pctx.num = offset;
-		if (((offset + dirent->rec_len) > fs->blocksize) ||
-		    (dirent->rec_len < 12) ||
-		    ((dirent->rec_len % 4) != 0) ||
-		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
+		if (((offset + rec_len) > fs->blocksize) ||
+		    (rec_len < 12) ||
+		    ((rec_len % 4) != 0) ||
+		    (((dirent->name_len & (unsigned) 0xFF)+8) > rec_len)) {
 			if (fix_problem(ctx, PR_2_DIR_CORRUPTED, &cd->pctx)) {
 				salvage_directory(fs, dirent, prev, &offset);
 				dir_modified++;
@@ -870,22 +881,16 @@
 				goto next;
 			}
 		}
-		if (!dirent->inode) 
+		if (!dirent->inode)
 			goto next;
-		
+
 		/*
 		 * Make sure the inode listed is a legal one.
-		 */ 
+		 */
 		if (((dirent->inode != EXT2_ROOT_INO) &&
 		     (dirent->inode < EXT2_FIRST_INODE(fs->super))) ||
 		    (dirent->inode > fs->super->s_inodes_count)) {
 			problem = PR_2_BAD_INO;
-		} else if (!(ext2fs_test_inode_bitmap(ctx->inode_used_map,
-					       dirent->inode))) {
-			/*
-			 * If the inode is unused, offer to clear it.
-			 */
-			problem = PR_2_UNUSED_INODE;
 		} else if (ctx->inode_bb_map &&
 			   (ext2fs_test_inode_bitmap(ctx->inode_bb_map,
 						     dirent->inode))) {
@@ -905,7 +910,7 @@
 			problem = PR_2_DUP_DOT;
 		} else if ((dot_state > 1) &&
 			   ((dirent->name_len & 0xFF) == 2) &&
-			   (dirent->name[0] == '.') && 
+			   (dirent->name[0] == '.') &&
 			   (dirent->name[1] == '.')) {
 			/*
 			 * If there's a '..' entry in anything other
@@ -962,6 +967,66 @@
 				return DIRENT_ABORT;
 		}
 
+		group = ext2fs_group_of_ino(fs, dirent->inode);
+		first_unused_inode = group * fs->super->s_inodes_per_group +
+					1 + fs->super->s_inodes_per_group -
+					fs->group_desc[group].bg_itable_unused;
+		cd->pctx.group = group;
+
+		/*
+		 * Check if the inode was missed out because
+		 * _INODE_UNINIT flag was set or bg_itable_unused was
+		 * incorrect.  If so, clear the _INODE_UNINIT flag and
+		 * restart e2fsck.  In the future it would be nice if
+		 * we could call a function in pass1.c that checks the
+		 * newly visible inodes.
+		 */
+		if (fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT) {
+			pctx.num = dirent->inode;
+			if (fix_problem(ctx, PR_2_INOREF_BG_INO_UNINIT,
+					&cd->pctx)){
+				fs->group_desc[group].bg_flags &=
+					~EXT2_BG_INODE_UNINIT;
+				ext2fs_mark_super_dirty(fs);
+				ctx->flags |= E2F_FLAG_RESTART_LATER;
+			} else {
+				ext2fs_unmark_valid(fs);
+				if (problem == PR_2_BAD_INO)
+					goto next;
+			}
+		} else if (dirent->inode >= first_unused_inode) {
+			pctx.num = dirent->inode;
+			if (fix_problem(ctx, PR_2_INOREF_IN_UNUSED, &cd->pctx)){
+				fs->group_desc[group].bg_itable_unused = 0;
+				ext2fs_mark_super_dirty(fs);
+				ctx->flags |= E2F_FLAG_RESTART_LATER;
+			} else {
+				ext2fs_unmark_valid(fs);
+				if (problem == PR_2_BAD_INO)
+					goto next;
+			}
+		}
+
+		if (!(ext2fs_test_inode_bitmap(ctx->inode_used_map,
+					       dirent->inode))) {
+			/*
+			 * If the inode is unused, offer to clear it.
+			 */
+			problem = PR_2_UNUSED_INODE;
+		}
+
+		if (problem) {
+			if (fix_problem(ctx, problem, &cd->pctx)) {
+				dirent->inode = 0;
+				dir_modified++;
+				goto next;
+			} else {
+				ext2fs_unmark_valid(fs);
+				if (problem == PR_2_BAD_INO)
+					goto next;
+			}
+		}
+
 		if (check_name(ctx, dirent, ino, &cd->pctx))
 			dir_modified++;
 
@@ -1006,7 +1071,7 @@
 				}
 				cd->pctx.ino2 = 0;
 			} else {
-				(void) e2fsck_dir_info_set_parent(ctx, 
+				(void) e2fsck_dir_info_set_parent(ctx,
 						  dirent->inode, ino);
 			}
 		}
@@ -1025,7 +1090,7 @@
 			dups_found++;
 		} else
 			dict_alloc_insert(&de_dict, dirent, dirent);
-		
+
 		ext2fs_icount_increment(ctx->inode_count, dirent->inode,
 					&links);
 		if (links > 1)
@@ -1033,7 +1098,9 @@
 		ctx->fs_total_count++;
 	next:
 		prev = dirent;
-		offset += dirent->rec_len;
+		if (dir_modified)
+			(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+		offset += rec_len;
 		dot_state++;
 	} while (offset < fs->blocksize);
 #if 0
@@ -1053,7 +1120,7 @@
 	}
 #endif /* ENABLE_HTREE */
 	if (offset != fs->blocksize) {
-		cd->pctx.num = dirent->rec_len - fs->blocksize + offset;
+		cd->pctx.num = rec_len - fs->blocksize + offset;
 		if (fix_problem(ctx, PR_2_FINAL_RECLEN, &cd->pctx)) {
 			dirent->rec_len = cd->pctx.num;
 			dir_modified++;
@@ -1071,8 +1138,8 @@
 	dict_free_nodes(&de_dict);
 	return 0;
 abort_free_dict:
-	dict_free_nodes(&de_dict);
 	ctx->flags |= E2F_FLAG_ABORT;
+	dict_free_nodes(&de_dict);
 	return DIRENT_ABORT;
 }
 
@@ -1088,7 +1155,7 @@
 				  void *priv_data)
 {
 	e2fsck_t	ctx = (e2fsck_t) priv_data;
-	
+
 	if (HOLE_BLKADDR(*block_nr))
 		return 0;
 	if ((*block_nr < fs->super->s_first_data_block) ||
@@ -1098,7 +1165,7 @@
 	ext2fs_block_alloc_stats(fs, *block_nr, -1);
 	return 0;
 }
-		
+
 /*
  * This fuction deallocates an inode
  */
@@ -1108,12 +1175,9 @@
 	struct ext2_inode	inode;
 	struct problem_context	pctx;
 	__u32			count;
-	
-	ext2fs_icount_store(ctx->inode_link_info, ino, 0);
+
 	e2fsck_read_inode(ctx, ino, &inode, "deallocate_inode");
-	inode.i_links_count = 0;
-	inode.i_dtime = ctx->now;
-	e2fsck_write_inode(ctx, ino, &inode, "deallocate_inode");
+	e2fsck_clear_inode(ctx, ino, &inode, 0, "deallocate_inode");
 	clear_problem_context(&pctx);
 	pctx.ino = ino;
 
@@ -1121,10 +1185,6 @@
 	 * Fix up the bitmaps...
 	 */
 	e2fsck_read_bitmaps(ctx);
-	ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
-	ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
-	if (ctx->inode_bad_map)
-		ext2fs_unmark_inode_bitmap(ctx->inode_bad_map, ino);
 	ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(inode.i_mode));
 
 	if (inode.i_file_acl &&
@@ -1171,7 +1231,7 @@
 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino)
 {
 	struct ext2_inode	inode;
-	
+
 	e2fsck_read_inode(ctx, ino, &inode, "clear_htree");
 	inode.i_flags = inode.i_flags & ~EXT2_INDEX_FL;
 	e2fsck_write_inode(ctx, ino, &inode, "clear_htree");
@@ -1225,7 +1285,7 @@
 		 && !e2fsck_pass1_check_device_inode(fs, &inode))
 		problem = PR_2_BAD_SOCKET;
 	else if (LINUX_S_ISLNK(inode.i_mode)
-		 && !e2fsck_pass1_check_symlink(fs, &inode, buf)) {
+		 && !e2fsck_pass1_check_symlink(fs, ino, &inode, buf)) {
 		problem = PR_2_INVALID_SYMLINK;
 	}
 
@@ -1239,7 +1299,7 @@
 			not_fixed++;
 		problem = 0;
 	}
-		
+
 	if (inode.i_faddr) {
 		if (fix_problem(ctx, PR_2_FADDR_ZERO, &pctx)) {
 			inode.i_faddr = 0;
@@ -1253,10 +1313,6 @@
 		frag = &inode.osd2.hurd2.h_i_frag;
 		fsize = &inode.osd2.hurd2.h_i_fsize;
 		break;
-	    case EXT2_OS_MASIX:
-		frag = &inode.osd2.masix2.m_i_frag;
-		fsize = &inode.osd2.masix2.m_i_fsize;
-		break;
 	    default:
 		frag = fsize = 0;
 	}
@@ -1280,7 +1336,7 @@
 	}
 
 	if ((fs->super->s_creator_os == EXT2_OS_LINUX) &&
-	    !(fs->super->s_feature_ro_compat & 
+	    !(fs->super->s_feature_ro_compat &
 	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
 	    (inode.osd2.linux2.l_i_blocks_hi != 0)) {
 		pctx.num = inode.osd2.linux2.l_i_blocks_hi;
@@ -1290,6 +1346,17 @@
 		}
 	}
 
+	if (!(fs->super->s_feature_incompat & 
+	     EXT4_FEATURE_INCOMPAT_64BIT) &&
+	    inode.osd2.linux2.l_i_file_acl_high != 0) {
+		pctx.num = inode.osd2.linux2.l_i_file_acl_high;
+		if (fix_problem(ctx, PR_2_I_FILE_ACL_HI_ZERO, &pctx)) {
+			inode.osd2.linux2.l_i_file_acl_high = 0;
+			inode_modified++;
+		} else
+			not_fixed++;
+	}
+
 	if (inode.i_file_acl &&
 	    ((inode.i_file_acl < fs->super->s_first_data_block) ||
 	     (inode.i_file_acl >= fs->super->s_blocks_count))) {
@@ -1324,7 +1391,7 @@
  */
 static int allocate_dir_block(e2fsck_t ctx,
 			      struct ext2_db_entry *db,
-			      char *buf EXT2FS_ATTR((unused)), 
+			      char *buf EXT2FS_ATTR((unused)),
 			      struct problem_context *pctx)
 {
 	ext2_filsys fs = ctx->fs;
@@ -1340,7 +1407,7 @@
 	 * them.
 	 */
 	e2fsck_read_bitmaps(ctx);
-	
+
 	/*
 	 * First, find a free block
 	 */
@@ -1381,7 +1448,7 @@
 	 * Update the inode block count
 	 */
 	e2fsck_read_inode(ctx, db->ino, &inode, "allocate_dir_block");
-	inode.i_blocks += fs->blocksize / 512;
+	ext2fs_iblk_add_blocks(fs, &inode, 1);
 	if (inode.i_size < (db->blockcnt+1) * fs->blocksize)
 		inode.i_size = (db->blockcnt+1) * fs->blocksize;
 	e2fsck_write_inode(ctx, db->ino, &inode, "allocate_dir_block");
@@ -1390,8 +1457,8 @@
 	 * Finally, update the block pointers for the inode
 	 */
 	db->blk = blk;
-	pctx->errcode = ext2fs_block_iterate2(fs, db->ino, BLOCK_FLAG_HOLE,
-				      0, update_dir_block, db);
+	pctx->errcode = ext2fs_bmap(fs, db->ino, &inode, 0, BMAP_SET,
+				    db->blockcnt, &blk);
 	if (pctx->errcode) {
 		pctx->str = "ext2fs_block_iterate";
 		fix_problem(ctx, PR_2_ALLOC_DIRBOCK, pctx);
@@ -1400,23 +1467,3 @@
 
 	return 0;
 }
-
-/*
- * This is a helper function for allocate_dir_block().
- */
-static int update_dir_block(ext2_filsys fs EXT2FS_ATTR((unused)),
-			    blk_t	*block_nr,
-			    e2_blkcnt_t blockcnt,
-			    blk_t ref_block EXT2FS_ATTR((unused)),
-			    int ref_offset EXT2FS_ATTR((unused)), 
-			    void *priv_data)
-{
-	struct ext2_db_entry *db;
-
-	db = (struct ext2_db_entry *) priv_data;
-	if (db->blockcnt == (int) blockcnt) {
-		*block_nr = db->blk;
-		return BLOCK_CHANGED;
-	}
-	return 0;
-}
diff --git a/e2fsck/pass3.c b/e2fsck/pass3.c
index b9c6edd..5a5fd3e 100644
--- a/e2fsck/pass3.c
+++ b/e2fsck/pass3.c
@@ -7,14 +7,14 @@
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Pass #3 assures that all directories are connected to the
  * filesystem tree, using the following algorithm:
  *
  * First, the root directory is checked to make sure it exists; if
  * not, e2fsck will offer to create a new one.  It is then marked as
  * "done".
- * 
+ *
  * Then, pass3 interates over all directory inodes; for each directory
  * it attempts to trace up the filesystem tree, using dirinfo.parent
  * until it reaches a directory which has been marked "done".  If it
@@ -24,7 +24,7 @@
  * twice, then it has detected a filesystem loop, and it will again
  * offer to reconnect the directory to /lost+found in to break the
  * filesystem loop.
- * 
+ *
  * Pass 3 also contains the subroutine, e2fsck_reconnect_file() to
  * reconnect inodes to /lost+found; this subroutine is also used by
  * pass 4.  e2fsck_reconnect_file() calls get_lost_and_found(), which
@@ -48,7 +48,7 @@
 
 static ext2fs_inode_bitmap inode_loop_detect = 0;
 static ext2fs_inode_bitmap inode_done_map = 0;
-	
+
 void e2fsck_pass3(e2fsck_t ctx)
 {
 	ext2_filsys fs = ctx->fs;
@@ -60,10 +60,7 @@
 	struct dir_info	*dir;
 	unsigned long maxdirs, count;
 
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
-
+	init_resource_track(&rtrack, ctx->fs->io);
 	clear_problem_context(&pctx);
 
 #ifdef MTRACE
@@ -84,12 +81,7 @@
 		ctx->flags |= E2F_FLAG_ABORT;
 		goto abort_exit;
 	}
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Peak memory"), &ctx->global_rtrack);
-	}
-#endif
+	print_resource_track(ctx, _("Peak memory"), &ctx->global_rtrack, NULL);
 
 	check_root(ctx);
 	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
@@ -103,7 +95,7 @@
 	if (ctx->progress)
 		if ((ctx->progress)(ctx, 3, 0, maxdirs))
 			goto abort_exit;
-	
+
 	iter = e2fsck_dir_info_iter_begin(ctx);
 	while ((dir = e2fsck_dir_info_iter(ctx, iter)) != 0) {
 		if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
@@ -127,7 +119,7 @@
 	 * optimized, do it here.
 	 */
 	e2fsck_rehash_directories(ctx);
-	
+
 abort_exit:
 	e2fsck_free_dir_info(ctx);
 	if (inode_loop_detect) {
@@ -139,12 +131,7 @@
 		inode_done_map = 0;
 	}
 
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Pass 3"), &rtrack);
-	}
-#endif
+	print_resource_track(ctx, _("Pass 3"), &rtrack, ctx->fs->io);
 }
 
 /*
@@ -158,9 +145,9 @@
 	struct ext2_inode	inode;
 	char *			block;
 	struct problem_context	pctx;
-	
+
 	clear_problem_context(&pctx);
-	
+
 	if (ext2fs_test_inode_bitmap(ctx->inode_used_map, EXT2_ROOT_INO)) {
 		/*
 		 * If the root inode is not a directory, die here.  The
@@ -182,7 +169,7 @@
 	}
 
 	e2fsck_read_bitmaps(ctx);
-	
+
 	/*
 	 * First, find a free block
 	 */
@@ -226,7 +213,7 @@
 	inode.i_size = fs->blocksize;
 	inode.i_atime = inode.i_ctime = inode.i_mtime = ctx->now;
 	inode.i_links_count = 2;
-	inode.i_blocks = fs->blocksize / 512;
+	ext2fs_iblk_set(fs, &inode, 1);
 	inode.i_block[0] = blk;
 
 	/*
@@ -239,7 +226,7 @@
 		ctx->flags |= E2F_FLAG_ABORT;
 		return;
 	}
-	
+
 	/*
 	 * Miscellaneous bookkeeping...
 	 */
@@ -260,7 +247,7 @@
  * the lost+found.  We have to do loop detection; if we ever discover
  * a loop, we treat that as a disconnected directory and offer to
  * reparent it to lost+found.
- * 
+ *
  * However, loop detection is expensive, because for very large
  * filesystems, the inode_loop_detect bitmap is huge, and clearing it
  * is non-trivial.  Loops in filesystems are also a rare error case,
@@ -301,7 +288,7 @@
 		 * reparent it to lost+found
 		 */
 		if (!parent ||
-		    (loop_pass && 
+		    (loop_pass &&
 		     (ext2fs_test_inode_bitmap(inode_loop_detect,
 					       parent)))) {
 			pctx->ino = ino;
@@ -309,7 +296,7 @@
 				if (e2fsck_reconnect_file(ctx, pctx->ino))
 					ext2fs_unmark_valid(fs);
 				else {
-					fix_dotdot(ctx, pctx->ino, 
+					fix_dotdot(ctx, pctx->ino,
 						   ctx->lost_and_found);
 					parent = ctx->lost_and_found;
 				}
@@ -333,7 +320,7 @@
 				pctx->errcode = ext2fs_allocate_inode_bitmap(fs, _("inode loop detection bitmap"), &inode_loop_detect);
 				if (pctx->errcode) {
 					pctx->num = 1;
-					fix_problem(ctx, 
+					fix_problem(ctx,
 				    PR_3_ALLOCATE_IBITMAP_ERROR, pctx);
 					ctx->flags |= E2F_FLAG_ABORT;
 					return -1;
@@ -379,7 +366,7 @@
 		return ctx->lost_and_found;
 
 	clear_problem_context(&pctx);
-	
+
 	retval = ext2fs_lookup(fs, EXT2_ROOT_INO, name,
 			       sizeof(name)-1, 0, &ino);
 	if (retval && !fix)
@@ -389,7 +376,7 @@
 			ctx->lost_and_found = ino;
 			return ino;
 		}
-				
+
 		/* Lost+found isn't a directory! */
 		if (!fix)
 			return 0;
@@ -418,7 +405,7 @@
 	 * them.
 	 */
 	e2fsck_read_bitmaps(ctx);
-	
+
 	/*
 	 * First, find a free block
 	 */
@@ -471,7 +458,7 @@
 	inode.i_size = fs->blocksize;
 	inode.i_atime = inode.i_ctime = inode.i_mtime = ctx->now;
 	inode.i_links_count = 2;
-	inode.i_blocks = fs->blocksize / 512;
+	ext2fs_iblk_set(fs, &inode, 1);
 	inode.i_block[0] = blk;
 
 	/*
@@ -530,7 +517,7 @@
 		fix_problem(ctx, PR_3_NO_LPF, &pctx);
 		return 1;
 	}
-	
+
 	sprintf(name, "#%u", ino);
 	if (ext2fs_read_inode(fs, ino, &inode) == 0)
 		file_type = ext2_file_type(inode.i_mode);
@@ -538,7 +525,7 @@
 	if (retval == EXT2_ET_DIR_NO_SPACE) {
 		if (!fix_problem(ctx, PR_3_EXPAND_LF_DIR, &pctx))
 			return 1;
-		retval = e2fsck_expand_directory(ctx, ctx->lost_and_found, 
+		retval = e2fsck_expand_directory(ctx, ctx->lost_and_found,
 						 1, 0);
 		if (retval) {
 			pctx.errcode = retval;
@@ -566,7 +553,7 @@
 	ext2_filsys fs = ctx->fs;
 	errcode_t		retval;
 	struct ext2_inode 	inode;
-	
+
 	if (!ino)
 		return 0;
 
@@ -592,7 +579,7 @@
 		ext2fs_icount_decrement(ctx->inode_link_info, ino, 0);
 		inode.i_links_count--;
 	}
-	
+
 	retval = ext2fs_write_inode(fs, ino, &inode);
 	if (retval)
 		return retval;
@@ -626,7 +613,7 @@
 		return 0;
 
 	clear_problem_context(&pctx);
-	
+
 	retval = e2fsck_adjust_inode_count(fp->ctx, dirent->inode, -1);
 	if (retval) {
 		pctx.errcode = retval;
@@ -640,7 +627,7 @@
 	dirent->inode = fp->parent;
 	if (fp->ctx->fs->super->s_feature_incompat &
 	    EXT2_FEATURE_INCOMPAT_FILETYPE)
-		dirent->name_len = (dirent->name_len & 0xFF) | 
+		dirent->name_len = (dirent->name_len & 0xFF) |
 			(EXT2_FT_DIR << 8);
 	else
 		dirent->name_len = dirent->name_len & 0xFF;
@@ -664,7 +651,7 @@
 #if 0
 	printf("Fixing '..' of inode %lu to be %lu...\n", ino, parent);
 #endif
-	
+
 	clear_problem_context(&pctx);
 	pctx.ino = ino;
 	retval = ext2fs_dir_iterate(fs, ino, DIRENT_FLAG_INCLUDE_EMPTY,
@@ -711,7 +698,7 @@
 	e2fsck_t	ctx;
 
 	ctx = es->ctx;
-	
+
 	if (es->guaranteed_size && blockcnt >= es->guaranteed_size)
 		return BLOCK_ABORT;
 
@@ -743,7 +730,7 @@
 		}
 		memset(block, 0, fs->blocksize);
 		retval = io_channel_write_blk(fs->io, new_blk, 1, block);
-	}	
+	}
 	if (retval) {
 		es->err = retval;
 		return BLOCK_ABORT;
@@ -753,7 +740,7 @@
 	ext2fs_mark_block_bitmap(ctx->block_found_map, new_blk);
 	ext2fs_block_alloc_stats(fs, new_blk, +1);
 	es->newblocks++;
-	
+
 	if (es->num == 0)
 		return (BLOCK_CHANGED | BLOCK_ABORT);
 	else
@@ -767,7 +754,7 @@
 	errcode_t	retval;
 	struct expand_dir_struct es;
 	struct ext2_inode	inode;
-	
+
 	if (!(fs->flags & EXT2_FLAG_RW))
 		return EXT2_ET_RO_FILSYS;
 
@@ -780,14 +767,14 @@
 	retval = ext2fs_check_directory(fs, dir);
 	if (retval)
 		return retval;
-	
+
 	es.num = num;
 	es.guaranteed_size = guaranteed_size;
 	es.last_block = 0;
 	es.err = 0;
 	es.newblocks = 0;
 	es.ctx = ctx;
-	
+
 	retval = ext2fs_block_iterate2(fs, dir, BLOCK_FLAG_APPEND,
 				       0, expand_dir_proc, &es);
 
@@ -800,9 +787,9 @@
 	retval = ext2fs_read_inode(fs, dir, &inode);
 	if (retval)
 		return retval;
-	
+
 	inode.i_size = (es.last_block + 1) * fs->blocksize;
-	inode.i_blocks += (fs->blocksize / 512) * es.newblocks;
+	ext2fs_iblk_add_blocks(fs, &inode, es.newblocks);
 
 	e2fsck_write_inode(ctx, dir, &inode, "expand_directory");
 
diff --git a/e2fsck/pass4.c b/e2fsck/pass4.c
index dfb3a37..d9706ce 100644
--- a/e2fsck/pass4.c
+++ b/e2fsck/pass4.c
@@ -15,51 +15,58 @@
 
 #include "e2fsck.h"
 #include "problem.h"
+#include <ext2fs/ext2_ext_attr.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.
  */
-static int disconnect_inode(e2fsck_t ctx, ext2_ino_t i)
+static int disconnect_inode(e2fsck_t ctx, ext2_ino_t i,
+			    struct ext2_inode *inode)
 {
 	ext2_filsys fs = ctx->fs;
-	struct ext2_inode	inode;
 	struct problem_context	pctx;
+	__u32 eamagic = 0;
+	int extra_size = 0;
 
-	e2fsck_read_inode(ctx, i, &inode, "pass4: disconnect_inode");
+	if (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE) {
+		e2fsck_read_inode_full(ctx, i, inode,EXT2_INODE_SIZE(fs->super),
+				       "pass4: disconnect_inode");
+		extra_size = ((struct ext2_inode_large *)inode)->i_extra_isize;
+	} else {
+		e2fsck_read_inode(ctx, i, inode, "pass4: disconnect_inode");
+	}
 	clear_problem_context(&pctx);
 	pctx.ino = i;
-	pctx.inode = &inode;
-	
+	pctx.inode = inode;
+
+	if (EXT2_INODE_SIZE(fs->super) -EXT2_GOOD_OLD_INODE_SIZE -extra_size >0)
+		eamagic = *(__u32 *)(((char *)inode) +EXT2_GOOD_OLD_INODE_SIZE +
+				     extra_size);
 	/*
 	 * Offer to delete any zero-length files that does not have
 	 * blocks.  If there is an EA block, it might have useful
 	 * information, so we won't prompt to delete it, but let it be
 	 * reconnected to lost+found.
 	 */
-	if (!inode.i_blocks && (LINUX_S_ISREG(inode.i_mode) ||
-				LINUX_S_ISDIR(inode.i_mode))) {
+	if (!inode->i_blocks && eamagic != EXT2_EXT_ATTR_MAGIC &&
+	    (LINUX_S_ISREG(inode->i_mode) || LINUX_S_ISDIR(inode->i_mode))) {
 		if (fix_problem(ctx, PR_4_ZERO_LEN_INODE, &pctx)) {
-			ext2fs_icount_store(ctx->inode_link_info, i, 0);
-			inode.i_links_count = 0;
-			inode.i_dtime = ctx->now;
-			e2fsck_write_inode(ctx, i, &inode,
+			e2fsck_clear_inode(ctx, i, inode, 0,
 					   "disconnect_inode");
 			/*
 			 * Fix up the bitmaps...
 			 */
 			e2fsck_read_bitmaps(ctx);
-			ext2fs_unmark_inode_bitmap(ctx->inode_used_map, i);
-			ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, i);
 			ext2fs_inode_alloc_stats2(fs, i, -1,
-						  LINUX_S_ISDIR(inode.i_mode));
+						  LINUX_S_ISDIR(inode->i_mode));
 			return 0;
 		}
 	}
-	
+
 	/*
 	 * Prompt to reconnect.
 	 */
@@ -83,7 +90,7 @@
 {
 	ext2_filsys fs = ctx->fs;
 	ext2_ino_t	i;
-	struct ext2_inode	inode;
+	struct ext2_inode	*inode;
 #ifdef RESOURCE_TRACK
 	struct resource_track	rtrack;
 #endif
@@ -91,10 +98,8 @@
 	__u16	link_count, link_counted;
 	char	*buf = 0;
 	int	group, maxgroup;
-	
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
+
+	init_resource_track(&rtrack, ctx->fs->io);
 
 #ifdef MTRACE
 	mtrace_print("Pass 4");
@@ -111,6 +116,9 @@
 		if ((ctx->progress)(ctx, 4, 0, maxgroup))
 			return;
 
+	inode = e2fsck_allocate_memory(ctx, EXT2_INODE_SIZE(fs->super),
+				       "scratch inode");
+
 	/* Protect loop from wrap-around if s_inodes_count maxed */
 	for (i=1; i <= fs->super->s_inodes_count && i > 0; i++) {
 		if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
@@ -138,26 +146,34 @@
 				     fs->blocksize, "bad_inode buffer");
 			if (e2fsck_process_bad_inode(ctx, 0, i, buf))
 				continue;
-			if (disconnect_inode(ctx, i))
+			if (disconnect_inode(ctx, i, inode))
 				continue;
 			ext2fs_icount_fetch(ctx->inode_link_info, i,
 					    &link_count);
 			ext2fs_icount_fetch(ctx->inode_count, i,
 					    &link_counted);
 		}
+		if (ext2fs_test_inode_bitmap(ctx->inode_dir_map, i) &&
+		    (link_counted > EXT2_LINK_MAX))
+			link_counted = 1;
 		if (link_counted != link_count) {
-			e2fsck_read_inode(ctx, i, &inode, "pass4");
+			e2fsck_read_inode(ctx, i, inode, "pass4");
 			pctx.ino = i;
-			pctx.inode = &inode;
-			if (link_count != inode.i_links_count) {
+			pctx.inode = inode;
+			if (link_count != inode->i_links_count) {
 				pctx.num = link_count;
 				fix_problem(ctx,
 					    PR_4_INCONSISTENT_COUNT, &pctx);
 			}
 			pctx.num = link_counted;
-			if (fix_problem(ctx, PR_4_BAD_REF_COUNT, &pctx)) {
-				inode.i_links_count = link_counted;
-				e2fsck_write_inode(ctx, i, &inode, "pass4");
+			/* i_link_count was previously exceeded, but no longer
+			 * is, fix this but don't consider it an error */
+			if ((LINUX_S_ISDIR(inode->i_mode) && link_counted > 1 &&
+			     (inode->i_flags & EXT2_INDEX_FL) &&
+			     link_count == 1 && !(ctx->options & E2F_OPT_NO)) ||
+			     (fix_problem(ctx, PR_4_BAD_REF_COUNT, &pctx))) {
+				inode->i_links_count = link_counted;
+				e2fsck_write_inode(ctx, i, inode, "pass4");
 			}
 		}
 	}
@@ -170,11 +186,8 @@
 errout:
 	if (buf)
 		ext2fs_free_mem(&buf);
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Pass 4"), &rtrack);
-	}
-#endif
+
+	ext2fs_free_mem(&inode);
+	print_resource_track(ctx, _("Pass 4"), &rtrack, ctx->fs->io);
 }
 
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
index 56619c3..bc3bf02 100644
--- a/e2fsck/pass5.c
+++ b/e2fsck/pass5.c
@@ -1,13 +1,13 @@
 /*
  * pass5.c --- check block and inode bitmaps against on-disk bitmaps
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include "e2fsck.h"
@@ -24,15 +24,12 @@
 	struct resource_track	rtrack;
 #endif
 	struct problem_context	pctx;
-	
+
 #ifdef MTRACE
 	mtrace_print("Pass 5");
 #endif
 
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
-	
+	init_resource_track(&rtrack, ctx->fs->io);
 	clear_problem_context(&pctx);
 
 	if (!(ctx->options & E2F_OPT_PREEN))
@@ -64,12 +61,7 @@
 	ext2fs_free_block_bitmap(ctx->block_found_map);
 	ctx->block_found_map = 0;
 
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track(_("Pass 5"), &rtrack);
-	}
-#endif
+	print_resource_track(ctx, _("Pass 5"), &rtrack, ctx->fs->io);
 }
 
 #define NO_BLK ((blk_t) -1)
@@ -111,17 +103,17 @@
 static void check_block_bitmaps(e2fsck_t ctx)
 {
 	ext2_filsys fs = ctx->fs;
-	blk_t	i, super;
+	blk_t	i;
 	int	*free_array;
 	int	group = 0;
-	unsigned int	blocks = 0;
-	unsigned int	free_blocks = 0;
+	blk_t	blocks = 0;
+	blk_t	free_blocks = 0;
 	int	group_free = 0;
 	int	actual, bitmap;
 	struct problem_context	pctx;
 	int	problem, save_problem, fixit, had_problem;
 	errcode_t	retval;
-	int		lazy_bg = 0;
+	int		csum_flag;
 	int		skip_group = 0;
 
 	clear_problem_context(&pctx);
@@ -158,28 +150,45 @@
 		goto errout;
 	}
 
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, EXT2_FEATURE_COMPAT_LAZY_BG))
-		lazy_bg++;
-
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 redo_counts:
 	had_problem = 0;
 	save_problem = 0;
 	pctx.blk = pctx.blk2 = NO_BLK;
-	if (lazy_bg && (fs->group_desc[group].bg_flags &
-			EXT2_BG_BLOCK_UNINIT))
+	if (csum_flag &&
+	    (fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT))
 		skip_group++;
-	super = fs->super->s_first_data_block;
 	for (i = fs->super->s_first_data_block;
 	     i < fs->super->s_blocks_count;
 	     i++) {
 		actual = ext2fs_fast_test_block_bitmap(ctx->block_found_map, i);
 
 		if (skip_group) {
-			if ((i >= super) &&
-			    (i <= super + fs->desc_blocks) &&
-			    ext2fs_bg_has_super(fs, group))
+			blk_t	super_blk, old_desc_blk, new_desc_blk;
+			int	old_desc_blocks;
+
+			ext2fs_super_and_bgd_loc(fs, group, &super_blk,
+					 &old_desc_blk, &new_desc_blk, 0);
+
+			if (fs->super->s_feature_incompat &
+			    EXT2_FEATURE_INCOMPAT_META_BG)
+				old_desc_blocks = fs->super->s_first_meta_bg;
+			else
+				old_desc_blocks = fs->desc_blocks +
+					fs->super->s_reserved_gdt_blocks;
+
+			bitmap = 0;
+			if (i == super_blk)
 				bitmap = 1;
-			else if (i == fs->group_desc[group].bg_block_bitmap)
+			if (old_desc_blk && old_desc_blocks &&
+			    (i >= old_desc_blk) &&
+			    (i < old_desc_blk + old_desc_blocks))
+				bitmap = 1;
+			if (new_desc_blk &&
+			    (i == new_desc_blk))
+				bitmap = 1;
+			if (i == fs->group_desc[group].bg_block_bitmap)
 				bitmap = 1;
 			else if (i == fs->group_desc[group].bg_inode_bitmap)
 				bitmap = 1;
@@ -187,8 +196,6 @@
 				 (i < fs->group_desc[group].bg_inode_table
 				  + fs->inode_blocks_per_group))
 				bitmap = 1;
-			else
-				bitmap = 0;
 			actual = (actual != 0);
 		} else
 			bitmap = ext2fs_fast_test_block_bitmap(fs->block_map, i);
@@ -206,6 +213,17 @@
 			 * Block used, but not marked in use in the bitmap.
 			 */
 			problem = PR_5_BLOCK_USED;
+
+			if (skip_group) {
+				struct problem_context pctx2;
+				pctx2.blk = i;
+				pctx2.group = group;
+				if (fix_problem(ctx, PR_5_BLOCK_UNINIT,&pctx2)){
+					fs->group_desc[group].bg_flags &=
+						~EXT2_BG_BLOCK_UNINIT;
+					skip_group = 0;
+				}
+			}
 		}
 		if (pctx.blk == NO_BLK) {
 			pctx.blk = pctx.blk2 = i;
@@ -224,7 +242,7 @@
 		had_problem++;
 
 	do_counts:
-		if (!bitmap && !skip_group) {
+		if (!bitmap && (!skip_group || csum_flag)) {
 			group_free++;
 			free_blocks++;
 		}
@@ -236,12 +254,11 @@
 			blocks = 0;
 			group_free = 0;
 			skip_group = 0;
-			super += fs->super->s_blocks_per_group;
 			if (ctx->progress)
 				if ((ctx->progress)(ctx, 5, group,
 						    fs->group_desc_count*2))
 					goto errout;
-			if (lazy_bg &&
+			if (csum_flag &&
 			    (i != fs->super->s_blocks_count-1) &&
 			    (fs->group_desc[group].bg_flags &
 			     EXT2_BG_BLOCK_UNINIT))
@@ -321,7 +338,7 @@
 	errcode_t	retval;
 	struct problem_context	pctx;
 	int		problem, save_problem, fixit, had_problem;
-	int		lazy_bg = 0;
+	int		csum_flag;
 	int		skip_group = 0;
 
 	clear_problem_context(&pctx);
@@ -358,16 +375,14 @@
 		goto errout;
 	}
 
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super,
-				    EXT2_FEATURE_COMPAT_LAZY_BG))
-		lazy_bg++;
-
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 redo_counts:
 	had_problem = 0;
 	save_problem = 0;
 	pctx.ino = pctx.ino2 = 0;
-	if (lazy_bg && (fs->group_desc[group].bg_flags &
-			EXT2_BG_INODE_UNINIT))
+	if (csum_flag &&
+	    (fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT))
 		skip_group++;
 
 	/* Protect loop from wrap-around if inodes_count is maxed */
@@ -390,6 +405,21 @@
 			 * Inode used, but not in bitmap
 			 */
 			problem = PR_5_INODE_USED;
+
+			/* We should never hit this, because it means that
+			 * inodes were marked in use that weren't noticed
+			 * in pass1 or pass 2. It is easier to fix the problem
+			 * than to kill e2fsck and leave the user stuck. */
+			if (skip_group) {
+				struct problem_context pctx2;
+				pctx2.blk = i;
+				pctx2.group = group;
+				if (fix_problem(ctx, PR_5_INODE_UNINIT,&pctx2)){
+					fs->group_desc[group].bg_flags &=
+						~EXT2_BG_INODE_UNINIT;
+					skip_group = 0;
+				}
+			}
 		}
 		if (pctx.ino == 0) {
 			pctx.ino = pctx.ino2 = i;
@@ -411,7 +441,7 @@
 		if (bitmap) {
 			if (ext2fs_test_inode_bitmap(ctx->inode_dir_map, i))
 				dirs_count++;
-		} else if (!skip_group) {
+		} else if (!skip_group || csum_flag) {
 			group_free++;
 			free_inodes++;
 		}
@@ -430,7 +460,7 @@
 					    group + fs->group_desc_count,
 					    fs->group_desc_count*2))
 					goto errout;
-			if (lazy_bg &&
+			if (csum_flag &&
 			    (i != fs->super->s_inodes_count) &&
 			    (fs->group_desc[group].bg_flags &
 			     EXT2_BG_INODE_UNINIT))
@@ -531,11 +561,11 @@
 	if (save_inodes_count == end)
 		return;
 
-	/* protect loop from wrap-around if end is maxed */	
+	/* protect loop from wrap-around if end is maxed */
 	for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
 		if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
 			if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
-				for (i = save_inodes_count + 1; i <= end; i++)
+				for (; i <= end; i++)
 					ext2fs_mark_inode_bitmap(fs->inode_map,
 								 i);
 				ext2fs_mark_ib_dirty(fs);
@@ -563,7 +593,7 @@
 
 	clear_problem_context(&pctx);
 
-	end = fs->block_map->start +
+	end = ext2fs_get_block_bitmap_start(fs->block_map) +
 		(EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count) - 1;
 	pctx.errcode = ext2fs_fudge_block_bitmap_end(fs->block_map, end,
 						     &save_blocks_count);
@@ -576,11 +606,11 @@
 	if (save_blocks_count == end)
 		return;
 
-	/* Protect loop from wrap-around if end is maxed */	
+	/* Protect loop from wrap-around if end is maxed */
 	for (i = save_blocks_count + 1; i <= end && i > save_blocks_count; i++) {
 		if (!ext2fs_test_block_bitmap(fs->block_map, i)) {
 			if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) {
-				for (i = save_blocks_count + 1; i <= end; i++)
+				for (; i <= end; i++)
 					ext2fs_mark_block_bitmap(fs->block_map,
 								 i);
 				ext2fs_mark_bb_dirty(fs);
diff --git a/e2fsck/problem.c b/e2fsck/problem.c
index e00dbc1..9043281 100644
--- a/e2fsck/problem.c
+++ b/e2fsck/problem.c
@@ -26,16 +26,16 @@
 #define PROMPT_RELOCATE	3
 #define PROMPT_ALLOCATE 4
 #define PROMPT_EXPAND	5
-#define PROMPT_CONNECT 	6
+#define PROMPT_CONNECT	6
 #define PROMPT_CREATE	7
 #define PROMPT_SALVAGE	8
 #define PROMPT_TRUNCATE	9
 #define PROMPT_CLEAR_INODE 10
-#define PROMPT_ABORT 	11
-#define PROMPT_SPLIT 	12
+#define PROMPT_ABORT	11
+#define PROMPT_SPLIT	12
 #define PROMPT_CONTINUE	13
 #define PROMPT_CLONE	14
-#define PROMPT_DELETE 	15
+#define PROMPT_DELETE	15
 #define PROMPT_SUPPRESS 16
 #define PROMPT_UNLINK	17
 #define PROMPT_CLEAR_HTREE 18
@@ -54,7 +54,7 @@
 	N_("Allocate"),		/* 4 */
 	N_("Expand"),		/* 5 */
 	N_("Connect to /lost+found"), /* 6 */
-	N_("Create"),		/* 7 */	
+	N_("Create"),		/* 7 */
 	N_("Salvage"),		/* 8 */
 	N_("Truncate"),		/* 9 */
 	N_("Clear inode"),	/* 10 */
@@ -104,11 +104,11 @@
 
 	/* Block bitmap not in group */
 	{ PR_0_BB_NOT_GROUP, N_("@b @B for @g %g is not in @g.  (@b %b)\n"),
-	  PROMPT_RELOCATE, PR_LATCH_RELOC }, 
+	  PROMPT_RELOCATE, PR_LATCH_RELOC },
 
 	/* Inode bitmap not in group */
 	{ PR_0_IB_NOT_GROUP, N_("@i @B for @g %g is not in @g.  (@b %b)\n"),
-	  PROMPT_RELOCATE, PR_LATCH_RELOC }, 
+	  PROMPT_RELOCATE, PR_LATCH_RELOC },
 
 	/* Inode table not in group */
 	{ PR_0_ITABLE_NOT_GROUP,
@@ -132,7 +132,7 @@
 	  "Either the @S or the partition table is likely to be corrupt!\n"),
 	  PROMPT_ABORT, 0 },
 
-	/* Fragments not supported */		  
+	/* Fragments not supported */
 	{ PR_0_NO_FRAGMENTS,
 	  N_("@S @b_size = %b, fragsize = %c.\n"
 	  "This version of e2fsck does not support fragment sizes different\n"
@@ -148,7 +148,7 @@
 	{ PR_0_FIRST_DATA_BLOCK,
 	  N_("@S first_data_@b = %b, should have been %c\n"),
 	  PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
-	
+
 	/* Adding UUID to filesystem */
 	{ PR_0_ADD_UUID,
 	  N_("@f did not have a UUID; generating one.\n\n"),
@@ -169,7 +169,7 @@
 	  PROMPT_NONE, PR_AFTER_CODE, PR_0_SB_CORRUPT },
 
 	/* Error determing physical device size of filesystem */
-	{ PR_0_GETSIZE_ERROR,	  
+	{ PR_0_GETSIZE_ERROR,
 	  N_("Error determining size of the physical @v: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
@@ -184,7 +184,7 @@
 
 	/* Journal inode is invalid */
 	{ PR_0_JOURNAL_BAD_INODE,
-	  N_("@S has an @n ext3 @j (@i %i).\n"),
+	  N_("@S has an @n @j (@i %i).\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
 	/* The external journal has (unsupported) multiple filesystems */
@@ -209,7 +209,7 @@
 
 	/* Journal has an unknown superblock type */
 	{ PR_0_JOURNAL_UNSUPP_SUPER,
-	  N_("Ext3 @j @S is unknown type %N (unsupported).\n"
+	  N_("@f @j @S is unknown type %N (unsupported).\n"
 	     "It is likely that your copy of e2fsck is old and/or doesn't "
 	     "support this @j format.\n"
 	     "It is also possible the @j @S is corrupt.\n"),
@@ -217,22 +217,22 @@
 
 	/* Journal superblock is corrupt */
 	{ PR_0_JOURNAL_BAD_SUPER,
-	  N_("Ext3 @j @S is corrupt.\n"),
+	  N_("@j @S is corrupt.\n"),
 	  PROMPT_FIX, PR_PREEN_OK },
 
-	/* Superblock flag should be cleared */
+	/* Superblock has_journal flag is clear but has a journal */
 	{ PR_0_JOURNAL_HAS_JOURNAL,
-	  N_("@S doesn't have has_@j flag, but has ext3 @j %s.\n"),
+	  N_("@S has_@j flag is clear, but a @j %s is present.\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
-	/* Superblock flag is incorrect */
+	/* Superblock needs_recovery flag is set but not journal is present */
 	{ PR_0_JOURNAL_RECOVER_SET,
-	  N_("@S has ext3 needs_recovery flag set, but no @j.\n"),
+	  N_("@S needs_recovery flag is set, but no @j is present.\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
-	/* Journal has data, but recovery flag is clear */
+	/* Superblock needs_recovery flag is set, but journal has data */
 	{ PR_0_JOURNAL_RECOVERY_CLEAR,
-	  N_("ext3 recovery flag is clear, but @j has data.\n"),
+	  N_("@S needs_recovery flag is clear, but @j has data.\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Ask if we should clear the journal */
@@ -240,15 +240,10 @@
 	  N_("Clear @j"),
 	  PROMPT_NULL, PR_PREEN_NOMSG },
 
-	/* Ask if we should run the journal anyway */
-	{ PR_0_JOURNAL_RUN,
-	  N_("Run @j anyway"),
-	  PROMPT_NULL, 0 },
-
-	/* Run the journal by default */
-	{ PR_0_JOURNAL_RUN_DEFAULT,
-	  N_("Recovery flag not set in backup @S, so running @j anyway.\n"),
-	  PROMPT_NONE, 0 },
+	/* Filesystem revision is 0, but feature flags are set */
+	{ PR_0_FS_REV_LEVEL,
+	  N_("@f has feature flag(s) set, but is a revision 0 @f.  "),
+	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
 
 	/* Clearing orphan inode */
 	{ PR_0_ORPHAN_CLEAR_INODE,
@@ -257,14 +252,14 @@
 
 	/* Illegal block found in orphaned inode */
 	{ PR_0_ORPHAN_ILLEGAL_BLOCK_NUM,
-	   N_("@I @b #%B (%b) found in @o @i %i.\n"),
+	   N_("@I %B (%b) found in @o @i %i.\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Already cleared block found in orphaned inode */
 	{ PR_0_ORPHAN_ALREADY_CLEARED_BLOCK,
-	   N_("Already cleared @b #%B (%b) found in @o @i %i.\n"),
+	   N_("Already cleared %B (%b) found in @o @i %i.\n"),
 	  PROMPT_NONE, 0 },
-  
+
 	/* Illegal orphan inode in superblock */
 	{ PR_0_ORPHAN_ILLEGAL_HEAD_INODE,
 	  N_("@I @o @i %i in @S.\n"),
@@ -275,19 +270,14 @@
 	  N_("@I @i %i in @o @i list.\n"),
 	  PROMPT_NONE, 0 },
 
-	/* Filesystem revision is 0, but feature flags are set */
-	{ PR_0_FS_REV_LEVEL,
-	  N_("@f has feature flag(s) set, but is a revision 0 @f.  "),
-	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
-
 	/* Journal superblock has an unknown read-only feature flag set */
 	{ PR_0_JOURNAL_UNSUPP_ROCOMPAT,
-	  N_("Ext3 @j @S has an unknown read-only feature flag set.\n"),
+	  N_("@j @S has an unknown read-only feature flag set.\n"),
 	  PROMPT_ABORT, 0 },
 
 	/* Journal superblock has an unknown incompatible feature flag set */
 	{ PR_0_JOURNAL_UNSUPP_INCOMPAT,
-	  N_("Ext3 @j @S has an unknown incompatible feature flag set.\n"),
+	  N_("@j @S has an unknown incompatible feature flag set.\n"),
 	  PROMPT_ABORT, 0 },
 
 	/* Journal has unsupported version number */
@@ -311,6 +301,16 @@
 	     "Clearing fields beyond the V1 @j @S...\n\n"),
 	  PROMPT_NONE, 0 },
 
+	/* Ask if we should run the journal anyway */
+	{ PR_0_JOURNAL_RUN,
+	  N_("Run @j anyway"),
+	  PROMPT_NULL, 0 },
+
+	/* Run the journal by default */
+	{ PR_0_JOURNAL_RUN_DEFAULT,
+	  N_("Recovery flag not set in backup @S, so running @j anyway.\n"),
+	  PROMPT_NONE, 0 },
+
 	/* Backup journal inode blocks */
 	{ PR_0_BACKUP_JNL,
 	  N_("Backing up @j @i @b information.\n\n"),
@@ -334,13 +334,13 @@
 
 	/* Last mount time is in the future */
 	{ PR_0_FUTURE_SB_LAST_MOUNT,
-	  N_("@S last mount time is in the future.  "),
-	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+	  N_("@S last mount time (%t,\n\tnow = %T) is in the future.\n"),
+	  PROMPT_FIX, PR_NO_OK },
 
 	/* Last write time is in the future */
 	{ PR_0_FUTURE_SB_LAST_WRITE,
-	  N_("@S last write time is in the future.  "),
-	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+	  N_("@S last write time (%t,\n\tnow = %T) is in the future.\n"),
+	  PROMPT_FIX, PR_NO_OK },
 
 	{ PR_0_EXTERNAL_JOURNAL_HINT,
 	  N_("@S hint for external superblock @s %X.  "),
@@ -351,16 +351,67 @@
 	  N_("Adding dirhash hint to @f.\n\n"),
 	  PROMPT_NONE, 0 },
 
+	/* group descriptor N checksum is invalid. */
+	{ PR_0_GDT_CSUM,
+	  N_("@g descriptor %g checksum is invalid.  "),
+	     PROMPT_FIX, PR_LATCH_BG_CHECKSUM },
+
+	/* group descriptor N marked uninitialized without feature set. */
+	{ PR_0_GDT_UNINIT,
+	  N_("@g descriptor %g marked uninitialized without feature set.\n"),
+	     PROMPT_FIX, PR_PREEN_OK },
+
+	/* group N block bitmap uninitialized but inode bitmap in use. */
+	{ PR_0_BB_UNINIT_IB_INIT,
+	  N_("@g %g @b @B uninitialized but @i @B in use.\n"),
+	     PROMPT_FIX, PR_PREEN_OK },
+
+	/* Group descriptor N has invalid unused inodes count. */
+	{ PR_0_GDT_ITABLE_UNUSED,
+	  N_("@g descriptor %g has invalid unused inodes count %b.  "),
+	     PROMPT_FIX, PR_PREEN_OK },
+
+	/* Last group block bitmap uninitialized. */
+	{ PR_0_BB_UNINIT_LAST,
+	  N_("Last @g @b @B uninitialized.  "),
+	     PROMPT_FIX, PR_PREEN_OK },
+
+	/* Journal transaction found corrupt */
+	{ PR_0_JNL_TXN_CORRUPT,
+	  N_("Journal transaction %i was corrupt, replay was aborted.\n"),
+	  PROMPT_NONE, 0 },
+
+	{ PR_0_CLEAR_TESTFS_FLAG,
+	  N_("The test_fs flag is set (and ext4 is available).  "),
+	  PROMPT_CLEAR, PR_PREEN_OK },
+
+	/* Last mount time is in the future (fudged) */
+	{ PR_0_FUTURE_SB_LAST_MOUNT_FUDGED,
+	  N_("@S last mount time is in the future.\n\t(by less than a day, "
+	     "probably due to the hardware clock being incorrectly set)  "),
+	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+
+	/* Last write time is in the future (fudged) */
+	{ PR_0_FUTURE_SB_LAST_WRITE_FUDGED,
+	  N_("@S last write time is in the future.\n\t(by less than a day, "
+	     "probably due to the hardware clock being incorrectly set).  "),
+	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+
+	/* Block group checksum (latch question) is invalid. */
+	{ PR_0_GDT_CSUM_LATCH,
+	  N_("One or more @b @g descriptor checksums are invalid.  "),
+	     PROMPT_FIX, PR_PREEN_OK },
+
 	/* Pass 1 errors */
-	
+
 	/* Pass 1: Checking inodes, blocks, and sizes */
 	{ PR_1_PASS_HEADER,
 	  N_("Pass 1: Checking @is, @bs, and sizes\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Root directory is not an inode */
 	{ PR_1_ROOT_NO_DIR, N_("@r is not a @d.  "),
-	  PROMPT_CLEAR, 0 }, 
+	  PROMPT_CLEAR, 0 },
 
 	/* Root directory has dtime set */
 	{ PR_1_ROOT_DTIME,
@@ -416,7 +467,7 @@
 	{ PR_1_BAD_I_SIZE,
 	  N_("@i %i, i_size is %Is, @s %N.  "),
 	  PROMPT_FIX, PR_PREEN_OK },
-		  
+
 	/* Inode has incorrect i_blocks */
 	{ PR_1_BAD_I_BLOCKS,
 	  N_("@i %i, i_@bs is %Ib, @s %N.  "),
@@ -424,12 +475,12 @@
 
 	/* Illegal blocknumber in inode */
 	{ PR_1_ILLEGAL_BLOCK_NUM,
-	  N_("@I @b #%B (%b) in @i %i.  "),
+	  N_("@I %B (%b) in @i %i.  "),
 	  PROMPT_CLEAR, PR_LATCH_BLOCK },
 
 	/* Block number overlaps fs metadata */
 	{ PR_1_BLOCK_OVERLAPS_METADATA,
-	  N_("@b #%B (%b) overlaps @f metadata in @i %i.  "),
+	  N_("%B (%b) overlaps @f metadata in @i %i.  "),
 	  PROMPT_CLEAR, PR_LATCH_BLOCK },
 
 	/* Inode has illegal blocks (latch question) */
@@ -440,11 +491,11 @@
 	/* Too many bad blocks in inode */
 	{ PR_1_TOO_MANY_BAD_BLOCKS,
 	  N_("Too many illegal @bs in @i %i.\n"),
-	  PROMPT_CLEAR_INODE, PR_NO_OK }, 	
+	  PROMPT_CLEAR_INODE, PR_NO_OK },
 
 	/* Illegal block number in bad block inode */
 	{ PR_1_BB_ILLEGAL_BLOCK_NUM,
-	  N_("@I @b #%B (%b) in bad @b @i.  "),
+	  N_("@I %B (%b) in bad @b @i.  "),
 	  PROMPT_CLEAR, PR_LATCH_BBLOCK },
 
 	/* Bad block inode has illegal blocks (latch question) */
@@ -457,12 +508,12 @@
 	  N_("Duplicate or bad @b in use!\n"),
 	  PROMPT_NONE, 0 },
 
-	/* Bad block used as bad block indirect block */	  
+	/* Bad block used as bad block indirect block */
 	{ PR_1_BBINODE_BAD_METABLOCK,
 	  N_("Bad @b %b used as bad @b @i indirect @b.  "),
 	  PROMPT_CLEAR, PR_LATCH_BBLOCK },
 
-	/* Inconsistency can't be fixed prompt */	  
+	/* Inconsistency can't be fixed prompt */
 	{ PR_1_BBINODE_BAD_METABLOCK_PROMPT,
 	  N_("\nThe bad @b @i has probably been corrupted.  You probably\n"
 	     "should stop now and run ""e2fsck -c"" to scan for bad blocks\n"
@@ -470,12 +521,12 @@
 	  PROMPT_CONTINUE, PR_PREEN_NOMSG },
 
 	/* Bad primary block */
-	{ PR_1_BAD_PRIMARY_BLOCK,  
+	{ PR_1_BAD_PRIMARY_BLOCK,
 	  N_("\nIf the @b is really bad, the @f can not be fixed.\n"),
 	  PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK_PROMPT },
-		  
+
 	/* Bad primary block prompt */
-	{ PR_1_BAD_PRIMARY_BLOCK_PROMPT,	  
+	{ PR_1_BAD_PRIMARY_BLOCK_PROMPT,
 	  N_("You can remove this @b from the bad @b list and hope\n"
 	     "that the @b is really OK.  But there are no guarantees.\n\n"),
 	  PROMPT_CLEAR, PR_PREEN_NOMSG },
@@ -484,25 +535,25 @@
 	{ PR_1_BAD_PRIMARY_SUPERBLOCK,
 	  N_("The primary @S (%b) is on the bad @b list.\n"),
 	  PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK },
-		  
+
 	/* Bad primary block group descriptors */
 	{ PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR,
 	  N_("Block %b in the primary @g descriptors "
 	  "is on the bad @b list\n"),
 	  PROMPT_NONE, PR_AFTER_CODE, PR_1_BAD_PRIMARY_BLOCK },
-		  
+
 	/* Bad superblock in group */
 	{ PR_1_BAD_SUPERBLOCK,
 	  N_("Warning: Group %g's @S (%b) is bad.\n"),
 	  PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG },
-		  
+
 	/* Bad block group descriptors in group */
 	{ PR_1_BAD_GROUP_DESCRIPTORS,
 	  N_("Warning: Group %g's copy of the @g descriptors has a bad "
 	  "@b (%b).\n"),
 	  PROMPT_NONE, PR_PREEN_OK | PR_PREEN_NOMSG },
 
-	/* Block claimed for no reason */	  
+	/* Block claimed for no reason */
 	{ PR_1_PROGERR_CLAIMED_BLOCK,
 	  N_("Programming error?  @b #%b claimed for no reason in "
 	  "process_bad_@b.\n"),
@@ -512,27 +563,27 @@
 	{ PR_1_RELOC_BLOCK_ALLOCATE,
 	  N_("@A %N contiguous @b(s) in @b @g %g for %s: %m\n"),
 	  PROMPT_NONE, PR_PREEN_OK },
-		
+
 	/* Error allocating block buffer during relocation process */
 	{ PR_1_RELOC_MEMORY_ALLOCATE,
 	  N_("@A @b buffer for relocating %s\n"),
 	  PROMPT_NONE, PR_PREEN_OK },
-		
-	/* Relocating metadata group information from X to Y */	
+
+	/* Relocating metadata group information from X to Y */
 	{ PR_1_RELOC_FROM_TO,
 	  N_("Relocating @g %g's %s from %b to %c...\n"),
 	  PROMPT_NONE, PR_PREEN_OK },
-		
+
 	/* Relocating metatdata group information to X */
 	{ PR_1_RELOC_TO,
 	  N_("Relocating @g %g's %s to %c...\n"), /* xgettext:no-c-format */
 	  PROMPT_NONE, PR_PREEN_OK },
-		
+
 	/* Block read error during relocation process */
 	{ PR_1_RELOC_READ_ERR,
 	  N_("Warning: could not read @b %b of %s: %m\n"),
 	  PROMPT_NONE, PR_PREEN_OK },
-		
+
 	/* Block write error during relocation process */
 	{ PR_1_RELOC_WRITE_ERR,
 	  N_("Warning: could not write @b %b for %s: %m\n"),
@@ -548,12 +599,12 @@
 	  N_("@A @b @B (%N): %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
-	/* Error allocating icount structure */
+	/* Error allocating icount link information */
 	{ PR_1_ALLOCATE_ICOUNT,
 	  N_("@A icount link information: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
-	/* Error allocating dbcount */
+	/* Error allocating directory block array */
 	{ PR_1_ALLOCATE_DBCOUNT,
 	  N_("@A @d @b array: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
@@ -568,25 +619,25 @@
 	  N_("Error while iterating over @bs in @i %i: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
-	/* Error while storing inode count information */	  
+	/* Error while storing inode count information */
 	{ PR_1_ICOUNT_STORE,
 	  N_("Error storing @i count information (@i=%i, count=%N): %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
-	/* Error while storing directory block information */	  
+	/* Error while storing directory block information */
 	{ PR_1_ADD_DBLOCK,
 	  N_("Error storing @d @b information "
 	  "(@i=%i, @b=%b, num=%N): %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
-	/* Error while reading inode (for clearing) */	  
+	/* Error while reading inode (for clearing) */
 	{ PR_1_READ_INODE,
 	  N_("Error reading @i %i: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
 
 	/* Suppress messages prompt */
 	{ PR_1_SUPPRESS_MESSAGES, "", PROMPT_SUPPRESS, PR_NO_OK },
-		  
+
 	/* Imagic flag set on an inode when filesystem doesn't support it */
 	{ PR_1_SET_IMAGIC,
 	  N_("@i %i has imagic flag set.  "),
@@ -613,11 +664,11 @@
 	  N_("@f has feature flag(s) set, but is a revision 0 @f.  "),
 	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
 
-	/* Journal inode is not in use, but contains data */	  
+	/* Journal inode is not in use, but contains data */
 	{ PR_1_JOURNAL_INODE_NOT_CLEAR,
 	  N_("@j @i is not in use, but contains data.  "),
-	  PROMPT_CLEAR, PR_PREEN_OK },	  
-	  
+	  PROMPT_CLEAR, PR_PREEN_OK },
+
 	/* Journal has bad mode */
 	{ PR_1_JOURNAL_BAD_MODE,
 	  N_("@j is not regular file.  "),
@@ -626,14 +677,14 @@
 	/* Deal with inodes that were part of orphan linked list */
 	{ PR_1_LOW_DTIME,
 	  N_("@i %i was part of the @o @i list.  "),
-	  PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 },    
+	  PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 },
 
 	/* Deal with inodes that were part of corrupted orphan linked
 	   list (latch question) */
 	{ PR_1_ORPHAN_LIST_REFUGEES,
 	  N_("@is that were part of a corrupted orphan linked list found.  "),
-	  PROMPT_FIX, 0 },		  
-		  
+	  PROMPT_FIX, 0 },
+
 	/* Error allocating refcount structure */
 	{ PR_1_ALLOCATE_REFCOUNT,
 	  N_("@A refcount structure (%N): %m\n"),
@@ -653,13 +704,13 @@
 	{ PR_1_EXTATTR_READ_ABORT,
 	  N_("Error reading @a @b %b (%m).  "),
 	  PROMPT_ABORT, 0 },
-		  
+
 	/* Extended attribute reference count incorrect */
 	{ PR_1_EXTATTR_REFCOUNT,
-	  N_("@a @b %b has reference count %B, @s %N.  "),
+	  N_("@a @b %b has reference count %r, @s %N.  "),
 	  PROMPT_FIX, 0 },
-		  
-	/* Error writing Extended Attribute block while fixing refcount */ 
+
+	/* Error writing Extended Attribute block while fixing refcount */
 	{ PR_1_EXTATTR_WRITE,
 	  N_("Error writing @a @b %b (%m).  "),
 	  PROMPT_ABORT, 0 },
@@ -667,22 +718,22 @@
 	/* Multiple EA blocks not supported */
 	{ PR_1_EA_MULTI_BLOCK,
 	  N_("@a @b %b has h_@bs > 1.  "),
-	  PROMPT_CLEAR, 0},	  
+	  PROMPT_CLEAR, 0},
 
 	/* Error allocating EA region allocation structure */
 	{ PR_1_EA_ALLOC_REGION,
 	  N_("@A @a @b %b.  "),
 	  PROMPT_ABORT, 0},
-	
+
 	/* Error EA allocation collision */
 	{ PR_1_EA_ALLOC_COLLISION,
 	  N_("@a @b %b is corrupt (allocation collision).  "),
 	  PROMPT_CLEAR, 0},
-	
+
 	/* Bad extended attribute name */
 	{ PR_1_EA_BAD_NAME,
 	  N_("@a @b %b is corrupt (@n name).  "),
-	  PROMPT_CLEAR, 0},	  
+	  PROMPT_CLEAR, 0},
 
 	/* Bad extended attribute value */
 	{ PR_1_EA_BAD_VALUE,
@@ -694,18 +745,18 @@
 	  N_("@i %i is too big.  "), PROMPT_TRUNCATE, 0 },
 
 	/* Directory too big */
-	{ PR_1_TOOBIG_DIR, 
-	  N_("@b #%B (%b) causes @d to be too big.  "),
+	{ PR_1_TOOBIG_DIR,
+	  N_("%B (%b) causes @d to be too big.  "),
 	  PROMPT_CLEAR, PR_LATCH_TOOBIG },
 
 	/* Regular file too big */
 	{ PR_1_TOOBIG_REG,
-	  N_("@b #%B (%b) causes file to be too big.  "),
+	  N_("%B (%b) causes file to be too big.  "),
 	  PROMPT_CLEAR, PR_LATCH_TOOBIG },
 
 	/* Symlink too big */
 	{ PR_1_TOOBIG_SYMLINK,
-	  N_("@b #%B (%b) causes symlink to be too big.  "),
+	  N_("%B (%b) causes symlink to be too big.  "),
 	  PROMPT_CLEAR, PR_LATCH_TOOBIG },
 
 	/* INDEX_FL flag set on a non-HTREE filesystem */
@@ -713,31 +764,31 @@
 	  N_("@i %i has INDEX_FL flag set on @f without htree support.\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
-	/* INDEX_FL flag set on a non-directory */	
+	/* INDEX_FL flag set on a non-directory */
 	{ PR_1_HTREE_NODIR,
 	  N_("@i %i has INDEX_FL flag set but is not a @d.\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
-	/* Invalid root node in HTREE directory */	
+	/* Invalid root node in HTREE directory */
 	{ PR_1_HTREE_BADROOT,
 	  N_("@h %i has an @n root node.\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
-	/* Unsupported hash version in HTREE directory */	
+	/* Unsupported hash version in HTREE directory */
 	{ PR_1_HTREE_HASHV,
 	  N_("@h %i has an unsupported hash version (%N)\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
-	/* Incompatible flag in HTREE root node */	
+	/* Incompatible flag in HTREE root node */
 	{ PR_1_HTREE_INCOMPAT,
 	  N_("@h %i uses an incompatible htree root node flag.\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
-	/* HTREE too deep */	
+	/* HTREE too deep */
 	{ PR_1_HTREE_DEPTH,
 	  N_("@h %i has a tree depth (%N) which is too big\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
-		  
+
 	/* Bad block has indirect block that conflicts with filesystem block */
 	{ PR_1_BB_FS_BLOCK,
 	  N_("Bad @b @i has an indirect @b (%b) that conflicts with\n"
@@ -749,34 +800,34 @@
 	  N_("Resize @i (re)creation failed: %m."),
 	  PROMPT_ABORT, 0 },
 
-	/* invalid inode->i_extra_isize */	
+	/* invalid inode->i_extra_isize */
 	{ PR_1_EXTRA_ISIZE,
 	  N_("@i %i has a extra size (%IS) which is @n\n"),
 	  PROMPT_FIX, PR_PREEN_OK },
 
-	/* invalid ea entry->e_name_len */	
+	/* invalid ea entry->e_name_len */
 	{ PR_1_ATTR_NAME_LEN,
 	  N_("@a in @i %i has a namelen (%N) which is @n\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
-	/* invalid ea entry->e_value_size */	
-	{ PR_1_ATTR_VALUE_SIZE,
-	  N_("@a in @i %i has a value size (%N) which is @n\n"),
-	  PROMPT_CLEAR, PR_PREEN_OK },
-
-	/* invalid ea entry->e_value_offs */	
+	/* invalid ea entry->e_value_offs */
 	{ PR_1_ATTR_VALUE_OFFSET,
 	  N_("@a in @i %i has a value offset (%N) which is @n\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
-	/* invalid ea entry->e_value_block */	
+	/* invalid ea entry->e_value_block */
 	{ PR_1_ATTR_VALUE_BLOCK,
 	  N_("@a in @i %i has a value @b (%N) which is @n (must be 0)\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
-	/* invalid ea entry->e_hash */	
+	/* invalid ea entry->e_value_size */
+	{ PR_1_ATTR_VALUE_SIZE,
+	  N_("@a in @i %i has a value size (%N) which is @n\n"),
+	  PROMPT_CLEAR, PR_PREEN_OK },
+
+	/* invalid ea entry->e_hash */
 	{ PR_1_ATTR_HASH,
-	  N_("@a in @i %i has a hash (%N) which is @n (must be 0)\n"),
+	  N_("@a in @i %i has a hash (%N) which is @n\n"),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
 	/* inode appears to be a directory */
@@ -784,6 +835,56 @@
 	  N_("@i %i is a %It but it looks like it is really a directory.\n"),
 	  PROMPT_FIX, 0 },
 
+	/* Error while reading extent tree */
+	{ PR_1_READ_EXTENT,
+	  N_("Error while reading over @x tree in @i %i: %m\n"),
+	  PROMPT_CLEAR_INODE, 0 },
+
+	/* Failure to iterate extents */
+	{ PR_1_EXTENT_ITERATE_FAILURE,
+	  N_("Failed to iterate extents in @i %i\n"
+	     "\t(op %s, blk %b, lblk %c): %m\n"),
+	  PROMPT_CLEAR_INODE, 0 },
+
+	/* Bad starting block in extent */
+	{ PR_1_EXTENT_BAD_START_BLK,
+	  N_("@i %i has an @n extent\n\t(logical @b %c, @n physical @b %b, len %N)\n"),
+	  PROMPT_CLEAR, 0 },
+
+	/* Extent ends beyond filesystem */
+	{ PR_1_EXTENT_ENDS_BEYOND,
+	  N_("@i %i has an @n extent\n\t(logical @b %c, physical @b %b, @n len %N)\n"),
+	  PROMPT_CLEAR, 0 },
+
+	/* EXTENTS_FL flag set on a non-extents filesystem */
+	{ PR_1_EXTENTS_SET,
+	  N_("@i %i has EXTENTS_FL flag set on @f without extents support.\n"),
+	  PROMPT_CLEAR, 0 },
+
+	/* inode has extents, superblock missing INCOMPAT_EXTENTS feature */
+	{ PR_1_EXTENT_FEATURE,
+	  N_("@i %i is in extent format, but @S is missing EXTENTS feature\n"),
+	  PROMPT_FIX, 0 },
+
+	/* inode missing EXTENTS_FL, but is an extent inode */
+	{ PR_1_UNSET_EXTENT_FL,
+	  N_("@i %i missing EXTENT_FL, but is in extents format\n"),
+	  PROMPT_FIX, PR_PREEN_OK },
+
+	/* Fast symlink has EXTENTS_FL set */
+	{ PR_1_FAST_SYMLINK_EXTENT_FL,
+	  N_("Fast symlink %i has EXTENT_FL set.  "),
+	  PROMPT_CLEAR, 0 },
+
+	/* Extents are out of order */
+	{ PR_1_OUT_OF_ORDER_EXTENTS,
+	  N_("@i %i has out of order extents\n\t(@n logical @b %c, physical @b %b, len %N)\n"),
+	  PROMPT_CLEAR, 0 },
+
+	{ PR_1_EXTENT_HEADER_INVALID,
+	  N_("@i %i has an invalid extent node (blk %b, lblk %c)\n"),
+	  PROMPT_CLEAR, 0 },
+
 	/* Pass 1b errors */
 
 	/* Pass 1B: Rescan for duplicate/bad blocks */
@@ -793,12 +894,12 @@
 	  PROMPT_NONE, 0 },
 
 	/* Duplicate/bad block(s) header */
-	{ PR_1B_DUP_BLOCK_HEADER,	  
+	{ PR_1B_DUP_BLOCK_HEADER,
 	  N_("@m @b(s) in @i %i:"),
 	  PROMPT_NONE, 0 },
 
 	/* Duplicate/bad block(s) in inode */
-	{ PR_1B_DUP_BLOCK,	  
+	{ PR_1B_DUP_BLOCK,
 	  " %b",
 	  PROMPT_NONE, PR_LATCH_DBLOCK | PR_PREEN_NOHDR },
 
@@ -806,7 +907,7 @@
 	{ PR_1B_DUP_BLOCK_END,
 	  "\n",
 	  PROMPT_NONE, PR_PREEN_NOHDR },
-		  
+
 	/* Error while scanning inodes */
 	{ PR_1B_ISCAN_ERROR,
 	  N_("Error while scanning inodes (%i): %m\n"),
@@ -833,29 +934,29 @@
 	  N_("Pass 1C: Scanning directories for @is with @m @bs\n"),
 	  PROMPT_NONE, 0 },
 
-		  
+
 	/* Pass 1D: Reconciling multiply-claimed blocks */
 	{ PR_1D_PASS_HEADER,
 	  N_("Pass 1D: Reconciling @m @bs\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* File has duplicate blocks */
 	{ PR_1D_DUP_FILE,
 	  N_("File %Q (@i #%i, mod time %IM) \n"
-	  "  has %B @m @b(s), shared with %N file(s):\n"),
+	  "  has %r @m @b(s), shared with %N file(s):\n"),
 	  PROMPT_NONE, 0 },
-		  
-	/* List of files sharing duplicate blocks */	
+
+	/* List of files sharing duplicate blocks */
 	{ PR_1D_DUP_FILE_LIST,
 	  N_("\t%Q (@i #%i, mod time %IM)\n"),
 	  PROMPT_NONE, 0 },
-	  
-	/* File sharing blocks with filesystem metadata  */	
+
+	/* File sharing blocks with filesystem metadata  */
 	{ PR_1D_SHARE_METADATA,
 	  N_("\t<@f metadata>\n"),
 	  PROMPT_NONE, 0 },
 
-	/* Report of how many duplicate/bad inodes */	
+	/* Report of how many duplicate/bad inodes */
 	{ PR_1D_NUM_DUP_INODES,
 	  N_("(There are %N @is containing @m @bs.)\n\n"),
 	  PROMPT_NONE, 0 },
@@ -868,7 +969,7 @@
 	/* Clone duplicate/bad blocks? */
 	{ PR_1D_CLONE_QUESTION,
 	  "", PROMPT_CLONE, PR_NO_OK },
-		  
+
 	/* Delete file? */
 	{ PR_1D_DELETE_QUESTION,
 	  "", PROMPT_DELETE, 0 },
@@ -883,24 +984,24 @@
 	{ PR_2_PASS_HEADER,
 	  N_("Pass 2: Checking @d structure\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Bad inode number for '.' */
 	{ PR_2_BAD_INODE_DOT,
 	  N_("@n @i number for '.' in @d @i %i.\n"),
 	  PROMPT_FIX, 0 },
 
 	/* Directory entry has bad inode number */
-	{ PR_2_BAD_INO, 
+	{ PR_2_BAD_INO,
 	  N_("@E has @n @i #: %Di.\n"),
 	  PROMPT_CLEAR, 0 },
 
 	/* Directory entry has deleted or unused inode */
-	{ PR_2_UNUSED_INODE, 
+	{ PR_2_UNUSED_INODE,
 	  N_("@E has @D/unused @i %Di.  "),
 	  PROMPT_CLEAR, PR_PREEN_OK },
 
 	/* Directry entry is link to '.' */
-	{ PR_2_LINK_DOT, 
+	{ PR_2_LINK_DOT,
 	  N_("@E @L to '.'  "),
 	  PROMPT_CLEAR, 0 },
 
@@ -910,26 +1011,26 @@
 	  PROMPT_CLEAR, 0 },
 
 	/* Directory entry contains a link to a directory */
-	{ PR_2_LINK_DIR, 
+	{ PR_2_LINK_DIR,
 	  N_("@E @L to @d %P (%Di).\n"),
 	  PROMPT_CLEAR, 0 },
 
 	/* Directory entry contains a link to the root directry */
-	{ PR_2_LINK_ROOT, 
+	{ PR_2_LINK_ROOT,
 	  N_("@E @L to the @r.\n"),
 	  PROMPT_CLEAR, 0 },
 
 	/* Directory entry has illegal characters in its name */
-	{ PR_2_BAD_NAME, 
+	{ PR_2_BAD_NAME,
 	  N_("@E has illegal characters in its name.\n"),
 	  PROMPT_FIX, 0 },
 
-	/* Missing '.' in directory inode */	  
+	/* Missing '.' in directory inode */
 	{ PR_2_MISSING_DOT,
 	  N_("Missing '.' in @d @i %i.\n"),
 	  PROMPT_FIX, 0 },
 
-	/* Missing '..' in directory inode */	  
+	/* Missing '..' in directory inode */
 	{ PR_2_MISSING_DOT_DOT,
 	  N_("Missing '..' in @d @i %i.\n"),
 	  PROMPT_FIX, 0 },
@@ -943,28 +1044,28 @@
 	{ PR_2_2ND_NOT_DOT_DOT,
 	  N_("Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"),
 	  PROMPT_FIX, 0 },
-		  
+
 	/* i_faddr should be zero */
 	{ PR_2_FADDR_ZERO,
 	  N_("i_faddr @F %IF, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
 
-  	/* i_file_acl should be zero */
+	/* i_file_acl should be zero */
 	{ PR_2_FILE_ACL_ZERO,
 	  N_("i_file_acl @F %If, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
 
-  	/* i_dir_acl should be zero */
+	/* i_dir_acl should be zero */
 	{ PR_2_DIR_ACL_ZERO,
 	  N_("i_dir_acl @F %Id, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
 
-  	/* i_frag should be zero */
+	/* i_frag should be zero */
 	{ PR_2_FRAG_ZERO,
 	  N_("i_frag @F %N, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
 
-  	/* i_fsize should be zero */
+	/* i_fsize should be zero */
 	{ PR_2_FSIZE_ZERO,
 	  N_("i_fsize @F %N, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
@@ -975,18 +1076,18 @@
 	  PROMPT_CLEAR, 0 },
 
 	/* directory corrupted */
-	{ PR_2_DIR_CORRUPTED,	  
-	  N_("@d @i %i, @b %B, offset %N: @d corrupted\n"),
+	{ PR_2_DIR_CORRUPTED,
+	  N_("@d @i %i, %B, offset %N: @d corrupted\n"),
 	  PROMPT_SALVAGE, 0 },
-		  
+
 	/* filename too long */
-	{ PR_2_FILENAME_LONG,	  
-	  N_("@d @i %i, @b %B, offset %N: filename too long\n"),
+	{ PR_2_FILENAME_LONG,
+	  N_("@d @i %i, %B, offset %N: filename too long\n"),
 	  PROMPT_TRUNCATE, 0 },
 
 	/* Directory inode has a missing block (hole) */
-	{ PR_2_DIRECTORY_HOLE,	  
-	  N_("@d @i %i has an unallocated @b #%B.  "),
+	{ PR_2_DIRECTORY_HOLE,
+	  N_("@d @i %i has an unallocated %B.  "),
 	  PROMPT_ALLOCATE, 0 },
 
 	/* '.' is not NULL terminated */
@@ -1012,7 +1113,7 @@
 	/* Duplicate '.' entry */
 	{ PR_2_DUP_DOT,
 	  N_("@E is duplicate '.' @e.\n"),
-	  PROMPT_FIX, 0 },	  
+	  PROMPT_FIX, 0 },
 
 	/* Duplicate '..' entry */
 	{ PR_2_DUP_DOT_DOT,
@@ -1028,7 +1129,7 @@
 	{ PR_2_FINAL_RECLEN,
 	  N_("@E has rec_len of %Dr, @s %N.\n"),
 	  PROMPT_FIX, 0 },
-		  
+
 	/* Error allocating icount structure */
 	{ PR_2_ALLOCATE_ICOUNT,
 	  N_("@A icount structure: %m\n"),
@@ -1061,7 +1162,7 @@
 
 	/* Directory entry for '.' is big.  Split? */
 	{ PR_2_SPLIT_DOT,
-	  N_("@d @e for '.' is big.  "),
+	  N_("@d @e for '.' in %p (%i) is big.\n"),
 	  PROMPT_SPLIT, PR_NO_OK },
 
 	/* Illegal FIFO inode */
@@ -1099,7 +1200,7 @@
 	  N_("Symlink %Q (@i #%i) is @n.\n"),
 	  PROMPT_CLEAR, 0 },
 
-  	/* i_file_acl (extended attribute block) is bad */
+	/* i_file_acl (extended attribute block) is bad */
 	{ PR_2_FILE_ACL_BAD,
 	  N_("@a @b @F @n (%If).\n"),
 	  PROMPT_CLEAR, 0 },
@@ -1108,31 +1209,31 @@
 	{ PR_2_FEATURE_LARGE_FILES,
 	  N_("@f contains large files, but lacks LARGE_FILE flag in @S.\n"),
 	  PROMPT_FIX, 0 },
-	  
+
 	/* Node in HTREE directory not referenced */
 	{ PR_2_HTREE_NOTREF,
-	  N_("@p @h %d: node (%B) not referenced\n"),
+	  N_("@p @h %d: %B not referenced\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Node in HTREE directory referenced twice */
 	{ PR_2_HTREE_DUPREF,
-	  N_("@p @h %d: node (%B) referenced twice\n"),
+	  N_("@p @h %d: %B referenced twice\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Node in HTREE directory has bad min hash */
 	{ PR_2_HTREE_MIN_HASH,
-	  N_("@p @h %d: node (%B) has bad min hash\n"),
+	  N_("@p @h %d: %B has bad min hash\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Node in HTREE directory has bad max hash */
 	{ PR_2_HTREE_MAX_HASH,
-	  N_("@p @h %d: node (%B) has bad max hash\n"),
+	  N_("@p @h %d: %B has bad max hash\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Clear invalid HTREE directory */
 	{ PR_2_HTREE_CLEAR,
 	  N_("@n @h %d (%q).  "), PROMPT_CLEAR_HTREE, 0 },
-		  
+
 	/* Bad block in htree interior node */
 	{ PR_2_HTREE_BADBLK,
 	  N_("@p @h %d (%q): bad @b number %b.\n"),
@@ -1150,40 +1251,40 @@
 
 	/* Invalid HTREE limit */
 	{ PR_2_HTREE_BAD_LIMIT,
-	  N_("@p @h %d: node (%B) has @n limit (%N)\n"),
+	  N_("@p @h %d: %B has @n limit (%N)\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
 	/* Invalid HTREE count */
 	{ PR_2_HTREE_BAD_COUNT,
-	  N_("@p @h %d: node (%B) has @n count (%N)\n"),
+	  N_("@p @h %d: %B has @n count (%N)\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
 	/* HTREE interior node has out-of-order hashes in table */
 	{ PR_2_HTREE_HASH_ORDER,
-	  N_("@p @h %d: node (%B) has an unordered hash table\n"),
+	  N_("@p @h %d: %B has an unordered hash table\n"),
 	  PROMPT_CLEAR_HTREE, PR_PREEN_OK },
 
 	/* Node in HTREE directory has invalid depth */
 	{ PR_2_HTREE_BAD_DEPTH,
-	  N_("@p @h %d: node (%B) has @n depth\n"),
+	  N_("@p @h %d: %B has @n depth (%N)\n"),
 	  PROMPT_NONE, 0 },
-	
+
 	/* Duplicate directory entry found */
 	{ PR_2_DUPLICATE_DIRENT,
 	  N_("Duplicate @E found.  "),
 	  PROMPT_CLEAR, 0 },
-	
+
 	/* Non-unique filename found */
 	{ PR_2_NON_UNIQUE_FILE, /* xgettext: no-c-format */
 	  N_("@E has a non-unique filename.\nRename to %s"),
 	  PROMPT_NULL, 0 },
-	
+
 	/* Duplicate directory entry found */
 	{ PR_2_REPORT_DUP_DIRENT,
 	  N_("Duplicate @e '%Dn' found.\n\tMarking %p (%i) to be rebuilt.\n\n"),
 	  PROMPT_NONE, 0 },
-	
-  	/* i_blocks_hi should be zero */
+
+	/* i_blocks_hi should be zero */
 	{ PR_2_BLOCKS_HI_ZERO,
 	  N_("i_blocks_hi @F %N, @s zero.\n"),
 	  PROMPT_CLEAR, 0 },
@@ -1191,19 +1292,34 @@
 	/* Unexpected HTREE block */
 	{ PR_2_UNEXPECTED_HTREE_BLOCK,
 	  N_("Unexpected @b in @h %d (%q).\n"), PROMPT_CLEAR_HTREE, 0 },
-		  
+
+	/* Inode found in group where _INODE_UNINIT is set */
+	{ PR_2_INOREF_BG_INO_UNINIT,
+	  N_("@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"),
+	  PROMPT_FIX, PR_PREEN_OK },
+
+	/* Inode found in group unused inodes area */
+	{ PR_2_INOREF_IN_UNUSED,
+	  N_("@E references @i %Di found in @g %g's unused inodes area.\n"),
+	  PROMPT_FIX, PR_PREEN_OK },
+
+	/* i_blocks_hi should be zero */
+	{ PR_2_I_FILE_ACL_HI_ZERO,
+	  N_("i_file_acl_hi @F %N, @s zero.\n"),
+	  PROMPT_CLEAR, PR_PREEN_OK },
+
 	/* Pass 3 errors */
 
 	/* Pass 3: Checking directory connectivity */
 	{ PR_3_PASS_HEADER,
 	  N_("Pass 3: Checking @d connectivity\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Root inode not allocated */
 	{ PR_3_NO_ROOT_INODE,
 	  N_("@r not allocated.  "),
-	  PROMPT_ALLOCATE, 0 },	
-		  
+	  PROMPT_ALLOCATE, 0 },
+
 	/* No room in lost+found */
 	{ PR_3_EXPAND_LF_DIR,
 	  N_("No room in @l @d.  "),
@@ -1245,20 +1361,20 @@
 	  PROMPT_NONE, 0 },
 
 	/* Error in ext2fs_new_block while creating /lost+found */
-	{ PR_3_ERR_LPF_NEW_BLOCK, 
+	{ PR_3_ERR_LPF_NEW_BLOCK,
 	  N_("ext2fs_new_@b: %m while trying to create /@l @d\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Error in ext2fs_new_inode while creating /lost+found */
 	{ PR_3_ERR_LPF_NEW_INODE,
 	  N_("ext2fs_new_@i: %m while trying to create /@l @d\n"),
 	  PROMPT_NONE, 0 },
 
-	/* Error in ext2fs_new_dir_block while creating /lost+found */	  
+	/* Error in ext2fs_new_dir_block while creating /lost+found */
 	{ PR_3_ERR_LPF_NEW_DIR_BLOCK,
 	  N_("ext2fs_new_dir_@b: %m while creating new @d @b\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Error while writing directory block for /lost+found */
 	{ PR_3_ERR_LPF_WRITE_BLOCK,
 	  N_("ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"),
@@ -1274,7 +1390,7 @@
 	  N_("Couldn't fix parent of @i %i: %m\n\n"),
 	  PROMPT_NONE, 0 },
 
-	/* Couldn't fix parent directory -- couldn't find it */	  
+	/* Couldn't fix parent directory -- couldn't find it */
 	{ PR_3_FIX_PARENT_NOFIND,
 	  N_("Couldn't fix parent of @i %i: Couldn't find parent @d @e\n\n"),
 	  PROMPT_NONE, 0 },
@@ -1287,22 +1403,22 @@
 	/* Error creating root directory */
 	{ PR_3_CREATE_ROOT_ERROR,
 	  N_("Error creating root @d (%s): %m\n"),
-	  PROMPT_NONE, PR_FATAL },	  
+	  PROMPT_NONE, PR_FATAL },
 
 	/* Error creating lost and found directory */
 	{ PR_3_CREATE_LPF_ERROR,
 	  N_("Error creating /@l @d (%s): %m\n"),
-	  PROMPT_NONE, PR_FATAL },  
+	  PROMPT_NONE, 0 },
 
 	/* Root inode is not directory; aborting */
 	{ PR_3_ROOT_NOT_DIR_ABORT,
 	  N_("@r is not a @d; aborting.\n"),
-	  PROMPT_NONE, PR_FATAL },  
+	  PROMPT_NONE, PR_FATAL },
 
 	/* Cannot proceed without a root inode. */
 	{ PR_3_NO_ROOT_INODE_ABORT,
 	  N_("Cannot proceed without a @r.\n"),
-	  PROMPT_NONE, PR_FATAL },  
+	  PROMPT_NONE, PR_FATAL },
 
 	/* Internal error: couldn't find dir_info */
 	{ PR_3_NO_DIRINFO,
@@ -1323,12 +1439,12 @@
 
 	/* Error iterating over directories */
 	{ PR_3A_OPTIMIZE_ITER,
-	  N_("Failed to create dirs_to_hash iterator: %m"),
+	  N_("Failed to create dirs_to_hash iterator: %m\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Error rehash directory */
 	{ PR_3A_OPTIMIZE_DIR_ERR,
-	  N_("Failed to optimize directory %q (%d): %m"),
+	  N_("Failed to optimize directory %q (%d): %m\n"),
 	  PROMPT_NONE, 0 },
 
 	/* Rehashing dir header */
@@ -1340,19 +1456,19 @@
 	{ PR_3A_OPTIMIZE_DIR,
 	  " %d",
 	  PROMPT_NONE, PR_LATCH_OPTIMIZE_DIR | PR_PREEN_NOHDR},
-		  
-	/* Rehashing dir end */	  
+
+	/* Rehashing dir end */
 	{ PR_3A_OPTIMIZE_DIR_END,
 	  "\n",
 	  PROMPT_NONE, PR_PREEN_NOHDR },
 
 	/* Pass 4 errors */
-	
+
 	/* Pass 4: Checking reference counts */
 	{ PR_4_PASS_HEADER,
 	  N_("Pass 4: Checking reference counts\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Unattached zero-length inode */
 	{ PR_4_ZERO_LEN_INODE,
 	  N_("@u @z @i %i.  "),
@@ -1376,22 +1492,22 @@
 	  PROMPT_NONE, 0 },
 
 	/* Pass 5 errors */
-		  
+
 	/* Pass 5: Checking group summary information */
 	{ PR_5_PASS_HEADER,
 	  N_("Pass 5: Checking @g summary information\n"),
 	  PROMPT_NONE, 0 },
-		  
+
 	/* Padding at end of inode bitmap is not set. */
 	{ PR_5_INODE_BMAP_PADDING,
 	  N_("Padding at end of @i @B is not set. "),
 	  PROMPT_FIX, PR_PREEN_OK },
-		  
+
 	/* Padding at end of block bitmap is not set. */
 	{ PR_5_BLOCK_BMAP_PADDING,
 	  N_("Padding at end of @b @B is not set. "),
 	  PROMPT_FIX, PR_PREEN_OK },
-		
+
 	/* Block bitmap differences header */
 	{ PR_5_BLOCK_BITMAP_HEADER,
 	  N_("@b @B differences: "),
@@ -1401,13 +1517,13 @@
 	{ PR_5_BLOCK_UNUSED,
 	  " -%b",
 	  PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
-		  
+
 	/* Block used, but not marked used in bitmap */
 	{ PR_5_BLOCK_USED,
 	  " +%b",
 	  PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
 
-	/* Block bitmap differences end */	  
+	/* Block bitmap differences end */
 	{ PR_5_BLOCK_BITMAP_END,
 	  "\n",
 	  PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
@@ -1421,13 +1537,13 @@
 	{ PR_5_INODE_UNUSED,
 	  " -%i",
 	  PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
-		  
+
 	/* Inode used, but not marked used in bitmap */
 	{ PR_5_INODE_USED,
 	  " +%i",
 	  PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
 
-	/* Inode bitmap differences end */	  
+	/* Inode bitmap differences end */
 	{ PR_5_INODE_BITMAP_END,
 	  "\n",
 	  PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
@@ -1466,7 +1582,7 @@
 	/* Internal error: fudging end of bitmap */
 	{ PR_5_FUDGE_BITMAP_ERROR,
 	  N_("Internal error: fudging end of bitmap (%N)\n"),
-	  PROMPT_NONE, PR_FATAL },	  
+	  PROMPT_NONE, PR_FATAL },
 
 	/* Error copying in replacement inode bitmap */
 	{ PR_5_COPY_IBITMAP_ERROR,
@@ -1477,12 +1593,12 @@
 	{ PR_5_COPY_BBITMAP_ERROR,
 	  N_("Error copying in replacement @b @B: %m\n"),
 	  PROMPT_NONE, PR_FATAL },
-		  
+
 	/* Block range not used, but marked in bitmap */
 	{ PR_5_BLOCK_RANGE_UNUSED,
 	  " -(%b--%c)",
 	  PROMPT_NONE, PR_LATCH_BBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
-		  
+
 	/* Block range used, but not marked used in bitmap */
 	{ PR_5_BLOCK_RANGE_USED,
 	  " +(%b--%c)",
@@ -1492,16 +1608,28 @@
 	{ PR_5_INODE_RANGE_UNUSED,
 	  " -(%i--%j)",
 	  PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
-		  
+
 	/* Inode range used, but not marked used in bitmap */
 	{ PR_5_INODE_RANGE_USED,
 	  " +(%i--%j)",
 	  PROMPT_NONE, PR_LATCH_IBITMAP | PR_PREEN_OK | PR_PREEN_NOMSG },
 
+	/* Group N block(s) in use but group is marked BLOCK_UNINIT */
+	{ PR_5_BLOCK_UNINIT,
+	  N_("@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"),
+	  PROMPT_FIX, PR_PREEN_OK },
+
+	/* Group N inode(s) in use but group is marked INODE_UNINIT */
+	{ PR_5_INODE_UNINIT,
+	  N_("@g %g @i(s) in use but @g is marked INODE_UNINIT\n"),
+	  PROMPT_FIX, PR_PREEN_OK },
+
+	/* Post-Pass 5 errors */
+
 	/* Recreate journal if E2F_FLAG_JOURNAL_INODE flag is set */
 	{ PR_6_RECREATE_JOURNAL,
-	  N_("Recreate journal to make the filesystem ext3 again?\n"),
-	  PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
+	  N_("Recreate @j"),
+	  PROMPT_NULL, PR_PREEN_OK | PR_NO_OK },
 
 	{ 0 }
 };
@@ -1522,12 +1650,13 @@
 	{ PR_LATCH_LOW_DTIME, PR_1_ORPHAN_LIST_REFUGEES, 0 },
 	{ PR_LATCH_TOOBIG, PR_1_INODE_TOOBIG, 0 },
 	{ PR_LATCH_OPTIMIZE_DIR, PR_3A_OPTIMIZE_DIR_HEADER, PR_3A_OPTIMIZE_DIR_END },
+	{ PR_LATCH_BG_CHECKSUM, PR_0_GDT_CSUM_LATCH, 0 },
 	{ -1, 0, 0 },
 };
 
 static struct e2fsck_problem *find_problem(problem_t code)
 {
-	int 	i;
+	int	i;
 
 	for (i=0; problem_table[i].e2p_code; i++) {
 		if (problem_table[i].e2p_code == code)
@@ -1552,7 +1681,7 @@
 	struct latch_descr *ldesc;
 	struct problem_context pctx;
 	int answer = -1;
-	
+
 	ldesc = find_latch(mask);
 	if (ldesc->end_message && (ldesc->flags & PRL_LATCHED)) {
 		clear_problem_context(&pctx);
@@ -1592,7 +1721,7 @@
 	ctx->group = -1;
 }
 
-static void reconfigure_bool(e2fsck_t ctx, struct e2fsck_problem *ptr, 
+static void reconfigure_bool(e2fsck_t ctx, struct e2fsck_problem *ptr,
 			     const char *key, int mask, const char *name)
 {
 	int	bool;
@@ -1612,7 +1741,7 @@
 	struct e2fsck_problem *ptr;
 	struct latch_descr *ldesc = 0;
 	const char *message;
-	int 		def_yn, answer, ans;
+	int		def_yn, answer, ans, broken_system_clock;
 	int		print_answer = 0;
 	int		suppress = 0;
 
@@ -1624,6 +1753,15 @@
 	if (!(ptr->flags & PR_CONFIG)) {
 		char	key[9], *new_desc;
 
+		if ((code == PR_0_FUTURE_SB_LAST_MOUNT) ||
+		    (code == PR_0_FUTURE_SB_LAST_WRITE)) {
+			profile_get_boolean(ctx->profile, "options",
+					    "broken_system_clock", 0, 0,
+					    &broken_system_clock);
+			if (broken_system_clock)
+				ptr->flags |= PR_PREEN_OK;
+		}
+
 		sprintf(key, "0x%06x", code);
 
 		profile_get_string(ctx->profile, "problems", key,
@@ -1706,14 +1844,15 @@
 			else
 				answer = 0;
 		} else
-			answer = ask(ctx, _(prompt[(int) ptr->prompt]), def_yn);
+			answer = ask(ctx, (ptr->prompt == PROMPT_NULL) ? "" :
+				     _(prompt[(int) ptr->prompt]), def_yn);
 		if (!answer && !(ptr->flags & PR_NO_OK))
 			ext2fs_unmark_valid(fs);
-	
+
 		if (print_answer)
 			printf("%s.\n", answer ?
 			       _(preen_msg[(int) ptr->prompt]) : _("IGNORED"));
-	
+
 	}
 
 	if ((ptr->prompt == PROMPT_ABORT) && answer)
@@ -1724,3 +1863,89 @@
 
 	return answer;
 }
+
+#ifdef UNITTEST
+
+#include <stdlib.h>
+#include <stdio.h>
+
+errcode_t
+profile_get_boolean(profile_t profile, const char *name, const char *subname,
+		    const char *subsubname, int def_val, int *ret_boolean)
+{
+	return 0;
+}
+
+void print_e2fsck_message(e2fsck_t ctx, const char *msg,
+			  struct problem_context *pctx, int first,
+			  int recurse)
+{
+	return;
+}
+
+void fatal_error(e2fsck_t ctx, const char *msg)
+{
+	return;
+}
+
+void preenhalt(e2fsck_t ctx)
+{
+	return;
+}
+
+errcode_t
+profile_get_string(profile_t profile, const char *name, const char *subname,
+		   const char *subsubname, const char *def_val,
+		   char **ret_string)
+{
+	return 0;
+}
+
+int ask (e2fsck_t ctx, const char * string, int def)
+{
+	return 0;
+}
+
+int verify_problem_table(e2fsck_t ctx)
+{
+	struct e2fsck_problem *curr, *prev = NULL;
+	int rc = 0;
+
+	for (prev = NULL, curr = problem_table; curr->e2p_code; prev = curr++) {
+		if (prev == NULL)
+			continue;
+
+		if (curr->e2p_code > prev->e2p_code)
+			continue;
+
+		if (curr->e2p_code == prev->e2p_code)
+			fprintf(stderr, "*** Duplicate in problem table:\n");
+		else
+			fprintf(stderr, "*** Unordered problem table:\n");
+
+		fprintf(stderr, "curr code = 0x%08x: %s\n",
+			curr->e2p_code, curr->e2p_description);
+		fprintf(stderr, "*** prev code = 0x%08x: %s\n",
+			prev->e2p_code, prev->e2p_description);
+
+		fprintf(stderr, "*** This is a %sprogramming error in e2fsck\n",
+			(curr->e2p_code == prev->e2p_code) ? "fatal " : "");
+
+		rc = 1;
+	}
+
+	return rc;
+}
+
+int main(int argc, char *argv[])
+{
+	e2fsck_t ctx;
+	int rc;
+
+	rc = verify_problem_table(ctx);
+	if (rc == 0)
+		printf("e2fsck problem table verified\n");
+
+	return rc;
+}
+#endif /* UNITTEST */
diff --git a/e2fsck/problem.h b/e2fsck/problem.h
index 91a6148..f3969e0 100644
--- a/e2fsck/problem.h
+++ b/e2fsck/problem.h
@@ -16,7 +16,7 @@
 	ext2_ino_t ino, ino2, dir;
 	struct ext2_inode *inode;
 	struct ext2_dir_entry *dirent;
-	blk_t	blk, blk2;
+	blk64_t	blk, blk2;
 	e2_blkcnt_t	blkcount;
 	int		group;
 	__u64	num;
@@ -38,6 +38,7 @@
 #define PR_LATCH_LOW_DTIME 0x0070 /* Latch for pass1 orphaned list refugees */
 #define PR_LATCH_TOOBIG	0x0080	/* Latch for file to big errors */
 #define PR_LATCH_OPTIMIZE_DIR 0x0090 /* Latch for optimize directories */
+#define PR_LATCH_BG_CHECKSUM 0x00A0  /* Latch for block group checksums */
 
 #define PR_LATCH(x)	((((x) & PR_LATCH_MASK) >> 4) - 1)
 
@@ -82,12 +83,12 @@
 /* Adding UUID to filesystem */
 #define PR_0_ADD_UUID		0x000009
 
-/* Relocate hint */	
+/* Relocate hint */
 #define PR_0_RELOCATE_HINT	0x00000A
 
 /* Miscellaneous superblock corruption */
 #define PR_0_MISC_CORRUPT_SUPER	0x00000B
-	
+
 /* Error determing physical device size of filesystem */
 #define PR_0_GETSIZE_ERROR	0x00000C
 
@@ -135,18 +136,18 @@
 
 /* Clearing orphan inode */
 #define PR_0_ORPHAN_CLEAR_INODE			0x000020
-	
+
 /* Illegal block found in orphaned inode */
 #define PR_0_ORPHAN_ILLEGAL_BLOCK_NUM		0x000021
 
 /* Already cleared block found in orphaned inode */
 #define PR_0_ORPHAN_ALREADY_CLEARED_BLOCK	0x000022
-	
+
 /* Illegal orphan inode in superblock */
 #define PR_0_ORPHAN_ILLEGAL_HEAD_INODE		0x000023
 
 /* Illegal inode in orphaned inode list */
-#define PR_0_ORPHAN_ILLEGAL_INODE 		0x000024
+#define PR_0_ORPHAN_ILLEGAL_INODE		0x000024
 
 /* Journal has unsupported read-only feature - abort */
 #define PR_0_JOURNAL_UNSUPP_ROCOMPAT		0x000025
@@ -196,6 +197,37 @@
 /* Superblock hint for external journal incorrect */
 #define PR_0_DIRHASH_HINT			0x000034
 
+/* Group descriptor N checksum is invalid */
+#define PR_0_GDT_CSUM				0x000035
+
+/* Group descriptor N marked uninitialized without feature set. */
+#define PR_0_GDT_UNINIT				0x000036
+
+/* Block bitmap is not initialised and Inode bitmap is */
+#define PR_0_BB_UNINIT_IB_INIT			0x000037
+
+/* Group descriptor N has invalid unused inodes count. */
+#define PR_0_GDT_ITABLE_UNUSED			0x000038
+
+/* Last group block bitmap is uninitialized. */
+#define PR_0_BB_UNINIT_LAST			0x000039
+
+/* Journal transaction found corrupt */
+#define PR_0_JNL_TXN_CORRUPT			0x00003A
+
+/* The test_fs filesystem flag is set and ext4 is available */
+#define PR_0_CLEAR_TESTFS_FLAG			0x00003B
+
+/* Last mount time is in the future (fudged) */
+#define PR_0_FUTURE_SB_LAST_MOUNT_FUDGED	0x00003C
+
+/* Last write time is in the future (fudged) */
+#define PR_0_FUTURE_SB_LAST_WRITE_FUDGED	0x00003D
+
+/* Block group checksum (latch question) */
+#define PR_0_GDT_CSUM_LATCH			0x00003E
+
+
 /*
  * Pass 1 errors
  */
@@ -252,26 +284,26 @@
 #define PR_1_INODE_BLOCK_LATCH		0x010010
 
 /* Too many bad blocks in inode */
-#define	PR_1_TOO_MANY_BAD_BLOCKS 	0x010011
-	
+#define	PR_1_TOO_MANY_BAD_BLOCKS	0x010011
+
 /* Illegal block number in bad block inode */
-#define PR_1_BB_ILLEGAL_BLOCK_NUM 	0x010012
+#define PR_1_BB_ILLEGAL_BLOCK_NUM	0x010012
 
 /* Bad block inode has illegal blocks (latch question) */
 #define PR_1_INODE_BBLOCK_LATCH		0x010013
 
 /* Duplicate or bad blocks in use! */
 #define PR_1_DUP_BLOCKS_PREENSTOP	0x010014
-	
-/* Bad block used as bad block indirect block */	  
+
+/* Bad block used as bad block indirect block */
 #define PR_1_BBINODE_BAD_METABLOCK	0x010015
 
 /* Inconsistency can't be fixed prompt */
 #define PR_1_BBINODE_BAD_METABLOCK_PROMPT 0x010016
-	
+
 /* Bad primary block */
 #define PR_1_BAD_PRIMARY_BLOCK		0x010017
-		  
+
 /* Bad primary block prompt */
 #define PR_1_BAD_PRIMARY_BLOCK_PROMPT	0x010018
 
@@ -287,24 +319,24 @@
 /* Bad block group descriptors in group */
 #define PR_1_BAD_GROUP_DESCRIPTORS	0x01001C
 
-/* Block claimed for no reason */	  
+/* Block claimed for no reason */
 #define PR_1_PROGERR_CLAIMED_BLOCK	0x01001D
 
 /* Error allocating blocks for relocating metadata */
 #define PR_1_RELOC_BLOCK_ALLOCATE	0x01001E
-		
+
 /* Error allocating block buffer during relocation process */
 #define PR_1_RELOC_MEMORY_ALLOCATE	0x01001F
-		
-/* Relocating metadata group information from X to Y */	
+
+/* Relocating metadata group information from X to Y */
 #define PR_1_RELOC_FROM_TO		0x010020
-		
+
 /* Relocating metatdata group information to X */
 #define PR_1_RELOC_TO			0x010021
-		
+
 /* Block read error during relocation process */
 #define PR_1_RELOC_READ_ERR		0x010022
-		
+
 /* Block write error during relocation process */
 #define PR_1_RELOC_WRITE_ERR		0x010023
 
@@ -316,7 +348,7 @@
 
 /* Error allocating icount structure */
 #define PR_1_ALLOCATE_ICOUNT		0x010026
-	
+
 /* Error allocating dbcount */
 #define PR_1_ALLOCATE_DBCOUNT		0x010027
 
@@ -326,10 +358,10 @@
 /* Error while iterating over blocks */
 #define PR_1_BLOCK_ITERATE		0x010029
 
-/* Error while storing inode count information */	  
+/* Error while storing inode count information */
 #define PR_1_ICOUNT_STORE		0x01002A
 
-/* Error while storing directory block information */	  
+/* Error while storing directory block information */
 #define PR_1_ADD_DBLOCK			0x01002B
 
 /* Error while reading inode (for clearing) */
@@ -367,7 +399,7 @@
 
 /* Error allocating refcount structure */
 #define PR_1_ALLOCATE_REFCOUNT		0x010038
-	
+
 /* Error reading Extended Attribute block */
 #define PR_1_READ_EA_BLOCK		0x010039
 
@@ -380,7 +412,7 @@
 /* Extended attribute reference count incorrect */
 #define PR_1_EXTATTR_REFCOUNT		0x01003C
 
-/* Error writing Extended Attribute block while fixing refcount */ 
+/* Error writing Extended Attribute block while fixing refcount */
 #define PR_1_EXTATTR_WRITE		0x01003D
 
 /* Multiple EA blocks not supported */
@@ -413,19 +445,19 @@
 /* INDEX_FL flag set on a non-HTREE filesystem */
 #define PR_1_HTREE_SET			0x010047
 
-/* INDEX_FL flag set on a non-directory */	
+/* INDEX_FL flag set on a non-directory */
 #define PR_1_HTREE_NODIR		0x010048
 
-/* Invalid root node in HTREE directory */	
+/* Invalid root node in HTREE directory */
 #define PR_1_HTREE_BADROOT		0x010049
 
-/* Unsupported hash version in HTREE directory */	
+/* Unsupported hash version in HTREE directory */
 #define PR_1_HTREE_HASHV		0x01004A
 
-/* Incompatible flag in HTREE root node */	
+/* Incompatible flag in HTREE root node */
 #define PR_1_HTREE_INCOMPAT		0x01004B
 
-/* HTREE too deep */	
+/* HTREE too deep */
 #define PR_1_HTREE_DEPTH		0x01004C
 
 /* Bad block has indirect block that conflicts with filesystem block */
@@ -434,7 +466,7 @@
 /* Resize inode failed */
 #define PR_1_RESIZE_INODE_CREATE	0x01004E
 
-/* inode->i_size is too long */	
+/* inode->i_size is too long */
 #define PR_1_EXTRA_ISIZE		0x01004F
 
 /* attribute name is too long */
@@ -455,6 +487,36 @@
 /* inode appears to be a directory */
 #define PR_1_TREAT_AS_DIRECTORY		0x010055
 
+/* Error while reading extent tree */
+#define PR_1_READ_EXTENT		0x010056
+
+/* Failure to iterate extents */
+#define PR_1_EXTENT_ITERATE_FAILURE	0x010057
+
+/* Bad starting block in extent */
+#define PR_1_EXTENT_BAD_START_BLK	0x010058
+
+/* Extent ends beyond filesystem */
+#define PR_1_EXTENT_ENDS_BEYOND		0x010059
+
+/* EXTENTS_FL flag set on a non-extents capable filesystem */
+#define PR_1_EXTENTS_SET		0x01005A
+
+/* inode has extents, superblock missing INCOMPAT_EXTENTS feature */
+#define PR_1_EXTENT_FEATURE		0x01005B
+
+/* inode missing EXTENTS_FL, but is an extent inode */
+#define PR_1_UNSET_EXTENT_FL		0x01005C
+
+/* Fast symlink has EXTENTS_FL set */
+#define PR_1_FAST_SYMLINK_EXTENT_FL	0x01005D
+
+/* Extents are out of order */
+#define PR_1_OUT_OF_ORDER_EXTENTS	0x01005E
+
+/* Extent node header invalid */
+#define PR_1_EXTENT_HEADER_INVALID	0x01005F
+
 /*
  * Pass 1b errors
  */
@@ -470,7 +532,7 @@
 
 /* Duplicate/bad block(s) end */
 #define PR_1B_DUP_BLOCK_END	0x011003
-	
+
 /* Error while scanning inodes */
 #define PR_1B_ISCAN_ERROR	0x011004
 
@@ -478,10 +540,10 @@
 #define PR_1B_ALLOCATE_IBITMAP_ERROR 0x011005
 
 /* Error while iterating over blocks */
-#define PR_1B_BLOCK_ITERATE	0x0110006
+#define PR_1B_BLOCK_ITERATE	0x011006
 
 /* Error adjusting EA refcount */
-#define PR_1B_ADJ_EA_REFCOUNT	0x0110007
+#define PR_1B_ADJ_EA_REFCOUNT	0x011007
 
 
 /* Pass 1C: Scan directories for inodes with dup blocks. */
@@ -494,13 +556,13 @@
 /* File has duplicate blocks */
 #define PR_1D_DUP_FILE		0x013001
 
-/* List of files sharing duplicate blocks */	
+/* List of files sharing duplicate blocks */
 #define PR_1D_DUP_FILE_LIST	0x013002
 
-/* File sharing blocks with filesystem metadata  */	
+/* File sharing blocks with filesystem metadata  */
 #define PR_1D_SHARE_METADATA	0x013003
 
-/* Report of how many duplicate/bad inodes */	
+/* Report of how many duplicate/bad inodes */
 #define PR_1D_NUM_DUP_INODES	0x013004
 
 /* Duplicated blocks already reassigned or cloned. */
@@ -514,7 +576,7 @@
 
 /* Couldn't clone file (error) */
 #define PR_1D_CLONE_ERROR	0x013008
-		
+
 /*
  * Pass 2 errors
  */
@@ -546,10 +608,10 @@
 /* Directory entry has illegal characters in its name */
 #define PR_2_BAD_NAME		0x020008
 
-/* Missing '.' in directory inode */	  
+/* Missing '.' in directory inode */
 #define PR_2_MISSING_DOT	0x020009
 
-/* Missing '..' in directory inode */	  
+/* Missing '..' in directory inode */
 #define PR_2_MISSING_DOT_DOT	0x02000A
 
 /* First entry in directory inode doesn't contain '.' */
@@ -572,16 +634,16 @@
 
 /* i_fsize should be zero */
 #define PR_2_FSIZE_ZERO		0x020011
-		  
+
 /* inode has bad mode */
 #define PR_2_BAD_MODE		0x020012
 
 /* directory corrupted */
 #define PR_2_DIR_CORRUPTED	0x020013
-		  
+
 /* filename too long */
 #define PR_2_FILENAME_LONG	0x020014
-		  
+
 /* Directory inode has a missing block (hole) */
 #define PR_2_DIRECTORY_HOLE	0x020015
 
@@ -602,7 +664,7 @@
 
 /* Duplicate '..' entry */
 #define PR_2_DUP_DOT_DOT	0x02001B
-	
+
 /* Internal error: couldn't find dir_info */
 #define PR_2_NO_DIRINFO		0x02001C
 
@@ -711,6 +773,15 @@
 /* Unexpected HTREE block */
 #define PR_2_UNEXPECTED_HTREE_BLOCK	0x020045
 
+/* Inode found in group where _INODE_UNINIT is set */
+#define PR_2_INOREF_BG_INO_UNINIT	0x020046
+
+/* Inode found in group unused inodes area */
+#define PR_2_INOREF_IN_UNUSED		0x020047
+
+/* i_file_acl_hi should be zero */
+#define PR_2_I_FILE_ACL_HI_ZERO		0x020048
+
 /*
  * Pass 3 errors
  */
@@ -751,9 +822,9 @@
 /* Error in ext2fs_new_inode while creating /lost+found */
 #define PR_3_ERR_LPF_NEW_INODE		0x03000B
 
-/* Error in ext2fs_new_dir_block while creating /lost+found */	  
+/* Error in ext2fs_new_dir_block while creating /lost+found */
 #define PR_3_ERR_LPF_NEW_DIR_BLOCK	0x03000C
-		  
+
 /* Error while writing directory block for /lost+found */
 #define PR_3_ERR_LPF_WRITE_BLOCK	0x03000D
 
@@ -763,12 +834,12 @@
 /* Couldn't fix parent directory -- error */
 #define PR_3_FIX_PARENT_ERR		0x03000F
 
-/* Couldn't fix parent directory -- couldn't find it */	  
+/* Couldn't fix parent directory -- couldn't find it */
 #define PR_3_FIX_PARENT_NOFIND		0x030010
-	
+
 /* Error allocating inode bitmap */
 #define PR_3_ALLOCATE_IBITMAP_ERROR	0x030011
-		  
+
 /* Error creating root directory */
 #define PR_3_CREATE_ROOT_ERROR		0x030012
 
@@ -797,15 +868,15 @@
 #define PR_3A_OPTIMIZE_ITER		0x031001
 
 /* Error rehash directory */
-#define PR_3A_OPTIMIZE_DIR_ERR		0x031002		
+#define PR_3A_OPTIMIZE_DIR_ERR		0x031002
 
 /* Rehashing dir header */
-#define PR_3A_OPTIMIZE_DIR_HEADER		0x031003
+#define PR_3A_OPTIMIZE_DIR_HEADER	0x031003
 
 /* Rehashing directory %d */
 #define PR_3A_OPTIMIZE_DIR		0x031004
-		  
-/* Rehashing dir end */	  
+
+/* Rehashing dir end */
 #define PR_3A_OPTIMIZE_DIR_END		0x031005
 
 /*
@@ -813,19 +884,19 @@
  */
 
 /* Pass 4: Checking reference counts */
-#define PR_4_PASS_HEADER	0x040000
+#define PR_4_PASS_HEADER		0x040000
 
 /* Unattached zero-length inode */
-#define PR_4_ZERO_LEN_INODE	0x040001
+#define PR_4_ZERO_LEN_INODE		0x040001
 
 /* Unattached inode */
-#define PR_4_UNATTACHED_INODE	0x040002
+#define PR_4_UNATTACHED_INODE		0x040002
 
 /* Inode ref count wrong */
-#define PR_4_BAD_REF_COUNT	0x040003
+#define PR_4_BAD_REF_COUNT		0x040003
 
 /* Inconsistent inode count information cached */
-#define PR_4_INCONSISTENT_COUNT	0x040004
+#define PR_4_INCONSISTENT_COUNT		0x040004
 
 /*
  * Pass 5 errors
@@ -833,7 +904,7 @@
 
 /* Pass 5: Checking group summary information */
 #define PR_5_PASS_HEADER		0x050000
-	
+
 /* Padding at end of inode bitmap is not set. */
 #define PR_5_INODE_BMAP_PADDING		0x050001
 
@@ -841,15 +912,15 @@
 #define PR_5_BLOCK_BMAP_PADDING		0x050002
 
 /* Block bitmap differences header */
-#define PR_5_BLOCK_BITMAP_HEADER 	0x050003
+#define PR_5_BLOCK_BITMAP_HEADER	0x050003
 
 /* Block not used, but marked in bitmap */
 #define PR_5_BLOCK_UNUSED		0x050004
-	  
+
 /* Block used, but not marked used in bitmap */
 #define PR_5_BLOCK_USED			0x050005
 
-/* Block bitmap differences end */	  
+/* Block bitmap differences end */
 #define PR_5_BLOCK_BITMAP_END		0x050006
 
 /* Inode bitmap differences header */
@@ -857,11 +928,11 @@
 
 /* Inode not used, but marked in bitmap */
 #define PR_5_INODE_UNUSED		0x050008
-	  
+
 /* Inode used, but not marked used in bitmap */
 #define PR_5_INODE_USED			0x050009
 
-/* Inode bitmap differences end */	  
+/* Inode bitmap differences end */
 #define PR_5_INODE_BITMAP_END		0x05000A
 
 /* Free inodes count for group wrong */
@@ -871,7 +942,7 @@
 #define PR_5_FREE_DIR_COUNT_GROUP	0x05000C
 
 /* Free inodes count wrong */
-#define PR_5_FREE_INODE_COUNT	0x05000D
+#define PR_5_FREE_INODE_COUNT		0x05000D
 
 /* Free blocks count for group wrong */
 #define PR_5_FREE_BLOCK_COUNT_GROUP	0x05000E
@@ -893,16 +964,22 @@
 
 /* Block range not used, but marked in bitmap */
 #define PR_5_BLOCK_RANGE_UNUSED		0x050014
-	  
+
 /* Block range used, but not marked used in bitmap */
 #define PR_5_BLOCK_RANGE_USED		0x050015
 
 /* Inode range not used, but marked in bitmap */
 #define PR_5_INODE_RANGE_UNUSED		0x050016
-	  
+
 /* Inode rangeused, but not marked used in bitmap */
 #define PR_5_INODE_RANGE_USED		0x050017
 
+/* Block in use but group is marked BLOCK_UNINIT */
+#define PR_5_BLOCK_UNINIT		0x050018
+
+/* Inode in use but group is marked INODE_UNINIT */
+#define PR_5_INODE_UNINIT		0x050019
+
 /*
  * Post-Pass 5 errors
  */
@@ -917,10 +994,10 @@
 int end_problem_latch(e2fsck_t ctx, int mask);
 int set_latch_flags(int mask, int setflags, int clearflags);
 int get_latch_flags(int mask, int *value);
-void clear_problem_context(struct problem_context *ctx);
+void clear_problem_context(struct problem_context *pctx);
 
 /* message.c */
 void print_e2fsck_message(e2fsck_t ctx, const char *msg,
-			  struct problem_context *pctx, int first, 
+			  struct problem_context *pctx, int first,
 			  int recurse);
 
diff --git a/e2fsck/problemP.h b/e2fsck/problemP.h
index 21264fa..6161189 100644
--- a/e2fsck/problemP.h
+++ b/e2fsck/problemP.h
@@ -39,5 +39,5 @@
 #define PR_NO_NOMSG	0x010000 /* Don't print a message if e2fsck -n */
 #define PR_PREEN_NO	0x020000 /* Use No as an answer if preening */
 #define PR_PREEN_NOHDR	0x040000 /* Don't print the preen header */
-#define PR_CONFIG	0x080000 /* This problem has been customized 
+#define PR_CONFIG	0x080000 /* This problem has been customized
 				    from the config file */
diff --git a/e2fsck/profile.c b/e2fsck/profile.c
index 4aac636..5e9dc53 100644
--- a/e2fsck/profile.c
+++ b/e2fsck/profile.c
@@ -1,6 +1,6 @@
 /*
  * profile.c -- A simple configuration file parsing "library in a file"
- * 
+ *
  * The profile library was originally written by Theodore Ts'o in 1995
  * for use in the MIT Kerberos v5 library.  It has been
  * modified/enhanced/bug-fixed over time by other members of the MIT
@@ -18,16 +18,16 @@
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Copyright (C) 1985-2005 by the Massachusetts Institute of Technology.
- * 
+ *
  * All rights reserved.
- * 
+ *
  * Export of this software from the United States of America may require
  * a specific license from the United States Government.  It is the
  * responsibility of any person or organization contemplating export to
  * obtain such a license before exporting.
- * 
+ *
  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
  * distribute this software and its documentation for any purpose and
  * without fee is hereby granted, provided that the above copyright
@@ -41,11 +41,11 @@
  * M.I.T. makes no representations about the suitability of this software
  * for any purpose.  It is provided "as is" without express or implied
  * warranty.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- * 
+ *
  */
 
 #ifdef HAVE_UNISTD_H
@@ -218,12 +218,12 @@
  * 	object.
  */
 
-static int compstr(const void *m1, const void *m2) 
+static int compstr(const void *m1, const void *m2)
 {
 	const char *s1 = *((const char * const *) m1);
 	const char *s2 = *((const char * const *) m2);
 
-	return strcmp(s1, s2); 
+	return strcmp(s1, s2);
 }
 
 static void free_list(char **list)
@@ -232,7 +232,7 @@
 
     if (list == 0)
 	    return;
-    
+
     for (cp = list; *cp; cp++)
 	free(*cp);
     free(list);
@@ -295,7 +295,7 @@
 	return retval;
 }
 
-errcode_t 
+errcode_t
 profile_init(const char **files, profile_t *ret_profile)
 {
 	const char **fs;
@@ -327,7 +327,7 @@
 				*last = new_file;
 				last = &new_file->next;
 			}
-		} else if ((retval != ENOTDIR) && 
+		} else if ((retval != ENOTDIR) &&
 			   strcmp(*fs, default_filename))
 			goto errout;
 
@@ -359,7 +359,7 @@
 	return retval;
 }
 
-void 
+void
 profile_release(profile_t profile)
 {
 	prf_file_t	p, next;
@@ -431,7 +431,7 @@
 		if (retval) {
 		errout:
 			if (syntax_err_cb)
-				(syntax_err_cb)(prf->filespec, retval, 
+				(syntax_err_cb)(prf->filespec, retval,
 						state.line_num);
 			free(line);
 			if (prf->root)
@@ -494,7 +494,7 @@
 	}
 	expanded_filename = malloc(len);
 	if (expanded_filename == 0) {
-	    profile_free_file(prf);	
+	    profile_free_file(prf);
 	    return errno;
 	}
 	if (home_env) {
@@ -583,7 +583,7 @@
 		retval = parse_line(buf, &state);
 		if (retval) {
 			if (syntax_err_cb)
-				(syntax_err_cb)(prf->filespec, retval, 
+				(syntax_err_cb)(prf->filespec, retval,
 						state.line_num);
 			fclose(f);
 			return retval;
@@ -603,8 +603,7 @@
 {
     if (prf->root)
 	profile_free_node(prf->root);
-    if (prf->filespec)
-	    free(prf->filespec);
+    free(prf->filespec);
     free(prf);
 }
 
@@ -686,7 +685,7 @@
 	struct profile_node	*node;
 	int do_subsection = 0;
 	void *iter = 0;
-	
+
 	state->line_num++;
 	if (state->state == STATE_GET_OBRACE) {
 		cp = skip_over_blanks(line);
@@ -726,7 +725,7 @@
 			if (*cp == 0)
 				return PROF_SECTION_SYNTAX;
 		}
-		retval = profile_find_node(state->root_section, cp, 0, 1, 
+		retval = profile_find_node(state->root_section, cp, 0, 1,
 					   &iter, &state->current_section);
 		if (retval == PROF_NO_SECTION) {
 			retval = profile_add_node(state->root_section,
@@ -746,7 +745,7 @@
 			cp++;
 		}
 		/*
-		 * Spaces or comments after ']' should not be fatal 
+		 * Spaces or comments after ']' should not be fatal
 		 */
 		cp = skip_over_blanks(cp);
 		if (!end_or_comment(*cp))
@@ -902,7 +901,7 @@
 	struct profile_node *p;
 	void *iter;
 	long retval;
-	
+
 	iter = 0;
 	do {
 		retval = profile_find_node(root, 0, 0, 0, &iter, &p);
@@ -1024,16 +1023,16 @@
 /*
  * prof_tree.c --- these routines maintain the parse tree of the
  * 	config file.
- * 
+ *
  * All of the details of how the tree is stored is abstracted away in
  * this file; all of the other profile routines build, access, and
  * modify the tree via the accessor functions found in this file.
  *
  * Each node may represent either a relation or a section header.
- * 
+ *
  * A section header must have its value field set to 0, and may a one
  * or more child nodes, pointed to by first_child.
- * 
+ *
  * A relation has as its value a pointer to allocated memory
  * containing a string.  Its first_child pointer must be null.
  *
@@ -1048,18 +1047,16 @@
 
 	if (node->magic != PROF_MAGIC_NODE)
 		return;
-	
-	if (node->name)
-		free(node->name);
-	if (node->value)
-		free(node->value);
+
+	free(node->name);
+	free(node->value);
 
 	for (child=node->first_child; child; child = next) {
 		next = child->next;
 		profile_free_node(child);
 	}
 	node->magic = 0;
-	
+
 	free(node);
 }
 
@@ -1156,7 +1153,7 @@
 
 	/*
 	 * Find the place to insert the new node.  We look for the
-	 * place *after* the last match of the node name, since 
+	 * place *after* the last match of the node name, since
 	 * order matters.
 	 */
 	for (p=section->first_child, last = 0; p; last = p, p = p->next) {
@@ -1191,7 +1188,7 @@
  * section which matches the name; don't return relations.  If value
  * is non-NULL, then only return relations which match the requested
  * value.  (The value argument is ignored if section_flag is non-zero.)
- * 
+ *
  * The first time this routine is called, the state pointer must be
  * null.  When this profile_find_node_relation() returns, if the state
  * pointer is non-NULL, then this routine should be called again.
@@ -1210,7 +1207,7 @@
 		CHECK_MAGIC(p);
 	} else
 		p = section->first_child;
-	
+
 	for (; p; p = p->next) {
 		if (name && (strcmp(p->name, name)))
 			continue;
@@ -1260,7 +1257,7 @@
 
 /*
  * This is a general-purpose iterator for returning all nodes that
- * match the specified name array.  
+ * match the specified name array.
  */
 struct profile_iterator {
 	prf_magic_t		magic;
@@ -1275,7 +1272,7 @@
 	int			num;
 };
 
-errcode_t 
+errcode_t
 profile_iterator_create(profile_t profile, const char *const *names, int flags,
 			void **ret_iter)
 {
@@ -1346,7 +1343,7 @@
 	 * If the file has changed, then the node pointer is invalid,
 	 * so we'll have search the file again looking for it.
 	 */
-	if (iter->node && (iter->file && 
+	if (iter->node && (iter->file &&
 			   iter->file->upd_serial != iter->file_serial)) {
 		iter->flags &= ~PROFILE_ITER_FINAL_SEEN;
 		skip_num = iter->num;
@@ -1483,13 +1480,13 @@
 		*ret_value = value;
 	else
 		retval = PROF_NO_RELATION;
-	
+
 cleanup:
 	profile_iterator_free(&state);
 	return retval;
 }
 
-errcode_t 
+errcode_t
 profile_get_string(profile_t profile, const char *name, const char *subname,
 		   const char *subsubname, const char *def_val,
 		   char **ret_string)
@@ -1498,7 +1495,7 @@
 	errcode_t	retval;
 
 	if (profile) {
-		retval = profile_get_value(profile, name, subname, 
+		retval = profile_get_value(profile, name, subname,
 					   subsubname, &value);
 		if (retval == PROF_NO_SECTION || retval == PROF_NO_RELATION)
 			value = def_val;
@@ -1506,7 +1503,7 @@
 			return retval;
 	} else
 		value = def_val;
-    
+
 	if (value) {
 		*ret_string = malloc(strlen(value)+1);
 		if (*ret_string == 0)
@@ -1517,7 +1514,7 @@
 	return 0;
 }
 
-errcode_t 
+errcode_t
 profile_get_integer(profile_t profile, const char *name, const char *subname,
 		    const char *subsubname, int def_val, int *ret_int)
 {
@@ -1552,15 +1549,15 @@
 	/* Garbage in string.  */
 	if (end_value != value + strlen (value))
 	    return PROF_BAD_INTEGER;
-	
-   
+
+
 	*ret_int = ret_long;
 	return 0;
 }
 
-errcode_t 
+errcode_t
 profile_get_uint(profile_t profile, const char *name, const char *subname,
-		 const char *subsubname, unsigned int def_val, 
+		 const char *subsubname, unsigned int def_val,
 		 unsigned int *ret_int)
 {
 	const char	*value;
@@ -1594,7 +1591,7 @@
 	/* Garbage in string.  */
 	if (end_value != value + strlen (value))
 	    return PROF_BAD_INTEGER;
-	
+
 	*ret_int = ret_long;
 	return 0;
 }
@@ -1613,7 +1610,7 @@
 profile_parse_boolean(const char *s, int *ret_boolean)
 {
     const char *const *p;
-    
+
     if (ret_boolean == NULL)
     	return PROF_EINVAL;
 
@@ -1630,11 +1627,11 @@
 			return 0;
 		}
     }
-	
+
 	return PROF_BAD_BOOLEAN;
 }
 
-errcode_t 
+errcode_t
 profile_get_boolean(profile_t profile, const char *name, const char *subname,
 		    const char *subsubname, int def_val, int *ret_boolean)
 {
@@ -1652,16 +1649,16 @@
 		return 0;
 	} else if (retval)
 		return retval;
-   
+
 	return profile_parse_boolean (value, ret_boolean);
 }
 
-errcode_t 
+errcode_t
 profile_iterator(void **iter_p, char **ret_name, char **ret_value)
 {
 	char *name, *value;
 	errcode_t	retval;
-	
+
 	retval = profile_node_iterator(iter_p, 0, &name, &value);
 	if (retval)
 		return retval;
@@ -1734,19 +1731,19 @@
 		if (subname)
 			subsubname = names[2];
 		if (subsubname && names[3]) {
-			fprintf(stderr, 
+			fprintf(stderr,
 				"Only 3 levels are allowed with query1\n");
 			retval = EINVAL;
 		} else
-			retval = profile_get_value(profile, name, subname, 
+			retval = profile_get_value(profile, name, subname,
 						   subsubname, &value);
 		print_status = PRINT_VALUE;
 	} else if (!strcmp(cmd, "list_sections")) {
-		retval = profile_get_subsection_names(profile, names, 
+		retval = profile_get_subsection_names(profile, names,
 						      &values);
 		print_status = PRINT_VALUES;
 	} else if (!strcmp(cmd, "list_relations")) {
-		retval = profile_get_relation_names(profile, names, 
+		retval = profile_get_relation_names(profile, names,
 						    &values);
 		print_status = PRINT_VALUES;
 	} else if (!strcmp(cmd, "dump")) {
@@ -1813,7 +1810,7 @@
 	}
 	profile_release(profile);
 	exit(0);
-	
+
 }
 
 void syntax_err_report(const char *filename, long err, int line_num)
@@ -1830,7 +1827,7 @@
     profile_t	profile;
     long	retval;
     char	*cmd;
-    
+
     if (argc < 2) {
 	    fprintf(stderr, "Usage: %s filename [cmd argset]\n", program_name);
 	    exit(1);
@@ -1839,7 +1836,7 @@
     initialize_prof_error_table();
 
     profile_set_syntax_err_cb(syntax_err_report);
-    
+
     retval = profile_init_path(argv[1], &profile);
     if (retval) {
 	com_err(program_name, retval, "while initializing profile");
diff --git a/e2fsck/profile.h b/e2fsck/profile.h
index b974f3c..0c17732 100644
--- a/e2fsck/profile.h
+++ b/e2fsck/profile.h
@@ -7,16 +7,16 @@
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * Copyright (C) 1985-2005 by the Massachusetts Institute of Technology.
- * 
+ *
  * All rights reserved.
- * 
+ *
  * Export of this software from the United States of America may require
  * a specific license from the United States Government.  It is the
  * responsibility of any person or organization contemplating export to
  * obtain such a license before exporting.
- * 
+ *
  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
  * distribute this software and its documentation for any purpose and
  * without fee is hereby granted, provided that the above copyright
@@ -30,7 +30,7 @@
  * M.I.T. makes no representations about the suitability of this software
  * for any purpose.  It is provided "as is" without express or implied
  * warranty.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
@@ -41,7 +41,7 @@
 
 typedef struct _profile_t *profile_t;
 
-typedef void (*profile_syntax_err_cb_t)(const char *file, long err, 
+typedef void (*profile_syntax_err_cb_t)(const char *file, long err,
 					int line_num);
 
 /*
@@ -65,7 +65,7 @@
 	(profile_t profile, const char *def_string);
 
 long profile_get_string
-	(profile_t profile, const char *name, const char *subname, 
+	(profile_t profile, const char *name, const char *subname,
 			const char *subsubname, const char *def_val,
 			char **ret_string);
 long profile_get_integer
@@ -75,7 +75,7 @@
 
 long profile_get_uint
 	(profile_t profile, const char *name, const char *subname,
-		const char *subsubname, unsigned int def_val, 
+		const char *subsubname, unsigned int def_val,
 		unsigned int *ret_int);
 
 long profile_get_boolean
@@ -89,7 +89,7 @@
 
 void profile_iterator_free
 	(void **iter_p);
-	
+
 long profile_iterator
 	(void	**iter_p, char **ret_name, char **ret_value);
 
diff --git a/e2fsck/profile_helpers.c b/e2fsck/profile_helpers.c
index dcbdd32..c6b5c44 100644
--- a/e2fsck/profile_helpers.c
+++ b/e2fsck/profile_helpers.c
@@ -9,7 +9,7 @@
  * relation that is listed more than once.  This functionality can all
  * be done using the profile_iterator abstraction, but it is less
  * convenient.
- * 
+ *
  * Copyright (C) 2006 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -89,7 +89,7 @@
 {
 	char 	**newlist;
 	int	newmax;
-	
+
 	if (list->num+1 >= list->max) {
 		newmax = list->max + 10;
 		newlist = realloc(list->list, newmax * sizeof(char *));
@@ -119,8 +119,8 @@
 			return 1;
 	}
 	return 0;
-}	
-	
+}
+
 /*
  * This function frees a null-terminated list as returned by
  * profile_get_values.
@@ -131,7 +131,7 @@
 
     if (list == 0)
 	    return;
-    
+
     for (cp = list; *cp; cp++)
 	free(*cp);
     free(list);
@@ -168,7 +168,7 @@
 
 	end_list(&values, ret_values);
 	return 0;
-	
+
 cleanup:
 	end_list(&values, 0);
 	return retval;
@@ -178,7 +178,7 @@
  * This function will return the list of the names of subections in the
  * under the specified section name.
  */
-errcode_t 
+errcode_t
 profile_get_subsection_names(profile_t profile, const char **names,
 			     char ***ret_names)
 {
@@ -204,7 +204,7 @@
 
 	end_list(&values, ret_names);
 	return 0;
-	
+
 cleanup:
 	end_list(&values, 0);
 	return retval;
@@ -214,7 +214,7 @@
  * This function will return the list of the names of relations in the
  * under the specified section name.
  */
-errcode_t 
+errcode_t
 profile_get_relation_names(profile_t profile, const char **names,
 			   char ***ret_names)
 {
@@ -244,20 +244,20 @@
 
 	end_list(&values, ret_names);
 	return 0;
-	
+
 cleanup:
 	end_list(&values, 0);
 	return retval;
 }
 
 
-void 
+void
 profile_release_string(char *str)
 {
 	free(str);
 }
 
-errcode_t 
+errcode_t
 profile_init_path(const char * filepath,
 		  profile_t *ret_profile)
 {
@@ -272,7 +272,7 @@
 		if (*s == ':')
 			n_entries++;
 	}
-	
+
 	/* the array is NULL terminated */
 	filenames = (char **) malloc((n_entries+1) * sizeof(char*));
 	if (filenames == 0)
@@ -298,7 +298,7 @@
 	/* cap the array */
 	filenames[i] = 0;
 
-	retval = profile_init((const char **) filenames, 
+	retval = profile_init((const char **) filenames,
 			      ret_profile);
 
 	/* count back down and free the entries */
diff --git a/e2fsck/recovery.c b/e2fsck/recovery.c
index 22e79a5..8e40575 100644
--- a/e2fsck/recovery.c
+++ b/e2fsck/recovery.c
@@ -1,6 +1,6 @@
 /*
- * linux/fs/recovery.c
- * 
+ * linux/fs/jbd/recovery.c
+ *
  * Written by Stephen C. Tweedie <sct@redhat.com>, 1999
  *
  * Copyright 1999-2000 Red Hat Software --- All Rights Reserved
@@ -10,7 +10,7 @@
  * option, any later version, incorporated herein by reference.
  *
  * Journal recovery routines for the generic filesystem journaling code;
- * part of the ext2fs journaling system.  
+ * part of the ext2fs journaling system.
  */
 
 #ifndef __KERNEL__
@@ -25,13 +25,13 @@
 
 /*
  * Maintain information about the progress of the recovery job, so that
- * the different passes can carry information between them. 
+ * the different passes can carry information between them.
  */
-struct recovery_info 
+struct recovery_info
 {
-	tid_t		start_transaction;	
+	tid_t		start_transaction;
 	tid_t		end_transaction;
-	
+
 	int		nr_replays;
 	int		nr_revokes;
 	int		nr_revoke_hits;
@@ -46,7 +46,7 @@
 #ifdef __KERNEL__
 
 /* Release readahead buffers after use */
-void journal_brelse_array(struct buffer_head *b[], int n)
+static void journal_brelse_array(struct buffer_head *b[], int n)
 {
 	while (--n >= 0)
 		brelse (b[n]);
@@ -72,9 +72,9 @@
 	unsigned int max, nbufs, next;
 	unsigned long blocknr;
 	struct buffer_head *bh;
-	
+
 	struct buffer_head * bufs[MAXBUF];
-	
+
 	/* Do up to 128K of readahead */
 	max = start + (128 * 1024 / journal->j_blocksize);
 	if (max > journal->j_maxlen)
@@ -82,9 +82,9 @@
 
 	/* Do the readahead itself.  We'll submit MAXBUF buffer_heads at
 	 * a time to the block device IO layer. */
-	
+
 	nbufs = 0;
-	
+
 	for (next = start; next < max; next++) {
 		err = journal_bmap(journal, next, &blocknr);
 
@@ -115,8 +115,8 @@
 		ll_rw_block(READ, nbufs, bufs);
 	err = 0;
 
-failed:	
-	if (nbufs) 
+failed:
+	if (nbufs)
 		journal_brelse_array(bufs, nbufs);
 	return err;
 }
@@ -128,7 +128,7 @@
  * Read a block from the journal
  */
 
-static int jread(struct buffer_head **bhp, journal_t *journal, 
+static int jread(struct buffer_head **bhp, journal_t *journal,
 		 unsigned int offset)
 {
 	int err;
@@ -137,8 +137,11 @@
 
 	*bhp = NULL;
 
-	J_ASSERT (offset < journal->j_maxlen);
-	
+	if (offset >= journal->j_maxlen) {
+		printk(KERN_ERR "JBD: corrupted journal superblock\n");
+		return -EIO;
+	}
+
 	err = journal_bmap(journal, offset, &blocknr);
 
 	if (err) {
@@ -175,23 +178,24 @@
  * Count the number of in-use tags in a journal descriptor block.
  */
 
-static int count_tags(struct buffer_head *bh, int size)
+static int count_tags(journal_t *journal, struct buffer_head *bh)
 {
 	char *			tagp;
 	journal_block_tag_t *	tag;
-	int			nr = 0;
+	int			nr = 0, size = journal->j_blocksize;
+	int			tag_bytes = journal_tag_bytes(journal);
 
 	tagp = &bh->b_data[sizeof(journal_header_t)];
 
-	while ((tagp - bh->b_data + sizeof(journal_block_tag_t)) <= size) {
+	while ((tagp - bh->b_data + tag_bytes) <= size) {
 		tag = (journal_block_tag_t *) tagp;
 
 		nr++;
-		tagp += sizeof(journal_block_tag_t);
-		if (!(tag->t_flags & htonl(JFS_FLAG_SAME_UUID)))
+		tagp += tag_bytes;
+		if (!(tag->t_flags & cpu_to_be32(JFS_FLAG_SAME_UUID)))
 			tagp += 16;
 
-		if (tag->t_flags & htonl(JFS_FLAG_LAST_TAG))
+		if (tag->t_flags & cpu_to_be32(JFS_FLAG_LAST_TAG))
 			break;
 	}
 
@@ -207,16 +211,16 @@
 } while (0)
 
 /**
- * int journal_recover(journal_t *journal) - recovers a on-disk journal
+ * journal_recover - recovers a on-disk journal
  * @journal: the journal to recover
  *
  * The primary function for recovering the log contents when mounting a
- * journaled device.  
- * 
+ * journaled device.
+ *
  * Recovery is done in three passes.  In the first pass, we look for the
  * end of the log.  In the second, we assemble the list of revoke
  * blocks.  In the third and final pass, we replay any un-revoked blocks
- * in the log.  
+ * in the log.
  */
 int journal_recover(journal_t *journal)
 {
@@ -224,56 +228,56 @@
 	journal_superblock_t *	sb;
 
 	struct recovery_info	info;
-	
+
 	memset(&info, 0, sizeof(info));
 	sb = journal->j_superblock;
-	
-	/* 
+
+	/*
 	 * The journal superblock's s_start field (the current log head)
 	 * is always zero if, and only if, the journal was cleanly
-	 * unmounted.  
+	 * unmounted.
 	 */
 
 	if (!sb->s_start) {
 		jbd_debug(1, "No recovery required, last transaction %d\n",
-			  (int)ntohl(sb->s_sequence));
-		journal->j_transaction_sequence = ntohl(sb->s_sequence) + 1;
+			  be32_to_cpu(sb->s_sequence));
+		journal->j_transaction_sequence = be32_to_cpu(sb->s_sequence) + 1;
 		return 0;
 	}
-	
+
 	err = do_one_pass(journal, &info, PASS_SCAN);
 	if (!err)
 		err = do_one_pass(journal, &info, PASS_REVOKE);
 	if (!err)
 		err = do_one_pass(journal, &info, PASS_REPLAY);
 
-	jbd_debug(0, "JBD: recovery, exit status %d, "
+	jbd_debug(1, "JBD: recovery, exit status %d, "
 		  "recovered transactions %u to %u\n",
 		  err, info.start_transaction, info.end_transaction);
-	jbd_debug(0, "JBD: Replayed %d and revoked %d/%d blocks\n", 
+	jbd_debug(1, "JBD: Replayed %d and revoked %d/%d blocks\n",
 		  info.nr_replays, info.nr_revoke_hits, info.nr_revokes);
 
 	/* Restart the log at the next transaction ID, thus invalidating
 	 * any existing commit records in the log. */
 	journal->j_transaction_sequence = ++info.end_transaction;
-		
+
 	journal_clear_revoke(journal);
 	sync_blockdev(journal->j_fs_dev);
 	return err;
 }
 
 /**
- * int journal_skip_recovery() - Start journal and wipe exiting records
+ * journal_skip_recovery - Start journal and wipe exiting records
  * @journal: journal to startup
  *
  * Locate any valid recovery information from the journal and set up the
  * journal structures in memory to ignore it (presumably because the
- * caller has evidence that it is out of date).  
+ * caller has evidence that it is out of date).
  * This function does'nt appear to be exorted..
  *
  * We perform one pass over the journal to allow us to tell the user how
  * much recovery information is being erased, and to let us initialise
- * the journal transaction sequence numbers to the next unused ID. 
+ * the journal transaction sequence numbers to the next unused ID.
  */
 int journal_skip_recovery(journal_t *journal)
 {
@@ -281,10 +285,10 @@
 	journal_superblock_t *	sb;
 
 	struct recovery_info	info;
-	
+
 	memset (&info, 0, sizeof(info));
 	sb = journal->j_superblock;
-	
+
 	err = do_one_pass(journal, &info, PASS_SCAN);
 
 	if (err) {
@@ -292,9 +296,9 @@
 		++journal->j_transaction_sequence;
 	} else {
 #ifdef CONFIG_JBD_DEBUG
-		int dropped = info.end_transaction - ntohl(sb->s_sequence);
+		int dropped = info.end_transaction - be32_to_cpu(sb->s_sequence);
 #endif
-		jbd_debug(0, 
+		jbd_debug(1,
 			  "JBD: ignoring %d transaction%s from the journal.\n",
 			  dropped, (dropped == 1) ? "" : "s");
 		journal->j_transaction_sequence = ++info.end_transaction;
@@ -304,6 +308,48 @@
 	return err;
 }
 
+#if 0
+static inline unsigned long long read_tag_block(int tag_bytes, journal_block_tag_t *tag)
+{
+	unsigned long long block = be32_to_cpu(tag->t_blocknr);
+	if (tag_bytes > JBD_TAG_SIZE32)
+		block |= (__u64)be32_to_cpu(tag->t_blocknr_high) << 32;
+	return block;
+}
+#endif
+
+/*
+ * calc_chksums calculates the checksums for the blocks described in the
+ * descriptor block.
+ */
+static int calc_chksums(journal_t *journal, struct buffer_head *bh,
+			unsigned long *next_log_block, __u32 *crc32_sum)
+{
+	int i, num_blks, err;
+	unsigned long io_block;
+	struct buffer_head *obh;
+
+	num_blks = count_tags(journal, bh);
+	/* Calculate checksum of the descriptor block. */
+	*crc32_sum = crc32_be(*crc32_sum, (void *)bh->b_data, bh->b_size);
+
+	for (i = 0; i < num_blks; i++) {
+		io_block = (*next_log_block)++;
+		wrap(journal, *next_log_block);
+		err = jread(&obh, journal, io_block);
+		if (err) {
+			printk(KERN_ERR "JBD: IO error %d recovering block "
+				"%lu in log\n", err, io_block);
+			return 1;
+		} else {
+			*crc32_sum = crc32_be(*crc32_sum, (void *)obh->b_data,
+				     obh->b_size);
+		}
+		brelse(obh);
+	}
+	return 0;
+}
+
 static int do_one_pass(journal_t *journal,
 			struct recovery_info *info, enum passtype pass)
 {
@@ -311,25 +357,27 @@
 	unsigned long		next_log_block;
 	int			err, success = 0;
 	journal_superblock_t *	sb;
-	journal_header_t * 	tmp;
+	journal_header_t *	tmp;
 	struct buffer_head *	bh;
 	unsigned int		sequence;
 	int			blocktype;
-	
+	int			tag_bytes = journal_tag_bytes(journal);
+	__u32			crc32_sum = ~0; /* Transactional Checksums */
+
 	/* Precompute the maximum metadata descriptors in a descriptor block */
 	int			MAX_BLOCKS_PER_DESC;
 	MAX_BLOCKS_PER_DESC = ((journal->j_blocksize-sizeof(journal_header_t))
-			       / sizeof(journal_block_tag_t));
+			       / tag_bytes);
 
-	/* 
+	/*
 	 * First thing is to establish what we expect to find in the log
 	 * (in terms of transaction IDs), and where (in terms of log
-	 * block offsets): query the superblock.  
+	 * block offsets): query the superblock.
 	 */
 
 	sb = journal->j_superblock;
-	next_commit_ID = ntohl(sb->s_sequence);
-	next_log_block = ntohl(sb->s_start);
+	next_commit_ID = be32_to_cpu(sb->s_sequence);
+	next_log_block = be32_to_cpu(sb->s_start);
 
 	first_commit_ID = next_commit_ID;
 	if (pass == PASS_SCAN)
@@ -341,7 +389,7 @@
 	 * Now we walk through the log, transaction by transaction,
 	 * making sure that each transaction has a commit block in the
 	 * expected place.  Each complete transaction gets replayed back
-	 * into the main filesystem. 
+	 * into the main filesystem.
 	 */
 
 	while (1) {
@@ -350,11 +398,13 @@
 		journal_block_tag_t *	tag;
 		struct buffer_head *	obh;
 		struct buffer_head *	nbh;
-		
+
+		cond_resched();
+
 		/* If we already know where to stop the log traversal,
 		 * check right now that we haven't gone past the end of
 		 * the log. */
-		
+
 		if (pass != PASS_SCAN)
 			if (tid_geq(next_commit_ID, info->end_transaction))
 				break;
@@ -365,7 +415,7 @@
 		/* Skip over each chunk of the transaction looking
 		 * either the next descriptor block or the final commit
 		 * record. */
-		
+
 		jbd_debug(3, "JBD: checking block %ld\n", next_log_block);
 		err = jread(&bh, journal, next_log_block);
 		if (err)
@@ -373,30 +423,30 @@
 
 		next_log_block++;
 		wrap(journal, next_log_block);
-		
-		/* What kind of buffer is it? 
-		 * 
+
+		/* What kind of buffer is it?
+		 *
 		 * If it is a descriptor block, check that it has the
 		 * expected sequence number.  Otherwise, we're all done
 		 * here. */
 
 		tmp = (journal_header_t *)bh->b_data;
-		
-		if (tmp->h_magic != htonl(JFS_MAGIC_NUMBER)) {
+
+		if (tmp->h_magic != cpu_to_be32(JFS_MAGIC_NUMBER)) {
 			brelse(bh);
 			break;
 		}
 
-		blocktype = ntohl(tmp->h_blocktype);
-		sequence = ntohl(tmp->h_sequence);
-		jbd_debug(3, "Found magic %d, sequence %d\n", 
+		blocktype = be32_to_cpu(tmp->h_blocktype);
+		sequence = be32_to_cpu(tmp->h_sequence);
+		jbd_debug(3, "Found magic %d, sequence %d\n",
 			  blocktype, sequence);
-		
+
 		if (sequence != next_commit_ID) {
 			brelse(bh);
 			break;
 		}
-		
+
 		/* OK, we have a valid descriptor block which matches
 		 * all of the sequence number checks.  What are we going
 		 * to do with it?  That depends on the pass... */
@@ -404,11 +454,24 @@
 		switch(blocktype) {
 		case JFS_DESCRIPTOR_BLOCK:
 			/* If it is a valid descriptor block, replay it
-			 * in pass REPLAY; otherwise, just skip over the
-			 * blocks it describes. */
+			 * in pass REPLAY; if journal_checksums enabled, then
+			 * calculate checksums in PASS_SCAN, otherwise,
+			 * just skip over the blocks it describes. */
 			if (pass != PASS_REPLAY) {
-				next_log_block +=
-					count_tags(bh, journal->j_blocksize);
+				if (pass == PASS_SCAN &&
+				    JFS_HAS_COMPAT_FEATURE(journal,
+					    JFS_FEATURE_COMPAT_CHECKSUM) &&
+				    !info->end_transaction) {
+					if (calc_chksums(journal, bh,
+							&next_log_block,
+							&crc32_sum)) {
+						brelse(bh);
+						break;
+					}
+					brelse(bh);
+					continue;
+				}
+				next_log_block += count_tags(journal, bh);
 				wrap(journal, next_log_block);
 				brelse(bh);
 				continue;
@@ -419,13 +482,13 @@
 			 * getting done here! */
 
 			tagp = &bh->b_data[sizeof(journal_header_t)];
-			while ((tagp - bh->b_data +sizeof(journal_block_tag_t))
+			while ((tagp - bh->b_data + tag_bytes)
 			       <= journal->j_blocksize) {
 				unsigned long io_block;
 
 				tag = (journal_block_tag_t *) tagp;
-				flags = ntohl(tag->t_flags);
-				
+				flags = be32_to_cpu(tag->t_flags);
+
 				io_block = next_log_block++;
 				wrap(journal, next_log_block);
 				err = jread(&obh, journal, io_block);
@@ -433,34 +496,34 @@
 					/* Recover what we can, but
 					 * report failure at the end. */
 					success = err;
-					printk (KERN_ERR 
+					printk (KERN_ERR
 						"JBD: IO error %d recovering "
-						"block %lu in log\n",
+						"block %ld in log\n",
 						err, io_block);
 				} else {
 					unsigned long blocknr;
-					
+
 					J_ASSERT(obh != NULL);
-					blocknr = ntohl(tag->t_blocknr);
+					blocknr = be32_to_cpu(tag->t_blocknr);
 
 					/* If the block has been
 					 * revoked, then we're all done
 					 * here. */
 					if (journal_test_revoke
-					    (journal, blocknr, 
+					    (journal, blocknr,
 					     next_commit_ID)) {
 						brelse(obh);
 						++info->nr_revoke_hits;
 						goto skip_write;
 					}
-								
+
 					/* Find a buffer for the new
 					 * data being restored */
-					nbh = __getblk(journal->j_fs_dev, 
-						       blocknr,
-						     journal->j_blocksize);
+					nbh = __getblk(journal->j_fs_dev,
+							blocknr,
+							journal->j_blocksize);
 					if (nbh == NULL) {
-						printk(KERN_ERR 
+						printk(KERN_ERR
 						       "JBD: Out of memory "
 						       "during recovery.\n");
 						err = -ENOMEM;
@@ -473,8 +536,8 @@
 					memcpy(nbh->b_data, obh->b_data,
 							journal->j_blocksize);
 					if (flags & JFS_FLAG_ESCAPE) {
-						*((unsigned int *)bh->b_data) =
-							htonl(JFS_MAGIC_NUMBER);
+						*((__be32 *)nbh->b_data) =
+						cpu_to_be32(JFS_MAGIC_NUMBER);
 					}
 
 					BUFFER_TRACE(nbh, "marking dirty");
@@ -487,23 +550,112 @@
 					brelse(obh);
 					brelse(nbh);
 				}
-				
+
 			skip_write:
-				tagp += sizeof(journal_block_tag_t);
+				tagp += tag_bytes;
 				if (!(flags & JFS_FLAG_SAME_UUID))
 					tagp += 16;
 
 				if (flags & JFS_FLAG_LAST_TAG)
 					break;
 			}
-			
+
 			brelse(bh);
 			continue;
 
 		case JFS_COMMIT_BLOCK:
-			/* Found an expected commit block: not much to
-			 * do other than move on to the next sequence
+			jbd_debug(3, "Commit block for #%u found\n",
+				  next_commit_ID);
+			/*     How to differentiate between interrupted commit
+			 *               and journal corruption ?
+			 *
+			 * {nth transaction}
+			 *        Checksum Verification Failed
+			 *			 |
+			 *		 ____________________
+			 *		|		     |
+			 * 	async_commit             sync_commit
+			 *     		|                    |
+			 *		| GO TO NEXT    "Journal Corruption"
+			 *		| TRANSACTION
+			 *		|
+			 * {(n+1)th transanction}
+			 *		|
+			 * 	 _______|______________
+			 * 	|	 	      |
+			 * Commit block found	Commit block not found
+			 *      |		      |
+			 * "Journal Corruption"       |
+			 *		 _____________|_________
+			 *     		|	           	|
+			 *	nth trans corrupt	OR   nth trans
+			 *	and (n+1)th interrupted     interrupted
+			 *	before commit block
+			 *      could reach the disk.
+			 *	(Cannot find the difference in above
+			 *	 mentioned conditions. Hence assume
+			 *	 "Interrupted Commit".)
+			 */
+
+			/* Found an expected commit block: if checksums
+			 * are present verify them in PASS_SCAN; else not
+			 * much to do other than move on to the next sequence
 			 * number. */
+			if (pass == PASS_SCAN &&
+			    JFS_HAS_COMPAT_FEATURE(journal,
+				    JFS_FEATURE_COMPAT_CHECKSUM)) {
+				int chksum_err, chksum_seen;
+				struct commit_header *cbh =
+					(struct commit_header *)bh->b_data;
+				unsigned found_chksum =
+					be32_to_cpu(cbh->h_chksum[0]);
+
+				chksum_err = chksum_seen = 0;
+
+				jbd_debug(3, "Checksums %x %x\n",
+					  crc32_sum, found_chksum);
+				if (info->end_transaction) {
+					journal->j_failed_commit =
+						info->end_transaction;
+					brelse(bh);
+					break;
+				}
+
+				if (crc32_sum == found_chksum &&
+				    cbh->h_chksum_type == JBD2_CRC32_CHKSUM &&
+				    cbh->h_chksum_size ==
+						JBD2_CRC32_CHKSUM_SIZE)
+				       chksum_seen = 1;
+				else if (!(cbh->h_chksum_type == 0 &&
+					     cbh->h_chksum_size == 0 &&
+					     found_chksum == 0 &&
+					     !chksum_seen))
+				/*
+				 * If fs is mounted using an old kernel and then
+				 * kernel with journal_chksum is used then we
+				 * get a situation where the journal flag has
+				 * checksum flag set but checksums are not
+				 * present i.e chksum = 0, in the individual
+				 * commit blocks.
+				 * Hence to avoid checksum failures, in this
+				 * situation, this extra check is added.
+				 */
+						chksum_err = 1;
+
+				if (chksum_err) {
+					info->end_transaction = next_commit_ID;
+					jbd_debug(1, "Checksum_err %x %x\n",
+						  crc32_sum, found_chksum);
+					if (!JFS_HAS_INCOMPAT_FEATURE(journal,
+					   JFS_FEATURE_INCOMPAT_ASYNC_COMMIT)){
+						journal->j_failed_commit =
+							next_commit_ID;
+						brelse(bh);
+						break;
+					}
+				}
+				crc32_sum = ~0;
+			}
 			brelse(bh);
 			next_commit_ID++;
 			continue;
@@ -532,16 +684,17 @@
 	}
 
  done:
-	/* 
+	/*
 	 * We broke out of the log scan loop: either we came to the
 	 * known end of the log or we found an unexpected block in the
 	 * log.  If the latter happened, then we know that the "current"
 	 * transaction marks the end of the valid log.
 	 */
-	
-	if (pass == PASS_SCAN)
-		info->end_transaction = next_commit_ID;
-	else {
+
+	if (pass == PASS_SCAN) {
+		if (!info->end_transaction)
+			info->end_transaction = next_commit_ID;
+	} else {
 		/* It's really bad news if different passes end up at
 		 * different places (but possible due to IO errors). */
 		if (info->end_transaction != next_commit_ID) {
@@ -562,7 +715,7 @@
 
 /* Scan a revoke record, marking all blocks mentioned as revoked. */
 
-static int scan_revoke_records(journal_t *journal, struct buffer_head *bh, 
+static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
 			       tid_t sequence, struct recovery_info *info)
 {
 	journal_revoke_header_t *header;
@@ -570,13 +723,13 @@
 
 	header = (journal_revoke_header_t *) bh->b_data;
 	offset = sizeof(journal_revoke_header_t);
-	max = ntohl(header->r_count);
-	
+	max = be32_to_cpu(header->r_count);
+
 	while (offset < max) {
 		unsigned long blocknr;
 		int err;
-		
-		blocknr = ntohl(* ((unsigned int *) (bh->b_data+offset)));
+
+		blocknr = be32_to_cpu(* ((__be32 *) (bh->b_data+offset)));
 		offset += 4;
 		err = journal_set_revoke(journal, blocknr, sequence);
 		if (err)
diff --git a/e2fsck/region.c b/e2fsck/region.c
index 9ccb684..e50c8a4 100644
--- a/e2fsck/region.c
+++ b/e2fsck/region.c
@@ -1,6 +1,6 @@
 /*
  * region.c --- code which manages allocations within a region.
- * 
+ *
  * Copyright (C) 2001 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -14,6 +14,9 @@
 #endif
 #include <string.h>
 
+#ifdef TEST_PROGRAM
+#undef ENABLE_NLS
+#endif
 #include "e2fsck.h"
 
 struct region_el {
@@ -154,7 +157,7 @@
 {
 	struct region_el	*r;
 	int	i = 0;
-	
+
 	fprintf(f, "Printing region (min=%d. max=%d)\n\t", region->min,
 		region->max);
 	for (r = region->allocated; r; r = r->next) {
@@ -171,7 +174,7 @@
 	int		pc = 0, ret;
 	region_addr_t	start, end, len;
 
-	
+
 	while (1) {
 		switch (bcode_program[pc++]) {
 		case BCODE_END:
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index 8e25f52..ceb8543 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -1,13 +1,13 @@
 /*
  * rehash.c --- rebuild hash tree directories
- * 
+ *
  * Copyright (C) 2002 Theodore Ts'o
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * This algorithm is designed for simplicity of implementation and to
  * pack the directory as much as possible.  It however requires twice
  * as much memory as the size of the directory.  The maximum size
@@ -36,7 +36,7 @@
  *    --------------------------------------------------------
  *                  ^ ptr    ^ptr
  *                tail new   head old
- * 
+ *
  * This is going to be a pain in the tuckus to implement, and will
  * require a lot more disk accesses.  So I'm going to skip it for now;
  * it's only really going to be an issue for really, really big
@@ -88,9 +88,9 @@
 	struct hash_entry 	*new_array, *ent;
 	struct ext2_dir_entry 	*dirent;
 	char			*dir;
-	unsigned int		offset, dir_offset;
+	unsigned int		offset, dir_offset, rec_len;
 	int			hash_alg;
-	
+
 	if (blockcnt < 0)
 		return 0;
 
@@ -103,7 +103,7 @@
 	if (HOLE_BLKADDR(*block_nr)) {
 		memset(dir, 0, fs->blocksize);
 		dirent = (struct ext2_dir_entry *) dir;
-		dirent->rec_len = fs->blocksize;
+		(void) ext2fs_set_rec_len(fs, fs->blocksize, dirent);
 	} else {
 		fd->err = ext2fs_read_dir_block(fs, *block_nr, dir);
 		if (fd->err)
@@ -117,14 +117,15 @@
 	dir_offset = 0;
 	while (dir_offset < fs->blocksize) {
 		dirent = (struct ext2_dir_entry *) (dir + dir_offset);
-		if (((dir_offset + dirent->rec_len) > fs->blocksize) ||
-		    (dirent->rec_len < 8) ||
-		    ((dirent->rec_len % 4) != 0) ||
-		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
+		(void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+		if (((dir_offset + rec_len) > fs->blocksize) ||
+		    (rec_len < 8) ||
+		    ((rec_len % 4) != 0) ||
+		    (((dirent->name_len & 0xFF)+8) > rec_len)) {
 			fd->err = EXT2_ET_DIR_CORRUPTED;
 			return BLOCK_ABORT;
 		}
-		dir_offset += dirent->rec_len;
+		dir_offset += rec_len;
 		if (dirent->inode == 0)
 			continue;
 		if (!fd->compress && ((dirent->name_len&0xFF) == 1) &&
@@ -160,7 +161,7 @@
 				return BLOCK_ABORT;
 		}
 	}
-	
+
 	return 0;
 }
 
@@ -203,7 +204,7 @@
 	const struct hash_entry *he_a = (const struct hash_entry *) a;
 	const struct hash_entry *he_b = (const struct hash_entry *) b;
 	int	ret;
-	
+
 	if (he_a->hash > he_b->hash)
 		ret = 1;
 	else if (he_a->hash < he_b->hash)
@@ -219,7 +220,7 @@
 	return ret;
 }
 
-static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir, 
+static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir,
 				int blocks)
 {
 	void			*new_mem;
@@ -245,10 +246,8 @@
 
 static void free_out_dir(struct out_dir *outdir)
 {
-	if (outdir->buf)
-		free(outdir->buf);
-	if (outdir->hashes)
-		free(outdir->hashes);
+	free(outdir->buf);
+	free(outdir->hashes);
 	outdir->max = 0;
 	outdir->num =0;
 }
@@ -278,7 +277,7 @@
 {
 	int	i;
 	__u16	l = *len & 0xFF, h = *len & 0xff00;
-	
+
 	/*
 	 * First check to see if it looks the name has been mutated
 	 * already
@@ -321,7 +320,7 @@
 		} else {
 			if (str[0] == '~')
 				str[0] = 'a';
-			else 
+			else
 				str[0]++;
 		}
 		break;
@@ -339,7 +338,7 @@
 	char			new_name[256];
 	__u16			new_len;
 	int			hash_alg;
-	
+
 	clear_problem_context(&pctx);
 	pctx.ino = ino;
 
@@ -376,7 +375,7 @@
 				     new_len & 0xFF)))
 				continue;
 			mutate_name(new_name, &new_len);
-			
+
 			j = -1;
 		}
 		new_name[new_len & 0xFF] = 0;
@@ -395,18 +394,29 @@
 }
 
 
-static errcode_t copy_dir_entries(ext2_filsys fs,
+static errcode_t copy_dir_entries(e2fsck_t ctx,
 				  struct fill_dir_struct *fd,
 				  struct out_dir *outdir)
 {
+	ext2_filsys 		fs = ctx->fs;
 	errcode_t		retval;
 	char			*block_start;
 	struct hash_entry 	*ent;
 	struct ext2_dir_entry	*dirent;
-	int			i, rec_len, left;
+	unsigned int		rec_len, prev_rec_len;
+	int			i, left;
 	ext2_dirhash_t		prev_hash;
-	int			offset;
-	
+	int			offset, slack;
+
+	if (ctx->htree_slack_percentage == 255) {
+		profile_get_uint(ctx->profile, "options",
+				 "indexed_dir_slack_percentage",
+				 0, 20,
+				 &ctx->htree_slack_percentage);
+		if (ctx->htree_slack_percentage > 100)
+			ctx->htree_slack_percentage = 20;
+	}
+
 	outdir->max = 0;
 	retval = alloc_size_dir(fs, outdir,
 				(fd->dir_size / fs->blocksize) + 2);
@@ -419,15 +429,24 @@
 	if ((retval = get_next_block(fs, outdir, &block_start)))
 		return retval;
 	dirent = (struct ext2_dir_entry *) block_start;
+	prev_rec_len = 0;
 	left = fs->blocksize;
+	slack = fd->compress ? 12 :
+		(fs->blocksize * ctx->htree_slack_percentage)/100;
+	if (slack < 12)
+		slack = 12;
 	for (i=0; i < fd->num_array; i++) {
 		ent = fd->harray + i;
 		if (ent->dir->inode == 0)
 			continue;
 		rec_len = EXT2_DIR_REC_LEN(ent->dir->name_len & 0xFF);
 		if (rec_len > left) {
-			if (left)
-				dirent->rec_len += left;
+			if (left) {
+				left += prev_rec_len;
+				retval = ext2fs_set_rec_len(fs, left, dirent);
+				if (retval)
+					return retval;
+			}
 			if ((retval = get_next_block(fs, outdir,
 						      &block_start)))
 				return retval;
@@ -443,21 +462,27 @@
 		}
 		dirent->inode = ent->dir->inode;
 		dirent->name_len = ent->dir->name_len;
-		dirent->rec_len = rec_len;
+		retval = ext2fs_set_rec_len(fs, rec_len, dirent);
+		if (retval)
+			return retval;
+		prev_rec_len = rec_len;
 		memcpy(dirent->name, ent->dir->name, dirent->name_len & 0xFF);
 		offset += rec_len;
 		left -= rec_len;
-		if (left < 12) {
-			dirent->rec_len += left;
+		if (left < slack) {
+			prev_rec_len += left;
+			retval = ext2fs_set_rec_len(fs, prev_rec_len, dirent);
+			if (retval)
+				return retval;
 			offset += left;
 			left = 0;
 		}
 		prev_hash = ent->hash;
 	}
 	if (left)
-		dirent->rec_len += left;
+		retval = ext2fs_set_rec_len(fs, rec_len + left, dirent);
 
-	return 0;
+	return retval;
 }
 
 
@@ -471,7 +496,7 @@
 
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE)
 		filetype = EXT2_FT_DIR << 8;
-	
+
 	memset(buf, 0, fs->blocksize);
 	dir = (struct ext2_dir_entry *) buf;
 	dir->inode = ino;
@@ -484,7 +509,7 @@
 	dir->name[1] = '.';
 	dir->name_len = 2 | filetype;
 	dir->rec_len = fs->blocksize - 12;
-	
+
 	root = (struct ext2_dx_root_info *) (buf+24);
 	root->reserved_zero = 0;
 	root->hash_version = fs->super->s_def_hash_version;
@@ -508,8 +533,8 @@
 	memset(buf, 0, fs->blocksize);
 	dir = (struct ext2_dir_entry *) buf;
 	dir->inode = 0;
-	dir->rec_len = fs->blocksize;
-	
+	(void) ext2fs_set_rec_len(fs, fs->blocksize, dir);
+
 	limits = (struct ext2_dx_countlimit *) (buf+8);
 	limits->limit = (fs->blocksize - 8) / sizeof(struct ext2_dx_entry);
 	limits->count = 0;
@@ -533,7 +558,7 @@
 	char				* block_start;
 	int				i, c1, c2, nblks;
 	int				limit_offset, root_offset;
-	
+
 	root_info = set_root_node(fs, outdir->buf, ino, parent);
 	root_offset = limit_offset = ((char *) root_info - outdir->buf) +
 		root_info->info_length;
@@ -562,7 +587,7 @@
 				return ENOSPC;
 			if (c2 == 0) {
 				if (limit)
-					limit->limit = limit->count = 
+					limit->limit = limit->count =
 		ext2fs_cpu_to_le16(limit->limit);
 				root = (struct ext2_dx_entry *)
 					(outdir->buf + root_offset);
@@ -610,7 +635,7 @@
 			   blk_t	*block_nr,
 			   e2_blkcnt_t blockcnt,
 			   blk_t ref_block EXT2FS_ATTR((unused)),
-			   int ref_offset EXT2FS_ATTR((unused)), 
+			   int ref_offset EXT2FS_ATTR((unused)),
 			   void *priv_data)
 {
 	struct write_dir_struct	*wd = (struct write_dir_struct *) priv_data;
@@ -668,7 +693,7 @@
 	else
 		inode.i_flags |= EXT2_INDEX_FL;
 	inode.i_size = outdir->num * fs->blocksize;
-	inode.i_blocks -= (fs->blocksize / 512) * wd.cleared;
+	ext2fs_iblk_sub_blocks(fs, &inode, wd.cleared);
 	e2fsck_write_inode(ctx, ino, &inode, "rehash_dir");
 
 	return 0;
@@ -682,7 +707,7 @@
 	char			*dir_buf = 0;
 	struct fill_dir_struct	fd;
 	struct out_dir		outdir;
-	
+
 	outdir.max = outdir.num = 0;
 	outdir.buf = 0;
 	outdir.hashes = 0;
@@ -711,6 +736,7 @@
 		fd.compress = 1;
 	fd.parent = 0;
 
+retry_nohash:
 	/* Read in the entire directory into memory */
 	retval = ext2fs_block_iterate2(fs, ino, 0, 0,
 				       fill_dir_block, &fd);
@@ -719,6 +745,17 @@
 		goto errout;
 	}
 
+	/* 
+	 * If the entries read are less than a block, then don't index
+	 * the directory
+	 */
+	if (!fd.compress && (fd.dir_size < (fs->blocksize - 24))) {
+		fd.compress = 1;
+		fd.dir_size = 0;
+		fd.num_array = 0;
+		goto retry_nohash;
+	}
+
 #if 0
 	printf("%d entries (%d bytes) found in inode %d\n",
 	       fd.num_array, fd.dir_size, ino);
@@ -727,11 +764,11 @@
 	/* Sort the list */
 resort:
 	if (fd.compress)
-		qsort(fd.harray+2, fd.num_array-2,
-		      sizeof(struct hash_entry), ino_cmp);
+		qsort(fd.harray+2, fd.num_array-2, sizeof(struct hash_entry),
+		      hash_cmp);
 	else
-		qsort(fd.harray, fd.num_array,
-		      sizeof(struct hash_entry), hash_cmp);
+		qsort(fd.harray, fd.num_array, sizeof(struct hash_entry),
+		      hash_cmp);
 
 	/*
 	 * Look for duplicates
@@ -744,14 +781,19 @@
 		goto errout;
 	}
 
+	/* Sort non-hashed directories by inode number */
+	if (fd.compress)
+		qsort(fd.harray+2, fd.num_array-2,
+		      sizeof(struct hash_entry), ino_cmp);
+
 	/*
 	 * Copy the directory entries.  In a htree directory these
 	 * will become the leaf nodes.
 	 */
-	retval = copy_dir_entries(fs, &fd, &outdir);
+	retval = copy_dir_entries(ctx, &fd, &outdir);
 	if (retval)
 		goto errout;
-	
+
 	free(dir_buf); dir_buf = 0;
 
 	if (!fd.compress) {
@@ -760,16 +802,14 @@
 		if (retval)
 			goto errout;
 	}
-	
+
 	retval = write_directory(ctx, fs, &outdir, ino, fd.compress);
 	if (retval)
 		goto errout;
 
 errout:
-	if (dir_buf)
-		free(dir_buf);
-	if (fd.harray)
-		free(fd.harray);
+	free(dir_buf);
+	free(fd.harray);
 
 	free_out_dir(&outdir);
 	return retval;
@@ -788,17 +828,14 @@
 	errcode_t		retval;
 	int			cur, max, all_dirs, dir_index, first = 1;
 
-#ifdef RESOURCE_TRACK
-	init_resource_track(&rtrack);
-#endif
-
+	init_resource_track(&rtrack, ctx->fs->io);
 	all_dirs = ctx->options & E2F_OPT_COMPRESS_DIRS;
 
 	if (!ctx->dirs_to_hash && !all_dirs)
 		return;
 
 	e2fsck_get_lost_and_found(ctx, 0);
-		
+
 	clear_problem_context(&pctx);
 
 	dir_index = ctx->fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX;
@@ -807,7 +844,7 @@
 		dirinfo_iter = e2fsck_dir_info_iter_begin(ctx);
 		max = e2fsck_get_num_dirinfo(ctx);
 	} else {
-		retval = ext2fs_u32_list_iterate_begin(ctx->dirs_to_hash, 
+		retval = ext2fs_u32_list_iterate_begin(ctx->dirs_to_hash,
 						       &iter);
 		if (retval) {
 			pctx.errcode = retval;
@@ -818,7 +855,7 @@
 	}
 	while (1) {
 		if (all_dirs) {
-			if ((dir = e2fsck_dir_info_iter(ctx, 
+			if ((dir = e2fsck_dir_info_iter(ctx,
 							dirinfo_iter)) == 0)
 				break;
 			ino = dir->ino;
@@ -850,15 +887,10 @@
 		e2fsck_dir_info_iter_end(ctx, dirinfo_iter);
 	else
 		ext2fs_u32_list_iterate_end(iter);
-	
+
 	if (ctx->dirs_to_hash)
 		ext2fs_u32_list_free(ctx->dirs_to_hash);
 	ctx->dirs_to_hash = 0;
 
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME2) {
-		e2fsck_clear_progbar(ctx);
-		print_resource_track("Pass 3A", &rtrack);
-	}
-#endif
+	print_resource_track(ctx, "Pass 3A", &rtrack, ctx->fs->io);
 }
diff --git a/e2fsck/revoke.c b/e2fsck/revoke.c
index bb4888d..c43e40e 100644
--- a/e2fsck/revoke.c
+++ b/e2fsck/revoke.c
@@ -1,6 +1,6 @@
 /*
  * linux/fs/revoke.c
- * 
+ *
  * Written by Stephen C. Tweedie <sct@redhat.com>, 2000
  *
  * Copyright 2000 Red Hat corp --- All Rights Reserved
@@ -15,10 +15,10 @@
  * Revoke is the mechanism used to prevent old log records for deleted
  * metadata from being replayed on top of newer data using the same
  * blocks.  The revoke mechanism is used in two separate places:
- * 
+ *
  * + Commit: during commit we write the entire list of the current
  *   transaction's revoked blocks to the journal
- * 
+ *
  * + Recovery: during recovery we record the transaction ID of all
  *   revoked blocks.  If there are multiple revoke records in the log
  *   for a single block, only the last one counts, and if there is a log
@@ -29,7 +29,7 @@
  * single transaction:
  *
  * Block is revoked and then journaled:
- *   The desired end result is the journaling of the new block, so we 
+ *   The desired end result is the journaling of the new block, so we
  *   cancel the revoke before the transaction commits.
  *
  * Block is journaled and then revoked:
@@ -41,7 +41,7 @@
  *   transaction must have happened after the block was journaled and so
  *   the revoke must take precedence.
  *
- * Block is revoked and then written as data: 
+ * Block is revoked and then written as data:
  *   The data write is allowed to succeed, but the revoke is _not_
  *   cancelled.  We still need to prevent old log records from
  *   overwriting the new data.  We don't even need to clear the revoke
@@ -54,7 +54,7 @@
  *			buffer has not been revoked, and cancel_revoke
  *			need do nothing.
  * RevokeValid set, Revoked set:
- *			buffer has been revoked.  
+ *			buffer has been revoked.
  */
 
 #ifndef __KERNEL__
@@ -71,18 +71,18 @@
 #include <linux/init.h>
 #endif
 
-static kmem_cache_t *revoke_record_cache;
-static kmem_cache_t *revoke_table_cache;
+static lkmem_cache_t *revoke_record_cache;
+static lkmem_cache_t *revoke_table_cache;
 
 /* Each revoke record represents one single revoked block.  During
    journal replay, this involves recording the transaction ID of the
    last transaction to revoke this block. */
 
-struct jbd_revoke_record_s 
+struct jbd_revoke_record_s
 {
 	struct list_head  hash;
 	tid_t		  sequence;	/* Used for recovery only */
-	unsigned long	  blocknr;	
+	unsigned long	  blocknr;
 };
 
 
@@ -91,8 +91,8 @@
 {
 	/* It is conceivable that we might want a larger hash table
 	 * for recovery.  Must be a power of two. */
-	int		  hash_size; 
-	int		  hash_shift; 
+	int		  hash_size;
+	int		  hash_shift;
 	struct list_head *hash_table;
 };
 
@@ -111,7 +111,7 @@
 {
 	struct jbd_revoke_table_s *table = journal->j_revoke;
 	int hash_shift = table->hash_shift;
-	
+
 	return ((block << (hash_shift - 6)) ^
 		(block >> 13) ^
 		(block << (hash_shift - 12))) & (table->hash_size - 1);
@@ -156,7 +156,7 @@
 {
 	struct list_head *hash_list;
 	struct jbd_revoke_record_s *record;
-	
+
 	hash_list = &journal->j_revoke->hash_table[hash(journal, blocknr)];
 
 	record = (struct jbd_revoke_record_s *) hash_list->next;
@@ -185,7 +185,7 @@
 		return -ENOMEM;
 	}
 	return 0;
-}	
+}
 
 void journal_destroy_revoke_caches(void)
 {
@@ -200,13 +200,13 @@
 int journal_init_revoke(journal_t *journal, int hash_size)
 {
 	int shift, tmp;
-	
+
 	J_ASSERT (journal->j_revoke == NULL);
-	
+
 	journal->j_revoke = kmem_cache_alloc(revoke_table_cache, GFP_KERNEL);
 	if (!journal->j_revoke)
 		return -ENOMEM;
-	
+
 	/* Check that the hash_size is a power of two */
 	J_ASSERT ((hash_size & (hash_size-1)) == 0);
 
@@ -225,10 +225,10 @@
 		journal->j_revoke = NULL;
 		return -ENOMEM;
 	}
-	
+
 	for (tmp = 0; tmp < hash_size; tmp++)
 		INIT_LIST_HEAD(&journal->j_revoke->hash_table[tmp]);
-	
+
 	return 0;
 }
 
@@ -239,16 +239,16 @@
 	struct jbd_revoke_table_s *table;
 	struct list_head *hash_list;
 	int i;
-	
+
 	table = journal->j_revoke;
 	if (!table)
 		return;
-	
+
 	for (i=0; i<table->hash_size; i++) {
 		hash_list = &table->hash_table[i];
 		J_ASSERT (list_empty(hash_list));
 	}
-	
+
 	kfree(table->hash_table);
 	kmem_cache_free(revoke_table_cache, table);
 	journal->j_revoke = NULL;
@@ -257,22 +257,22 @@
 
 #ifdef __KERNEL__
 
-/* 
+/*
  * journal_revoke: revoke a given buffer_head from the journal.  This
  * prevents the block from being replayed during recovery if we take a
  * crash after this current transaction commits.  Any subsequent
  * metadata writes of the buffer in this transaction cancel the
- * revoke.  
+ * revoke.
  *
  * Note that this call may block --- it is up to the caller to make
  * sure that there are no further calls to journal_write_metadata
  * before the revoke is complete.  In ext3, this implies calling the
  * revoke before clearing the block bitmap when we are deleting
- * metadata. 
+ * metadata.
  *
  * Revoke performs a journal_forget on any buffer_head passed in as a
  * parameter, but does _not_ forget the buffer_head if the bh was only
- * found implicitly. 
+ * found implicitly.
  *
  * bh_in may not be a journalled buffer - it may have come off
  * the hash tables without an attached journal_head.
@@ -281,7 +281,7 @@
  * by one.
  */
 
-int journal_revoke(handle_t *handle, unsigned long blocknr, 
+int journal_revoke(handle_t *handle, unsigned long blocknr,
 		   struct buffer_head *bh_in)
 {
 	struct buffer_head *bh = NULL;
@@ -379,7 +379,7 @@
 	int need_cancel;
 	int did_revoke = 0;	/* akpm: debug */
 	struct buffer_head *bh = jh2bh(jh);
-	
+
 	jbd_debug(4, "journal_head %p, cancelling revoke\n", jh);
 
 	/* Is the existing Revoke bit valid?  If so, we trust it, and
@@ -422,7 +422,7 @@
 			__brelse(bh2);
 		}
 	}
-	
+
 	return did_revoke;
 }
 
@@ -434,7 +434,7 @@
  * Called with the journal lock held.
  */
 
-void journal_write_revoke_records(journal_t *journal, 
+void journal_write_revoke_records(journal_t *journal,
 				  transaction_t *transaction)
 {
 	struct journal_head *descriptor;
@@ -443,38 +443,38 @@
 	struct list_head *hash_list;
 	int i, offset, count;
 
-	descriptor = NULL; 
+	descriptor = NULL;
 	offset = 0;
 	count = 0;
 	revoke = journal->j_revoke;
-	
+
 	for (i = 0; i < revoke->hash_size; i++) {
 		hash_list = &revoke->hash_table[i];
 
 		while (!list_empty(hash_list)) {
-			record = (struct jbd_revoke_record_s *) 
+			record = (struct jbd_revoke_record_s *)
 				hash_list->next;
 			write_one_revoke_record(journal, transaction,
-						&descriptor, &offset, 
+						&descriptor, &offset,
 						record);
 			count++;
 			list_del(&record->hash);
 			kmem_cache_free(revoke_record_cache, record);
 		}
 	}
-	if (descriptor) 
+	if (descriptor)
 		flush_descriptor(journal, descriptor, offset);
 	jbd_debug(1, "Wrote %d revoke records\n", count);
 }
 
-/* 
+/*
  * Write out one revoke record.  We need to create a new descriptor
- * block if the old one is full or if we have not already created one.  
+ * block if the old one is full or if we have not already created one.
  */
 
-static void write_one_revoke_record(journal_t *journal, 
+static void write_one_revoke_record(journal_t *journal,
 				    transaction_t *transaction,
-				    struct journal_head **descriptorp, 
+				    struct journal_head **descriptorp,
 				    int *offsetp,
 				    struct jbd_revoke_record_s *record)
 {
@@ -499,7 +499,7 @@
 			descriptor = NULL;
 		}
 	}
-	
+
 	if (!descriptor) {
 		descriptor = journal_get_descriptor_buffer(journal);
 		if (!descriptor)
@@ -516,22 +516,22 @@
 		offset = sizeof(journal_revoke_header_t);
 		*descriptorp = descriptor;
 	}
-	
-	* ((unsigned int *)(&jh2bh(descriptor)->b_data[offset])) = 
+
+	* ((unsigned int *)(&jh2bh(descriptor)->b_data[offset])) =
 		htonl(record->blocknr);
 	offset += 4;
 	*offsetp = offset;
 }
 
-/* 
+/*
  * Flush a revoke descriptor out to the journal.  If we are aborting,
  * this is a noop; otherwise we are generating a buffer which needs to
  * be waited for during commit, so it has to go onto the appropriate
  * journal buffer list.
  */
 
-static void flush_descriptor(journal_t *journal, 
-			     struct journal_head *descriptor, 
+static void flush_descriptor(journal_t *journal,
+			     struct journal_head *descriptor,
 			     int offset)
 {
 	journal_revoke_header_t *header;
@@ -541,7 +541,7 @@
 		__brelse(jh2bh(descriptor));
 		return;
 	}
-	
+
 	header = (journal_revoke_header_t *) jh2bh(descriptor)->b_data;
 	header->r_count = htonl(offset);
 	set_bit(BH_JWrite, &jh2bh(descriptor)->b_state);
@@ -554,7 +554,7 @@
 
 #endif
 
-/* 
+/*
  * Revoke support for recovery.
  *
  * Recovery needs to be able to:
@@ -565,7 +565,7 @@
  *  check whether a given block in a given transaction should be replayed
  *  (ie. has not been revoked by a revoke record in that or a subsequent
  *  transaction)
- * 
+ *
  *  empty the revoke table after recovery.
  */
 
@@ -573,15 +573,15 @@
  * First, setting revoke records.  We create a new revoke record for
  * every block ever revoked in the log as we scan it for recovery, and
  * we update the existing records if we find multiple revokes for a
- * single block. 
+ * single block.
  */
 
-int journal_set_revoke(journal_t *journal, 
-		       unsigned long blocknr, 
+int journal_set_revoke(journal_t *journal,
+		       unsigned long blocknr,
 		       tid_t sequence)
 {
 	struct jbd_revoke_record_s *record;
-	
+
 	record = find_revoke_record(journal, blocknr);
 	if (record) {
 		/* If we have multiple occurences, only record the
@@ -589,23 +589,23 @@
 		if (tid_gt(sequence, record->sequence))
 			record->sequence = sequence;
 		return 0;
-	} 
+	}
 	return insert_revoke_hash(journal, blocknr, sequence);
 }
 
-/* 
+/*
  * Test revoke records.  For a given block referenced in the log, has
  * that block been revoked?  A revoke record with a given transaction
  * sequence number revokes all blocks in that transaction and earlier
  * ones, but later transactions still need replayed.
  */
 
-int journal_test_revoke(journal_t *journal, 
+int journal_test_revoke(journal_t *journal,
 			unsigned long blocknr,
 			tid_t sequence)
 {
 	struct jbd_revoke_record_s *record;
-	
+
 	record = find_revoke_record(journal, blocknr);
 	if (!record)
 		return 0;
@@ -625,9 +625,9 @@
 	struct list_head *hash_list;
 	struct jbd_revoke_record_s *record;
 	struct jbd_revoke_table_s *revoke;
-	
+
 	revoke = journal->j_revoke;
-	
+
 	for (i = 0; i < revoke->hash_size; i++) {
 		hash_list = &revoke->hash_table[i];
 		while (!list_empty(hash_list)) {
diff --git a/e2fsck/scantest.c b/e2fsck/scantest.c
index 9727a9f..ed586b1 100644
--- a/e2fsck/scantest.c
+++ b/e2fsck/scantest.c
@@ -55,7 +55,7 @@
 void init_resource_track(struct resource_track *track)
 {
 	struct rusage r;
-	
+
 	track->brk_start = sbrk(0);
 	gettimeofday(&track->time_start, 0);
 	getrusage(RUSAGE_SELF, &r);
@@ -100,7 +100,7 @@
 	printf(_("size of inode=%d\n"), sizeof(inode));
 
 	device_name = "/dev/hda3";
-	
+
 	init_resource_track(&global_rtrack);
 
 	retval = ext2fs_open(device_name, 0,
@@ -133,11 +133,11 @@
 			exit(1);
 		}
 	}
-	
+
 
 	ext2fs_close(fs);
-	
+
 	print_resource_track(&global_rtrack);
-	
+
 	return exit_value;
 }
diff --git a/e2fsck/super.c b/e2fsck/super.c
index 954783e..951f6db 100644
--- a/e2fsck/super.c
+++ b/e2fsck/super.c
@@ -1,6 +1,6 @@
 /*
  * e2fsck.c - superblock checks
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -102,7 +102,7 @@
 		if (blockcnt < 0) {
 			int	i, limit;
 			blk_t	*bp;
-			
+
 			pb->errcode = io_channel_read_blk(fs->io, blk, 1,
 							pb->buf);
 			if (pb->errcode)
@@ -140,11 +140,11 @@
 		*block_nr = 0;
 		retval |= BLOCK_CHANGED;
 	}
-	
+
 	ext2fs_block_alloc_stats(fs, blk, -1);
 	return retval;
 }
-		
+
 /*
  * This function releases an inode.  Returns 1 if an inconsistency was
  * found.  If the inode has a link count, then it is being truncated and
@@ -180,7 +180,7 @@
 		pb.truncate_offset = 0;
 	}
 	pb.truncated_blocks = 0;
-	retval = ext2fs_block_iterate2(fs, ino, BLOCK_FLAG_DEPTH_TRAVERSE, 
+	retval = ext2fs_block_iterate2(fs, ino, BLOCK_FLAG_DEPTH_TRAVERSE,
 				      block_buf, release_inode_block, &pb);
 	if (retval) {
 		com_err("release_inode_blocks", retval,
@@ -195,8 +195,7 @@
 	e2fsck_read_inode(ctx, ino, inode, "release_inode_blocks");
 
 	if (pb.truncated_blocks)
-		inode->i_blocks -= pb.truncated_blocks *
-			(fs->blocksize / 512);
+		ext2fs_iblk_sub_blocks(fs, inode, pb.truncated_blocks);
 
 	if (inode->i_file_acl) {
 		retval = ext2fs_adjust_ea_refcount(fs, inode->i_file_acl,
@@ -247,7 +246,7 @@
 	 */
 	if (fs->super->s_state & EXT2_ERROR_FS)
 		return 0;
-	
+
 	if ((ino < EXT2_FIRST_INODE(fs->super)) ||
 	    (ino > fs->super->s_inodes_count)) {
 		clear_problem_context(&pctx);
@@ -259,7 +258,7 @@
 	block_buf = (char *) e2fsck_allocate_memory(ctx, fs->blocksize * 4,
 						    "block iterate buffer");
 	e2fsck_read_bitmaps(ctx);
-	
+
 	while (ino) {
 		e2fsck_read_inode(ctx, ino, &inode, "release_orphan_inodes");
 		clear_problem_context(&pctx);
@@ -305,7 +304,7 @@
  * resize inode should be cleared) as well as the case where on-line
  * resizing is enabled.
  */
-static void check_resize_inode(e2fsck_t ctx)
+void check_resize_inode(e2fsck_t ctx)
 {
 	ext2_filsys fs = ctx->fs;
 	struct ext2_inode inode;
@@ -318,11 +317,11 @@
 
 	clear_problem_context(&pctx);
 
-	/* 
-	 * If the resize inode feature isn't set, then 
+	/*
+	 * If the resize inode feature isn't set, then
 	 * s_reserved_gdt_blocks must be zero.
 	 */
-	if (!(fs->super->s_feature_compat & 
+	if (!(fs->super->s_feature_compat &
 	      EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
 		if (fs->super->s_reserved_gdt_blocks) {
 			pctx.num = fs->super->s_reserved_gdt_blocks;
@@ -338,17 +337,17 @@
 	pctx.ino = EXT2_RESIZE_INO;
 	retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
 	if (retval) {
-		if (fs->super->s_feature_compat & 
+		if (fs->super->s_feature_compat &
 		    EXT2_FEATURE_COMPAT_RESIZE_INODE)
 			ctx->flags |= E2F_FLAG_RESIZE_INODE;
 		return;
 	}
 
-	/* 
-	 * If the resize inode feature isn't set, check to make sure 
+	/*
+	 * If the resize inode feature isn't set, check to make sure
 	 * the resize inode is cleared; then we're done.
 	 */
-	if (!(fs->super->s_feature_compat & 
+	if (!(fs->super->s_feature_compat &
 	      EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
 		for (i=0; i < EXT2_N_BLOCKS; i++) {
 			if (inode.i_block[i])
@@ -363,7 +362,7 @@
 		return;
 	}
 
-	/* 
+	/*
 	 * The resize inode feature is enabled; check to make sure the
 	 * only block in use is the double indirect block
 	 */
@@ -399,13 +398,13 @@
 
 	gdt_off = fs->desc_blocks;
 	pblk = fs->super->s_first_data_block + 1 + fs->desc_blocks;
-	for (i = 0; i < fs->super->s_reserved_gdt_blocks / 4; 
+	for (i = 0; i < fs->super->s_reserved_gdt_blocks / 4;
 	     i++, gdt_off++, pblk++) {
 		gdt_off %= fs->blocksize/4;
 		if (dind_buf[gdt_off] != pblk)
 			goto resize_inode_invalid;
 		retval = ext2fs_read_ind_block(fs, pblk, ind_buf);
-		if (retval) 
+		if (retval)
 			goto resize_inode_invalid;
 		ind_off = 0;
 		for (j = 1; j < fs->group_desc_count; j++) {
@@ -458,16 +457,19 @@
 	blk_t	first_block, last_block;
 	struct ext2_super_block *sb = fs->super;
 	struct ext2_group_desc *gd;
+	problem_t	problem;
 	blk_t	blocks_per_group = fs->super->s_blocks_per_group;
 	blk_t	bpg_max;
 	int	inodes_per_block;
 	int	ipg_max;
 	int	inode_size;
-	int	buggy_init_scripts;
+	int	accept_time_fudge;
 	dgrp_t	i;
 	blk_t	should_be;
 	struct problem_context	pctx;
-	__u32	free_blocks = 0, free_inodes = 0;
+	blk_t	free_blocks = 0;
+	ino_t	free_inodes = 0;
+	int     csum_flag, clear_test_fs_flag;
 
 	inodes_per_block = EXT2_INODES_PER_BLOCK(fs->super);
 	ipg_max = inodes_per_block * (blocks_per_group - 4);
@@ -509,9 +511,13 @@
 			  MIN_CHECK | MAX_CHECK, inodes_per_block, ipg_max);
 	check_super_value(ctx, "r_blocks_count", sb->s_r_blocks_count,
 			  MAX_CHECK, 0, sb->s_blocks_count / 2);
-	check_super_value(ctx, "reserved_gdt_blocks", 
+	check_super_value(ctx, "reserved_gdt_blocks",
 			  sb->s_reserved_gdt_blocks, MAX_CHECK, 0,
 			  fs->blocksize/4);
+	if (sb->s_rev_level > EXT2_GOOD_OLD_REV)
+		check_super_value(ctx, "first_ino", sb->s_first_ino,
+				  MIN_CHECK | MAX_CHECK,
+				  EXT2_GOOD_OLD_FIRST_INO, sb->s_inodes_count);
 	inode_size = EXT2_INODE_SIZE(sb);
 	check_super_value(ctx, "inode_size",
 			  inode_size, MIN_CHECK | MAX_CHECK,
@@ -523,7 +529,7 @@
 		ctx->flags |= E2F_FLAG_ABORT; /* never get here! */
 		return;
 	}
-		
+
 	if ((ctx->flags & E2F_FLAG_GOT_DEVSIZE) &&
 	    (ctx->num_blocks < sb->s_blocks_count)) {
 		pctx.blk = sb->s_blocks_count;
@@ -543,7 +549,7 @@
 	}
 
 	should_be = sb->s_frags_per_group >>
-		(sb->s_log_block_size - sb->s_log_frag_size);		
+		(sb->s_log_block_size - sb->s_log_frag_size);
 	if (sb->s_blocks_per_group != should_be) {
 		pctx.blk = sb->s_blocks_per_group;
 		pctx.blk2 = should_be;
@@ -574,13 +580,19 @@
 	/*
 	 * Verify the group descriptors....
 	 */
-	first_block =  sb->s_first_data_block;
+	first_block = sb->s_first_data_block;
+	last_block = sb->s_blocks_count-1;
 
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 	for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) {
 		pctx.group = i;
 
-		first_block = ext2fs_group_first_block(fs, i);
-		last_block = ext2fs_group_last_block(fs, i);
+		if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+			first_block = ext2fs_group_first_block(fs, i);
+			last_block = ext2fs_group_last_block(fs, i);
+		}
 
 		if ((gd->bg_block_bitmap < first_block) ||
 		    (gd->bg_block_bitmap > last_block)) {
@@ -621,6 +633,60 @@
 		    (gd->bg_used_dirs_count > sb->s_inodes_per_group))
 			ext2fs_unmark_valid(fs);
 
+		should_be = 0;
+		if (!ext2fs_group_desc_csum_verify(fs, i)) {
+			if (fix_problem(ctx, PR_0_GDT_CSUM, &pctx)) {
+				gd->bg_flags &=	~(EXT2_BG_BLOCK_UNINIT |
+				                  EXT2_BG_INODE_UNINIT);
+				gd->bg_itable_unused = 0;
+				should_be = 1;
+			}
+			ext2fs_unmark_valid(fs);
+		}
+
+		if (!csum_flag &&
+		    (gd->bg_flags &(EXT2_BG_BLOCK_UNINIT|EXT2_BG_INODE_UNINIT)||
+		     gd->bg_itable_unused != 0)){
+			if (fix_problem(ctx, PR_0_GDT_UNINIT, &pctx)) {
+				gd->bg_flags &= ~(EXT2_BG_BLOCK_UNINIT |
+						  EXT2_BG_INODE_UNINIT);
+				gd->bg_itable_unused = 0;
+				should_be = 1;
+			}
+			ext2fs_unmark_valid(fs);
+		}
+
+		if (i == fs->group_desc_count - 1 &&
+		    gd->bg_flags & EXT2_BG_BLOCK_UNINIT) {
+			if (fix_problem(ctx, PR_0_BB_UNINIT_LAST, &pctx)) {
+				gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+				should_be = 1;
+			}
+			ext2fs_unmark_valid(fs);
+		}
+
+		if (gd->bg_flags & EXT2_BG_BLOCK_UNINIT &&
+		    !(gd->bg_flags & EXT2_BG_INODE_UNINIT)) {
+			if (fix_problem(ctx, PR_0_BB_UNINIT_IB_INIT, &pctx)) {
+				gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+				should_be = 1;
+			}
+			ext2fs_unmark_valid(fs);
+		}
+
+		if (csum_flag &&
+		    (gd->bg_itable_unused > gd->bg_free_inodes_count ||
+		     gd->bg_itable_unused > sb->s_inodes_per_group)) {
+			pctx.blk = gd->bg_itable_unused;
+			if (fix_problem(ctx, PR_0_GDT_ITABLE_UNUSED, &pctx)) {
+				gd->bg_itable_unused = 0;
+				should_be = 1;
+			}
+			ext2fs_unmark_valid(fs);
+		}
+
+		if (should_be)
+			ext2fs_group_desc_csum_set(fs, i);
 	}
 
 	/*
@@ -640,7 +706,7 @@
 			ext2fs_mark_super_dirty(fs);
 		}
 	}
-	
+
 	if ((sb->s_free_blocks_count > sb->s_blocks_count) ||
 	    (sb->s_free_inodes_count > sb->s_inodes_count))
 		ext2fs_unmark_valid(fs);
@@ -656,7 +722,7 @@
 	}
 
 	clear_problem_context(&pctx);
-	
+
 #ifndef EXT2_SKIP_UUID
 	/*
 	 * If the UUID field isn't assigned, assign it.
@@ -671,6 +737,23 @@
 #endif
 
 	/*
+	 * Check to see if we should disable the test_fs flag
+	 */
+	profile_get_boolean(ctx->profile, "options",
+			    "clear_test_fs_flag", 0, 1,
+			    &clear_test_fs_flag);
+	if (!(ctx->options & E2F_OPT_READONLY) &&
+	    clear_test_fs_flag &&
+	    (fs->super->s_flags & EXT2_FLAGS_TEST_FILESYS) &&
+	    (fs_proc_check("ext4") || check_for_modules("ext4"))) {
+		if (fix_problem(ctx, PR_0_CLEAR_TESTFS_FLAG, &pctx)) {
+			fs->super->s_flags &= ~EXT2_FLAGS_TEST_FILESYS;
+			ext2fs_mark_super_dirty(fs);
+			fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
+		}
+	}
+			
+	/*
 	 * For the Hurd, check to see if the filetype option is set,
 	 * since it doesn't support it.
 	 */
@@ -703,8 +786,6 @@
 		fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
 	}
 
-	check_resize_inode(ctx);
-
 	/*
 	 * Clean up any orphan inodes, if present.
 	 */
@@ -714,40 +795,52 @@
 	}
 
 	/*
-	 * Some buggy distributions (such as Ubuntu) have init scripts
-	 * and/or installers which fail to correctly set the system
-	 * clock before running e2fsck and/or formatting the
-	 * filesystem initially.  Normally this happens because the
-	 * hardware clock is ticking localtime, instead of the more
-	 * proper and less error-prone UTC time.  So while the kernel
-	 * is booting, the system time (which in Linux systems always
-	 * ticks in UTC time) is set from the hardware clock, but
-	 * since the hardware clock is ticking localtime, the system
-	 * time is incorrect.  Unfortunately, some buggy distributions
-	 * do not correct this before running e2fsck.  If this option
-	 * is set to a boolean value of true, we attempt to work
-	 * around this situation by allowing the superblock last write
-	 * time, last mount time, and last check time to be in the
-	 * future by up to 24 hours.
+	 * Unfortunately, due to Windows' unfortunate design decision
+	 * to configure the hardware clock to tick localtime, instead
+	 * of the more proper and less error-prone UTC time, many
+	 * users end up in the situation where the system clock is
+	 * incorrectly set at the time when e2fsck is run.
+	 *
+	 * Historically this was usually due to some distributions
+	 * having buggy init scripts and/or installers that didn't
+	 * correctly detect this case and take appropriate
+	 * countermeasures.  However, it's still possible, despite the
+	 * best efforts of init script and installer authors to not be
+	 * able to detect this misconfiguration, usually due to a
+	 * buggy or misconfigured virtualization manager or the
+	 * installer not having access to a network time server during
+	 * the installation process.  So by default, we allow the
+	 * superblock times to be fudged by up to 24 hours.  This can
+	 * be disabled by setting options.accept_time_fudge to the
+	 * boolean value of false in e2fsck.conf.  We also support
+	 * options.buggy_init_scripts for backwards compatibility.
 	 */
+	profile_get_boolean(ctx->profile, "options", "accept_time_fudge",
+			    0, 1, &accept_time_fudge);
 	profile_get_boolean(ctx->profile, "options", "buggy_init_scripts",
-			    0, 0, &buggy_init_scripts);
-	ctx->time_fudge = buggy_init_scripts ? 86400 : 0;
+			    0, accept_time_fudge, &accept_time_fudge);
+	ctx->time_fudge = accept_time_fudge ? 86400 : 0;
 
-	/* 
+	/*
 	 * Check to see if the superblock last mount time or last
 	 * write time is in the future.
 	 */
-	if (fs->super->s_mtime > (__u32) ctx->now + ctx->time_fudge) {
+	if (fs->super->s_mtime > (__u32) ctx->now) {
 		pctx.num = fs->super->s_mtime;
-		if (fix_problem(ctx, PR_0_FUTURE_SB_LAST_MOUNT, &pctx)) {
+		problem = PR_0_FUTURE_SB_LAST_MOUNT;
+		if (fs->super->s_mtime <= (__u32) ctx->now + ctx->time_fudge)
+			problem = PR_0_FUTURE_SB_LAST_MOUNT_FUDGED;
+		if (fix_problem(ctx, problem, &pctx)) {
 			fs->super->s_mtime = ctx->now;
 			ext2fs_mark_super_dirty(fs);
 		}
 	}
-	if (fs->super->s_wtime > (__u32) ctx->now + ctx->time_fudge) {
+	if (fs->super->s_wtime > (__u32) ctx->now) {
 		pctx.num = fs->super->s_wtime;
-		if (fix_problem(ctx, PR_0_FUTURE_SB_LAST_WRITE, &pctx)) {
+		problem = PR_0_FUTURE_SB_LAST_WRITE;
+		if (fs->super->s_wtime <= (__u32) ctx->now + ctx->time_fudge)
+			problem = PR_0_FUTURE_SB_LAST_WRITE_FUDGED;
+		if (fix_problem(ctx, problem, &pctx)) {
 			fs->super->s_wtime = ctx->now;
 			ext2fs_mark_super_dirty(fs);
 		}
@@ -782,7 +875,8 @@
  * try to discourage it in the future.  In particular, for the newer
  * ext4 files, especially EXT4_FEATURE_RO_COMPAT_DIR_NLINK and
  * EXT3_FEATURE_INCOMPAT_EXTENTS.  So some of these may go away in the
- * future.
+ * future.  EXT3_FEATURE_INCOMPAT_RECOVER may also get set when
+ * copying the primary superblock during online resize.
  *
  * The kernel will set EXT2_FEATURE_COMPAT_EXT_ATTR, but
  * unfortunately, we shouldn't ignore it since if it's not set in the
@@ -791,17 +885,18 @@
  */
 #define FEATURE_RO_COMPAT_IGNORE	(EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
 					 EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
-#define FEATURE_INCOMPAT_IGNORE		(EXT3_FEATURE_INCOMPAT_EXTENTS)
+#define FEATURE_INCOMPAT_IGNORE		(EXT3_FEATURE_INCOMPAT_EXTENTS| \
+					 EXT3_FEATURE_INCOMPAT_RECOVER)
 
 int check_backup_super_block(e2fsck_t ctx)
 {
 	ext2_filsys	fs = ctx->fs;
-	ext2_filsys	tfs = 0;
-	io_manager	io_ptr;
 	errcode_t	retval;
 	dgrp_t		g;
 	blk_t		sb;
 	int		ret = 0;
+	char		buf[SUPERBLOCK_SIZE];
+	struct ext2_super_block	*backup_sb;
 
 	/*
 	 * If we are already writing out the backup blocks, then we
@@ -824,32 +919,38 @@
 		sb = fs->super->s_first_data_block +
 			(g * fs->super->s_blocks_per_group);
 
-		retval = ext2fs_open(ctx->filesystem_name, 0,
-				     sb, fs->blocksize,
-				     fs->io->manager, &tfs);
-		if (retval) {
-			tfs = 0;
+		retval = io_channel_read_blk(fs->io, sb, -SUPERBLOCK_SIZE,
+					     buf);
+		if (retval)
 			continue;
-		}
+		backup_sb = (struct ext2_super_block *) buf;
+#ifdef WORDS_BIGENDIAN
+		ext2fs_swap_super(backup_sb);
+#endif
+		if ((backup_sb->s_magic != EXT2_SUPER_MAGIC) ||
+		    (backup_sb->s_rev_level > EXT2_LIB_CURRENT_REV) ||
+		    ((backup_sb->s_log_block_size + EXT2_MIN_BLOCK_LOG_SIZE) >
+		     EXT2_MAX_BLOCK_LOG_SIZE) ||
+		    (EXT2_INODE_SIZE(backup_sb) < EXT2_GOOD_OLD_INODE_SIZE))
+			continue;
 
 #define SUPER_INCOMPAT_DIFFERENT(x)	\
-	(( fs->super->x & ~FEATURE_INCOMPAT_IGNORE) !=	\
-	 (tfs->super->x & ~FEATURE_INCOMPAT_IGNORE))
+	((fs->super->x & ~FEATURE_INCOMPAT_IGNORE) !=	\
+	 (backup_sb->x & ~FEATURE_INCOMPAT_IGNORE))
 #define SUPER_RO_COMPAT_DIFFERENT(x)	\
-	(( fs->super->x & ~FEATURE_RO_COMPAT_IGNORE) !=	\
-	 (tfs->super->x & ~FEATURE_RO_COMPAT_IGNORE))
+	((fs->super->x & ~FEATURE_RO_COMPAT_IGNORE) !=	\
+	 (backup_sb->x & ~FEATURE_RO_COMPAT_IGNORE))
 #define SUPER_DIFFERENT(x)		\
-	(fs->super->x != tfs->super->x)
+	(fs->super->x != backup_sb->x)
 
 		if (SUPER_DIFFERENT(s_feature_compat) ||
 		    SUPER_INCOMPAT_DIFFERENT(s_feature_incompat) ||
 		    SUPER_RO_COMPAT_DIFFERENT(s_feature_ro_compat) ||
 		    SUPER_DIFFERENT(s_blocks_count) ||
 		    SUPER_DIFFERENT(s_inodes_count) ||
-		    memcmp(fs->super->s_uuid, tfs->super->s_uuid,
+		    memcmp(fs->super->s_uuid, backup_sb->s_uuid,
 			   sizeof(fs->super->s_uuid)))
 			ret = 1;
-		ext2fs_close(tfs);
 		break;
 	}
 	return ret;
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 97d1943..2b8040a 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1,6 +1,6 @@
 /*
  * unix.c - The unix-specific code for e2fsck
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -9,6 +9,8 @@
  * %End-Header%
  */
 
+#define _XOPEN_SOURCE 600 /* for inclusion of sa_handler in Solaris */
+
 #include <stdio.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
@@ -46,14 +48,14 @@
 #include <dirent.h>
 #endif
 
+#include "e2p/e2p.h"
 #include "et/com_err.h"
+#include "e2p/e2p.h"
 #include "e2fsck.h"
 #include "problem.h"
 #include "../version.h"
 
 /* Command line options */
-static int swapfs;
-static int normalize_swapfs;
 static int cflag;		/* check disk */
 static int show_version_only;
 static int verbose;
@@ -75,7 +77,7 @@
 static void usage(e2fsck_t ctx)
 {
 	fprintf(stderr,
-		_("Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+		_("Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 		"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 		"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 		"\t\t[-E extended-options] device\n"),
@@ -106,7 +108,8 @@
 	blk_t blocks, blocks_used;
 	int dir_links;
 	int num_files, num_links;
-	int frag_percent;
+	int frag_percent_file, frag_percent_dir, frag_percent_total;
+	int i, j;
 
 	dir_links = 2 * ctx->fs_directory_count - 1;
 	num_files = ctx->fs_total_count - dir_links;
@@ -118,24 +121,52 @@
 	blocks_used = (fs->super->s_blocks_count -
 		       fs->super->s_free_blocks_count);
 
-	frag_percent = (10000 * ctx->fs_fragmented) / inodes_used;
-	frag_percent = (frag_percent + 5) / 10;
-	
+	frag_percent_file = (10000 * ctx->fs_fragmented) / inodes_used;
+	frag_percent_file = (frag_percent_file + 5) / 10;
+
+	frag_percent_dir = (10000 * ctx->fs_fragmented_dir) / inodes_used;
+	frag_percent_dir = (frag_percent_dir + 5) / 10;
+
+	frag_percent_total = ((10000 * (ctx->fs_fragmented +
+					ctx->fs_fragmented_dir))
+			      / inodes_used);
+	frag_percent_total = (frag_percent_total + 5) / 10;
+
 	if (!verbose) {
 		printf(_("%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"),
 		       ctx->device_name, inodes_used, inodes,
-		       frag_percent / 10, frag_percent % 10,
+		       frag_percent_total / 10, frag_percent_total % 10,
 		       blocks_used, blocks);
 		return;
 	}
 	printf (P_("\n%8u inode used (%2.2f%%)\n", "\n%8u inodes used (%2.2f%%)\n",
 		   inodes_used), inodes_used, 100.0 * inodes_used / inodes);
-	printf (P_("%8u non-contiguous inode (%0d.%d%%)\n",
-		   "%8u non-contiguous inodes (%0d.%d%%)\n",
+	printf (P_("%8u non-contiguous file (%0d.%d%%)\n",
+		   "%8u non-contiguous files (%0d.%d%%)\n",
 		   ctx->fs_fragmented),
-		ctx->fs_fragmented, frag_percent / 10, frag_percent % 10);
+		ctx->fs_fragmented, frag_percent_file / 10,
+		frag_percent_file % 10);
+	printf (P_("%8u non-contiguous directory (%0d.%d%%)\n",
+		   "%8u non-contiguous directories (%0d.%d%%)\n",
+		   ctx->fs_fragmented_dir),
+		ctx->fs_fragmented_dir, frag_percent_dir / 10,
+		frag_percent_dir % 10);
 	printf (_("         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"),
 		ctx->fs_ind_count, ctx->fs_dind_count, ctx->fs_tind_count);
+
+	for (j=MAX_EXTENT_DEPTH_COUNT-1; j >=0; j--)
+		if (ctx->extent_depth_count[j])
+			break;
+	if (++j) {
+		printf (_("         Extent depth histogram: "));
+		for (i=0; i < j; i++) {
+			if (i)
+				fputc('/', stdout);
+			printf("%u", ctx->extent_depth_count[i]);
+		}
+		fputc('\n', stdout);
+	}
+
 	printf (P_("%8u block used (%2.2f%%)\n", "%8u blocks used (%2.2f%%)\n",
 		   blocks_used), blocks_used, 100.0 * blocks_used / blocks);
 	printf (P_("%8u bad block\n", "%8u bad blocks\n",
@@ -203,8 +234,8 @@
 	if (!ctx->interactive)
 		fatal_error(ctx, _("Cannot continue, aborting.\n\n"));
 	printf(_("\n\n\007\007\007\007WARNING!!!  "
-	       "Running e2fsck on a mounted filesystem may cause\n"
-	       "SEVERE filesystem damage.\007\007\007\n\n"));
+	       "The filesystem is mounted.   If you continue you ***WILL***\n"
+	       "cause ***SEVERE*** filesystem damage.\007\007\007\n\n"));
 	cont = ask_yn(_("Do you really want to continue"), -1);
 	if (!cont) {
 		printf (_("check aborted.\n"));
@@ -223,7 +254,7 @@
 
 	f = fopen("/proc/apm", "r");
 	if (f) {
-		if (fscanf(f, "%s %s %s %x", tmp, tmp, tmp, &acflag) != 4) 
+		if (fscanf(f, "%s %s %s %x", tmp, tmp, tmp, &acflag) != 4)
 			acflag = 1;
 		fclose(f);
 		return (acflag != 1);
@@ -233,7 +264,7 @@
 		while ((de=readdir(d)) != NULL) {
 			if (!strncmp(".", de->d_name, 1))
 				continue;
-			snprintf(fname, 80, "/proc/acpi/ac_adapter/%s/state", 
+			snprintf(fname, 80, "/proc/acpi/ac_adapter/%s/state",
 				 de->d_name);
 			f = fopen(fname, "r");
 			if (!f)
@@ -267,15 +298,14 @@
 	time_t lastcheck;
 
 	profile_get_boolean(ctx->profile, "options",
-			    "defer_check_on_battery", 0, 1, 
+			    "defer_check_on_battery", 0, 1,
 			    &defer_check_on_battery);
 	if (!defer_check_on_battery)
 		batt = 0;
 
-	if ((ctx->options & E2F_OPT_FORCE) || bad_blocks_file ||
-	    cflag || swapfs)
+	if ((ctx->options & E2F_OPT_FORCE) || bad_blocks_file || cflag)
 		return;
-	
+
 	lastcheck = fs->super->s_lastcheck;
 	if (lastcheck > ctx->now)
 		lastcheck -= ctx->time_fudge;
@@ -291,14 +321,19 @@
 		  (unsigned) fs->super->s_max_mnt_count)) {
 		reason = _(" has been mounted %u times without being checked");
 		reason_arg = fs->super->s_mnt_count;
-		if (batt && (fs->super->s_mnt_count < 
+		if (batt && (fs->super->s_mnt_count <
 			     (unsigned) fs->super->s_max_mnt_count*2))
 			reason = 0;
+	} else if (fs->super->s_checkinterval && (ctx->now < lastcheck)) {
+		reason = _(" has filesystem last checked time in the future");
+		if (batt)
+			reason = 0;
 	} else if (fs->super->s_checkinterval &&
-		   ((ctx->now - lastcheck) >= fs->super->s_checkinterval)) {
+		   ((ctx->now - lastcheck) >=
+		    ((time_t) fs->super->s_checkinterval))) {
 		reason = _(" has gone %u days without being checked");
 		reason_arg = (ctx->now - fs->super->s_lastcheck)/(3600*24);
-		if (batt && ((ctx->now - fs->super->s_lastcheck) < 
+		if (batt && ((ctx->now - fs->super->s_lastcheck) <
 			     fs->super->s_checkinterval*2))
 			reason = 0;
 	}
@@ -316,7 +351,7 @@
 	next_check = 100000;
 	if (fs->super->s_max_mnt_count > 0) {
 		next_check = fs->super->s_max_mnt_count - fs->super->s_mnt_count;
-		if (next_check <= 0) 
+		if (next_check <= 0)
 			next_check = 1;
 	}
 	if (fs->super->s_checkinterval &&
@@ -324,7 +359,7 @@
 		next_check = 1;
 	if (next_check <= 5) {
 		if (next_check == 1) {
-			if (batt) 
+			if (batt)
 				fputs(_(" (check deferred; on battery)"),
 				      stdout);
 			else
@@ -355,7 +390,7 @@
 			  int max)
 {
 	float	percent;
-	
+
 	if (pass <= 0)
 		return 0.0;
 	if (pass > tbl->max_pass || max == 0)
@@ -369,7 +404,7 @@
 {
 	if (!(ctx->flags & E2F_FLAG_PROG_BAR))
 		return;
-	
+
 	printf("%s%s\r%s", ctx->start_meta, spaces + (sizeof(spaces) - 80),
 	       ctx->stop_meta);
 	fflush(stdout);
@@ -392,7 +427,7 @@
 	/*
 	 * Calculate the new progress position.  If the
 	 * percentage hasn't changed, then we skip out right
-	 * away. 
+	 * away.
 	 */
 	fixed_percent = (int) ((10 * percent) + 0.5);
 	if (ctx->progress_last_percent == fixed_percent)
@@ -437,7 +472,7 @@
 	else
 		fputs(" \r", stdout);
 	fputs(ctx->stop_meta, stdout);
-	
+
 	if (fixed_percent == 1000)
 		e2fsck_clear_progbar(ctx);
 	fflush(stdout);
@@ -448,15 +483,16 @@
 static int e2fsck_update_progress(e2fsck_t ctx, int pass,
 				  unsigned long cur, unsigned long max)
 {
-	char buf[80];
+	char buf[1024];
 	float percent;
 
 	if (pass == 0)
 		return 0;
-	
+
 	if (ctx->progress_fd) {
-		sprintf(buf, "%d %lu %lu\n", pass, cur, max);
-		write(ctx->progress_fd, buf, strlen(buf));
+		snprintf(buf, sizeof(buf), "%d %lu %lu %s\n",
+			 pass, cur, max, ctx->device_name);
+		write_all(ctx->progress_fd, buf, strlen(buf));
 	} else {
 		percent = calc_percent(&e2fsck_tbl, pass, cur, max);
 		e2fsck_simple_progress(ctx, ctx->device_name,
@@ -494,7 +530,6 @@
 		return;
 
 	ctx->progress = e2fsck_update_progress;
-	ctx->progress_fd = 0;
 }
 
 static void signal_progress_off(int sig EXT2FS_ATTR((unused)))
@@ -552,6 +587,9 @@
 				continue;
 			}
 			ctx->ext_attr_ver = ea_ver;
+		} else if (strcmp(token, "fragcheck") == 0) {
+			ctx->options |= E2F_OPT_FRAGCHECK;
+			continue;
 		} else {
 			fprintf(stderr, _("Unknown extended option: %s\n"),
 				token);
@@ -564,15 +602,17 @@
 		fputs(("\nExtended options are separated by commas, "
 		       "and may take an argument which\n"
 		       "is set off by an equals ('=') sign.  "
-			"Valid extended options are:\n"
-		       "\tea_ver=<ea_version (1 or 2)>\n\n"), stderr);
+		       "Valid extended options are:\n"), stderr);
+		fputs(("\tea_ver=<ea_version (1 or 2)>\n"), stderr);
+		fputs(("\tfragcheck\n"), stderr);
+		fputc('\n', stderr);
 		exit(1);
 	}
 }
 
 static void syntax_err_report(const char *filename, long err, int line_num)
 {
-	fprintf(stderr, 
+	fprintf(stderr,
 		_("Syntax error in e2fsck config file (%s, line #%d)\n\t%s\n"),
 		filename, line_num, error_message(err));
 	exit(FSCK_ERROR);
@@ -618,7 +658,7 @@
 	add_error_table(&et_ext2_error_table);
 	add_error_table(&et_prof_error_table);
 	blkid_get_cache(&ctx->blkid, NULL);
-	
+
 	if (argc && *argv)
 		ctx->program_name = *argv;
 	else
@@ -631,6 +671,10 @@
 			if (res != 1)
 				goto sscanf_err;
 
+			if (ctx->progress_fd < 0) {
+				ctx->progress = 0;
+				ctx->progress_fd = ctx->progress_fd * -1;
+			}
 			if (!ctx->progress_fd)
 				break;
 			/* Validate the file descriptor to avoid disasters */
@@ -655,7 +699,7 @@
 		case 'a':
 			if (ctx->options & (E2F_OPT_YES|E2F_OPT_NO)) {
 			conflict_opt:
-				fatal_error(ctx, 
+				fatal_error(ctx,
 	_("Only one of the options -p/-a, -n or -y may be specified."));
 			}
 			ctx->options |= E2F_OPT_PREEN;
@@ -690,7 +734,7 @@
 			/* What we do by default, anyway! */
 			break;
 		case 'b':
-			res = sscanf(optarg, "%d", &ctx->use_superblock);
+			res = sscanf(optarg, "%u", &ctx->use_superblock);
 			if (res != 1)
 				goto sscanf_err;
 			ctx->flags |= E2F_FLAG_SB_SPECIFIED;
@@ -737,22 +781,8 @@
 			break;
 #endif
 		case 'N':
-			ctx->device_name = optarg;
+			ctx->device_name = string_copy(ctx, optarg, 0);
 			break;
-#ifdef ENABLE_SWAPFS
-		case 's':
-			normalize_swapfs = 1;
-		case 'S':
-			swapfs = 1;
-			break;
-#else
-		case 's':
-		case 'S':
-			fprintf(stderr, _("Byte-swapping filesystems "
-					  "not compiled in this version "
-					  "of e2fsck\n"));
-			exit(1);
-#endif
 		case 'k':
 			keep_bad_blocks++;
 			break;
@@ -763,15 +793,31 @@
 		return 0;
 	if (optind != argc - 1)
 		usage(ctx);
-	if ((ctx->options & E2F_OPT_NO) && !bad_blocks_file &&
-	    !cflag && !swapfs && !(ctx->options & E2F_OPT_COMPRESS_DIRS))
+	if ((ctx->options & E2F_OPT_NO) &&
+	    (ctx->options & E2F_OPT_COMPRESS_DIRS)) {
+		com_err(ctx->program_name, 0,
+			_("The -n and -D options are incompatible."));
+		fatal_error(ctx, 0);
+	}
+	if ((ctx->options & E2F_OPT_NO) && cflag) {
+		com_err(ctx->program_name, 0,
+			_("The -n and -c options are incompatible."));
+		fatal_error(ctx, 0);
+	}
+	if ((ctx->options & E2F_OPT_NO) && bad_blocks_file) {
+		com_err(ctx->program_name, 0,
+			_("The -n and -l/-L options are incompatible."));
+		fatal_error(ctx, 0);
+	}
+	if (ctx->options & E2F_OPT_NO)
 		ctx->options |= E2F_OPT_READONLY;
+
 	ctx->io_options = strchr(argv[optind], '?');
-	if (ctx->io_options) 
+	if (ctx->io_options)
 		*ctx->io_options++ = 0;
 	ctx->filesystem_name = blkid_get_devname(ctx->blkid, argv[optind], 0);
 	if (!ctx->filesystem_name) {
-		com_err(ctx->program_name, 0, _("Unable to resolve '%s'"), 
+		com_err(ctx->program_name, 0, _("Unable to resolve '%s'"),
 			argv[optind]);
 		fatal_error(ctx, 0);
 	}
@@ -799,15 +845,6 @@
 		}
 		close(fd);
 	}
-#ifdef ENABLE_SWAPFS
-	if (swapfs) {
-		if (cflag || bad_blocks_file) {
-			fprintf(stderr, _("Incompatible options not "
-					  "allowed when byte-swapping.\n"));
-			exit(FSCK_USAGE);
-		}
-	}
-#endif
 	if (cflag && bad_blocks_file) {
 		fprintf(stderr, _("The -c and the -l/-L options may "
 				  "not be both used at the same time.\n"));
@@ -871,12 +908,44 @@
 	exit (1);
 }
 
+static errcode_t try_open_fs(e2fsck_t ctx, int flags, io_manager io_ptr,
+			     ext2_filsys *ret_fs)
+{
+	errcode_t retval;
+
+	*ret_fs = NULL;
+	if (ctx->superblock && ctx->blocksize) {
+		retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
+				      flags, ctx->superblock, ctx->blocksize,
+				      io_ptr, ret_fs);
+	} else if (ctx->superblock) {
+		int blocksize;
+		for (blocksize = EXT2_MIN_BLOCK_SIZE;
+		     blocksize <= EXT2_MAX_BLOCK_SIZE; blocksize *= 2) {
+			if (*ret_fs) {
+				ext2fs_free(*ret_fs);
+				*ret_fs = NULL;
+			}
+			retval = ext2fs_open2(ctx->filesystem_name,
+					      ctx->io_options, flags,
+					      ctx->superblock, blocksize,
+					      io_ptr, ret_fs);
+			if (!retval)
+				break;
+		}
+	} else
+		retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
+				      flags, 0, 0, io_ptr, ret_fs);
+	return retval;
+}
+
+
 static const char *my_ver_string = E2FSPROGS_VERSION;
 static const char *my_ver_date = E2FSPROGS_DATE;
-					
+
 int main (int argc, char *argv[])
 {
-	errcode_t	retval = 0, orig_retval = 0;
+	errcode_t	retval = 0, retval2 = 0, orig_retval = 0;
 	int		exit_value = FSCK_OK;
 	ext2_filsys	fs = 0;
 	io_manager	io_ptr;
@@ -884,12 +953,14 @@
 	const char	*lib_ver_date;
 	int		my_ver, lib_ver;
 	e2fsck_t	ctx;
+	blk_t		orig_superblock;
 	struct problem_context pctx;
 	int flags, run_result;
 	int journal_size;
 	int sysval, sys_page_size = 4096;
 	__u32 features[3];
-	
+	char *cp;
+
 	clear_problem_context(&pctx);
 #ifdef MTRACE
 	mtrace();
@@ -910,7 +981,7 @@
 			"out of date!\n"));
 		show_version_only++;
 	}
-	
+
 	retval = PRS(argc, argv, &ctx);
 	if (retval) {
 		com_err("e2fsck", retval,
@@ -918,11 +989,8 @@
 		exit(FSCK_ERROR);
 	}
 	reserve_stdio_fds();
-	
-#ifdef RESOURCE_TRACK
-	init_resource_track(&ctx->global_rtrack);
-#endif
 
+	init_resource_track(&ctx->global_rtrack, NULL);
 	if (!(ctx->options & E2F_OPT_PREEN) || show_version_only)
 		fprintf(stderr, "e2fsck %s (%s)\n", my_ver_string,
 			 my_ver_date);
@@ -932,9 +1000,9 @@
 			error_message(EXT2_ET_BASE), lib_ver_date);
 		exit(FSCK_OK);
 	}
-	
+
 	check_mount(ctx);
-	
+
 	if (!(ctx->options & E2F_OPT_PREEN) &&
 	    !(ctx->options & E2F_OPT_NO) &&
 	    !(ctx->options & E2F_OPT_YES)) {
@@ -945,69 +1013,68 @@
 	ctx->superblock = ctx->use_superblock;
 restart:
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
+		io_ptr = unix_io_manager;
 	flags = EXT2_FLAG_NOFREE_ON_ERROR;
 	if ((ctx->options & E2F_OPT_READONLY) == 0)
 		flags |= EXT2_FLAG_RW;
 	if ((ctx->mount_flags & EXT2_MF_MOUNTED) == 0)
 		flags |= EXT2_FLAG_EXCLUSIVE;
 
-	if (ctx->superblock && ctx->blocksize) {
-		retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options, 
-				      flags, ctx->superblock, ctx->blocksize,
-				      io_ptr, &fs);
-	} else if (ctx->superblock) {
-		int blocksize;
-		for (blocksize = EXT2_MIN_BLOCK_SIZE;
-		     blocksize <= EXT2_MAX_BLOCK_SIZE; blocksize *= 2) {
-			retval = ext2fs_open2(ctx->filesystem_name, 
-					      ctx->io_options, flags,
-					      ctx->superblock, blocksize,
-					      io_ptr, &fs);
-			if (!retval)
-				break;
-		}
-	} else 
-		retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options, 
-				      flags, 0, 0, io_ptr, &fs);
+	retval = try_open_fs(ctx, flags, io_ptr, &fs);
+
 	if (!ctx->superblock && !(ctx->options & E2F_OPT_PREEN) &&
 	    !(ctx->flags & E2F_FLAG_SB_SPECIFIED) &&
 	    ((retval == EXT2_ET_BAD_MAGIC) ||
 	     (retval == EXT2_ET_CORRUPT_SUPERBLOCK) ||
-	     ((retval == 0) && ext2fs_check_desc(fs)))) {
+	     ((retval == 0) && (retval2 = ext2fs_check_desc(fs))))) {
+		if (retval2 == ENOMEM) {
+			retval = retval2;
+			goto failure;
+		}
 		if (fs->flags & EXT2_FLAG_NOFREE_ON_ERROR) {
 			ext2fs_free(fs);
 			fs = NULL;
 		}
 		if (!fs || (fs->group_desc_count > 1)) {
 			printf(_("%s: %s trying backup blocks...\n"),
-			       ctx->program_name, 
+			       ctx->program_name,
 			       retval ? _("Superblock invalid,") :
 			       _("Group descriptors look bad..."));
+			orig_superblock = ctx->superblock;
 			get_backup_sb(ctx, fs, ctx->filesystem_name, io_ptr);
 			if (fs)
 				ext2fs_close(fs);
 			orig_retval = retval;
-			goto restart;
+			retval = try_open_fs(ctx, flags, io_ptr, &fs);
+			if ((orig_retval == 0) && retval != 0) {
+				com_err(ctx->program_name, retval,
+					"when using the backup blocks");
+				printf(_("%s: going back to original "
+					 "superblock\n"), ctx->program_name);
+				ctx->superblock = orig_superblock;
+				retval = try_open_fs(ctx, flags, io_ptr, &fs);
+			}
 		}
 	}
 	if (((retval == EXT2_ET_UNSUPP_FEATURE) ||
 	     (retval == EXT2_ET_RO_UNSUPP_FEATURE)) &&
 	    fs && fs->super) {
 		sb = fs->super;
-		features[0] = (sb->s_feature_compat & 
+		features[0] = (sb->s_feature_compat &
 			       ~EXT2_LIB_FEATURE_COMPAT_SUPP);
-		features[1] = (sb->s_feature_incompat & 
+		features[1] = (sb->s_feature_incompat &
 			       ~EXT2_LIB_FEATURE_INCOMPAT_SUPP);
-		features[2] = (sb->s_feature_ro_compat & 
+		features[2] = (sb->s_feature_ro_compat &
 			       ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP);
 		if (features[0] || features[1] || features[2])
 			goto print_unsupp_features;
 	}
+failure:
 	if (retval) {
 		if (orig_retval)
 			retval = orig_retval;
@@ -1058,9 +1125,9 @@
 		__u32 blocksize = EXT2_BLOCK_SIZE(fs->super);
 		int need_restart = 0;
 
-		pctx.errcode = ext2fs_get_device_size(ctx->filesystem_name,
-						      blocksize,
-						      &ctx->num_blocks);
+		pctx.errcode = ext2fs_get_device_size2(ctx->filesystem_name,
+						       blocksize,
+						       &ctx->num_blocks);
 		/*
 		 * The floppy driver refuses to allow anyone else to
 		 * open the device if has been opened with O_EXCL;
@@ -1071,10 +1138,10 @@
 		if (pctx.errcode == EBUSY) {
 			ext2fs_close(fs);
 			need_restart++;
-			pctx.errcode = 
-				ext2fs_get_device_size(ctx->filesystem_name, 
-						       blocksize,
-						       &ctx->num_blocks);
+			pctx.errcode =
+				ext2fs_get_device_size2(ctx->filesystem_name,
+							blocksize,
+							&ctx->num_blocks);
 		}
 		if (pctx.errcode == EXT2_ET_UNIMPLEMENTED)
 			ctx->num_blocks = 0;
@@ -1110,7 +1177,16 @@
 					       sizeof(sb->s_volume_name));
 	}
 	if (ctx->device_name == 0)
-		ctx->device_name = ctx->filesystem_name;
+		ctx->device_name = string_copy(ctx, ctx->filesystem_name, 0);
+	for (cp = ctx->device_name; *cp; cp++)
+		if (isspace(*cp) || *cp == ':')
+			*cp = '_';
+
+	ehandler_init(fs->io);
+
+	if ((ctx->mount_flags & EXT2_MF_MOUNTED) &&
+	    !(sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER))
+		goto skip_journal;
 
 	/*
 	 * Make sure the ext3 superblock fields are consistent.
@@ -1159,26 +1235,27 @@
 		}
 	}
 
+skip_journal:
 	/*
 	 * Check for compatibility with the feature sets.  We need to
 	 * be more stringent than ext2fs_open().
 	 */
 	features[0] = sb->s_feature_compat & ~EXT2_LIB_FEATURE_COMPAT_SUPP;
 	features[1] = sb->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP;
-	features[2] = (sb->s_feature_ro_compat & 
+	features[2] = (sb->s_feature_ro_compat &
 		       ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP);
 print_unsupp_features:
 	if (features[0] || features[1] || features[2]) {
 		int	i, j;
 		__u32	*mask = features, m;
 
-		fprintf(stderr, _("%s has unsupported feature(s):"), 
+		fprintf(stderr, _("%s has unsupported feature(s):"),
 			ctx->filesystem_name);
 
 		for (i=0; i <3; i++,mask++) {
 			for (j=0,m=1; j < 32; j++, m<<=1) {
 				if (*mask & m)
-					fprintf(stderr, " %s", 
+					fprintf(stderr, " %s",
 						e2p_feature2string(i, m));
 			}
 		}
@@ -1223,8 +1300,6 @@
 	if (ctx->blocks_per_page == 0)
 		ctx->blocks_per_page = 1;
 
-	ehandler_init(fs->io);
-
 	if (ctx->superblock)
 		set_latch_flags(PR_LATCH_RELOC, PRL_LATCHED, 0);
 	ext2fs_mark_valid(fs);
@@ -1232,27 +1307,13 @@
 	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
 		fatal_error(ctx, 0);
 	check_if_skip(ctx);
+	check_resize_inode(ctx);
 	if (bad_blocks_file)
 		read_bad_blocks_file(ctx, bad_blocks_file, replace_bad_blocks);
 	else if (cflag)
 		read_bad_blocks_file(ctx, 0, !keep_bad_blocks); /* Test disk */
 	if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
 		fatal_error(ctx, 0);
-#ifdef ENABLE_SWAPFS
-	if (normalize_swapfs) {
-		if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ==
-		    ext2fs_native_flag()) {
-			fprintf(stderr, _("%s: Filesystem byte order "
-				"already normalized.\n"), ctx->device_name);
-			fatal_error(ctx, 0);
-		}
-	}
-	if (swapfs) {
-		swap_filesys(ctx);
-		if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
-			fatal_error(ctx, 0);
-	}
-#endif
 
 	/*
 	 * Mark the system as valid, 'til proven otherwise
@@ -1289,7 +1350,7 @@
 				fs->super->s_feature_compat &=
 					~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
 				fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
-				com_err(ctx->program_name, 0, 
+				com_err(ctx->program_name, 0,
 					_("Couldn't determine journal size"));
 				goto no_journal;
 			}
@@ -1348,7 +1409,7 @@
 		}
 	}
 	if (!ext2fs_test_valid(fs) ||
-	    ((exit_value & FSCK_CANCELED) && 
+	    ((exit_value & FSCK_CANCELED) &&
 	     (sb->s_state & EXT2_ERROR_FS))) {
 		printf(_("\n%s: ********** WARNING: Filesystem still has "
 			 "errors **********\n\n"), ctx->device_name);
@@ -1359,11 +1420,11 @@
 		int	allow_cancellation;
 
 		profile_get_boolean(ctx->profile, "options",
-				    "allow_cancellation", 0, 0, 
+				    "allow_cancellation", 0, 0,
 				    &allow_cancellation);
 		exit_value &= ~FSCK_NONDESTRUCT;
 		if (allow_cancellation && ext2fs_test_valid(fs) &&
-		    (sb->s_state & EXT2_VALID_FS) && 
+		    (sb->s_state & EXT2_VALID_FS) &&
 		    !(sb->s_state & EXT2_ERROR_FS))
 			exit_value = 0;
 	} else {
@@ -1381,17 +1442,24 @@
 		}
 	}
 
+	if (sb->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM &&
+	    !(ctx->options & E2F_OPT_READONLY)) {
+		retval = ext2fs_set_gdt_csum(ctx->fs);
+		if (retval) {
+			com_err(ctx->program_name, retval,
+				_("while setting block group checksum info"));
+			fatal_error(ctx, 0);
+		}
+	}
+
 	e2fsck_write_bitmaps(ctx);
-	
+	io_channel_flush(ctx->fs->io);
+	print_resource_track(ctx, NULL, &ctx->global_rtrack, ctx->fs->io);
+
 	ext2fs_close(fs);
 	ctx->fs = NULL;
-	free(ctx->filesystem_name);
 	free(ctx->journal_name);
 
-#ifdef RESOURCE_TRACK
-	if (ctx->options & E2F_OPT_TIME)
-		print_resource_track(NULL, &ctx->global_rtrack);
-#endif
 	e2fsck_free_context(ctx);
 	remove_error_table(&et_ext2_error_table);
 	remove_error_table(&et_prof_error_table);
diff --git a/e2fsck/util.c b/e2fsck/util.c
index f761ebb..56c6b35 100644
--- a/e2fsck/util.c
+++ b/e2fsck/util.c
@@ -1,6 +1,6 @@
 /*
  * util.c --- miscellaneous utilities
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -10,9 +10,13 @@
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <string.h>
 #include <ctype.h>
+#ifdef __linux__
+#include <sys/utsname.h>
+#endif
 
 #ifdef HAVE_CONIO_H
 #undef HAVE_TERMIOS_H
@@ -22,13 +26,16 @@
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
 #endif
-#include <stdio.h>
 #endif
 
 #ifdef HAVE_MALLOC_H
 #include <malloc.h>
 #endif
 
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
 #include "e2fsck.h"
 
 extern e2fsck_t e2fsck_global_ctx;   /* Try your very best not to use this! */
@@ -38,7 +45,7 @@
 
 void fatal_error(e2fsck_t ctx, const char *msg)
 {
-	if (msg) 
+	if (msg)
 		fprintf (stderr, "e2fsck: %s\n", msg);
 	if (ctx->fs && ctx->fs->io) {
 		if (ctx->fs->io->magic == EXT2_ET_MAGIC_IO_CHANNEL)
@@ -59,7 +66,7 @@
 	char buf[256];
 
 #ifdef DEBUG_ALLOCATE_MEMORY
-	printf("Allocating %d bytes for %s...\n", size, description);
+	printf("Allocating %u bytes for %s...\n", size, description);
 #endif
 	ret = malloc(size);
 	if (!ret) {
@@ -70,11 +77,11 @@
 	return ret;
 }
 
-char *string_copy(e2fsck_t ctx EXT2FS_ATTR((unused)), 
+char *string_copy(e2fsck_t ctx EXT2FS_ATTR((unused)),
 		  const char *str, int len)
 {
 	char	*ret;
-	
+
 	if (!str)
 		return NULL;
 	if (!len)
@@ -233,28 +240,14 @@
 	errcode_t	retval;
 	const char	*old_op;
 
-	if (ext2fs_test_bb_dirty(fs)) {
-		old_op = ehandler_operation(_("writing block bitmaps"));
-		retval = ext2fs_write_block_bitmap(fs);
-		ehandler_operation(old_op);
-		if (retval) {
-			com_err(ctx->program_name, retval,
-			    _("while retrying to write block bitmaps for %s"),
-				ctx->device_name);
-			fatal_error(ctx, 0);
-		}
-	}
-
-	if (ext2fs_test_ib_dirty(fs)) {
-		old_op = ehandler_operation(_("writing inode bitmaps"));
-		retval = ext2fs_write_inode_bitmap(fs);
-		ehandler_operation(old_op);
-		if (retval) {
-			com_err(ctx->program_name, retval,
-			    _("while retrying to write inode bitmaps for %s"),
-				ctx->device_name);
-			fatal_error(ctx, 0);
-		}
+	old_op = ehandler_operation(_("writing block and inode bitmaps"));
+	retval = ext2fs_write_bitmaps(fs);
+	ehandler_operation(old_op);
+	if (retval) {
+		com_err(ctx->program_name, retval,
+			_("while rewriting block and inode bitmaps for %s"),
+			ctx->device_name);
+		fatal_error(ctx, 0);
 	}
 }
 
@@ -267,6 +260,7 @@
 	fprintf(stderr, _("\n\n%s: UNEXPECTED INCONSISTENCY; "
 		"RUN fsck MANUALLY.\n\t(i.e., without -a or -p options)\n"),
 	       ctx->device_name);
+	ctx->flags |= E2F_FLAG_EXITING;
 	if (fs != NULL) {
 		fs->super->s_state |= EXT2_ERROR_FS;
 		ext2fs_mark_super_dirty(fs);
@@ -276,12 +270,13 @@
 }
 
 #ifdef RESOURCE_TRACK
-void init_resource_track(struct resource_track *track)
+void init_resource_track(struct resource_track *track, io_channel channel)
 {
 #ifdef HAVE_GETRUSAGE
 	struct rusage r;
 #endif
-	
+	io_stats io_start = 0;
+
 	track->brk_start = sbrk(0);
 	gettimeofday(&track->time_start, 0);
 #ifdef HAVE_GETRUSAGE
@@ -295,6 +290,14 @@
 	track->user_start.tv_sec = track->user_start.tv_usec = 0;
 	track->system_start.tv_sec = track->system_start.tv_usec = 0;
 #endif
+	track->bytes_read = 0;
+	track->bytes_written = 0;
+	if (channel && channel->manager && channel->manager->get_stats)
+		channel->manager->get_stats(channel, &io_start);
+	if (io_start) {
+		track->bytes_read = io_start->bytes_read;
+		track->bytes_written = io_start->bytes_written;
+	}
 }
 
 #ifdef __GNUC__
@@ -310,7 +313,8 @@
 		((float) (tv1->tv_usec - tv2->tv_usec)) / 1000000);
 }
 
-void print_resource_track(const char *desc, struct resource_track *track)
+void print_resource_track(e2fsck_t ctx, const char *desc,
+			  struct resource_track *track, io_channel channel)
 {
 #ifdef HAVE_GETRUSAGE
 	struct rusage r;
@@ -320,22 +324,28 @@
 #endif
 	struct timeval time_end;
 
+	if ((desc && !(ctx->options & E2F_OPT_TIME2)) ||
+	    (!desc && !(ctx->options & E2F_OPT_TIME)))
+		return;
+
+	e2fsck_clear_progbar(ctx);
 	gettimeofday(&time_end, 0);
 
 	if (desc)
 		printf("%s: ", desc);
 
 #ifdef HAVE_MALLINFO
-#define kbytes(x)	(((x) + 1023) / 1024)
-	
+#define kbytes(x)	(((unsigned long)(x) + 1023) / 1024)
+
 	malloc_info = mallinfo();
-	printf(_("Memory used: %dk/%dk (%dk/%dk), "),
+	printf(_("Memory used: %luk/%luk (%luk/%luk), "),
 	       kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
 	       kbytes(malloc_info.uordblks), kbytes(malloc_info.fordblks));
 #else
-	printf(_("Memory used: %d, "),
-	       (int) (((char *) sbrk(0)) - ((char *) track->brk_start)));
-#endif	
+	printf(_("Memory used: %lu, "),
+	       (unsigned long) (((char *) sbrk(0)) - 
+				((char *) track->brk_start)));
+#endif
 #ifdef HAVE_GETRUSAGE
 	getrusage(RUSAGE_SELF, &r);
 
@@ -347,6 +357,26 @@
 	printf(_("elapsed time: %6.3f\n"),
 	       timeval_subtract(&time_end, &track->time_start));
 #endif
+#define mbytes(x)	(((x) + 1048575) / 1048576)
+	if (channel && channel->manager && channel->manager->get_stats) {
+		io_stats delta = 0;
+		unsigned long long bytes_read = 0;
+		unsigned long long bytes_written = 0;
+
+		if (desc)
+			printf("%s: ", desc);
+
+		channel->manager->get_stats(channel, &delta);
+		if (delta) {
+			bytes_read = delta->bytes_read - track->bytes_read;
+			bytes_written = delta->bytes_written -
+				track->bytes_written;
+		}
+		printf("I/O read: %lluMB, write: %lluMB, rate: %.2fMB/s\n",
+		       mbytes(bytes_read), mbytes(bytes_written),
+		       (double)mbytes(bytes_read + bytes_written) /
+		       timeval_subtract(&time_end, &track->time_start));
+	}
 }
 #endif /* RESOURCE_TRACK */
 
@@ -358,7 +388,21 @@
 	retval = ext2fs_read_inode(ctx->fs, ino, inode);
 	if (retval) {
 		com_err("ext2fs_read_inode", retval,
-			_("while reading inode %ld in %s"), ino, proc);
+			_("while reading inode %lu in %s"), ino, proc);
+		fatal_error(ctx, 0);
+	}
+}
+
+void e2fsck_read_inode_full(e2fsck_t ctx, unsigned long ino,
+			    struct ext2_inode *inode, int bufsize,
+			    const char *proc)
+{
+	int retval;
+
+	retval = ext2fs_read_inode_full(ctx->fs, ino, inode, bufsize);
+	if (retval) {
+		com_err("ext2fs_read_inode_full", retval,
+			_("while reading inode %lu in %s"), ino, proc);
 		fatal_error(ctx, 0);
 	}
 }
@@ -372,7 +416,7 @@
 	retval = ext2fs_write_inode_full(ctx->fs, ino, inode, bufsize);
 	if (retval) {
 		com_err("ext2fs_write_inode", retval,
-			_("while writing inode %ld in %s"), ino, proc);
+			_("while writing inode %lu in %s"), ino, proc);
 		fatal_error(ctx, 0);
 	}
 }
@@ -385,7 +429,7 @@
 	retval = ext2fs_write_inode(ctx->fs, ino, inode);
 	if (retval) {
 		com_err("ext2fs_write_inode", retval,
-			_("while writing inode %ld in %s"), ino, proc);
+			_("while writing inode %lu in %s"), ino, proc);
 		fatal_error(ctx, 0);
 	}
 }
@@ -409,7 +453,7 @@
 	void			*buf = NULL;
 	int			blocksize;
 	blk_t			superblock, ret_sb = 8193;
-	
+
 	if (fs && fs->super) {
 		ret_sb = (fs->super->s_blocks_per_group +
 			  fs->super->s_first_data_block);
@@ -419,7 +463,7 @@
 		}
 		return ret_sb;
 	}
-		
+
 	if (ctx) {
 		if (ctx->blocksize) {
 			ret_sb = ctx->blocksize * 8;
@@ -451,7 +495,7 @@
 		if (io_channel_read_blk(io, superblock,
 					-SUPERBLOCK_SIZE, buf))
 			continue;
-#ifdef EXT2FS_ENABLE_SWAPFS
+#ifdef WORDS_BIGENDIAN
 		if (sb->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC))
 			ext2fs_swap_super(sb);
 #endif
@@ -484,21 +528,184 @@
 
 	if (LINUX_S_ISDIR(mode))
 		return EXT2_FT_DIR;
-	
+
 	if (LINUX_S_ISCHR(mode))
 		return EXT2_FT_CHRDEV;
-	
+
 	if (LINUX_S_ISBLK(mode))
 		return EXT2_FT_BLKDEV;
-	
+
 	if (LINUX_S_ISLNK(mode))
 		return EXT2_FT_SYMLINK;
 
 	if (LINUX_S_ISFIFO(mode))
 		return EXT2_FT_FIFO;
-	
+
 	if (LINUX_S_ISSOCK(mode))
 		return EXT2_FT_SOCK;
-	
+
 	return 0;
 }
+
+#define STRIDE_LENGTH 8
+/*
+ * Helper function which zeros out _num_ blocks starting at _blk_.  In
+ * case of an error, the details of the error is returned via _ret_blk_
+ * and _ret_count_ if they are non-NULL pointers.  Returns 0 on
+ * success, and an error code on an error.
+ *
+ * As a special case, if the first argument is NULL, then it will
+ * attempt to free the static zeroizing buffer.  (This is to keep
+ * programs that check for memory leaks happy.)
+ */
+errcode_t e2fsck_zero_blocks(ext2_filsys fs, blk_t blk, int num,
+			     blk_t *ret_blk, int *ret_count)
+{
+	int		j, count, next_update, next_update_incr;
+	static char	*buf;
+	errcode_t	retval;
+
+	/* If fs is null, clean up the static buffer and return */
+	if (!fs) {
+		if (buf) {
+			free(buf);
+			buf = 0;
+		}
+		return 0;
+	}
+	/* Allocate the zeroizing buffer if necessary */
+	if (!buf) {
+		buf = malloc(fs->blocksize * STRIDE_LENGTH);
+		if (!buf) {
+			com_err("malloc", ENOMEM,
+				_("while allocating zeroizing buffer"));
+			exit(1);
+		}
+		memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
+	}
+	/* OK, do the write loop */
+	next_update = 0;
+	next_update_incr = num / 100;
+	if (next_update_incr < 1)
+		next_update_incr = 1;
+	for (j = 0; j < num; j += STRIDE_LENGTH, blk += STRIDE_LENGTH) {
+		count = num - j;
+		if (count > STRIDE_LENGTH)
+			count = STRIDE_LENGTH;
+		retval = io_channel_write_blk(fs->io, blk, count, buf);
+		if (retval) {
+			if (ret_count)
+				*ret_count = count;
+			if (ret_blk)
+				*ret_blk = blk;
+			return retval;
+		}
+	}
+	return 0;
+}
+
+/*
+ * Check to see if a filesystem is in /proc/filesystems.
+ * Returns 1 if found, 0 if not
+ */
+int fs_proc_check(const char *fs_name)
+{
+	FILE	*f;
+	char	buf[80], *cp, *t;
+
+	f = fopen("/proc/filesystems", "r");
+	if (!f)
+		return (0);
+	while (!feof(f)) {
+		if (!fgets(buf, sizeof(buf), f))
+			break;
+		cp = buf;
+		if (!isspace(*cp)) {
+			while (*cp && !isspace(*cp))
+				cp++;
+		}
+		while (*cp && isspace(*cp))
+			cp++;
+		if ((t = strchr(cp, '\n')) != NULL)
+			*t = 0;
+		if ((t = strchr(cp, '\t')) != NULL)
+			*t = 0;
+		if ((t = strchr(cp, ' ')) != NULL)
+			*t = 0;
+		if (!strcmp(fs_name, cp)) {
+			fclose(f);
+			return (1);
+		}
+	}
+	fclose(f);
+	return (0);
+}
+
+/*
+ * Check to see if a filesystem is available as a module
+ * Returns 1 if found, 0 if not
+ */
+int check_for_modules(const char *fs_name)
+{
+#ifdef __linux__
+	struct utsname	uts;
+	FILE		*f;
+	char		buf[1024], *cp, *t;
+	int		i;
+
+	if (uname(&uts))
+		return (0);
+	snprintf(buf, sizeof(buf), "/lib/modules/%s/modules.dep", uts.release);
+
+	f = fopen(buf, "r");
+	if (!f)
+		return (0);
+	while (!feof(f)) {
+		if (!fgets(buf, sizeof(buf), f))
+			break;
+		if ((cp = strchr(buf, ':')) != NULL)
+			*cp = 0;
+		else
+			continue;
+		if ((cp = strrchr(buf, '/')) != NULL)
+			cp++;
+		else
+			cp = buf;
+		i = strlen(cp);
+		if (i > 3) {
+			t = cp + i - 3;
+			if (!strcmp(t, ".ko"))
+				*t = 0;
+		}
+		if (!strcmp(cp, fs_name)) {
+			fclose(f);
+			return (1);
+		}
+	}
+	fclose(f);
+#endif /* __linux__ */
+	return (0);
+}
+
+/*
+ * Helper function that does the right thing if write returns a
+ * partial write, or an EGAIN/EINTR error.
+ */
+int write_all(int fd, char *buf, size_t count)
+{
+	ssize_t ret;
+	int c = 0;
+
+	while (count > 0) {
+		ret = write(fd, buf, count);
+		if (ret < 0) {
+			if ((errno == EAGAIN) || (errno == EINTR))
+				continue;
+			return -1;
+		}
+		count -= ret;
+		buf += ret;
+		c += ret;
+	}
+	return c;
+}
diff --git a/e2fsprogs.lsm b/e2fsprogs.lsm
index f9fd21f..16a6c1b 100644
--- a/e2fsprogs.lsm
+++ b/e2fsprogs.lsm
@@ -1,17 +1,17 @@
 Begin3
 Title:          EXT2 Filesystem utilities
-Version:        1.40.8
-Entered-date:   13Mar2008
+Version:        1.41.11
+Entered-date:   14Mar2010
 Description:    The filesystem utilities for the EXT2 filesystem, including 
 		e2fsck, mke2fs, dumpe2fs, fsck, and others.
 Keywords:       utilities, fsck, filesystem, Ext2fs
 Author:         tytso@mit.edu (Theodore Tso)
 Maintained-by:  tytso@mit.edu (Theodore Tso)
 Primary-site:   download.sourceforge.net /pub/sourceforge/e2fsprogs
-		4012kB e2fsprogs-1.40.8.tar.gz
-		444kB e2fsprogs-libs-1.40.8.tar.gz
-                1kB   e2fsprogs-1.40.8.lsm
+		4368kB e2fsprogs-1.41.11.tar.gz
+		480kB e2fsprogs-libs-1.41.11.tar.gz
+                1kB   e2fsprogs-1.41.11.lsm
 Alternate-site: 
 Platforms:	linux 1.2.x/1.3.x/2.0.x/2.1.x/2.2.x/2.3.x/2.4.x/2.5.x/2.6.x
-Copying-policy: GPL/LGPL
+Copying-policy: GPL-2/LGPL-2
 End
diff --git a/e2fsprogs.spec b/e2fsprogs.spec
index 144238d..1c57be3 100644
--- a/e2fsprogs.spec
+++ b/e2fsprogs.spec
@@ -3,9 +3,9 @@
 %define	_root_localedir	/usr/share/locale
 %define	_root_etcdir	/etc
 
-Summary: Utilities for managing the second extended (ext2) filesystem.
+Summary: Utilities for managing ext2/ext3/ext4 filesystems
 Name: e2fsprogs
-Version: 1.40.8
+Version: 1.41.11
 Release: 0
 License: GPLv2
 Group: System Environment/Base
@@ -16,21 +16,21 @@
 
 %description
 The e2fsprogs package contains a number of utilities for creating,
-checking, modifying, and correcting any inconsistencies in second
-extended (ext2) filesystems.  E2fsprogs contains e2fsck (used to
-repair filesystem inconsistencies after an unclean shutdown), mke2fs
-(used to initialize a partition to contain an empty ext2 filesystem),
-debugfs (used to examine the internal structure of a filesystem, to
-manually repair a corrupted filesystem or to create test cases for
-e2fsck), tune2fs (used to modify filesystem parameters), resize2fs to
-grow and shrink unmounted ext2 filesystems, and most of the other core
-ext2fs filesystem utilities.
+checking, modifying, and correcting any inconsistencies in ext2, ext3,
+and ext4 filesystems.  E2fsprogs contains e2fsck (used to repair
+filesystem inconsistencies after an unclean shutdown), mke2fs (used to
+initialize a partition to contain an empty ext2 filesystem), debugfs
+(used to examine the internal structure of a filesystem, to manually
+repair a corrupted filesystem or to create test cases for e2fsck),
+tune2fs (used to modify filesystem parameters), resize2fs to grow and
+shrink unmounted ext2 filesystems, and most of the other core ext2fs
+filesystem utilities.
 
-You should install the e2fsprogs package if you are using any ext2
-filesystems (if you're not sure, you probably should install this
-package).  You may also need to install it (even if you don't use
-ext2) for the libuuid and libblkid libraries and fsck tool that are
-included here.
+You should install the e2fsprogs package if you are using any ext2,
+ext3, or ext4 filesystems (if you're not sure, you probably should
+install this package).  You may also need to install it (even if you
+don't use ext2/ext3/ext4) for the libuuid and libblkid libraries and
+fsck tool that are included here.
 
 %package devel
 Summary: Ext2 filesystem-specific static libraries and headers.
@@ -40,11 +40,11 @@
 
 %description devel
 E2fsprogs-devel contains the libraries and header files needed to
-develop second extended (ext2) filesystem-specific programs.
+develop ext2, ext3, or ext4 filesystem-specific programs.
 
-You should install e2fsprogs-devel if you want to develop ext2
-filesystem-specific programs.  If you install e2fsprogs-devel, you'll
-also want to install e2fsprogs.
+You should install e2fsprogs-devel if you want to develop
+ext2. ext3. or ext4 filesystem-specific programs.  If you install
+e2fsprogs-devel, you'll also want to install e2fsprogs.
 
 %package -n uuidd
 Summary: helper daemon to guarantee uniqueness of time-based UUIDs
@@ -62,7 +62,8 @@
 %setup
 
 %build
-%configure --enable-elf-shlibs --enable-nls
+%configure --enable-elf-shlibs --enable-nls \
+	%{?extra_config_flags:%extra_config_flags}
 make
 make check
 
@@ -115,19 +116,25 @@
 %{_root_sbindir}/e2fsck
 %{_root_sbindir}/e2image
 %{_root_sbindir}/e2label
+%{_root_sbindir}/e2undo
 %{_root_sbindir}/findfs
 %{_root_sbindir}/fsck
 %{_root_sbindir}/fsck.ext2
 %{_root_sbindir}/fsck.ext3
+%{_root_sbindir}/fsck.ext4
+%{_root_sbindir}/fsck.ext4dev
 %{_root_sbindir}/logsave
 %{_root_sbindir}/mke2fs
 %{_root_etcdir}/mke2fs.conf
 %{_root_sbindir}/mkfs.ext2
 %{_root_sbindir}/mkfs.ext3
+%{_root_sbindir}/mkfs.ext4
+%{_root_sbindir}/mkfs.ext4dev
 %{_root_sbindir}/resize2fs
 %{_root_sbindir}/tune2fs
 %{_sbindir}/filefrag
 %{_sbindir}/mklost+found
+%{_sbindir}/e2freefrag
 
 %{_root_libdir}/libblkid.so.*
 %{_root_libdir}/libcom_err.so.*
@@ -156,17 +163,23 @@
 %{_mandir}/man8/findfs.8*
 %{_mandir}/man8/fsck.ext2.8*
 %{_mandir}/man8/fsck.ext3.8*
+%{_mandir}/man8/fsck.ext4.8*
+%{_mandir}/man8/fsck.ext4dev.8*
 %{_mandir}/man8/e2image.8*
 %{_mandir}/man8/e2label.8*
+%{_mandir}/man8/e2undo.8*
 %{_mandir}/man8/fsck.8*
 %{_mandir}/man8/logsave.8*
 %{_mandir}/man8/mke2fs.8*
 %{_mandir}/man8/mkfs.ext2.8*
 %{_mandir}/man8/mkfs.ext3.8*
+%{_mandir}/man8/mkfs.ext4.8*
+%{_mandir}/man8/mkfs.ext4dev.8*
 %{_mandir}/man8/mklost+found.8*
 %{_mandir}/man8/resize2fs.8*
 %{_mandir}/man8/tune2fs.8*
 %{_mandir}/man8/filefrag.8*
+%{_mandir}/man8/e2freefrag.8*
 
 %files devel
 %defattr(-,root,root)
diff --git a/e2fsprogs.spec.in b/e2fsprogs.spec.in
index 3e7d1ee..6fc23a7 100644
--- a/e2fsprogs.spec.in
+++ b/e2fsprogs.spec.in
@@ -3,7 +3,7 @@
 %define	_root_localedir	/usr/share/locale
 %define	_root_etcdir	/etc
 
-Summary: Utilities for managing the second extended (ext2) filesystem.
+Summary: Utilities for managing ext2/ext3/ext4 filesystems
 Name: e2fsprogs
 Version: @E2FSPROGS_PKGVER@
 Release: 0
@@ -16,21 +16,21 @@
 
 %description
 The e2fsprogs package contains a number of utilities for creating,
-checking, modifying, and correcting any inconsistencies in second
-extended (ext2) filesystems.  E2fsprogs contains e2fsck (used to
-repair filesystem inconsistencies after an unclean shutdown), mke2fs
-(used to initialize a partition to contain an empty ext2 filesystem),
-debugfs (used to examine the internal structure of a filesystem, to
-manually repair a corrupted filesystem or to create test cases for
-e2fsck), tune2fs (used to modify filesystem parameters), resize2fs to
-grow and shrink unmounted ext2 filesystems, and most of the other core
-ext2fs filesystem utilities.
+checking, modifying, and correcting any inconsistencies in ext2, ext3,
+and ext4 filesystems.  E2fsprogs contains e2fsck (used to repair
+filesystem inconsistencies after an unclean shutdown), mke2fs (used to
+initialize a partition to contain an empty ext2 filesystem), debugfs
+(used to examine the internal structure of a filesystem, to manually
+repair a corrupted filesystem or to create test cases for e2fsck),
+tune2fs (used to modify filesystem parameters), resize2fs to grow and
+shrink unmounted ext2 filesystems, and most of the other core ext2fs
+filesystem utilities.
 
-You should install the e2fsprogs package if you are using any ext2
-filesystems (if you're not sure, you probably should install this
-package).  You may also need to install it (even if you don't use
-ext2) for the libuuid and libblkid libraries and fsck tool that are
-included here.
+You should install the e2fsprogs package if you are using any ext2,
+ext3, or ext4 filesystems (if you're not sure, you probably should
+install this package).  You may also need to install it (even if you
+don't use ext2/ext3/ext4) for the libuuid and libblkid libraries and
+fsck tool that are included here.
 
 %package devel
 Summary: Ext2 filesystem-specific static libraries and headers.
@@ -40,11 +40,11 @@
 
 %description devel
 E2fsprogs-devel contains the libraries and header files needed to
-develop second extended (ext2) filesystem-specific programs.
+develop ext2, ext3, or ext4 filesystem-specific programs.
 
-You should install e2fsprogs-devel if you want to develop ext2
-filesystem-specific programs.  If you install e2fsprogs-devel, you'll
-also want to install e2fsprogs.
+You should install e2fsprogs-devel if you want to develop
+ext2. ext3. or ext4 filesystem-specific programs.  If you install
+e2fsprogs-devel, you'll also want to install e2fsprogs.
 
 %package -n uuidd
 Summary: helper daemon to guarantee uniqueness of time-based UUIDs
@@ -62,7 +62,8 @@
 %setup
 
 %build
-%configure --enable-elf-shlibs --enable-nls
+%configure --enable-elf-shlibs --enable-nls \
+	%{?extra_config_flags:%extra_config_flags}
 make
 make check
 
@@ -115,19 +116,25 @@
 %{_root_sbindir}/e2fsck
 %{_root_sbindir}/e2image
 %{_root_sbindir}/e2label
+%{_root_sbindir}/e2undo
 %{_root_sbindir}/findfs
 %{_root_sbindir}/fsck
 %{_root_sbindir}/fsck.ext2
 %{_root_sbindir}/fsck.ext3
+%{_root_sbindir}/fsck.ext4
+%{_root_sbindir}/fsck.ext4dev
 %{_root_sbindir}/logsave
 %{_root_sbindir}/mke2fs
 %{_root_etcdir}/mke2fs.conf
 %{_root_sbindir}/mkfs.ext2
 %{_root_sbindir}/mkfs.ext3
+%{_root_sbindir}/mkfs.ext4
+%{_root_sbindir}/mkfs.ext4dev
 %{_root_sbindir}/resize2fs
 %{_root_sbindir}/tune2fs
 %{_sbindir}/filefrag
 %{_sbindir}/mklost+found
+%{_sbindir}/e2freefrag
 
 %{_root_libdir}/libblkid.so.*
 %{_root_libdir}/libcom_err.so.*
@@ -156,17 +163,23 @@
 %{_mandir}/man8/findfs.8*
 %{_mandir}/man8/fsck.ext2.8*
 %{_mandir}/man8/fsck.ext3.8*
+%{_mandir}/man8/fsck.ext4.8*
+%{_mandir}/man8/fsck.ext4dev.8*
 %{_mandir}/man8/e2image.8*
 %{_mandir}/man8/e2label.8*
+%{_mandir}/man8/e2undo.8*
 %{_mandir}/man8/fsck.8*
 %{_mandir}/man8/logsave.8*
 %{_mandir}/man8/mke2fs.8*
 %{_mandir}/man8/mkfs.ext2.8*
 %{_mandir}/man8/mkfs.ext3.8*
+%{_mandir}/man8/mkfs.ext4.8*
+%{_mandir}/man8/mkfs.ext4dev.8*
 %{_mandir}/man8/mklost+found.8*
 %{_mandir}/man8/resize2fs.8*
 %{_mandir}/man8/tune2fs.8*
 %{_mandir}/man8/filefrag.8*
+%{_mandir}/man8/e2freefrag.8*
 
 %files devel
 %defattr(-,root,root)
diff --git a/ext2ed/blockbitmap_com.c b/ext2ed/blockbitmap_com.c
index 355feb0..996bbeb 100644
--- a/ext2ed/blockbitmap_com.c
+++ b/ext2ed/blockbitmap_com.c
@@ -41,9 +41,9 @@
 {
 	unsigned long entry_num;
 	char *ptr,buffer [80];
-	
-	
-	
+
+
+
 	ptr=parse_word (command_line,buffer);					/* Get the requested entry */
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");
@@ -53,15 +53,15 @@
 
 	entry_num=atol (buffer);
 
-	
+
 	if (entry_num >= file_system_info.super_block.s_blocks_per_group) {	/* Check if it is a valid entry number */
 
 		wprintw (command_win,"Error - Entry number out of bounds\n");
 		refresh_command_win ();return;
 	}
-	
-	
-	
+
+
+
 	block_bitmap_info.entry_num=entry_num;					/* If it is, just change entry_num and */
 	strcpy (buffer,"show");dispatch (buffer);				/* dispatch a show command */
 }
@@ -77,7 +77,7 @@
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -93,7 +93,7 @@
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -117,25 +117,25 @@
 {
 	long entry_num,num=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);					/* Get the number of blocks to allocate */
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		num=atol (buffer);
 	}
-	
+
 	entry_num=block_bitmap_info.entry_num;
 										/* Check for limits */
 	if (num > file_system_info.super_block.s_blocks_per_group-entry_num) {
-		wprintw (command_win,"Error - There aren't that much blocks in the group\n");	
-		refresh_command_win ();return;				
+		wprintw (command_win,"Error - There aren't that much blocks in the group\n");
+		refresh_command_win ();return;
 	}
-	
+
 	while (num) {								/* And call allocate_block */
 		allocate_block (entry_num);					/* for each block */
 		num--;entry_num++;
 	}
-	
+
 	dispatch ("show");							/* Show the result */
 }
 
@@ -146,24 +146,24 @@
 {
 	long entry_num,num=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		num=atol (buffer);
 	}
-	
+
 	entry_num=block_bitmap_info.entry_num;
 	if (num > file_system_info.super_block.s_blocks_per_group-entry_num) {
-		wprintw (command_win,"Error - There aren't that much blocks in the group\n");	
-		refresh_command_win ();return;				
+		wprintw (command_win,"Error - There aren't that much blocks in the group\n");
+		refresh_command_win ();return;
 	}
-	
+
 	while (num) {
 		deallocate_block (entry_num);
 		num--;entry_num++;
 	}
-	
+
 	dispatch ("show");
 }
 
@@ -175,7 +175,7 @@
 {
 	unsigned char bit_mask=1;
 	int byte_offset,j;
-	
+
 	byte_offset=entry_num/8;					/* Find the correct byte - entry_num/8 */
 									/* The position inside the byte is entry_num %8 */
 	for (j=0;j<entry_num%8;j++)
@@ -190,12 +190,12 @@
 {
 	unsigned char bit_mask=1;
 	int byte_offset,j;
-	
+
 	byte_offset=entry_num/8;
 	for (j=0;j<entry_num%8;j++)
 		bit_mask*=2;
 	bit_mask^=0xff;
-	
+
 	type_data.u.buffer [byte_offset] &= bit_mask;
 }
 
@@ -215,7 +215,7 @@
 
 	ptr=type_data.u.buffer;
 	show_pad_info.line=0;show_pad_info.max_line=-1;
-	
+
 	wmove (show_pad,0,0);
 	for (i=0,entry_num=0;i<file_system_info.super_block.s_blocks_per_group/8;i++,ptr++) {
 		for (j=1;j<=128;j*=2) {						/* j contains the and bit mask */
@@ -240,24 +240,24 @@
 			show_pad_info.max_line++;
 		}
 	}
-	
-	refresh_show_pad ();	
+
+	refresh_show_pad ();
 	show_info ();								/* Show the usual information */
 
 										/* Show the group number */
 	wmove (show_win,1,0);
 	wprintw (show_win,"Block bitmap of block group %ld\n",block_bitmap_info.group_num);
 										/* Show the block number */
-										
+
 	block_num=block_bitmap_info.entry_num+block_bitmap_info.group_num*file_system_info.super_block.s_blocks_per_group;
-	block_num+=file_system_info.super_block.s_first_data_block;	
+	block_num+=file_system_info.super_block.s_first_data_block;
 
 	wprintw (show_win,"Status of block %ld - ",block_num);			/* and the allocation status */
 	ptr=type_data.u.buffer+block_bitmap_info.entry_num/8;
 	j=1;
 	for (i=block_bitmap_info.entry_num % 8;i>0;i--)
 		j*=2;
-	if ((*ptr) & j)						
+	if ((*ptr) & j)
 		wprintw (show_win,"Allocated\n");
 	else
 		wprintw (show_win,"Free\n");
diff --git a/ext2ed/dir_com.c b/ext2ed/dir_com.c
index c6b194e..b023e7a 100644
--- a/ext2ed/dir_com.c
+++ b/ext2ed/dir_com.c
@@ -49,20 +49,20 @@
 
 {
 	struct ext2_inode *ptr;
-	
+
 	ptr=&type_data.u.t_ext2_inode;					/* type_data contains the inode */
-	
+
 	info_ptr->inode_ptr=ptr;
 	info_ptr->inode_offset=device_offset;				/* device offset contains the inode's offset */
-									
+
 									/* Reset the current position to the start */
 
-	info_ptr->global_block_num=ptr->i_block [0];			
+	info_ptr->global_block_num=ptr->i_block [0];
 	info_ptr->global_block_offset=ptr->i_block [0]*file_system_info.block_size;
 	info_ptr->block_num=0;
 	info_ptr->file_offset=0;
 									/* Set the size of the directory */
-									
+
 	info_ptr->blocks_count=(ptr->i_size+file_system_info.block_size-1)/file_system_info.block_size;
 	info_ptr->file_length=ptr->i_size;
 
@@ -73,9 +73,9 @@
 	info_ptr->dir_entry_offset=0;
 
 	/* Find dir_entries_count */
-	
+
 	info_ptr->dir_entries_count=count_dir_entries (); 		/* Set the total number of entries */
-	
+
 	return (1);
 }
 
@@ -86,34 +86,34 @@
 
 	This routine runs on all directory entries in the current directory.
 	For each entry, action is called. We'll act according to the return code of action:
-	
+
 		ABORT		-	Current dir entry is returned.
 		CONTINUE	-	Continue searching.
 		FOUND		-	Current dir entry is returned.
-		
+
 	If the last entry is reached, it is returned, along with an ABORT status.
-	
-	status is updated to the returned code of action.	
+
+	status is updated to the returned code of action.
 */
 
 {
 	struct struct_file_info info;						/* Temporary variables used to */
 	struct ext2_dir_entry_2 *dir_entry_ptr;					/* contain the current search entries */
 	int return_code, next;
-	
+
 	info=first_file_info;							/* Start from the first entry - Read it */
 	low_read (info.buffer,file_system_info.block_size,info.global_block_offset);
 	dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
-	
+
 	while (info.file_offset < info.file_length) {				/* While we haven't reached the end */
-		
+
 		*status=return_code=action (&info);				/* Call the client function to test */
-										/* the current entry */	
+										/* the current entry */
 		if (return_code==ABORT || return_code==FOUND)
 			return (info);						/* Stop, if so asked */
 
 										/* Pass to the next entry */
-										
+
 		dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
 
 		info.dir_entry_num++;
@@ -131,16 +131,16 @@
 			info.global_block_num=file_block_to_global_block (info.block_num,&info);
 			info.global_block_offset=info.global_block_num*file_system_info.block_size;
 			info.file_offset=info.block_num*file_system_info.block_size;
-			info.dir_entry_offset=0;		
+			info.dir_entry_offset=0;
 										/* read it and update the pointer */
-										
+
 			low_read (info.buffer,file_system_info.block_size,info.global_block_offset);
 			dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
-			
+
 		}
-		
+
 	}
-	
+
 	*status=ABORT;return (info);						/* There was no match */
 }
 
@@ -155,7 +155,7 @@
 
 {
 	int status;
-	
+
 	return (search_dir_entries (&action_count,&status).dir_entry_num);
 }
 
@@ -187,7 +187,7 @@
 	1 and into 2/3/4.
 
 3.	It is the first part of the path that we need to search for in the current directory. We search for it using
-	search_dir_entries, which accepts the action_name function as the client function. 
+	search_dir_entries, which accepts the action_name function as the client function.
 
 4.	search_dir_entries will scan the entire entries and will call our action_name function for each entry.
 	In action_name, the required name will be checked against the name of the current entry, and FOUND will be
@@ -205,7 +205,7 @@
 7.	We check the inode's type to see if it is a directory. If it is, we dispatch a dir command to "enter the directory",
 	and recursively call ourself (The type is dir again) by dispatching a cd command, with the rest of the path
 	as an argument.
-	
+
 8.	If the inode's type is a symbolic link (only fast symbolic link were meanwhile implemented. I guess this is
 	typically the case.), we note the path it is pointing at, the saved inode is recalled, we dispatch dir to
 	get back to the original directory, and we call ourself again with the link path/rest of the path argument.
@@ -221,9 +221,9 @@
 	struct ext2_dir_entry_2 *dir_entry_ptr;
 
 	dir_entry_ptr=(struct ext2_dir_entry_2 *) (file_info.buffer+file_info.dir_entry_offset);
-		
+
 	ptr=parse_word (command_line,dir_name);
-	
+
 	if (*ptr==0) {						/* cd alone will enter the highlighted directory */
 		strncpy (full_dir_name,dir_entry_ptr->name,dir_entry_ptr->name_len);
 		full_dir_name [dir_entry_ptr->name_len]=0;
@@ -232,11 +232,11 @@
 		ptr=parse_word (ptr,full_dir_name);
 
 	ptr=strchr (full_dir_name,'/');
-	
+
 	if (ptr==full_dir_name) {				/* Pathname is from root - Let the general cd do the job */
 		sprintf (temp,"cd %s",full_dir_name);type_ext2___cd (temp);return;
 	}
-	
+
 	if (ptr==NULL) {
 		strcpy (dir_name,full_dir_name);
 		full_dir_name [0]=0;
@@ -251,7 +251,7 @@
 								/* full_dir_name contains the rest */
 
 	strcpy (name_search,dir_name);				/* name_search is used to hold the required entry name */
-	
+
 	if (dir_entry_ptr->name_len != strlen (dir_name) ||
 	    strncmp (dir_name,dir_entry_ptr->name,dir_entry_ptr->name_len)!=0)
 		info=search_dir_entries (&action_name,&status);	/* Search for the entry. Answer in info. */
@@ -262,15 +262,15 @@
 	if (status==FOUND) {					/* If found */
 		file_info=info;					/* Switch to it, by setting the global file_info */
 		dispatch ("remember internal_variable");	/* Move the inode into the objects memory */
-		
+
 		dispatch ("followinode");			/* Go to the inode pointed by this directory entry */
-		
+
 		if (S_ISLNK (type_data.u.t_ext2_inode.i_mode)) {/* Symbolic link ? */
 
 			if (type_data.u.t_ext2_inode.i_size > 60) {	/* I'm lazy, I guess :-) */
 				wprintw (command_win,"Error - Sorry, Only fast symbolic link following is currently supported\n");
 				refresh_command_win ();
-				return;				
+				return;
 			}
 								/* Get the pointed name and append the previous path */
 
@@ -280,10 +280,10 @@
 
 			dispatch ("recall internal_variable");	/* Return to the original inode */
 			dispatch ("dir");			/* and to the directory */
-			
+
 			sprintf (temp,"cd %s",temp2);		/* And continue from there by dispatching a cd command */
 			dispatch (temp);			/* (which can call ourself or the general cd) */
-			
+
 			return;
 		}
 
@@ -295,16 +295,16 @@
 				sprintf (temp,"cd %s",full_dir_name);
 				dispatch (temp);
 			}
-			
+
 			return;
 		}
-		
+
 		else {						/* If we can't continue from here, we'll just stop */
 			wprintw (command_win,"Can\'t continue - Stopping at last inode\n");refresh_command_win ();
 			return;
 		}
 	}
-	
+
 	wprintw (command_win,"Error - Directory entry %s not found.\n",dir_name);	/* Hmm, an invalid path somewhere */
 	refresh_command_win ();
 }
@@ -325,7 +325,7 @@
 
 	if (dir_entry_ptr->name_len != strlen (name_search))
 		return (CONTINUE);
-		
+
 	if (strncmp (dir_entry_ptr->name,name_search,dir_entry_ptr->name_len)==0)
 		return (FOUND);
 
@@ -345,7 +345,7 @@
 	int status;
 	struct struct_file_info info;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument_not_specified\n");wrefresh (command_win);
@@ -353,7 +353,7 @@
 	}
 	ptr=parse_word (ptr,buffer);
 	entry_num_search=atol (buffer);
-	
+
 	if (entry_num_search < 0 || entry_num_search >= file_info.dir_entries_count) {
 		wprintw (command_win,"Error - Entry number out of range\n");wrefresh (command_win);
 		return;
@@ -431,7 +431,7 @@
 
 {
 	int status;
-	
+
 	wmove (show_pad,0,0);
 	show_pad_info.max_line=-1;
 
@@ -452,7 +452,7 @@
 {
 	unsigned char temp [80];
 	struct ext2_dir_entry_2 *dir_entry_ptr;
-	
+
 	dir_entry_ptr=(struct ext2_dir_entry_2 *) (info->buffer+info->dir_entry_offset);
 
 	if (info->dir_entry_num == file_info.dir_entry_num)				/* Highlight the current entry */
@@ -486,7 +486,7 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
@@ -503,7 +503,7 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
@@ -522,12 +522,12 @@
 
 {
 	long inode_num;
-	
+
 	wmove (show_win,0,0);
 	wprintw (show_win,"Directory listing. Block %ld. ",file_info.global_block_num);
 	wprintw (show_win,"Directory entry %ld of %ld.\n",file_info.dir_entry_num,file_info.dir_entries_count-1);
 	wprintw (show_win,"Directory Offset %ld of %ld. ",file_info.file_offset,file_info.file_length-1);
-	
+
 	inode_num=inode_offset_to_inode_num (file_info.inode_offset);
 	wprintw (show_win,"File inode %ld. Indirection level %ld.\n",inode_num,file_info.level);
 
@@ -548,14 +548,14 @@
 	long entry_num;
 	char *ptr,buffer [80];
 	struct struct_descriptor *descriptor_ptr;
-	
+
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");wrefresh (command_win);
-		return;		
+		return;
 	}
-	
+
 	ptr=parse_word (ptr,buffer);
 
 	entry_num=remember_lifo.entries_count++;
@@ -563,7 +563,7 @@
 		entry_num=0;
 		remember_lifo.entries_count--;
 	}
-	
+
 	descriptor_ptr=first_type;
 	while (descriptor_ptr!=NULL && !found) {
 		if (strcmp (descriptor_ptr->name,"ext2_inode")==0)
@@ -576,7 +576,7 @@
 	remember_lifo.offset [entry_num]=device_offset;
 	remember_lifo.type [entry_num]=descriptor_ptr;
 	strcpy (remember_lifo.name [entry_num],buffer);
-	
+
 	wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",descriptor_ptr->name,device_offset,buffer);
 	wrefresh (command_win);
 }
@@ -594,9 +594,9 @@
 	int found=0;
 	unsigned char *ptr,buffer [80],variable [80],value [80],temp [80];
 	struct ext2_dir_entry_2 *dir_entry_ptr;
-	
+
 	dir_entry_ptr=(struct ext2_dir_entry_2 *) (file_info.buffer+file_info.dir_entry_offset);
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Missing arguments\n");refresh_command_win ();
@@ -641,7 +641,7 @@
 		wprintw (command_win,"Variable %s set to %s\n",variable,value);refresh_command_win ();
 
 	}
-	
+
 	if (found) {
 		wattrset (show_pad,A_REVERSE);
 		strncpy (temp,dir_entry_ptr->name,dir_entry_ptr->name_len);
@@ -654,7 +654,7 @@
 		refresh_show_pad ();
 		show_dir_status ();
 	}
-	
+
 	else {
 		wprintw (command_win,"Error - Variable %s not found\n",variable);
 		refresh_command_win ();
diff --git a/ext2ed/disk.c b/ext2ed/disk.c
index d29c719..5e1cd7e 100644
--- a/ext2ed/disk.c
+++ b/ext2ed/disk.c
@@ -55,7 +55,7 @@
 		return (0);
 	}
 
-#endif	
+#endif
 
 	if ( (fseek (device_handle,offset,SEEK_SET))==-1) {		/* Seek to the required offset */
 		wprintw (command_win,"Error - Failed to seek to offset %ld in device %s\n",offset,device_name);
@@ -67,7 +67,7 @@
 		wprintw (command_win,"Error - Failed to read from offset %ld in device %s\n",offset,device_name);
 		refresh_command_win ();return (0);
 	};
-	
+
 	return (1);
 }
 
@@ -83,7 +83,7 @@
 */
 {
 	char temp [80];
-	
+
 	if (!write_access) {
 		wprintw (command_win,"Error - Write access not aviable (use enablewrite)\n");
 		return (0);
@@ -95,7 +95,7 @@
 		internal_error ("AllowChanges=0 yet enablewrite succeeded","disk","low_write");
 		return (0);
 	}
-	
+
 	if (device_handle==NULL) {
 		internal_error ("No device opened yet read requested","disk","low_write");
 		return (0);
@@ -107,7 +107,7 @@
 		return (0);
 	}
 
-#endif	
+#endif
 
 	if (LogChanges)
 		if (!log_changes (buffer,length,offset))
@@ -124,7 +124,7 @@
 		refresh_command_win ();return (0);
 	};
 
-	wprintw (command_win,"Data written");refresh_command_win ();	
+	wprintw (command_win,"Data written");refresh_command_win ();
 	return (1);
 }
 
@@ -139,29 +139,29 @@
 
 {
 	unsigned char *original;
-	
+
 	int i;
 	time_t current_time;
 	FILE *fp;
-	
+
 	if ((fp=fopen (LogFile,"a+"))==NULL) {
 		wprintw (command_win,"Error - Unable to open log file %s\n",LogFile);
 		refresh_command_win ();return (0);
 	};
 
 	current_time=time (NULL);
-	
+
 	fprintf (fp,"\n----- EXT2ED log begin -----\n\n");
 	fprintf (fp,"Time: %s\nDevice: %s\n",ctime ((time_t *) &current_time),device_name);
 	fprintf (fp,"Offset: %lu\nLength: %lu\n",offset,length);
-	
+
 	original=(unsigned char *) malloc (length*sizeof (unsigned char));
 
 	if (original==NULL) {
 		wprintw (command_win,"Fatal error - Can\'t allocate %lu bytes!");
 		refresh_command_win ();fclose (fp);return (0);
 	}
-	
+
 	if (!low_read (original,length,offset)) {
 		fclose (fp);return (0);
 	}
@@ -172,17 +172,17 @@
 		if (i%16==0 && i!=0) fprintf (fp,"\n");
 		fprintf (fp,"%02x ",original [i]);
 	}
-	
-	fprintf (fp,"\n\nNew data:\n\n");	
-	
+
+	fprintf (fp,"\n\nNew data:\n\n");
+
 	for (i=0;i<length;i++) {
 		if (i%16==0 && i!=0) fprintf (fp,"\n");
 		fprintf (fp,"%02x ",buffer [i]);
 	}
-	
+
 	fprintf (fp,"\n----- EXT2ED log end  -----\n");
 
-	fclose (fp);	
+	fclose (fp);
 	return (1);
 }
 
@@ -197,17 +197,17 @@
 {
 	if (device_handle==NULL) {
 		printf ("Error - No device opened\n");
-		return (0);		
+		return (0);
 	}
 
 	if (device_offset==-1) {
 		printf ("Error - No offset set\n");
 		return (0);
 	}
-	
+
 	if (low_read (type_data.u.buffer,EXT2_MAX_BLOCK_SIZE,device_offset)==0)
 		return (0);
-		
+
 	if (current_type!=NULL)
 		if (strcmp (current_type->name,"ext2_dir_entry")==0)
 			current_type->length=type_data.u.t_ext2_dir_entry.rec_len;
@@ -221,7 +221,7 @@
 	if (device_handle==NULL) {
 		wprintw (command_win,"Error - No device opened\n");
 		refresh_command_win ();
-		return (0);		
+		return (0);
 	}
 
 	if (device_offset==-1) {
@@ -229,10 +229,10 @@
 		refresh_command_win ();
 		return (0);
 	}
-	
+
 	if (low_write (type_data.u.buffer,file_system_info.block_size,device_offset)==0)
 		return (0);
-		
+
 	return (1);
 }
 
diff --git a/ext2ed/doc/ext2ed-design.sgml b/ext2ed/doc/ext2ed-design.sgml
index 3eaca69..ad2df96 100644
--- a/ext2ed/doc/ext2ed-design.sgml
+++ b/ext2ed/doc/ext2ed-design.sgml
@@ -2722,9 +2722,6 @@
 		struct {
 			__u32  h_i_translator;
 		} hurd1;
-		struct {
-			__u32  m_i_reserved1;
-		} masix1;
 	} osd1;				/* OS dependent 1 */
 	__u32	i_block[EXT2_N_BLOCKS];	/* Pointers to blocks */
 	__u32	i_version;		/* File version (for NFS) */
@@ -2746,12 +2743,6 @@
 			__u16	h_i_gid_high;
 			__u32	h_i_author;
 		} hurd2;
-		struct {
-			__u8	m_i_frag;	/* Fragment number */
-			__u8	m_i_fsize;	/* Fragment size */
-			__u16	m_pad1;
-			__u32	m_i_reserved2[2];
-		} masix2;
 	} osd2;				/* OS dependent 2 */
 };
 </ProgramListing>
diff --git a/ext2ed/ext2_com.c b/ext2ed/ext2_com.c
index b4d2a66..2f20a28 100644
--- a/ext2ed/ext2_com.c
+++ b/ext2ed/ext2_com.c
@@ -33,7 +33,7 @@
 
 {
 	char buffer [80];
-	
+
 	super_info.copy_num=0;
 	sprintf (buffer,"setoffset %ld",file_system_info.super_block_offset);dispatch (buffer);
 	sprintf (buffer,"settype ext2_super_block");dispatch (buffer);
@@ -51,13 +51,13 @@
 
 {
 	char temp [80],buffer [80],*ptr;
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
 	}
 	ptr=parse_word (ptr,buffer);
-	
+
 	if (buffer [0] != '/') {
 		wprintw (command_win,"Error - Use a full pathname (begin with '/')\n");refresh_command_win ();return;
 	}
@@ -83,7 +83,7 @@
 {
 	long group_num=0;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
diff --git a/ext2ed/ext2ed.h b/ext2ed/ext2ed.h
index deae516..2ee483e 100644
--- a/ext2ed/ext2ed.h
+++ b/ext2ed/ext2ed.h
@@ -45,14 +45,14 @@
 #define MAX_COMMANDS_NUM	30			/* Maximum number of commands of one type */
 #define REMEMBER_COUNT		30			/* Object memory size */
 
-/* 
+/*
 	The user screen consists of four parts:
 
 		1.	Title window (title_win).
 		2.	Show (status) window (show_win).
 		3.	Main show pad (show_pad).
 		4.	Command window (command_win).
-	
+
 */
 
 /*
@@ -133,7 +133,7 @@
 struct struct_file_info {				/* Used to handle files and directories */
 
 	struct ext2_inode *inode_ptr;
-	
+
 	long inode_offset;
 	long global_block_num,global_block_offset;
 	long block_num,blocks_count;
@@ -144,7 +144,7 @@
 
 	int display;
 	/* The following is used if the file is a directory */
-	
+
 	long dir_entry_num,dir_entries_count;
 	long dir_entry_offset;
 };
diff --git a/ext2ed/file_com.c b/ext2ed/file_com.c
index 898df65..9772f66 100644
--- a/ext2ed/file_com.c
+++ b/ext2ed/file_com.c
@@ -24,9 +24,9 @@
 
 {
 	struct ext2_inode *ptr;
-	
+
 	ptr=&type_data.u.t_ext2_inode;
-	
+
 	file_info.inode_ptr=ptr;
 	file_info.inode_offset=device_offset;
 
@@ -38,11 +38,11 @@
 	file_info.file_length=ptr->i_size;
 	file_info.level=0;
 	file_info.offset_in_block=0;
-	
+
 	file_info.display=HEX;
 
 	low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset);
-	
+
 	return (1);
 }
 
@@ -69,7 +69,7 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		block_offset*=atol (buffer);
@@ -79,7 +79,7 @@
 		wprintw (command_win,"Error - Block offset out of range\n");wrefresh (command_win);
 		return;
 	}
-	
+
 	file_info.block_num+=block_offset;
 	file_info.global_block_num=file_block_to_global_block (file_info.block_num,&file_info);
 	file_info.global_block_offset=file_info.global_block_num*file_system_info.block_size;
@@ -97,17 +97,17 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
 	}
-	
+
 	if (file_info.offset_in_block+offset < file_system_info.block_size) {
 		file_info.offset_in_block+=offset;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-		
+
 	else {
 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
 	}
@@ -120,7 +120,7 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset=atol (buffer);
@@ -129,7 +129,7 @@
 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();
 		return;
 	}
-	
+
 	if (offset < file_system_info.block_size) {
 		file_info.offset_in_block=offset;
 		sprintf (buffer,"show");dispatch (buffer);
@@ -147,17 +147,17 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
 	}
-	
+
 	if (file_info.offset_in_block-offset >= 0) {
 		file_info.offset_in_block-=offset;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-	
+
 	else {
 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
 	}
@@ -170,7 +170,7 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		block_offset*=atol (buffer);
@@ -180,7 +180,7 @@
 		wprintw (command_win,"Error - Block offset out of range\n");wrefresh (command_win);
 		return;
 	}
-	
+
 	file_info.block_num-=block_offset;
 	file_info.global_block_num=file_block_to_global_block (file_info.block_num,&file_info);
 	file_info.global_block_offset=file_info.global_block_num*file_system_info.block_size;
@@ -198,12 +198,12 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Invalid arguments\n");wrefresh (command_win);
 		return;
 	}
-	
+
 	ptr=parse_word (ptr,buffer);
 	block_offset=atol (buffer);
 
@@ -226,25 +226,25 @@
 
 {
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
-	if (*ptr==0) 
+	if (*ptr==0)
 		strcpy (buffer,"hex");
 	else
 		ptr=parse_word (ptr,buffer);
-	
+
 	if (strcasecmp (buffer,"hex")==0) {
 		wprintw (command_win,"Display set to hex\n");wrefresh (command_win);
 		file_info.display=HEX;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-	
+
 	else if (strcasecmp (buffer,"text")==0) {
 		wprintw (command_win,"Display set to text\n");wrefresh (command_win);
 		file_info.display=TEXT;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-	
+
 	else {
 		wprintw (command_win,"Error - Invalid arguments\n");wrefresh (command_win);
 	}
@@ -255,22 +255,22 @@
 {
 	long offset=0,l,i;
 	unsigned char *ch_ptr;
-	
+
 	/* device_offset and type_data points to the inode */
 
 	show_pad_info.line=0;
-	
+
 	wmove (show_pad,0,0);
 	ch_ptr=file_info.buffer;
 	for (l=0;l<file_system_info.block_size/16;l++) {
 		if (file_info.file_offset+offset>file_info.file_length-1) break;
 		wprintw (show_pad,"%08ld :  ",offset);
 		for (i=0;i<16;i++) {
-			
+
 			if (file_info.file_offset+offset+i>file_info.file_length-1) {
 				wprintw (show_pad," ");
 			}
-			
+
 			else {
 				if (file_info.offset_in_block==offset+i)
 					wattrset (show_pad,A_REVERSE);
@@ -297,20 +297,20 @@
 				wattrset (show_pad,A_NORMAL);
 				show_pad_info.line=l-l % show_pad_info.display_lines;
 			}
-			
+
 			wprintw (show_pad," ");
-			
+
 		}
 
 		wprintw (show_pad,"\n");
 		offset+=i;
 		ch_ptr+=i;
 	}
-	
+
 	show_pad_info.max_line=l-1;
-	
+
 	refresh_show_pad ();
-	
+
 	show_status ();
 }
 
@@ -319,7 +319,7 @@
 {
 	long offset=0,last_offset,l=0,cols=0;
 	unsigned char *ch_ptr;
-	
+
 	/* device_offset and type_data points to the inode */
 
 	show_pad_info.line=0;
@@ -330,14 +330,14 @@
 
 	if (file_info.file_offset+last_offset > file_info.file_length-1)
 		last_offset=file_info.file_length-1-file_info.file_offset;
-		
+
 	while ( (offset <= last_offset) && l<SHOW_PAD_LINES) {
 
 		if (cols==SHOW_PAD_COLS-1) {
 			wprintw (show_pad,"\n");
 			l++;cols=0;
 		}
-		
+
 
 		if (file_info.offset_in_block==offset)
 			wattrset (show_pad,A_REVERSE);
@@ -354,7 +354,7 @@
 
 			else if (*ch_ptr == 0x9)
 				wprintw (show_pad,"    ");
-			
+
 			else
 				wprintw (show_pad,".");
 		}
@@ -363,29 +363,29 @@
 			wattrset (show_pad,A_NORMAL);
 			show_pad_info.line=l-l % show_pad_info.display_lines;
 		}
-			
+
 
 		offset++;cols++;ch_ptr++;
 	}
-	
+
 	wprintw (show_pad,"\n");
 	show_pad_info.max_line=l;
-	
+
 	refresh_show_pad ();
-	
-	show_status (); 
+
+	show_status ();
 }
 
 void show_status (void)
 
 {
 	long inode_num;
-	
+
 	werase (show_win);wmove (show_win,0,0);
 	wprintw (show_win,"File contents. Block %ld. ",file_info.global_block_num);
 	wprintw (show_win,"File block %ld of %ld. ",file_info.block_num,file_info.blocks_count-1);
 	wprintw (show_win,"File Offset %ld of %ld.",file_info.file_offset,file_info.file_length-1);
-	
+
 	wmove (show_win,1,0);
 	inode_num=inode_offset_to_inode_num (file_info.inode_offset);
 	wprintw (show_win,"File inode %ld. Indirection level %ld.",inode_num,file_info.level);
@@ -400,14 +400,14 @@
 	long entry_num;
 	char *ptr,buffer [80];
 	struct struct_descriptor *descriptor_ptr;
-	
+
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");wrefresh (command_win);
-		return;		
+		return;
 	}
-	
+
 	ptr=parse_word (ptr,buffer);
 
 	entry_num=remember_lifo.entries_count++;
@@ -415,7 +415,7 @@
 		entry_num=0;
 		remember_lifo.entries_count--;
 	}
-	
+
 	descriptor_ptr=first_type;
 	while (descriptor_ptr!=NULL && !found) {
 		if (strcmp (descriptor_ptr->name,"ext2_inode")==0)
@@ -428,7 +428,7 @@
 	remember_lifo.offset [entry_num]=device_offset;
 	remember_lifo.type [entry_num]=descriptor_ptr;
 	strcpy (remember_lifo.name [entry_num],buffer);
-	
+
 	wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",descriptor_ptr->name,device_offset,buffer);
 	wrefresh (command_win);
 }
@@ -439,7 +439,7 @@
 	unsigned char tmp;
 	char *ptr,buffer [80],*ch_ptr;
 	int mode=HEX;
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();return;
@@ -492,7 +492,7 @@
 			}
 		}
 	}
-	
+
 	strcpy (buffer,"show");dispatch (buffer);
 }
 
@@ -507,7 +507,7 @@
 
 {
 	long last_direct,last_indirect,last_dindirect;
-	
+
 	last_direct=EXT2_NDIR_BLOCKS-1;
 	last_indirect=last_direct+file_system_info.block_size/4;
 	last_dindirect=last_indirect+(file_system_info.block_size/4)*(file_system_info.block_size/4);
@@ -516,7 +516,7 @@
 		file_info_ptr->level=0;
 		return (file_info_ptr->inode_ptr->i_block [file_block]);
 	}
-	
+
 	if (file_block <= last_indirect) {
 		file_info_ptr->level=1;
 		file_block=file_block-last_direct-1;
@@ -538,16 +538,16 @@
 
 {
 	long block_table [EXT2_MAX_BLOCK_SIZE/4];
-	
+
 	low_read ((char *) block_table,file_system_info.block_size,table_block*file_system_info.block_size);
-	return (block_table [block_num]);		
+	return (block_table [block_num]);
 }
 
 long return_dindirect (long table_block,long block_num)
 
 {
 	long f_indirect;
-	
+
 	f_indirect=block_num/(file_system_info.block_size/4);
 	f_indirect=return_indirect (table_block,f_indirect);
 	return (return_indirect (f_indirect,block_num%(file_system_info.block_size/4)));
@@ -557,7 +557,7 @@
 
 {
 	long s_indirect;
-	
+
 	s_indirect=block_num/((file_system_info.block_size/4)*(file_system_info.block_size/4));
 	s_indirect=return_indirect (table_block,s_indirect);
 	return (return_dindirect (s_indirect,block_num%((file_system_info.block_size/4)*(file_system_info.block_size/4))));
diff --git a/ext2ed/general_com.c b/ext2ed/general_com.c
index 679f177..03dc261 100644
--- a/ext2ed/general_com.c
+++ b/ext2ed/general_com.c
@@ -33,16 +33,16 @@
 
 	if (*ptr!=0) {
 		 ptr=parse_word (ptr,argument);
-		 if (*argument!=0) {		 
+		 if (*argument!=0) {
 			 detailed_help (argument);
 			 return;
 		}
 	}
 
 	if (current_type!=NULL) {
-		
+
 		wprintw (show_pad,"Type %s specific commands:\n",current_type->name);max_line++;
-		
+
 		if (current_type->type_commands.last_command==-1) {
 			wprintw (show_pad,"\nnone\n");max_line+=2;
 		}
@@ -53,11 +53,11 @@
 				}
 				wprintw (show_pad,"%-13s",current_type->type_commands.names [i]);
 				if (i%5!=4)
-					wprintw (show_pad,";  ");				
+					wprintw (show_pad,";  ");
 			}
-		
+
 		wprintw (show_pad,"\n\n");max_line+=2;
-	}		
+	}
 
 	if (ext2_commands.last_command != -1) {
 		wprintw (show_pad,"ext2 filesystem general commands: \n");max_line++;
@@ -67,25 +67,25 @@
 			}
 			wprintw (show_pad,"%-13s",ext2_commands.names [i]);
 			if (i%5!=4)
-				wprintw (show_pad,";  ");				
+				wprintw (show_pad,";  ");
 
 		}
 		wprintw (show_pad,"\n\n");max_line+=2;
 	}
 
 	wprintw (show_pad,"General commands: \n");
-	
+
 	for (i=0;i<=general_commands.last_command;i++) {
 		if (i%5==0) {
 			wprintw (show_pad,"\n");max_line++;
 		}
 		wprintw (show_pad,"%-13s",general_commands.names [i]);
 		if (i%5!=4)
-			wprintw (show_pad,";  ");				
+			wprintw (show_pad,";  ");
 	}
-	
+
 	wprintw (show_pad,"\n\n");max_line+=2;
-	
+
 	wprintw (show_pad,"EXT2ED ver %s (%s)\n",E2FSPROGS_VERSION, E2FSPROGS_DATE);
 	wprintw (show_pad,"Copyright (C) 1995 Gadi Oxman\n");
 	wprintw (show_pad,"Reviewed 2001 Christian Bac\n");
@@ -97,12 +97,12 @@
 	wprintw (show_pad,"with the guide of Avner Lottem and Dr. Ilana David.\n");
 
 	max_line+=10;
-	
+
 	show_pad_info.line=0;show_pad_info.max_line=max_line;
 
 	werase (show_win);wmove (show_win,0,0);
 	wprintw (show_win,"EXT2ED help");
-	
+
 	refresh_show_win ();
 	refresh_show_pad ();
 }
@@ -111,7 +111,7 @@
 
 {
 	int i;
-	
+
 	if (current_type != NULL)
 		for (i=0;i<=current_type->type_commands.last_command;i++) {
 			if (strcmp (current_type->type_commands.names [i],text)==0) {
@@ -149,20 +149,20 @@
 
 {
 	char *ptr,new_device [80];
-	
+
 	ptr=parse_word (command_line,new_device);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Device name not specified\n");
 		refresh_command_win ();return;
 	}
-	parse_word (ptr,new_device);	
+	parse_word (ptr,new_device);
 	check_mounted (new_device);
 	if (mounted && !AllowMountedRead) {
 		wprintw (command_win,"Error - Filesystem is mounted, aborting\n");
 		wprintw (command_win,"You may wish to use the AllowMountedRead on configuration option\n");
 		refresh_command_win ();return;
 	}
-	
+
 	if (mounted && AllowMountedRead) {
 		wprintw (command_win,"Warning - Filesystem is mounted. Displayed data may be unreliable.\n");
 		refresh_command_win ();
@@ -170,7 +170,7 @@
 
 	if (device_handle!=NULL)
 		fclose (device_handle);
-		
+
 	if ( (device_handle=fopen (new_device,"rb"))==NULL) {
 		wprintw (command_win,"Error - Can not open device %s\n",new_device);refresh_command_win ();
 		return;
@@ -204,14 +204,14 @@
 	long mult=1;
 	long new_offset;
 	char *ptr,new_offset_buffer [80];
-	
+
 	if (device_handle==NULL) {
 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
 		return;
 	}
-	
+
 	ptr=parse_word (command_line,new_offset_buffer);
-	
+
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();
 		return;
@@ -246,7 +246,7 @@
 		}
 		new_offset=device_offset+atol (new_offset_buffer+1)*mult;
 	}
-	
+
 	else if (new_offset_buffer [0]=='-') {
 		if (device_offset==-1) {
 			wprintw (command_win,"Error - Select a fixed offset first\n");refresh_command_win ();
@@ -255,10 +255,10 @@
 		new_offset=device_offset-atol (new_offset_buffer+1)*mult;
 		if (new_offset<0) new_offset=0;
 	}
-	
-	else 
+
+	else
 		new_offset=atol (new_offset_buffer)*mult;
-	
+
 	if ( (fseek (device_handle,new_offset,SEEK_SET))==-1) {
 		wprintw (command_win,"Error - Failed to seek to offset %ld in device %s\n",new_offset,device_name);
 		refresh_command_win ();
@@ -362,7 +362,7 @@
 	unsigned long *long_ptr,offset=0;
 	int i,len, found=0;
 	char *ptr,buffer [80],variable [80],value [80];
-	
+
 	if (device_handle==NULL) {
 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
 		return;
@@ -389,7 +389,7 @@
 	if (current_type==NULL) {
 		wprintw (command_win,"Sorry, not yet supported\n");refresh_command_win ();return;
 	}
-	
+
 	for (i=0;i<current_type->fields_num && !found;i++) {
 		if (strcmp (current_type->field_names [i],variable)==0) {
 			found=1;
@@ -429,7 +429,7 @@
 	unsigned char tmp;
 	char *ptr,buffer [80],*ch_ptr;
 	int mode=HEX;
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();return;
@@ -482,7 +482,7 @@
 			}
 		}
 	}
-	
+
 	strcpy (buffer,"show");dispatch (buffer);
 }
 
@@ -500,14 +500,14 @@
 
 	ptr=parse_word (command_line,buffer);
 	parse_word (ptr,buffer);
-	
+
 	if (strcmp (buffer,"none")==0 || strcmp (buffer,"hex")==0) {
 		wprintw (command_win,"Data will be shown as hex dump\n");refresh_command_win ();
 		current_type=NULL;
 		sprintf (tmp_buffer,"show");dispatch (tmp_buffer);
 		return;
 	}
-	
+
 	descriptor_ptr=first_type;
 	while (descriptor_ptr!=NULL && !found) {
 		if (strcmp (descriptor_ptr->name,buffer)==0)
@@ -523,7 +523,7 @@
 	else {
 		wprintw (command_win,"Error - %s is not a valid type\n",buffer);refresh_command_win ();
 	}
-}    
+}
 
 void show_int(short len, void *ptr)
 {
@@ -584,7 +584,7 @@
 	int		i,j;
 
 	wprintw(show_pad, "\"");
-	
+
 	for (i=0; i < len; i++) {
 		ch = *cp++;
 		if (ch == 0) {
@@ -604,17 +604,17 @@
 		}
 		wprintw(show_pad, "%c", ch);
 	}
-	
+
 	wprintw(show_pad, "\"\n");
 }
 
 
-	
+
 void show (char *command_line)
 
 {
 	unsigned int i,l,len,temp_int;
-	unsigned long offset=0,temp_long;	
+	unsigned long offset=0,temp_long;
 	unsigned char temp_char,*ch_ptr;
 	void *ptr;
 
@@ -622,7 +622,7 @@
 		return;
 
 	show_pad_info.line=0;
-	
+
 	if (current_type==NULL) {
 		wmove (show_pad,0,0);
 		ch_ptr=type_data.u.buffer;
@@ -631,7 +631,7 @@
 			for (i=0;i<16;i++) {
 				if (type_data.offset_in_block==offset+i)
 					wattrset (show_pad,A_REVERSE);
-			
+
 				if (ch_ptr [i]>=' ' && ch_ptr [i]<='z')
 					wprintw (show_pad,"%c",ch_ptr [i]);
 				else
@@ -643,7 +643,7 @@
 			for (i=0;i<16;i++) {
 				if (type_data.offset_in_block==offset+i)
 					wattrset (show_pad,A_REVERSE);
-			
+
 				wprintw (show_pad,"%02x",ch_ptr [i]);
 
 				if (type_data.offset_in_block==offset+i) {
@@ -696,12 +696,12 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
 	}
-	
+
 	if (current_type!=NULL) {
 		sprintf (buffer,"setoffset type +%ld",offset);
 		dispatch (buffer);
@@ -712,7 +712,7 @@
 		type_data.offset_in_block+=offset;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-		
+
 	else {
 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
 	}
@@ -725,12 +725,12 @@
 	char *ptr,buffer [80];
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		offset*=atol (buffer);
 	}
-	
+
 	if (current_type!=NULL) {
 		sprintf (buffer,"setoffset type -%ld",offset);
 		dispatch (buffer);
@@ -741,13 +741,13 @@
 		type_data.offset_in_block-=offset;
 		sprintf (buffer,"show");dispatch (buffer);
 	}
-	
+
 	else {
 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
 	}
 }
 
-void pgdn (char *commnad_line) 
+void pgdn (char *commnad_line)
 
 {
 	show_pad_info.line+=show_pad_info.display_lines;
@@ -773,19 +773,19 @@
 {
 	long entry_num;
 	char *ptr,buffer [80];
-	
+
 	if (device_handle==NULL) {
 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
 		return;
 	}
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();
-		return;		
+		return;
 	}
-	
+
 	ptr=parse_word (ptr,buffer);
 
 	entry_num=remember_lifo.entries_count++;
@@ -793,16 +793,16 @@
 		entry_num=0;
 		remember_lifo.entries_count--;
 	}
-	
+
 	remember_lifo.offset [entry_num]=device_offset;
 	remember_lifo.type [entry_num]=current_type;
 	strcpy (remember_lifo.name [entry_num],buffer);
-	
+
 	if (current_type!=NULL)
 		wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",current_type->name,device_offset,buffer);
 	else
 		wprintw (command_win,"Offset %ld remembered as %s\n",device_offset,buffer);
-			
+
 	refresh_command_win ();
 }
 
@@ -821,17 +821,17 @@
 
 	if (*ptr==0) {
 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();
-		return;		
+		return;
 	}
 
 	ptr=parse_word (ptr,buffer);
 
-	
+
 	for (entry_num=remember_lifo.entries_count-1;entry_num>=0;entry_num--) {
 		if (strcmp (remember_lifo.name [entry_num],buffer)==0)
-			break;	
+			break;
 	}
-	
+
 	if (entry_num==-1) {
 		wprintw (command_win,"Error - Can not recall %s\n",buffer);refresh_command_win ();
 		return;
@@ -839,13 +839,13 @@
 
 	sprintf (buffer,"setoffset %ld",remember_lifo.offset [entry_num]);dispatch (buffer);
 	if (remember_lifo.type [entry_num] != NULL) {
-		sprintf (buffer,"settype %s",remember_lifo.type [entry_num]->name);dispatch (buffer);	
+		sprintf (buffer,"settype %s",remember_lifo.type [entry_num]->name);dispatch (buffer);
 	}
 
 	else {
-		sprintf (buffer,"settype none");dispatch (buffer);	
+		sprintf (buffer,"settype none");dispatch (buffer);
 	}
-			
+
 	wprintw (command_win,"Object %s in Offset %ld recalled\n",current_type->name,device_offset);
 	refresh_command_win ();
 }
@@ -864,12 +864,12 @@
 		wprintw (command_win,"Sorry, write access is not allowed\n");
     		return;
     	}
-    	
+
     	if (mounted) {
     		wprintw (command_win,"Error - Filesystem is mounted\n");
-		return;    		
+		return;
     	}
-    	
+
 	if ( (fp=fopen (device_name,"r+b"))==NULL) {
 		wprintw (command_win,"Error - Can not open device %s for reading and writing\n",device_name);refresh_command_win ();
 		return;
@@ -893,7 +893,7 @@
 		wprintw (command_win,"Error - Can not open device %s\n",device_name);refresh_command_win ();
 		return;
 	}
-	
+
 	fclose (device_handle);
 	device_handle=fp;write_access=0;
 	wprintw (command_win,"Write access disabled\n");refresh_command_win ();
diff --git a/ext2ed/group_com.c b/ext2ed/group_com.c
index ee6aabc..2532553 100644
--- a/ext2ed/group_com.c
+++ b/ext2ed/group_com.c
@@ -19,11 +19,11 @@
 #include "ext2ed.h"
 
 void type_ext2_group_desc___next (char *command_line)
- 
+
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -39,7 +39,7 @@
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -55,7 +55,7 @@
 {
 	long group_num;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
@@ -63,11 +63,11 @@
 	ptr=parse_word (ptr,buffer);
 
 	group_num=atol (buffer);
-	
+
 	if (group_num < 0 || group_num >= file_system_info.groups_count) {
 		wprintw (command_win,"Error - Entry number out of bounds\n");refresh_command_win ();return;
 	}
-	
+
 	device_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc);
 
 	sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
@@ -81,7 +81,7 @@
 {
 	unsigned long copy_num,offset;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
@@ -89,12 +89,12 @@
 	ptr=parse_word (ptr,buffer);
 
 	copy_num=atol (buffer);
-	
+
 	offset=file_system_info.first_group_desc_offset+copy_num*file_system_info.super_block.s_blocks_per_group*file_system_info.block_size;
-	
+
 	if (offset > file_system_info.file_system_size) {
 		wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return;
-	}	
+	}
 
 	group_info.copy_num=copy_num;
 	device_offset=offset+group_info.group_num*sizeof (struct ext2_group_desc);
@@ -108,12 +108,12 @@
 
 {
 	long group_num,temp;
-	
+
 	temp=(device_offset-file_system_info.first_group_desc_offset) % (file_system_info.super_block.s_blocks_per_group*file_system_info.block_size);
 	group_num=temp/sizeof (struct ext2_group_desc);
 
 	show (command_line);
-	
+
 	wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0);
 	wprintw (show_win,"Group %ld of %ld ",group_num,file_system_info.groups_count-1);
 	wprintw (show_win,"in copy %ld ",group_info.copy_num);
@@ -136,7 +136,7 @@
 {
 	long inode_offset;
 	char buffer [80];
-	
+
 	inode_offset=type_data.u.t_ext2_group_desc.bg_inode_table;
 	sprintf (buffer,"setoffset block %ld",inode_offset);dispatch (buffer);
 	sprintf (buffer,"settype ext2_inode");dispatch (buffer);
@@ -147,10 +147,10 @@
 {
 	long block_bitmap_offset;
 	char buffer [80];
-	
+
 	block_bitmap_info.entry_num=0;
 	block_bitmap_info.group_num=group_info.group_num;
-	
+
 	block_bitmap_offset=type_data.u.t_ext2_group_desc.bg_block_bitmap;
 	sprintf (buffer,"setoffset block %ld",block_bitmap_offset);dispatch (buffer);
 	sprintf (buffer,"settype block_bitmap");dispatch (buffer);
@@ -161,10 +161,10 @@
 {
 	long inode_bitmap_offset;
 	char buffer [80];
-	
+
 	inode_bitmap_info.entry_num=0;
 	inode_bitmap_info.group_num=group_info.group_num;
-	
+
 	inode_bitmap_offset=type_data.u.t_ext2_group_desc.bg_inode_bitmap;
 	sprintf (buffer,"setoffset block %ld",inode_bitmap_offset);dispatch (buffer);
 	sprintf (buffer,"settype inode_bitmap");dispatch (buffer);
@@ -174,7 +174,7 @@
 
 {
 	struct ext2_group_desc gd;
-	
+
 	gd=type_data.u.t_ext2_group_desc;
 	dispatch ("gocopy 0");
 	type_data.u.t_ext2_group_desc=gd;
diff --git a/ext2ed/init.c b/ext2ed/init.c
index 7ab2e28..41c2a39 100644
--- a/ext2ed/init.c
+++ b/ext2ed/init.c
@@ -48,12 +48,12 @@
 
 {
 	printf ("Initializing ...\n");
-	
+
 	if (!process_configuration_file ()) {
 		fprintf (stderr,"Error - Unable to complete configuration. Quitting.\n");
-		return (0);		
+		return (0);
 	};
-	
+
 	general_commands.last_command=-1;	/* No commands whatsoever meanwhile */
 	ext2_commands.last_command=-1;
 	add_general_commands ();		/* Add the general commands, aviable always */
@@ -62,12 +62,12 @@
 	current_type=NULL;			/* No filesystem specific types yet */
 
 	remember_lifo.entries_count=0;		/* Object memory is empty */
-	
+
 	init_windows ();			/* Initialize the NCURSES interface */
 	init_readline ();			/* Initialize the READLINE interface */
 	init_signals ();			/* Initialize the signal handlers */
 	write_access=0;				/* Write access disabled */
-	
+
 	strcpy (last_command_line,"help");	/* Show the help screen to the user */
 	dispatch ("help");
 	return (1);				/* Success */
@@ -109,26 +109,26 @@
 	char current_line [500],current_word [50],*ch;
 	char variable_name [50],variable_type [20];
 	struct struct_descriptor *current_descriptor;
-	
+
 	if ( (fp=fopen (file_name,"rt"))==NULL) {
 		wprintw (command_win,"Error - Failed to open descriptors file %s\n",file_name);
 		refresh_command_win ();	return (0);
 	};
-	
+
 	while (!feof (fp)) {
 		fgets (current_line,500,fp);
-		if (feof (fp)) break;	
+		if (feof (fp)) break;
 		ch=parse_word (current_line,current_word);
 		if (strcmp (current_word,"struct")==0) {
 			ch=parse_word (ch,current_word);
 			current_descriptor=add_new_descriptor (current_word);
-			
+
 			while (strchr (current_line,'{')==NULL) {
 				fgets (current_line,500,fp);
 				if (feof (fp)) break;
 			};
 			if (feof (fp)) break;
-			
+
 			fgets (current_line,500,fp);
 
 			while (strchr (current_line,'}')==NULL) {
@@ -147,9 +147,9 @@
 				add_new_variable (current_descriptor,variable_type,variable_name);
 				fgets (current_line,500,fp);
 			};
-		}; 
+		};
 	};
-	
+
 	fclose (fp);
 	return (1);
 }
@@ -158,7 +158,7 @@
 
 {
 	struct struct_descriptor *ptr,*next;
-	
+
 	ptr=first_type;
 	while (ptr!=NULL) {
 		next=ptr->next;
@@ -173,12 +173,12 @@
 
 {
 	int i;
-	
+
 	for (i=0;i<=ptr->last_command;i++) {
 		free (ptr->names [i]);
 		free (ptr->descriptions [i]);
 	}
-	
+
 	ptr->last_command=-1;
 }
 
@@ -186,7 +186,7 @@
 
 {
 	struct struct_descriptor *ptr;
-	
+
 	ptr = malloc (sizeof (struct struct_descriptor));
 	if (ptr == NULL) {
 		printf ("Error - Can not allocate memory - Quitting\n");
@@ -232,7 +232,7 @@
 	short	len=1;
 	char	field_type=FIELD_TYPE_INT;
 	struct type_table *p;
-	
+
 	strcpy (ptr->field_names [ptr->fields_num],v_name);
 	ptr->field_positions [ptr->fields_num]=ptr->length;
 
@@ -257,7 +257,7 @@
 	ptr->field_types [ptr->fields_num] = field_type;
 
 	ptr->length+=len;
-	ptr->fields_num++; 
+	ptr->fields_num++;
 }
 
 void fill_type_commands (struct struct_descriptor *ptr)
@@ -294,7 +294,7 @@
 		add_user_command (&ptr->type_commands,"file","Display file data of the current inode",type_ext2_inode___file);
 		add_user_command (&ptr->type_commands,"dir","Display directory data of the current inode",type_ext2_inode___dir);
 	}
-	
+
 	if (strcmp ((ptr->name),"dir")==0) {
 		add_user_command (&ptr->type_commands,"show","Shows current directory data",type_dir___show);
 		add_user_command (&ptr->type_commands,"inode","Returns to the inode of the current directory",type_dir___inode);
@@ -307,7 +307,7 @@
 		add_user_command (&ptr->type_commands,"writedata","Writes the current entry to the disk",type_dir___writedata);
 		add_user_command (&ptr->type_commands,"set","Changes a variable in the current directory entry",type_dir___set);
 	}
-	
+
 	if (strcmp ((ptr->name),"ext2_super_block")==0) {
 		add_user_command (&ptr->type_commands,"show","Displays the super block data",type_ext2_super_block___show);
 		add_user_command (&ptr->type_commands,"gocopy","Move to another backup copy of the superblock",type_ext2_super_block___gocopy);
@@ -343,30 +343,30 @@
 		add_user_command (&ptr->type_commands,"allocate","Allocates the current inode",type_ext2_inode_bitmap___allocate);
 		add_user_command (&ptr->type_commands,"deallocate","Deallocates the current inode",type_ext2_inode_bitmap___deallocate);
 	}
-	
+
 }
 
 void add_user_command (struct struct_commands *ptr,char *name,char *description,PF callback)
 
 {
 	int num;
-	
+
 	num=ptr->last_command;
 	if (num+1==MAX_COMMANDS_NUM) {
 		printf ("Internal Error - Can't add command %s\n",name);
 		return;
 	}
-	
+
 	ptr->last_command=++num;
 
 	ptr->names [num]=(char *) malloc (strlen (name)+1);
 	strcpy (ptr->names [num],name);
-	
+
 	if (*description!=0) {
 		ptr->descriptions [num]=(char *) malloc (strlen (description)+1);
 		strcpy (ptr->descriptions [num],description);
 	}
-	
+
 	ptr->callback [num]=callback;
 }
 
@@ -382,7 +382,7 @@
 {
 	int ext2_detected=0;
 	struct ext2_super_block *sb;
-	
+
 	file_system_info.super_block_offset=1024;
 	file_system_info.file_system_size=DefaultTotalBlocks*DefaultBlockSize;
 
@@ -390,7 +390,7 @@
 
 	sb=&file_system_info.super_block;
 
-	if (sb->s_magic == EXT2_SUPER_MAGIC) 
+	if (sb->s_magic == EXT2_SUPER_MAGIC)
 		ext2_detected=1;
 
 	if (ext2_detected)
@@ -403,7 +403,7 @@
 
 	if (ForceExt2 && !ext2_detected)
 		wprintw (command_win,"Forcing extended 2 filesystem\n");
-	
+
 	if (ForceDefault || !ext2_detected)
 		wprintw (command_win,"Forcing default parameters\n");
 
@@ -414,17 +414,17 @@
 		if (!set_struct_descriptors (Ext2Descriptors))
 			return (0);
 	}
-	
+
 	if (!ForceDefault && ext2_detected) {
-	
+
 		file_system_info.block_size=EXT2_MIN_BLOCK_SIZE << sb->s_log_block_size;
 		if (file_system_info.block_size == EXT2_MIN_BLOCK_SIZE)
 			file_system_info.first_group_desc_offset=2*EXT2_MIN_BLOCK_SIZE;
 		else
 			file_system_info.first_group_desc_offset=file_system_info.block_size;
-		file_system_info.groups_count = div_ceil(sb->s_blocks_count, 
+		file_system_info.groups_count = div_ceil(sb->s_blocks_count,
 						 sb->s_blocks_per_group);
-	
+
 		file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode);
 		file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block;
 		file_system_info.no_blocks_in_group=sb->s_blocks_per_group;
@@ -433,10 +433,10 @@
 
 	else {
 		file_system_info.file_system_size=DefaultTotalBlocks*DefaultBlockSize;
-		file_system_info.block_size=DefaultBlockSize;		
+		file_system_info.block_size=DefaultBlockSize;
 		file_system_info.no_blocks_in_group=DefaultBlocksInGroup;
 	}
-	
+
 	if (file_system_info.file_system_size > 2147483647) {
 		wprintw (command_win,"Sorry, filesystems bigger than 2 GB are currently not supported\n");
 		return (0);
@@ -458,17 +458,17 @@
 	signal (SIGWINCH, signal_SIGWINCH_handler);	/* Catch SIGWINCH */
 	signal (SIGTERM, signal_SIGTERM_handler);
 	signal (SIGSEGV, signal_SIGSEGV_handler);
-	
+
 }
 
 void signal_SIGWINCH_handler (int sig_num)
 
 {
 	redraw_request=1;	/* We will handle it in main.c */
-	
-	/* Reset signal handler */	
-	signal (SIGWINCH, signal_SIGWINCH_handler);	
-	
+
+	/* Reset signal handler */
+	signal (SIGWINCH, signal_SIGWINCH_handler);
+
 }
 
 void signal_SIGTERM_handler (int sig_num)
@@ -496,12 +496,12 @@
 
 	strcpy (buffer, ETC_DIR);
 	strcat (buffer,"/ext2ed.conf");
-		
+
 	if ((fp=fopen (buffer,"rt"))==NULL) {
 		fprintf (stderr,"Error - Unable to open configuration file %s\n",buffer);
 		return (0);
 	}
-	
+
 	while (get_next_option (fp,option,value)) {
 		if (strcasecmp (option,"Ext2Descriptors")==0) {
 			strcpy (Ext2Descriptors,value);
@@ -581,7 +581,7 @@
 				fclose (fp);return (0);
 			}
 		}
-		
+
 		else {
 			fprintf (stderr,"Error - Unknown option: %s\n",option);
 			fclose (fp);return (0);
@@ -598,13 +598,13 @@
 {
 	char *ptr;
 	char buffer [600];
-	
+
 	if (feof (fp)) return (0);
 	do{
 		if (feof (fp)) return (0);
 		fgets (buffer,500,fp);
 	} while (buffer [0]=='#' || buffer [0]=='\n');
-	
+
 	ptr=parse_word (buffer,option);
 	ptr=parse_word (ptr,value);
 	return (1);
@@ -618,15 +618,15 @@
 	char current_line [500],current_word [200];
 
 	mounted=0;
-	
+
 	if ( (fp=fopen ("/etc/mtab","rt"))==NULL) {
 		wprintw (command_win,"Error - Failed to open /etc/mtab. Assuming filesystem is mounted.\n");
 		refresh_command_win ();mounted=1;return;
 	};
-	
+
 	while (!feof (fp)) {
 		fgets (current_line,500,fp);
-		if (feof (fp)) break;	
+		if (feof (fp)) break;
 		ptr=parse_word (current_line,current_word);
 		if (strcasecmp (current_word,name)==0) {
 			mounted=1;fclose (fp);return;
@@ -634,6 +634,6 @@
 	};
 
 	fclose (fp);
-	
-	return;	
+
+	return;
 }
diff --git a/ext2ed/inode_com.c b/ext2ed/inode_com.c
index 0f14d11..843286c 100644
--- a/ext2ed/inode_com.c
+++ b/ext2ed/inode_com.c
@@ -51,7 +51,7 @@
 	if (entry_num-mult+1>0) {
 		device_offset-=sizeof (struct ext2_inode)*mult;
 		entry_num-=mult;
-		
+
 		sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
 		strcpy (buffer,"show");dispatch (buffer);
 	}
@@ -59,7 +59,7 @@
 	else {
 		wprintw (command_win,"Error - Entry out of limits\n");refresh_command_win ();
 	}
-	
+
 	if (entry_num==0) {
 		wprintw (command_win,"Reached first inode in current group descriptor\n");
 		refresh_command_win ();
@@ -77,7 +77,7 @@
 	struct ext2_group_desc desc;
 
 	ptr=parse_word (command_line,buffer);
-	
+
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		mult=atol (buffer);
@@ -99,7 +99,7 @@
 	if (entry_num+mult-1<last_entry) {
 		device_offset+=sizeof (struct ext2_inode)*mult;
 		entry_num+=mult;
-		
+
 		sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
 		strcpy (buffer,"show");dispatch (buffer);
 	}
@@ -107,7 +107,7 @@
 	else {
 		wprintw (command_win,"Error - Entry out of limits\n");refresh_command_win ();
 	}
-	
+
 	if (entry_num==last_entry) {
 		wprintw (command_win,"Reached last inode in current group descriptor\n");
 		refresh_command_win ();
@@ -119,10 +119,10 @@
 
 {
 	struct ext2_inode *inode_ptr;
-	
+
 	unsigned short temp;
 	int i;
-	
+
 	long group_num,group_offset,entry_num,block_num,first_entry,last_entry,inode_num;
 	struct ext2_group_desc desc;
 
@@ -150,7 +150,7 @@
 			wprintw (show_pad,"r");
 		else
 			wprintw (show_pad,"-");
-		
+
 		if (temp & 2)
 			wprintw (show_pad,"w");
 		else
@@ -168,7 +168,7 @@
 
 	wmove (show_pad,10,40);
 	temp=inode_ptr->i_flags;
-	
+
 	if (temp & EXT2_SECRM_FL)
 		wprintw (show_pad,"s");
 	else
@@ -204,14 +204,14 @@
 		wprintw (show_pad,"d");
 	else
 		wprintw (show_pad,"-");
-	
+
 	refresh_show_pad ();
 
 	wmove (show_win,1,0);
 
 	wprintw (show_win,"Inode %ld of %ld. Entry %ld of %ld in group descriptor %ld.\n"
 		,inode_num,file_system_info.super_block.s_inodes_count,entry_num,last_entry,group_num);
-	
+
 	wprintw (show_win,"Inode type: ");
 
 	if (inode_num < EXT2_GOOD_OLD_FIRST_INO) {
@@ -241,7 +241,7 @@
 	}
 	if (type_data.u.t_ext2_inode.i_mode==0)
 		wprintw (show_win,"Free.            ");
-		
+
 	if (S_ISREG (type_data.u.t_ext2_inode.i_mode))
 		wprintw (show_win,"File.            ");
 
@@ -255,7 +255,7 @@
 		if (inode_ptr->i_size <= 60)
 			wprintw (show_pad,"-> %s",(char *) &type_data.u.t_ext2_inode.i_block [0]);
 		else
-			wprintw (show_pad,"Slow symbolic link\n");			
+			wprintw (show_pad,"Slow symbolic link\n");
 		refresh_show_pad ();
 	}
 
@@ -266,7 +266,7 @@
 		wprintw (show_win,"Block device.    ");
 
 	wprintw (show_win,"\n");refresh_show_win ();
-	
+
 	if (entry_num==last_entry) {
 		wprintw (command_win,"Reached last inode in current group descriptor\n");
 		refresh_command_win ();
@@ -305,7 +305,7 @@
 		sprintf (buffer,"next %ld",wanted_entry-entry_num);
 		dispatch (buffer);
 	}
-	
+
 	else if (wanted_entry < entry_num) {
 		sprintf (buffer,"prev %ld",entry_num-wanted_entry);
 		dispatch (buffer);
@@ -316,12 +316,12 @@
 
 {
 	char buffer [80];
-	
+
 	long group_num,group_offset;
-	
+
 	group_num=inode_offset_to_group_num (device_offset);
 	group_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc);
-	
+
 	sprintf (buffer,"setoffset %ld",group_offset);dispatch (buffer);
 	sprintf (buffer,"settype ext2_group_desc");dispatch (buffer);
 }
@@ -330,17 +330,17 @@
 
 {
 	char buffer [80];
-	
+
 	if (!S_ISREG (type_data.u.t_ext2_inode.i_mode)) {
 		wprintw (command_win,"Error - Inode type is not file\n");refresh_command_win ();
-		return;		
+		return;
 	}
-	
+
 	if (!init_file_info ()) {
 		wprintw (command_win,"Error - Unable to show file\n");refresh_command_win ();
-		return;		
+		return;
 	}
-	
+
 	sprintf (buffer,"settype file");dispatch (buffer);
 }
 
@@ -348,21 +348,21 @@
 
 {
 	char buffer [80];
-	
+
 	if (!S_ISDIR (type_data.u.t_ext2_inode.i_mode)) {
 		wprintw (command_win,"Error - Inode type is not directory\n");refresh_command_win ();
-		return;		
+		return;
 	}
 
-/* It is very important to init first_file_info first, as search_dir_entries relies on it */	
+/* It is very important to init first_file_info first, as search_dir_entries relies on it */
 
 	if (!init_dir_info (&first_file_info)) {
 		wprintw (command_win,"Error - Unable to show directory\n");refresh_command_win ();
-		return;		
+		return;
 	}
-	
+
 	file_info=first_file_info;
-	
+
 	sprintf (buffer,"settype dir");dispatch (buffer);
 }
 
@@ -371,9 +371,9 @@
 {
 	int found=0;
 	struct ext2_group_desc desc;
-	
+
 	long block_num,group_offset,group_num;
-	
+
 	block_num=inode_offset/file_system_info.block_size;
 
 	group_offset=file_system_info.first_group_desc_offset;
@@ -387,14 +387,14 @@
 			group_offset+=sizeof (struct ext2_group_desc);
 		group_num=(group_offset-file_system_info.first_group_desc_offset)/sizeof (struct ext2_group_desc);
 	}
-	
+
 	if (!found)
 		return (-1);
 
 	return (group_num);
 }
 
- 
+
 
 long int inode_offset_to_inode_num (long inode_offset)
 
@@ -413,7 +413,7 @@
 	first_entry=0;last_entry=file_system_info.super_block.s_inodes_per_group-1;
 	inode_num=group_num*file_system_info.super_block.s_inodes_per_group+1;
 	inode_num+=entry_num;
-	
+
 	return (inode_num);
 }
 
@@ -424,7 +424,7 @@
 	struct ext2_group_desc desc;
 
 	inode_num--;
-	
+
 	group_num=inode_num/file_system_info.super_block.s_inodes_per_group;
 	inode_entry=inode_num%file_system_info.super_block.s_inodes_per_group;
 	group_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc);
diff --git a/ext2ed/inodebitmap_com.c b/ext2ed/inodebitmap_com.c
index f1fddd4..e602234 100644
--- a/ext2ed/inodebitmap_com.c
+++ b/ext2ed/inodebitmap_com.c
@@ -28,7 +28,7 @@
 {
 	unsigned long entry_num;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
@@ -36,11 +36,11 @@
 	ptr=parse_word (ptr,buffer);
 
 	entry_num=atol (buffer);
-	
+
 	if (entry_num >= file_system_info.super_block.s_inodes_per_group) {
 		wprintw (command_win,"Error - Entry number out of bounds\n");refresh_command_win ();return;
 	}
-	
+
 	inode_bitmap_info.entry_num=entry_num;
 	strcpy (buffer,"show");dispatch (buffer);
 }
@@ -50,7 +50,7 @@
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -66,7 +66,7 @@
 {
 	long entry_offset=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
@@ -82,24 +82,24 @@
 {
 	long entry_num,num=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		num=atol (buffer);
 	}
-	
+
 	entry_num=inode_bitmap_info.entry_num;
 	if (num > file_system_info.super_block.s_inodes_per_group-entry_num) {
-		wprintw (command_win,"Error - There aren't that much inodes in the group\n");	
-		refresh_command_win ();return;				
+		wprintw (command_win,"Error - There aren't that much inodes in the group\n");
+		refresh_command_win ();return;
 	}
-	
+
 	while (num) {
 		allocate_inode (entry_num);
 		num--;entry_num++;
 	}
-	
+
 	dispatch ("show");
 }
 
@@ -108,24 +108,24 @@
 {
 	long entry_num,num=1;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr!=0) {
 		ptr=parse_word (ptr,buffer);
 		num=atol (buffer);
 	}
-	
+
 	entry_num=inode_bitmap_info.entry_num;
 	if (num > file_system_info.super_block.s_inodes_per_group-entry_num) {
-		wprintw (command_win,"Error - There aren't that much inodes in the group\n");	
-		refresh_command_win ();return;				
+		wprintw (command_win,"Error - There aren't that much inodes in the group\n");
+		refresh_command_win ();return;
 	}
-	
+
 	while (num) {
 		deallocate_inode (entry_num);
 		num--;entry_num++;
 	}
-	
+
 	dispatch ("show");
 }
 
@@ -135,7 +135,7 @@
 {
 	unsigned char bit_mask=1;
 	int byte_offset,j;
-	
+
 	byte_offset=entry_num/8;
 	for (j=0;j<entry_num%8;j++)
 		bit_mask*=2;
@@ -147,12 +147,12 @@
 {
 	unsigned char bit_mask=1;
 	int byte_offset,j;
-	
+
 	byte_offset=entry_num/8;
 	for (j=0;j<entry_num%8;j++)
 		bit_mask*=2;
 	bit_mask^=0xff;
-	
+
 	type_data.u.buffer [byte_offset] &= bit_mask;
 }
 
@@ -165,7 +165,7 @@
 
 	ptr=type_data.u.buffer;
 	show_pad_info.line=0;show_pad_info.max_line=-1;
-	
+
 	wmove (show_pad,0,0);
 	for (i=0,entry_num=0;i<file_system_info.super_block.s_inodes_per_group/8;i++,ptr++) {
 		for (j=1;j<=128;j*=2) {
@@ -190,13 +190,13 @@
 			show_pad_info.max_line++;
 		}
 	}
-	
+
 	if (i%8!=7) {
 		wprintw (show_pad,"\n");
 		show_pad_info.max_line++;
 	}
 
-	refresh_show_pad ();	
+	refresh_show_pad ();
 	show_info ();
 	wmove (show_win,1,0);wprintw (show_win,"Inode bitmap of block group %ld\n",inode_bitmap_info.group_num);
 
diff --git a/ext2ed/main.c b/ext2ed/main.c
index e239454..50a3f07 100644
--- a/ext2ed/main.c
+++ b/ext2ed/main.c
@@ -71,7 +71,7 @@
 FILE *device_handle=NULL;			/* This is passed to the fopen / fread ... commands */
 long device_offset;				/* The current position in the filesystem */
 						/* Note that we have a 2 GB limitation */
-					
+
 int mounted=0;					/* This is set when we find that the filesystem is mounted */
 
 struct struct_commands general_commands,ext2_commands;		/* Used to define the general and ext2 commands */
@@ -98,7 +98,7 @@
 	int	write_priv = 0;
 	int	c;
 	char	*buf;
-	
+
 	if (!init ())
 		return (1);
 	while ((c = getopt (argc, argv, "w")) != EOF) {
@@ -119,7 +119,7 @@
 		set_device(buf);
 		free(buf);
 		if (write_priv) {
-			wprintw (command_win,"\n");			
+			wprintw (command_win,"\n");
 			enable_write("enable_write");
 		}
 	}
@@ -148,7 +148,7 @@
 			key = 0;
 			kill(getpid(), SIGTSTP);
 			break;
-			
+
 		case KEY_NPAGE:
 			pgdn("");
 			refresh_command_win ();
@@ -161,7 +161,7 @@
 		case ERR:
 			key = 0;
 			break;
-			
+
 		case KEY_BACKSPACE:
 			key = '\b';
 		}
@@ -203,10 +203,10 @@
 	cbreak();
 	keypad(command_win, 1);
 	wtimeout(command_win, 100);
-	
+
 	rl_getc_function = rl_getc_replacement;
 #endif
-	
+
 	while (!quit) {
 		/* Terminal screen size has changed */
 		if (redraw_request) {
@@ -228,7 +228,7 @@
 		 * time.
 		 */
 		mvcur (-1,-1,LINES-COMMAND_WIN_LINES,0);
-		
+
 		/* echo (); */
 		ptr=readline ("ext2ed > ");
 		/* noecho (); */
@@ -239,15 +239,15 @@
 		 * XXX WHY???
 		 */
 		strcpy (command_line,ptr);
-		free (ptr);					
+		free (ptr);
 
 		if (*command_line != 0)
 			add_history (command_line);
 
 		/* If only enter was pressed, recall the last command */
-		if (*command_line==0)				
+		if (*command_line==0)
 			strcpy (command_line,last_command_line);
-		
+
 		/* Emulate readline's actions for ncurses */
 		mvcur (-1,-1,LINES-COMMAND_WIN_LINES,0);
 		werase (command_win);
@@ -261,7 +261,7 @@
 
 		/* And call dispatch to do the actual job */
 		quit=dispatch (command_line);
-	}		
+	}
 }
 #else
 void read_line(char * foo) {
@@ -321,13 +321,13 @@
  		if (*command_line==0)
  			strcpy (command_line,last_command_line);
 
-		mvcur (-1,-1,LINES-COMMAND_WIN_LINES + 1,0);	
+		mvcur (-1,-1,LINES-COMMAND_WIN_LINES + 1,0);
 
  		strcpy (last_command_line,command_line);	/* Save this command in our tiny cache */
-		
+
 		/* And call dispatch to do the actual job */
 		quit=dispatch (command_line);
-	}		
+	}
 }
 #endif
 
@@ -335,35 +335,35 @@
 /*
  * This is a very important function. Its task is to recieve a command
  * name and link it to a C function.  There are three types of commands:
- * 
+ *
  * 1.	General commands - Always available and accessed through
- * general_commands. 
+ * general_commands.
  * 2.	Ext2 specific commands - Available when editing an ext2
- * filesystem, accessed through ext2_commands. 
+ * filesystem, accessed through ext2_commands.
  * 3.	Type specific commands - Those are changing according to the
  * current type. The global variable current_type points to the
  * current object definition (of type struct_descriptor). In it, the
- * struct_commands entry contains the type specific commands links. 
- * 	
+ * struct_commands entry contains the type specific commands links.
+ *
  * Overriding is an important feature - Much like in C++ : The same
  * command name can dispatch to different functions. The overriding
  * priority is 3,2,1; That is - A type specific command will always
  * override a general command. This is used through the program to
- * allow fine tuned operation. 
- * 
+ * allow fine tuned operation.
+ *
  * When an handling function is found, it is called along with the
  * command line that was passed to us. The handling function is then
- * free to interpert the arguments in its own style. 
+ * free to interpert the arguments in its own style.
  */
 int dispatch (char *command_line)
 {
 	int i,found=0;
-	
+
 	char command [80];
 
 	parse_word (command_line,command);
-			
-	if (strcasecmp (command,"quit")==0) return (1);	
+
+	if (strcasecmp (command,"quit")==0) return (1);
 
 	/* 1. Search for type specific commands FIRST - Allows
 	overriding of a general command */
@@ -388,9 +388,9 @@
 			}
 		}
 
-	
+
 	/* 3. If not found, search the general commands */
-	
+
 	if (!found)
 		for (i=0;i<=general_commands.last_command && !found;i++) {
 			if (strcasecmp (command,general_commands.names [i])==0) {
@@ -400,18 +400,18 @@
 		}
 
 	/* 4. If not found, issue an error message and return */
-	
+
 	if (!found) {
 		wprintw (command_win,"Error: Unknown command\n");
 		refresh_command_win ();
 	}
-	
+
 	return (0);
 }
 
 
 /*
- * 
+ *
  * This function copies the next word in source to the variable dest,
  * ignoring whitespaces.  It returns a pointer to the next word in
  * source.  It is used to split the command line into command and arguments.
@@ -419,12 +419,12 @@
 char *parse_word (char *source,char *dest)
 {
 	char ch,*source_ptr,*target_ptr;
-	
+
 	if (*source==0) {
 		*dest=0;
 		return (source);
 	};
-	
+
 	source_ptr=source;target_ptr=dest;
 	do {
 		ch=*source_ptr++;
@@ -432,7 +432,7 @@
 
 	while (ch>' ' && ch<='z') {
 		*target_ptr++=ch;
-		ch=*source_ptr++;	
+		ch=*source_ptr++;
 	}
 
 	*target_ptr=0;
@@ -448,23 +448,23 @@
 /*
  * text is the partial command entered by the user; We assume that it
  * is a part of a command - I didn't write code for smarter completion.
- * 
+ *
  * The state variable is an index which tells us how many possible
- * completions we already returned to readline. 
- * 
+ * completions we already returned to readline.
+ *
  * We return only one possible completion or (char *) NULL if there
  * are no more completions. This function will be called by readline
- * over and over until we tell it to stop. 
- * 
+ * over and over until we tell it to stop.
+ *
  * While scanning for possible completions, we use the same priority
- * definition which was used in dispatch. 
+ * definition which was used in dispatch.
  */
 #if HAVE_READLINE
 char *complete_command (char *text,int state)
 {
 	int state_index=-1;
 	int i,len;
-	
+
 	len=strlen (text);
 
 	/* Is the command type specific ? */
@@ -480,7 +480,7 @@
 		}
 
 	/* No, pehaps ext2 specific command then ? */
-	
+
 	for (i=0;i<=ext2_commands.last_command;i++) {
 		if (strncmp (ext2_commands.names [i],text,len)==0) {
 			state_index++;
@@ -489,9 +489,9 @@
 		}
 	}
 
-	
+
 	/* Check for a general command */
-	
+
 	for (i=0;i<=general_commands.last_command;i++) {
 		if (strncmp (general_commands.names [i],text,len)==0) {
 				state_index++;
@@ -501,27 +501,27 @@
 	}
 
 	/* quit is handled differently */
-	
+
 	if (strncmp ("quit",text,len)==0) {
 		state_index++;
 		if (state==state_index)
-			return (dupstr ("quit"));	
+			return (dupstr ("quit"));
 	}
 
 	/* No more completions */
-	
+
 	return ((char *) NULL);
 }
 #endif
 
 
-/* 
+/*
  * Nothing special - Just allocates enough space and copy the string.
  */
 char *dupstr (char *src)
 {
 	char *ptr;
-	
+
 	ptr=(char *) malloc (strlen (src)+1);
 	strcpy (ptr,src);
 	return (ptr);
@@ -531,13 +531,13 @@
 /*
  * This function reports an internal error. It is almost not used. One
  * place in which I do check for internal errors is disk.c.
- * 
+ *
  * We just report the error, and try to continue ...
  */
 void internal_error (char *description,char *source_name,char *function_name)
 {
 	wprintw (command_win,"Internal error - Found by source: %s.c , function: %s\n",source_name,function_name);
-	wprintw (command_win,"\t%s\n",description);	
+	wprintw (command_win,"\t%s\n",description);
 	wprintw (command_win,"Press enter to (hopefully) continue\n");
 	refresh_command_win ();getch ();werase (command_win);
 }
diff --git a/ext2ed/super_com.c b/ext2ed/super_com.c
index 0541ff3..3d30070 100644
--- a/ext2ed/super_com.c
+++ b/ext2ed/super_com.c
@@ -26,14 +26,14 @@
 {
 	struct ext2_super_block *super;
 	super=&type_data.u.t_ext2_super_block;
-	
+
 	show (command_line);
 
 	if (super->s_blocks_count != 0) {
 		wmove (show_pad,2,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_r_blocks_count/ (float) super->s_blocks_count);
 		wmove (show_pad,3,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_free_blocks_count/ (float) super->s_blocks_count);
 	}
-	
+
 	if (super->s_inodes_count != 0) {
 		wmove (show_pad,4,40);wprintw (show_pad,"%2.2f%%",100*(float) super->s_free_inodes_count/ (float) super->s_inodes_count);
 	}
@@ -60,7 +60,7 @@
 			wprintw (show_pad,"Unknown");
 			break;
 	}
-	
+
 	wmove (show_pad,16,40);
 	if (type_data.u.t_ext2_super_block.s_state & 0x1)
 		wprintw (show_pad,"clean ");
@@ -71,9 +71,9 @@
 		wprintw (show_pad,"with errors ");
 	else
 		wprintw (show_pad,"with no errors");
-	
+
 	wmove (show_pad,17,40);
-	
+
 	switch (type_data.u.t_ext2_super_block.s_errors) {
 		case EXT2_ERRORS_CONTINUE:
 			wprintw (show_pad,"Continue");
@@ -90,7 +90,7 @@
 	}
 
 	wmove (show_pad,21,40);
-	
+
 	switch (type_data.u.t_ext2_super_block.s_creator_os) {
 
 		case EXT2_OS_LINUX:
@@ -101,15 +101,11 @@
 			wprintw (show_pad,"Hurd");
 			break;
 
-		case EXT2_OS_MASIX:
-			wprintw (show_pad,"Masix");
-			break;
-
 		default:
 			wprintw (show_pad,"Unknown");
 			break;
 	}
-	
+
 	refresh_show_pad ();
 
 	wmove (show_win,1,0);wprintw (show_win,"\n");wmove (show_win,2,0);
@@ -125,7 +121,7 @@
 {
 	unsigned long copy_num,offset;
 	char *ptr,buffer [80];
-	
+
 	ptr=parse_word (command_line,buffer);
 	if (*ptr==0) {
 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
@@ -133,12 +129,12 @@
 	ptr=parse_word (ptr,buffer);
 
 	copy_num=atol (buffer);
-	
+
 	offset=file_system_info.super_block_offset+copy_num*file_system_info.no_blocks_in_group*file_system_info.block_size;
-	
+
 	if (offset > file_system_info.file_system_size) {
 		wprintw (command_win,"Error - Copy number out of bounds\n");refresh_command_win ();return;
-	}	
+	}
 
 	super_info.copy_num=copy_num;
 	device_offset=offset;
@@ -151,7 +147,7 @@
 
 {
 	struct ext2_super_block sb;
-	
+
 	sb=type_data.u.t_ext2_super_block;
 	dispatch ("gocopy 0");
 	type_data.u.t_ext2_super_block=sb;
diff --git a/ext2ed/win.c b/ext2ed/win.c
index 758bc6a..113a28f 100644
--- a/ext2ed/win.c
+++ b/ext2ed/win.c
@@ -30,7 +30,7 @@
 struct struct_pad_info show_pad_info;
 WINDOW *title_win,*show_win,*command_win,*mt_win1,*mt_win2,*show_pad;
 
-/* to remember configuration after initscr 
+/* to remember configuration after initscr
  * and modify it
  */
 struct termios termioInit, termioCurrent;
@@ -56,7 +56,7 @@
 	show_pad_info.display_cols=COLS;
 	show_pad_info.max_line=show_pad_info.display_lines-1;show_pad_info.max_col=show_pad_info.display_cols-1;
 	show_pad_info.disable_output=0;
-}	
+}
 
 void init_windows (void)
 {
@@ -65,7 +65,7 @@
 	termioCurrent = termioInit;
 	termioCurrent.c_lflag |= ECHO; /* set echo on */
 	tcsetattr(0,TCSANOW,&termioCurrent);
-	
+
 	if (LINES<TITLE_WIN_LINES+SHOW_WIN_LINES+COMMAND_WIN_LINES+3) {
 		printf ("Sorry, your terminal screen is too small\n");
 		printf ("Error - Can not initialize windows\n");
@@ -105,7 +105,7 @@
 void refresh_show_win (void)
 {
 	int current_page,total_pages;
-	
+
 	current_page=show_pad_info.line/show_pad_info.display_lines+1;
 	if (show_pad_info.line%show_pad_info.display_lines)
 		current_page++;
@@ -123,10 +123,10 @@
 
 {
 	int left,top,right,bottom,i;
-	
+
 	if (show_pad_info.disable_output)
 		return;
-		
+
 	if (show_pad_info.max_line < show_pad_info.display_lines-1) {
 		for (i=show_pad_info.max_line+1;i<show_pad_info.display_lines;i++) {
 			wmove (show_pad,i,0);wprintw (show_pad,"\n");
@@ -157,19 +157,19 @@
 {
 //	echo ();
 	tcsetattr(0,TCSANOW,&termioInit);
-	
+
 	delwin (title_win);
 	delwin (command_win);
 	delwin (show_win);
 	delwin (show_pad);
-	
+
 	endwin ();
 }
 
 void show_info (void)
 {
 	int block_num,block_offset;
-	
+
 	block_num=device_offset/file_system_info.block_size;
 	block_offset=device_offset%file_system_info.block_size;
 
diff --git a/include/nonunix/grp.h b/include/nonunix/grp.h
index 4130cb7..ef019bd 100644
--- a/include/nonunix/grp.h
+++ b/include/nonunix/grp.h
@@ -7,10 +7,10 @@
 
 struct group
   {
-    char *gr_name;	
+    char *gr_name;
     char *gr_passwd;
-    __gid_t gr_gid;	
-    char **gr_mem;	
+    __gid_t gr_gid;
+    char **gr_mem;
   };
 
 #define getgrgid(i) NULL
diff --git a/include/nonunix/pwd.h b/include/nonunix/pwd.h
index 67e05ea..a724ea2 100644
--- a/include/nonunix/pwd.h
+++ b/include/nonunix/pwd.h
@@ -9,13 +9,13 @@
 
 struct passwd
 {
-  char *pw_name;		
-  char *pw_passwd;		
-  __uid_t pw_uid;		
-  __gid_t pw_gid;		
-  char *pw_gecos;		
-  char *pw_dir;			
-  char *pw_shell;		
+  char *pw_name;
+  char *pw_passwd;
+  __uid_t pw_uid;
+  __gid_t pw_gid;
+  char *pw_gecos;
+  char *pw_dir;
+  char *pw_shell;
 };
 
 #define getpwuid(i) NULL
diff --git a/intl/Makefile.in b/intl/Makefile.in
index 40a56a5..47f6f62 100644
--- a/intl/Makefile.in
+++ b/intl/Makefile.in
@@ -43,6 +43,22 @@
 MKINSTALLDIRS = @MKINSTALLDIRS@
 mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
 
+@SET_MAKE@
+
+@ifGNUmake@ V =
+@ifGNUmake@ ifeq ($(strip $(V)),)
+@ifGNUmake@ #  E = @echo
+@ifGNUmake@ #  Q = @
+@ifGNUmake@    E = @E@
+@ifGNUmake@    Q = @Q@
+@ifGNUmake@ else
+@ifGNUmake@    E = @\#
+@ifGNUmake@    Q =
+@ifGNUmake@ endif
+
+@ifNotGNUmake@ E = @E@
+@ifNotGNUmake@ Q = @Q@
+
 l = @INTL_LIBTOOL_SUFFIX_PREFIX@
 
 AR = ar
@@ -146,11 +162,11 @@
 all-no-no:
 
 libintl.a libgnuintl.a: $(OBJECTS)
-	@rm -f $@
-	@echo "	AR $@"
-	@$(AR) cru $@ $(OBJECTS)
-	@echo "	RANLIB $@"
-	@$(RANLIB) $@
+	$(Q) rm -f $@
+	$(E) "	AR $@"
+	$(Q) $(AR) cru $@ $(OBJECTS)
+	$(E) "	RANLIB $@"
+	$(Q) $(RANLIB) $@
 
 libintl.la libgnuintl.la: $(OBJECTS)
 	$(LIBTOOL) --mode=link \
@@ -173,8 +189,8 @@
 .SUFFIXES: .c .y .o .lo .sin .sed
 
 .c.o:
-	@echo "	CC $<"
-	@$(COMPILE) $<
+	$(E) "	CC $<"
+	$(Q) $(COMPILE) $<
 
 .y.c:
 	$(YACC) $(YFLAGS) --output $@ $<
@@ -228,32 +244,32 @@
 	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
 
 ref-add.sed: $(srcdir)/ref-add.sin
-	@echo "	SED ref-add.sed"
-	@sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
-	@mv t-ref-add.sed ref-add.sed
+	$(E) "	SED ref-add.sed"
+	$(Q) sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
+	$(Q) mv t-ref-add.sed ref-add.sed
 ref-del.sed: $(srcdir)/ref-del.sin
-	@echo "	SED ref-del.sed"
-	@sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
-	@mv t-ref-del.sed ref-del.sed
+	$(E) "	SED ref-del.sed"
+	$(Q) sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
+	$(Q) mv t-ref-del.sed ref-del.sed
 
 INCLUDES = -I. -I$(srcdir) -I..
 
 libgnuintl.h: $(srcdir)/libgnuintl.h.in
-	@echo "	SED libgnuintl.h "
-	@sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
+	$(E) "	SED libgnuintl.h "
+	$(Q) sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
 	    -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
 	    -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
 	    -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
 	  < $(srcdir)/libgnuintl.h.in > libgnuintl.h 
 
 libintl.h: libgnuintl.h
-	@echo "	CP libintl.h"
-	@cp libgnuintl.h libintl.h
+	$(E) "	CP libintl.h"
+	$(Q) cp libgnuintl.h libintl.h
 
 charset.alias: $(srcdir)/config.charset
-	@echo "	CONFIG.CHARSET $@"
-	@$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
-	@mv t-$@ $@
+	$(E) "	CONFIG.CHARSET $@"
+	$(Q) $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+	$(Q) mv t-$@ $@
 
 check: all
 
@@ -264,7 +280,7 @@
 # package, you have to use `configure --with-included-gettext'.
 install: install-exec install-data
 install-exec: all
-	@if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+	$(Q) if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
 	   && test '@USE_INCLUDED_LIBINTL@' = yes; then \
 	  $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
 	  $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
@@ -279,7 +295,7 @@
 	else \
 	  : ; \
 	fi
-	@if test "$(PACKAGE)" = "gettext-tools" \
+	$(Q) if test "$(PACKAGE)" = "gettext-tools" \
 	   && test '@USE_INCLUDED_LIBINTL@' = no; then \
 	  $(mkinstalldirs) $(DESTDIR)$(libdir); \
 	  $(LIBTOOL) --mode=install \
@@ -321,7 +337,7 @@
 	  : ; \
 	fi
 install-data: all
-	@if test "$(PACKAGE)" = "gettext-tools"; then \
+	$(Q) if test "$(PACKAGE)" = "gettext-tools"; then \
 	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
 	  $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
 	  $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
@@ -474,8 +490,8 @@
 	fi
 
 maintainer-clean: distclean
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+	$(E) "This command is intended for maintainers to use;"
+	$(E) "it deletes files that may require special tools to rebuild."
 
 
 # GNU gettext needs not contain the file `VERSION' but contains some
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
index dcdc400..8284226 100644
--- a/intl/bindtextdom.c
+++ b/intl/bindtextdom.c
@@ -197,8 +197,7 @@
 
 		  if (__builtin_expect (result != NULL, 1))
 		    {
-		      if (binding->codeset != NULL)
-			free (binding->codeset);
+		      free (binding->codeset);
 
 		      binding->codeset = result;
 		      binding->codeset_cntr++;
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
index a4452f7..79678cf 100644
--- a/intl/dcigettext.c
+++ b/intl/dcigettext.c
@@ -155,6 +155,7 @@
 #  endif
 # endif
 # ifndef HAVE_STPCPY
+#define stpcpy(dest, src) my_stpcpy(dest, src)
 static char *stpcpy (char *dest, const char *src);
 # endif
 # ifndef HAVE_MEMPCPY
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
index eb995aa..3393ecb 100644
--- a/intl/l10nflist.c
+++ b/intl/l10nflist.c
@@ -58,6 +58,7 @@
 # endif
 #else
 # ifndef HAVE_STPCPY
+#define stpcpy(dest, src) my_stpcpy(dest, src)
 static char *stpcpy (char *dest, const char *src);
 # endif
 #endif
@@ -164,7 +165,7 @@
   return x;
 }
 
-
+
 struct loaded_l10nfile *
 _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
 		    const char *dirlist, size_t dirlist_len,
@@ -359,7 +360,7 @@
 
   return retval;
 }
-
+
 /* Normalize codeset name.  There is no standard for the codeset
    names.  Normalization allows the user to use any of the common
    names.  The return value is dynamically allocated and has to be
diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h
new file mode 100644
index 0000000..77133e7
--- /dev/null
+++ b/intl/libgnuintl.h
@@ -0,0 +1,383 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H	1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
+   On systems that don't define it, use an arbitrary value instead.
+   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+   then includes <libintl.h> (i.e. this file!) and then only defines
+   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
+   in this case.  */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats.  Returns the
+   maximum minor revision number supported for a given major revision.  */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+  ((major) == 0 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* We redirect the functions to those prefixed with "libintl_".  This is
+   necessary, because some systems define gettext/textdomain/... in the C
+   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+   If we used the unprefixed names, there would be cases where the
+   definition in the C library would override the one in the libintl.so
+   shared library.  Recall that on ELF systems, the symbols are looked
+   up in the following order:
+     1. in the executable,
+     2. in the shared libraries specified on the link command line, in order,
+     3. in the dependencies of the shared libraries specified on the link
+        command line,
+     4. in the dlopen()ed shared libraries, in the order in which they were
+        dlopen()ed.
+   The definition in the C library would override the one in libintl.so if
+   either
+     * -lc is given on the link command line and -lintl isn't, or
+     * -lc is given on the link command line before -lintl, or
+     * libintl.so is a dependency of a dlopen()ed shared library but not
+       linked to the executable at link time.
+   Since Solaris gettext() behaves differently than GNU gettext(), this
+   would be unacceptable.
+
+   The redirection happens by default through macros in C, so that &gettext
+   is independent of the compilation unit, but through inline functions in
+   C++, in order not to interfere with the name mangling of class fields or
+   class methods called 'gettext'.  */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+   If he doesn't, we choose the method.  A third possible method is
+   _INTL_REDIRECT_ASM, supported only by GCC.  */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
+#  define _INTL_REDIRECT_ASM
+# else
+#  ifdef __cplusplus
+#   define _INTL_REDIRECT_INLINE
+#  else
+#   define _INTL_REDIRECT_MACROS
+#  endif
+# endif
+#endif
+/* Auxiliary macros.  */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid);
+static inline char *gettext (const char *__msgid)
+{
+  return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext (const char *__msgid)
+       _INTL_ASM (libintl_gettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+  return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext (const char *__domainname, const char *__msgid)
+       _INTL_ASM (libintl_dgettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+				int __category);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+			       int __category)
+{
+  return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext (const char *__domainname, const char *__msgid,
+			int __category)
+       _INTL_ASM (libintl_dcgettext);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+			       unsigned long int __n);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+			      unsigned long int __n)
+{
+  return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+		       unsigned long int __n)
+       _INTL_ASM (libintl_ngettext);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+				const char *__msgid2, unsigned long int __n);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+			       const char *__msgid2, unsigned long int __n)
+{
+  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext (const char *__domainname,
+			const char *__msgid1, const char *__msgid2,
+			unsigned long int __n)
+       _INTL_ASM (libintl_dngettext);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+				 const char *__msgid1, const char *__msgid2,
+				 unsigned long int __n, int __category);
+static inline char *dcngettext (const char *__domainname,
+				const char *__msgid1, const char *__msgid2,
+				unsigned long int __n, int __category)
+{
+  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext (const char *__domainname,
+			 const char *__msgid1, const char *__msgid2,
+			 unsigned long int __n, int __category)
+       _INTL_ASM (libintl_dcngettext);
+#endif
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+  return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain (const char *__domainname)
+       _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+				     const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+				    const char *__dirname)
+{
+  return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain (const char *__domainname, const char *__dirname)
+       _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+					      const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+					     const char *__codeset)
+{
+  return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset (const char *__domainname,
+				      const char *__codeset)
+       _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for format strings with positions in *printf(), following the
+   POSIX/XSI specification.
+   Note: These replacements for the *printf() functions are visible only
+   in source files that #include <libintl.h> or #include "gettext.h".
+   Packages that use *printf() in source files that don't refer to _()
+   or gettext() but for which the format string could be the return value
+   of _() or gettext() need to add this #include.  Oh well.  */
+
+#if !1
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list.  */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if 1
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if 1
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if 0
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#endif
+
+
+/* Support for relocatable packages.  */
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+       libintl_set_relocation_prefix (const char *orig_prefix,
+				      const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index c8fc46d..7fab71a 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -1372,8 +1372,7 @@
       /* This is an invalid revision.  */
     invalid:
       /* This is an invalid .mo file.  */
-      if (domain->malloced)
-	free (domain->malloced);
+      free (domain->malloced);
 #ifdef HAVE_MMAP
       if (use_mmap)
 	munmap ((void *) data, size);
@@ -1405,8 +1404,7 @@
 
   _nl_free_domain_conv (domain);
 
-  if (domain->malloced)
-    free (domain->malloced);
+  free (domain->malloced);
 
 # ifdef _POSIX_MAPPED_FILES
   if (domain->use_mmap)
diff --git a/intl/localcharset.c b/intl/localcharset.c
index 4865f10..a3e3a9b 100644
--- a/intl/localcharset.c
+++ b/intl/localcharset.c
@@ -199,8 +199,7 @@
 	    }
 	}
 
-      if (file_name != NULL)
-	free (file_name);
+      free (file_name);
 
 #else
 
diff --git a/intl/plural.c b/intl/plural.c
index 72494f9..535305b 100644
--- a/intl/plural.c
+++ b/intl/plural.c
@@ -223,8 +223,8 @@
 /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
 static const char *const yytname[] =
 {
-  "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", 
-  "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", 
+  "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+  "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
   "start", "exp", 0
 };
 #endif
@@ -556,7 +556,7 @@
 #ifndef YYMAXDEPTH
 # define YYMAXDEPTH 10000
 #endif
-
+
 #ifdef YYERROR_VERBOSE
 
 # ifndef yystrlen
@@ -608,7 +608,7 @@
 #  endif
 # endif
 #endif
-
+
 #line 315 "/usr/local/share/bison/bison.simple"
 
 
@@ -1081,7 +1081,7 @@
 
 #line 705 "/usr/local/share/bison/bison.simple"
 
-
+
   yyvsp -= yylen;
   yyssp -= yylen;
 #if YYLSP_NEEDED
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
index d19f903..416deda 100644
--- a/intl/printf-parse.c
+++ b/intl/printf-parse.c
@@ -524,10 +524,8 @@
   return 0;
 
 error:
-  if (a->arg)
-    free (a->arg);
-  if (d->dir)
-    free (d->dir);
+  free (a->arg);
+  free (d->dir);
   return -1;
 }
 
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
index 8a62282..61bfb9e 100644
--- a/intl/vasnprintf.c
+++ b/intl/vasnprintf.c
@@ -801,8 +801,7 @@
 		      {
 			if (!(result == resultbuf || result == NULL))
 			  free (result);
-			if (buf_malloced != NULL)
-			  free (buf_malloced);
+			free (buf_malloced);
 			CLEANUP ();
 			errno = EINVAL;
 			return NULL;
@@ -860,8 +859,7 @@
 	  result = memory;
       }
 
-    if (buf_malloced != NULL)
-      free (buf_malloced);
+    free (buf_malloced);
     CLEANUP ();
     *lengthp = length;
     return result;
@@ -869,8 +867,7 @@
   out_of_memory:
     if (!(result == resultbuf || result == NULL))
       free (result);
-    if (buf_malloced != NULL)
-      free (buf_malloced);
+    free (buf_malloced);
   out_of_memory_1:
     CLEANUP ();
     errno = ENOMEM;
diff --git a/lib/Makefile.checker b/lib/Makefile.checker
index 8382a51..cdc1d7b 100644
--- a/lib/Makefile.checker
+++ b/lib/Makefile.checker
@@ -1,16 +1,16 @@
 all:: $(LIBRARY)_chk.a
 
 real-subdirs:: Makefile
-	@echo "	MKDIR checker"
-	@mkdir -p checker
+	$(E) "	MKDIR checker"
+	$(Q) mkdir -p checker
 
 clean::
 	$(RM) -rf checker
 
 $(LIBRARY)_chk.a: $(OBJS)
-	@echo "	GEN_CHECKER_LIB $@"
-	@(test -r $@ && $(RM) -f $@.bak && $(MV) $@ $@.bak)
-	(cd checker; $(ARGEN) $@ $(OBJS))
-	-@$(RANLIB) $@
-	@$(RM) -f ../$@
-	@$(LN) $@ ../$@
+	$(E) "	GEN_CHECKER_LIB $@"
+	$(Q) (test -r $@ && $(RM) -f $@.bak && $(MV) $@ $@.bak)
+	$(Q) (cd checker; $(ARGEN) $@ $(OBJS))
+	-$(Q) $(RANLIB) $@
+	$(Q) $(RM) -f ../$@
+	$(Q) $(LN) $@ ../$@
diff --git a/lib/Makefile.darwin-lib b/lib/Makefile.darwin-lib
index 3052b2e..a26200b 100644
--- a/lib/Makefile.darwin-lib
+++ b/lib/Makefile.darwin-lib
@@ -13,8 +13,8 @@
 all:: image
 
 real-subdirs:: Makefile
-	@echo "	MKDIR pic"
-	@mkdir -p pic
+	$(E) "	MKDIR pic"
+	$(Q) mkdir -p pic
 
 BSD_LIB = $(BSDLIB_IMAGE).$(BSDLIB_VERSION).dylib
 BSDLIB_PIC_FLAG = -fPIC
@@ -22,19 +22,19 @@
 image:		$(BSD_LIB)
 
 $(BSD_LIB): $(OBJS)
-	@echo "	GEN_BSD_SOLIB $(BSD_LIB)"
-	@(cd pic; $(CC) -dynamiclib -compatibility_version 1.0 -current_version $(BSDLIB_VERSION) \
+	$(E) "	GEN_BSD_SOLIB $(BSD_LIB)"
+	$(Q) (cd pic; $(CC) -dynamiclib -compatibility_version 1.0 -current_version $(BSDLIB_VERSION) \
 		-flat_namespace -undefined warning -o $(BSD_LIB) $(OBJS))
-	@$(MV) pic/$(BSD_LIB) .
-	@$(RM) -f ../$(BSD_LIB)
-	@$(LN) $(BSD_LIB) ../$(BSD_LIB)
-	@$(LN) ../$(BSD_LIB) ../$(BSDLIB_IMAGE).dylib
+	$(Q) $(MV) pic/$(BSD_LIB) .
+	$(Q) $(RM) -f ../$(BSD_LIB)
+	$(Q) $(LN) $(BSD_LIB) ../$(BSD_LIB)
+	$(Q) $(LN) ../$(BSD_LIB) ../$(BSDLIB_IMAGE).dylib
 
 install-shlibs install:: $(BSD_LIB)
-	@echo "	INSTALL_PROGRAM $(BSDLIB_INSTALL_DIR)/$(BSD_LIB)"
-	@$(INSTALL_PROGRAM) $(BSD_LIB) \
+	$(E) "	INSTALL_PROGRAM $(BSDLIB_INSTALL_DIR)/$(BSD_LIB)"
+	$(Q) $(INSTALL_PROGRAM) $(BSD_LIB) \
 		$(DESTDIR)$(BSDLIB_INSTALL_DIR)/$(BSD_LIB)
-	@-$(LDCONFIG)
+	-$(Q) $(LDCONFIG)
 
 install-strip: install
 
diff --git a/lib/Makefile.elf-lib b/lib/Makefile.elf-lib
index c360adc..c0202f4 100644
--- a/lib/Makefile.elf-lib
+++ b/lib/Makefile.elf-lib
@@ -14,8 +14,8 @@
 all:: image
 
 real-subdirs:: Makefile
-	@echo "	MKDIR elfshared"
-	@mkdir -p elfshared
+	$(E) "	MKDIR elfshared"
+	$(Q) mkdir -p elfshared
 
 ELF_LIB = $(ELF_IMAGE).so.$(ELF_VERSION)
 ELF_SONAME = $(ELF_IMAGE).so.$(ELF_SO_VERSION)
@@ -23,41 +23,45 @@
 image:		$(ELF_LIB)
 
 $(ELF_LIB): $(OBJS)
-	@echo "	GEN_ELF_SOLIB $(ELF_LIB)"
-	@(cd elfshared; $(CC) --shared -o $(ELF_LIB) $(LDFLAGS) \
+	$(E) "	GEN_ELF_SOLIB $(ELF_LIB)"
+	$(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) $(LDFLAGS) \
 		-Wl,-soname,$(ELF_SONAME) $(OBJS) $(ELF_OTHER_LIBS))
-	@$(MV) elfshared/$(ELF_LIB) .
-	@$(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
-	@$(LN) $(ELF_LIB) ../$(ELF_LIB)
-	@$(LN) ../$(ELF_LIB) ../$(ELF_IMAGE).so
-	@$(LN) ../$(ELF_LIB) ../$(ELF_SONAME)
+	$(Q) $(MV) elfshared/$(ELF_LIB) .
+	$(Q) $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
+	$(Q) $(LN) $(ELF_LIB) ../$(ELF_LIB)
+	$(Q) $(LN) ../$(ELF_LIB) ../$(ELF_IMAGE).so
+	$(Q) $(LN) ../$(ELF_LIB) ../$(ELF_SONAME)
 
 installdirs-elf-lib::
-	@echo "	MKINSTALLDIRS $(ELF_INSTALL_DIR) $(libdir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \
+	$(E) "	MKINSTALLDIRS $(ELF_INSTALL_DIR) $(libdir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \
 		$(DESTDIR)$(libdir)
 
 installdirs:: installdirs-elf-lib
 
 install-shlibs install:: $(ELF_LIB) installdirs-elf-lib
-	@echo "	INSTALL-ELF-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
-	@$(INSTALL_PROGRAM) $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
-	@echo "	SYMLINK $(ELF_INSTALL_DIR)/$(ELF_SONAME)"
-	@$(LN_S) -f $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_SONAME)
-	@echo "	SYMLINK $(libdir)/$(ELF_IMAGE).so"
-	@$(LN_S) -f $(ELF_INSTALL_DIR)/$(ELF_SONAME) \
-		$(DESTDIR)$(libdir)/$(ELF_IMAGE).so
-	@echo "	LDCONFIG"
-	@-$(LDCONFIG)
+	$(E) "	INSTALL-ELF-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
+	$(Q) $(INSTALL_PROGRAM) $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
+	$(E) "	SYMLINK $(ELF_INSTALL_DIR)/$(ELF_SONAME)"
+	$(Q) $(LN_S) -f $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_SONAME)
+	$(E) "	SYMLINK $(libdir)/$(ELF_IMAGE).so"
+	$(Q) if test "$(ELF_INSTALL_DIR)" = "$(libdir)"; then \
+		$(LN_S) -f $(ELF_SONAME) $(DESTDIR)$(libdir)/$(ELF_IMAGE).so ; \
+	else \
+		$(LN_S) -f $(ELF_INSTALL_DIR)/$(ELF_SONAME) \
+			$(DESTDIR)$(libdir)/$(ELF_IMAGE).so; \
+	fi			
+	$(E) "	LDCONFIG"
+	$(Q) -$(LDCONFIG)
 
 install-strip: install
-	@echo "	STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
-	@$(STRIP) --strip-unneeded --remove-section=.comment \
+	$(E) "	STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
+	$(Q) $(STRIP) --strip-unneeded --remove-section=.comment \
 		--remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
 
 install-shlibs-strip: install-shlibs
-	@echo "	STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
-	@$(STRIP) --strip-unneeded --remove-section=.comment \
+	$(E) "	STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)"
+	$(Q) $(STRIP) --strip-unneeded --remove-section=.comment \
 		--remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB)
 
 uninstall-shlibs uninstall::
diff --git a/lib/Makefile.library b/lib/Makefile.library
index cc2c0ff..f3b12f7 100644
--- a/lib/Makefile.library
+++ b/lib/Makefile.library
@@ -7,17 +7,18 @@
 real-subdirs::
 
 subdirs:: Makefile
-	@$(MAKE) -s real-subdirs
-	@touch subdirs
+	$(Q) $(MAKE) -s real-subdirs
+	$(Q) touch subdirs
 
 clean::
-	@$(RM) -f subdirs
+	$(Q) $(RM) -f subdirs
 
 $(LIBRARY).a: $(OBJS)
-	@echo "	GEN_LIB $@"
-	@(if test -r $@; then $(RM) -f $@.bak && $(MV) $@ $@.bak; fi)
-	@$(ARGEN) $@ $(OBJS)
+	$(E) "	GEN_LIB $@"
+	$(Q) (if test -r $@; then $(RM) -f $@.bak && $(MV) $@ $@.bak; fi)
+	$(Q) $(ARGEN) $@ $(OBJS)
 	-@$(RANLIB) $@
-	@$(RM) -f ../$@
-	@$(LN) $@ ../$@
+	$(Q) $(RM) -f ../$@
+	$(Q) $(LN) $@ ../$@
 
+$(LIB)/$(LIBRARY).a: $(LIBRARY).a
diff --git a/lib/Makefile.profile b/lib/Makefile.profile
index a2e77c6..1e07b35 100644
--- a/lib/Makefile.profile
+++ b/lib/Makefile.profile
@@ -1,26 +1,26 @@
 all:: $(LIBRARY)_p.a
 
 real-subdirs:: Makefile
-	@echo "	MKDIR profiled"
-	@mkdir -p profiled
+	$(E) "	MKDIR profiled"
+	$(Q) mkdir -p profiled
 
 clean::
 	$(RM) -rf profiled
 	$(RM) -f $(LIBRARY)_p.a ../$(LIBRARY)_p.a
 
 $(LIBRARY)_p.a: $(OBJS)
-	@echo "	GEN_PROFILED_LIB $(ELF_LIB)"
-	@(if test -r $@; then $(RM) -f $@.bak && $(MV) $@ $@.bak; fi)
-	@(cd profiled; $(ARUPD) ../$@ $(OBJS))
-	-@$(RANLIB) $@
-	@$(RM) -f ../$@
-	@$(LN) $@ ../$@
+	$(E) "	GEN_PROFILED_LIB $(ELF_LIB)"
+	$(Q) (if test -r $@; then $(RM) -f $@.bak && $(MV) $@ $@.bak; fi)
+	$(Q) (cd profiled; $(ARUPD) ../$@ $(OBJS))
+	-$(Q) $(RANLIB) $@
+	$(Q) $(RM) -f ../$@
+	$(Q) $(LN) $@ ../$@
 
 install:: $(LIBRARY)_p.a installdirs
-	@echo "	INSTALL_DATA $(libdir)/$(LIBRARY)_p.a"
-	@$(INSTALL_DATA) $(LIBRARY)_p.a $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
+	$(E) "	INSTALL_DATA $(libdir)/$(LIBRARY)_p.a"
+	$(Q) $(INSTALL_DATA) $(LIBRARY)_p.a $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/$(LIBRARY)_p.a
diff --git a/lib/Makefile.solaris-lib b/lib/Makefile.solaris-lib
index fcadfa3..f90d714 100644
--- a/lib/Makefile.solaris-lib
+++ b/lib/Makefile.solaris-lib
@@ -14,8 +14,8 @@
 all:: image
 
 real-subdirs:: Makefile
-	@echo "	MKDIR elfshared"
-	@mkdir -p elfshared
+	$(E) "	MKDIR elfshared"
+	$(Q) mkdir -p elfshared
 
 ELF_LIB = $(ELF_IMAGE).so.$(ELF_VERSION)
 ELF_SONAME = $(ELF_IMAGE).so.$(ELF_SO_VERSION)
@@ -23,14 +23,14 @@
 image:		$(ELF_LIB)
 
 $(ELF_LIB): $(OBJS)
-	@echo "	GEN_ELF_SOLIB $(ELF_LIB)"
-	@(cd elfshared; $(CC) --shared -o $(ELF_LIB) $(LDFLAGS) \
+	$(E) "	GEN_ELF_SOLIB $(ELF_LIB)"
+	$(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) $(LDFLAGS) \
 		-Wl,-h,$(ELF_SONAME) $(OBJS) $(ELF_OTHER_LIBS))
-	@$(MV) elfshared/$(ELF_LIB) .
-	@$(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
-	@$(LN) $(ELF_LIB) ../$(ELF_LIB)
-	@$(LN) ../$(ELF_LIB) ../$(ELF_IMAGE).so
-	@$(LN) ../$(ELF_LIB) ../$(ELF_SONAME)
+	$(Q) $(MV) elfshared/$(ELF_LIB) .
+	$(Q) $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
+	$(Q) $(LN) $(ELF_LIB) ../$(ELF_LIB)
+	$(Q) $(LN) ../$(ELF_LIB) ../$(ELF_IMAGE).so
+	$(Q) $(LN) ../$(ELF_LIB) ../$(ELF_SONAME)
 
 installdirs-elf-lib::
 	$(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \
diff --git a/lib/blkid/Android.mk b/lib/blkid/Android.mk
index 668eff3..87af46a 100644
--- a/lib/blkid/Android.mk
+++ b/lib/blkid/Android.mk
@@ -1,7 +1,6 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+libext2_blkid_src_files := \
 	cache.c \
 	dev.c \
 	devname.c \
@@ -16,20 +15,19 @@
 	version.c \
 
 
-LOCAL_MODULE := libext2_blkid
-LOCAL_MODULE_TAGS:= eng
-LOCAL_SYSTEM_SHARED_LIBRARIES := libext2_uuid libc
+libext2_blkid_shared_libraries := libext2_uuid
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
+libext2_blkid_system_shared_libraries := libc
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2_blkid_c_includes := external/e2fsprogs/lib
+
+libext2_blkid_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
 	-DHAVE_SYS_IOCTL_H \
 	-DHAVE_SYS_MMAN_H \
 	-DHAVE_SYS_MOUNT_H \
-	-DHAVE_SYS_PRCTL_H \
 	-DHAVE_SYS_RESOURCE_H \
 	-DHAVE_SYS_SELECT_H \
 	-DHAVE_SYS_STAT_H \
@@ -39,12 +37,43 @@
 	-DHAVE_MMAP \
 	-DHAVE_UTIME_H \
 	-DHAVE_GETPAGESIZE \
-	-DHAVE_LSEEK64 \
-	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
-	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+libext2_blkid_cflags_linux := \
+	-DHAVE_LINUX_FD_H \
+	-DHAVE_SYS_PRCTL_H \
+	-DHAVE_LSEEK64 \
+	-DHAVE_LSEEK64_PROTOTYPE
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_blkid_src_files)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_blkid_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(libext2_blkid_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2_blkid_c_includes)
+LOCAL_CFLAGS := $(libext2_blkid_cflags) $(libext2_blkid_cflags_linux)
 LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_blkid
+LOCAL_MODULE_TAGS:= $(use_e2fsprog_module_tags)
 
 include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_blkid_src_files)
+LOCAL_SHARED_LIBRARIES := $(libext2_blkid_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2_blkid_c_includes)
+ifeq ($(HOST_OS),linux)
+LOCAL_CFLAGS := $(libext2_blkid_cflags) $(libext2_blkid_cflags_linux)
+else
+LOCAL_CFLAGS := $(libext2_blkid_cflags)
+endif
+LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_blkid_host
+LOCAL_MODULE_STEM := libext2_blkid
+LOCAL_MODULE_TAGS:= $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/blkid/Makefile.in b/lib/blkid/Makefile.in
index bf0012e..e89318e 100644
--- a/lib/blkid/Makefile.in
+++ b/lib/blkid/Makefile.in
@@ -26,8 +26,7 @@
  $(srcdir)/read.c $(srcdir)/resolve.c $(srcdir)/save.c $(srcdir)/tag.c \
  $(srcdir)/version.c
 
-HFILES=		blkid.h
-HFILES_IN=	blkid_types.h
+HFILES_IN=	blkid.h blkid_types.h
 
 LIBRARY= libblkid
 LIBDIR= blkid
@@ -37,7 +36,7 @@
 ELF_IMAGE = libblkid
 ELF_MYDIR = blkid
 ELF_INSTALL_DIR = $(root_libdir)
-ELF_OTHER_LIBS = -L../.. -luuid $(DEVMAPPER_LIBS)
+ELF_OTHER_LIBS = -L../.. -luuid
 
 BSDLIB_VERSION = 2.0
 BSDLIB_IMAGE = libblkid
@@ -54,83 +53,87 @@
 DEPLIBS_BLKID=	$(DEPSTATIC_LIBBLKID) $(DEPSTATIC_LIBUUID)
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 all:: $(SMANPAGES) blkid.pc
 
-$(top_builddir)/lib/blkid/blkid_types.h: $(srcdir)/blkid_types.h.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); \
+blkid_types.h: $(srcdir)/blkid_types.h.in $(top_builddir)/config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); \
 		CONFIG_FILES=$(my_dir)/blkid_types.h ./config.status
 
+blkid.h: $(srcdir)/blkid.h.in
+	$(E) "	CP $@"
+	$(Q) cp $(srcdir)/blkid.h.in blkid.h
+
 libblkid.3: $(DEP_SUBSTITUTE) $(srcdir)/libblkid.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/libblkid.3.in libblkid.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/libblkid.3.in libblkid.3
 
 tst_cache: $(srcdir)/cache.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_cache -DTEST_PROGRAM $(srcdir)/cache.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_cache -DTEST_PROGRAM $(srcdir)/cache.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_dev: $(srcdir)/dev.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_dev -DTEST_PROGRAM $(srcdir)/dev.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_dev -DTEST_PROGRAM $(srcdir)/dev.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_devname: $(srcdir)/devname.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_devname -DTEST_PROGRAM $(srcdir)/devname.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_devname -DTEST_PROGRAM $(srcdir)/devname.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_devno: $(srcdir)/devno.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_devno -DTEST_PROGRAM $(srcdir)/devno.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_devno -DTEST_PROGRAM $(srcdir)/devno.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_getsize: $(srcdir)/getsize.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_getsize -DTEST_PROGRAM $(srcdir)/getsize.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_getsize -DTEST_PROGRAM $(srcdir)/getsize.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_probe: $(srcdir)/probe.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_probe -DTEST_PROGRAM $(srcdir)/probe.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_probe -DTEST_PROGRAM $(srcdir)/probe.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_read: $(srcdir)/read.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_read -DTEST_PROGRAM $(srcdir)/read.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_read -DTEST_PROGRAM $(srcdir)/read.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_resolve: $(srcdir)/resolve.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_resolve -DTEST_PROGRAM $(srcdir)/resolve.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_resolve -DTEST_PROGRAM $(srcdir)/resolve.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_save: $(srcdir)/save.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_save -DTEST_PROGRAM $(srcdir)/save.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_save -DTEST_PROGRAM $(srcdir)/save.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_tag: $(srcdir)/tag.c $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) -o tst_tag -DTEST_PROGRAM $(srcdir)/tag.c $(LIBS_BLKID) $(ALL_CFLAGS)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_tag -DTEST_PROGRAM $(srcdir)/tag.c $(LIBS_BLKID) $(ALL_CFLAGS)
 
 tst_types: tst_types.o blkid_types.h 
-	@echo "	LD $@"
-	@$(CC) -o tst_types tst_types.o 
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_types tst_types.o 
 
 ../../misc/blkid.o: $(top_srcdir)/misc/blkid.c blkid.h
-	@echo "	CC $@"
-	@$(CC) $(ALL_CFLAGS) -c $(top_srcdir)/misc/blkid.c \
+	$(E) "	CC $@"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $(top_srcdir)/misc/blkid.c \
 		-o ../../misc/blkid.o
 
 blkid: ../../misc/blkid.o libblkid.a $(DEPLIBUUID)
-	@echo "	LD $@"
-	@$(CC) -o blkid ../../misc/blkid.o libblkid.a $(LIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o blkid ../../misc/blkid.o libblkid.a $(LIBUUID)
 
 test_probe: test_probe.in Makefile
-	@echo "Creating test_probe..."
-	@echo "#!/bin/sh" > test_probe
-	@echo "SRCDIR=@srcdir@" >> test_probe
-	@cat $(srcdir)/test_probe.in >> test_probe
-	@chmod +x test_probe
+	$(E) "Creating test_probe..."
+	$(E) "#!/bin/sh" > test_probe
+	$(E) "SRCDIR=@srcdir@" >> test_probe
+	$(Q) cat $(srcdir)/test_probe.in >> test_probe
+	$(Q) chmod +x test_probe
 
 check:: all tst_cache tst_dev tst_devname tst_devno tst_getsize tst_probe \
  tst_read tst_resolve tst_save tst_tag test_probe tst_types
@@ -138,33 +141,29 @@
 	./tst_types
 
 blkid.pc: $(srcdir)/blkid.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/blkid/blkid.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/blkid/blkid.pc ./config.status
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/blkid"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/blkid"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
 		$(DESTDIR)$(includedir)/blkid $(DESTDIR)$(libdir)/pkgconfig
 
 install:: all installdirs 
-	@echo "	INSTALL_DATA $(libdir)/libblkid.a"
-	@$(INSTALL_DATA) libblkid.a $(DESTDIR)$(libdir)/libblkid.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libblkid.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libblkid.a
-	@set -e; for i in $(HFILES); do \
-	  echo "	INSTALL_DATA $(includedir)/blkid/$$i"; \
-	  $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/blkid/$$i; \
-	done
-	@set -e; for i in $(HFILES_IN); do \
+	$(E) "	INSTALL_DATA $(libdir)/libblkid.a"
+	$(Q) $(INSTALL_DATA) libblkid.a $(DESTDIR)$(libdir)/libblkid.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libblkid.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libblkid.a
+	$(Q) set -e; for i in $(HFILES_IN); do \
 		echo "	INSTALL_DATA $(includedir)/blkid/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(includedir)/blkid/$$i; \
 	done
-	@for i in $(SMANPAGES); do \
+	$(Q) for i in $(SMANPAGES); do \
 		echo "	INSTALL_DATA $(man3dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$i; \
 	done
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/blkid.pc"
-	@$(INSTALL_DATA) blkid.pc $(DESTDIR)$(libdir)/pkgconfig/blkid.pc
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/blkid.pc"
+	$(Q) $(INSTALL_DATA) blkid.pc $(DESTDIR)$(libdir)/pkgconfig/blkid.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libblkid.a \
@@ -179,45 +178,32 @@
 		tst_devno tst_getsize tst_probe tst_read tst_resolve tst_save \
 		tst_tag tst_types tests/*.out tests/*.ok \
 		tests/*.img results test_probe core profiled/* \
-		checker/* blkid_types.h ../libblkid.a ../libblkid_p.a \
+		checker/* blkid.h blkid_types.h ../libblkid.a ../libblkid_p.a \
 		$(SMANPAGES) blkid
-	-rmdir tests
+	@echo rmdir tests/tmp tests
+	@(rmdir tests/tmp tests 2> /dev/null ; exit 0)
 
 mostlyclean:: clean
 distclean:: clean
 	$(RM) -f .depend Makefile blkid.pc \
 		$(srcdir)/TAGS $(srcdir)/Makefile.in.old
 
-$(OBJS): subdirs
+$(OBJS): subdirs $(HFILES_IN)
 
 # +++ Dependency line eater +++
 # 
 # Makefile dependencies follow.  This must be the last section in
 # the Makefile.in file
 #
-cache.o: $(srcdir)/cache.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-dev.o: $(srcdir)/dev.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-devname.o: $(srcdir)/devname.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-devno.o: $(srcdir)/devno.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-getsize.o: $(srcdir)/getsize.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-llseek.o: $(srcdir)/llseek.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-probe.o: $(srcdir)/probe.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h \
- $(top_srcdir)/lib/uuid/uuid.h $(srcdir)/probe.h
-read.o: $(srcdir)/read.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h \
- $(top_srcdir)/lib/uuid/uuid.h
-resolve.o: $(srcdir)/resolve.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-save.o: $(srcdir)/save.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-tag.o: $(srcdir)/tag.c $(srcdir)/blkidP.h $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(srcdir)/list.h
-version.o: $(srcdir)/version.c $(srcdir)/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(top_srcdir)/version.h
+cache.o: $(srcdir)/cache.c $(srcdir)/list.h
+dev.o: $(srcdir)/dev.c $(srcdir)/list.h
+devname.o: $(srcdir)/devname.c $(srcdir)/list.h
+devno.o: $(srcdir)/devno.c $(srcdir)/list.h
+getsize.o: $(srcdir)/getsize.c $(srcdir)/list.h
+llseek.o: $(srcdir)/llseek.c $(srcdir)/list.h
+probe.o: $(srcdir)/probe.c $(srcdir)/list.h $(srcdir)/probe.h
+read.o: $(srcdir)/read.c $(srcdir)/list.h
+resolve.o: $(srcdir)/resolve.c $(srcdir)/list.h
+save.o: $(srcdir)/save.c $(srcdir)/list.h
+tag.o: $(srcdir)/tag.c $(srcdir)/list.h
+version.o: $(srcdir)/version.c $(top_srcdir)/version.h
diff --git a/lib/blkid/blkid.h b/lib/blkid/blkid.h
index f38a235..81f3098 100644
--- a/lib/blkid/blkid.h
+++ b/lib/blkid/blkid.h
@@ -90,7 +90,7 @@
 extern int blkid_tag_next(blkid_tag_iterate iterate,
 			      const char **type, const char **value);
 extern void blkid_tag_iterate_end(blkid_tag_iterate iterate);
-extern int blkid_dev_has_tag(blkid_dev dev, const char *type, 
+extern int blkid_dev_has_tag(blkid_dev dev, const char *type,
 			     const char *value);
 extern blkid_dev blkid_find_dev_with_tag(blkid_cache cache,
 					 const char *type,
diff --git a/lib/blkid/blkid.h.in b/lib/blkid/blkid.h.in
new file mode 100644
index 0000000..81f3098
--- /dev/null
+++ b/lib/blkid/blkid.h.in
@@ -0,0 +1,110 @@
+/*
+ * blkid.h - Interface for libblkid, a library to identify block devices
+ *
+ * Copyright (C) 2001 Andreas Dilger
+ * Copyright (C) 2003 Theodore Ts'o
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License.
+ * %End-Header%
+ */
+
+#ifndef _BLKID_BLKID_H
+#define _BLKID_BLKID_H
+
+#include <sys/types.h>
+#include <blkid/blkid_types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLKID_VERSION	"1.0.0"
+#define BLKID_DATE	"12-Feb-2003"
+
+typedef struct blkid_struct_dev *blkid_dev;
+typedef struct blkid_struct_cache *blkid_cache;
+typedef __s64 blkid_loff_t;
+
+typedef struct blkid_struct_tag_iterate *blkid_tag_iterate;
+typedef struct blkid_struct_dev_iterate *blkid_dev_iterate;
+
+/*
+ * Flags for blkid_get_dev
+ *
+ * BLKID_DEV_CREATE	Create an empty device structure if not found
+ * 			in the cache.
+ * BLKID_DEV_VERIFY	Make sure the device structure corresponds
+ * 			with reality.
+ * BLKID_DEV_FIND	Just look up a device entry, and return NULL
+ * 			if it is not found.
+ * BLKID_DEV_NORMAL	Get a valid device structure, either from the
+ * 			cache or by probing the device.
+ */
+#define BLKID_DEV_FIND		0x0000
+#define BLKID_DEV_CREATE	0x0001
+#define BLKID_DEV_VERIFY	0x0002
+#define BLKID_DEV_NORMAL	(BLKID_DEV_CREATE | BLKID_DEV_VERIFY)
+
+/* cache.c */
+extern void blkid_put_cache(blkid_cache cache);
+extern int blkid_get_cache(blkid_cache *cache, const char *filename);
+extern void blkid_gc_cache(blkid_cache cache);
+
+/* dev.c */
+extern const char *blkid_dev_devname(blkid_dev dev);
+
+extern blkid_dev_iterate blkid_dev_iterate_begin(blkid_cache cache);
+extern int blkid_dev_set_search(blkid_dev_iterate iter,
+				char *search_type, char *search_value);
+extern int blkid_dev_next(blkid_dev_iterate iterate, blkid_dev *dev);
+extern void blkid_dev_iterate_end(blkid_dev_iterate iterate);
+
+/* devno.c */
+extern char *blkid_devno_to_devname(dev_t devno);
+
+/* devname.c */
+extern int blkid_probe_all(blkid_cache cache);
+extern int blkid_probe_all_new(blkid_cache cache);
+extern blkid_dev blkid_get_dev(blkid_cache cache, const char *devname,
+			       int flags);
+
+/* getsize.c */
+extern blkid_loff_t blkid_get_dev_size(int fd);
+
+/* probe.c */
+int blkid_known_fstype(const char *fstype);
+extern blkid_dev blkid_verify(blkid_cache cache, blkid_dev dev);
+
+/* read.c */
+
+/* resolve.c */
+extern char *blkid_get_tag_value(blkid_cache cache, const char *tagname,
+				       const char *devname);
+extern char *blkid_get_devname(blkid_cache cache, const char *token,
+			       const char *value);
+
+/* tag.c */
+extern blkid_tag_iterate blkid_tag_iterate_begin(blkid_dev dev);
+extern int blkid_tag_next(blkid_tag_iterate iterate,
+			      const char **type, const char **value);
+extern void blkid_tag_iterate_end(blkid_tag_iterate iterate);
+extern int blkid_dev_has_tag(blkid_dev dev, const char *type,
+			     const char *value);
+extern blkid_dev blkid_find_dev_with_tag(blkid_cache cache,
+					 const char *type,
+					 const char *value);
+extern int blkid_parse_tag_string(const char *token, char **ret_type,
+				  char **ret_val);
+
+/* version.c */
+extern int blkid_parse_version_string(const char *ver_string);
+extern int blkid_get_library_version(const char **ver_string,
+				     const char **date_string);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BLKID_BLKID_H */
diff --git a/lib/blkid/blkid.pc.in b/lib/blkid/blkid.pc.in
index 510aa84..b984f6d 100644
--- a/lib/blkid/blkid.pc.in
+++ b/lib/blkid/blkid.pc.in
@@ -6,6 +6,6 @@
 Name: blkid
 Description: Block device id library
 Version: @E2FSPROGS_VERSION@
-Requires: uuid @DEVMAPPER_REQ@
-Cflags: -I${includedir} 
-Libs: -L${libdir} -lblkid @DEVMAPPER_PC_LIBS@
+Requires.private: uuid
+Cflags: -I${includedir}/blkid
+Libs: -L${libdir} -lblkid
diff --git a/lib/blkid/blkidP.h b/lib/blkid/blkidP.h
index dfe0eca..e0f11a0 100644
--- a/lib/blkid/blkidP.h
+++ b/lib/blkid/blkidP.h
@@ -105,7 +105,6 @@
 extern char *blkid_strndup(const char *s, const int length);
 
 #define BLKID_CACHE_FILE "/etc/blkid.tab"
-extern const char *blkid_devdirs[];
 
 #define BLKID_ERR_IO	 5
 #define BLKID_ERR_PROC	 9
@@ -153,6 +152,13 @@
 extern void blkid_debug_dump_tag(blkid_tag tag);
 #endif
 
+/* devno.c */
+struct dir_list {
+	char	*name;
+	struct dir_list *next;
+};
+extern void blkid__scan_dir(char *, dev_t, struct dir_list **, char **);
+
 /* lseek.c */
 extern blkid_loff_t blkid_llseek(int fd, blkid_loff_t offset, int whence);
 
diff --git a/lib/blkid/blkid_types.h b/lib/blkid/blkid_types.h
index 3e28712..91c0e96 100644
--- a/lib/blkid/blkid_types.h
+++ b/lib/blkid/blkid_types.h
@@ -63,7 +63,7 @@
 #if (4 == 4)
 typedef	unsigned int	__u32;
 #else
-#if (4 == 4)
+#if (8 == 4)
 typedef	unsigned long	__u32;
 #else
 #if (2 == 4)
@@ -81,7 +81,7 @@
 #if (4 == 4)
 typedef	int		__s32;
 #else
-#if (4 == 4)
+#if (8 == 4)
 typedef	long		__s32;
 #else
 #if (2 == 4)
@@ -99,7 +99,7 @@
 #if (4 == 8)
 typedef unsigned int	__u64;
 #else
-#if (4 == 8)
+#if (8 == 8)
 typedef unsigned long	__u64;
 #else
 #if (8 == 8)
@@ -115,7 +115,7 @@
 #if (4 == 8)
 typedef int		__s64;
 #else
-#if (4 == 8)
+#if (8 == 8)
 typedef long		__s64;
 #else
 #if (8 == 8)
diff --git a/lib/blkid/cache.c b/lib/blkid/cache.c
index 1508d0f..2b81886 100644
--- a/lib/blkid/cache.c
+++ b/lib/blkid/cache.c
@@ -100,14 +100,14 @@
 
 	if (filename && !strlen(filename))
 		filename = 0;
-	if (!filename) 
+	if (!filename)
 		filename = safe_getenv("BLKID_FILE");
 	if (!filename)
 		filename = BLKID_CACHE_FILE;
 	cache->bic_filename = blkid_strdup(filename);
-	
+
 	blkid_read_cache(cache);
-	
+
 	*ret_cache = cache;
 	return 0;
 }
@@ -120,7 +120,7 @@
 	(void) blkid_flush_cache(cache);
 
 	DBG(DEBUG_CACHE, printf("freeing cache struct\n"));
-	
+
 	/* DBG(DEBUG_CACHE, blkid_debug_dump_cache(cache)); */
 
 	while (!list_empty(&cache->bic_devs)) {
@@ -137,7 +137,7 @@
 
 		while (!list_empty(&tag->bit_names)) {
 			blkid_tag bad = list_entry(tag->bit_names.next,
-						   struct blkid_struct_tag, 
+						   struct blkid_struct_tag,
 						   bit_names);
 
 			DBG(DEBUG_CACHE, printf("warning: unfreed tag %s=%s\n",
@@ -146,31 +146,30 @@
 		}
 		blkid_free_tag(tag);
 	}
-	if (cache->bic_filename)
-		free(cache->bic_filename);
-	
+	free(cache->bic_filename);
+
 	free(cache);
 }
 
 void blkid_gc_cache(blkid_cache cache)
 {
-	struct list_head *p;
+	struct list_head *p, *pnext;
 	struct stat st;
 
 	if (!cache)
 		return;
 
-	list_for_each(p, &cache->bic_devs) {
+	list_for_each_safe(p, pnext, &cache->bic_devs) {
 		blkid_dev dev = list_entry(p, struct blkid_struct_dev, bid_devs);
 		if (!p)
 			break;
 		if (stat(dev->bid_name, &st) < 0) {
-			DBG(DEBUG_CACHE, 
+			DBG(DEBUG_CACHE,
 			    printf("freeing %s\n", dev->bid_name));
 			blkid_free_dev(dev);
 			cache->bic_flags |= BLKID_BIC_FL_CHANGED;
 		} else {
-			DBG(DEBUG_CACHE, 
+			DBG(DEBUG_CACHE,
 			    printf("Device %s exists\n", dev->bid_name));
 		}
 	}
diff --git a/lib/blkid/dev.c b/lib/blkid/dev.c
index 770632b..128a869 100644
--- a/lib/blkid/dev.c
+++ b/lib/blkid/dev.c
@@ -34,7 +34,8 @@
 		return;
 
 	DBG(DEBUG_DEV,
-	    printf("  freeing dev %s (%s)\n", dev->bid_name, dev->bid_type));
+	    printf("  freeing dev %s (%s)\n", dev->bid_name, dev->bid_type ?
+		   dev->bid_type : "(null)"));
 	DBG(DEBUG_DEV, blkid_debug_dump_dev(dev));
 
 	list_del(&dev->bid_devs);
@@ -44,8 +45,7 @@
 					   bit_tags);
 		blkid_free_tag(tag);
 	}
-	if (dev->bid_name)
-		free(dev->bid_name);
+	free(dev->bid_name);
 	free(dev);
 }
 
@@ -76,7 +76,7 @@
 	list_for_each(p, &dev->bid_tags) {
 		blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags);
 		if (tag)
-			printf("    tag: %s=\"%s\"\n", tag->bit_name, 
+			printf("    tag: %s=\"%s\"\n", tag->bit_name,
 			       tag->bit_val);
 		else
 			printf("    tag: NULL\n");
@@ -101,7 +101,7 @@
  * This series of functions iterate over all devices in a blkid cache
  */
 #define DEV_ITERATE_MAGIC	0x01a5284c
-	
+
 struct blkid_struct_dev_iterate {
 	int			magic;
 	blkid_cache		cache;
@@ -130,24 +130,20 @@
 {
 	char *new_type, *new_value;
 
-	if (!iter || iter->magic != DEV_ITERATE_MAGIC || !search_type || 
+	if (!iter || iter->magic != DEV_ITERATE_MAGIC || !search_type ||
 	    !search_value)
 		return -1;
 	new_type = malloc(strlen(search_type)+1);
 	new_value = malloc(strlen(search_value)+1);
 	if (!new_type || !new_value) {
-		if (new_type)
-			free(new_type);
-		if (new_value)
-			free(new_value);
+		free(new_type);
+		free(new_value);
 		return -1;
 	}
 	strcpy(new_type, search_type);
 	strcpy(new_value, search_value);
-	if (iter->search_type)
-		free(iter->search_type);
-	if (iter->search_value)
-		free(iter->search_value);
+	free(iter->search_type);
+	free(iter->search_value);
 	iter->search_type = new_type;
 	iter->search_value = new_value;
 	return 0;
@@ -167,8 +163,8 @@
 	while (iter->p != &iter->cache->bic_devs) {
 		dev = list_entry(iter->p, struct blkid_struct_dev, bid_devs);
 		iter->p = iter->p->next;
-		if (iter->search_type && 
-		    !blkid_dev_has_tag(dev, iter->search_type, 
+		if (iter->search_type &&
+		    !blkid_dev_has_tag(dev, iter->search_type,
 				       iter->search_value))
 			continue;
 		*ret_dev = dev;
@@ -219,7 +215,7 @@
 		case 'm':
 			blkid_debug_mask = strtoul (optarg, &tmp, 0);
 			if (*tmp) {
-				fprintf(stderr, "Invalid debug mask: %s\n", 
+				fprintf(stderr, "Invalid debug mask: %s\n",
 					optarg);
 				exit(1);
 			}
diff --git a/lib/blkid/devname.c b/lib/blkid/devname.c
index 29cde8e..b151354 100644
--- a/lib/blkid/devname.c
+++ b/lib/blkid/devname.c
@@ -25,6 +25,7 @@
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
+#include <dirent.h>
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -38,10 +39,6 @@
 
 #include "blkidP.h"
 
-#ifdef HAVE_DEVMAPPER
-#include <libdevmapper.h>
-#endif
-
 /*
  * Find a dev struct in the cache by device name, if available.
  *
@@ -51,7 +48,7 @@
 blkid_dev blkid_get_dev(blkid_cache cache, const char *devname, int flags)
 {
 	blkid_dev dev = NULL, tmp;
-	struct list_head *p;
+	struct list_head *p, *pnext;
 
 	if (!cache || !devname)
 		return NULL;
@@ -61,13 +58,15 @@
 		if (strcmp(tmp->bid_name, devname))
 			continue;
 
-		DBG(DEBUG_DEVNAME, 
+		DBG(DEBUG_DEVNAME,
 		    printf("found devname %s in cache\n", tmp->bid_name));
 		dev = tmp;
 		break;
 	}
 
 	if (!dev && (flags & BLKID_DEV_CREATE)) {
+		if (access(devname, F_OK) < 0)
+			return NULL;
 		dev = blkid_new_dev();
 		if (!dev)
 			return NULL;
@@ -78,14 +77,104 @@
 		cache->bic_flags |= BLKID_BIC_FL_CHANGED;
 	}
 
-	if (flags & BLKID_DEV_VERIFY)
+	if (flags & BLKID_DEV_VERIFY) {
 		dev = blkid_verify(cache, dev);
+		if (!dev || !(dev->bid_flags & BLKID_BID_FL_VERIFIED))
+			return dev;
+		/*
+		 * If the device is verified, then search the blkid
+		 * cache for any entries that match on the type, uuid,
+		 * and label, and verify them; if a cache entry can
+		 * not be verified, then it's stale and so we remove
+		 * it.
+		 */
+		list_for_each_safe(p, pnext, &cache->bic_devs) {
+			blkid_dev dev2;
+			if (!p)
+				break;
+			dev2 = list_entry(p, struct blkid_struct_dev, bid_devs);
+			if (dev2->bid_flags & BLKID_BID_FL_VERIFIED)
+				continue;
+			if (!dev->bid_type || !dev2->bid_type ||
+			    strcmp(dev->bid_type, dev2->bid_type))
+				continue;
+			if (dev->bid_label && dev2->bid_label &&
+			    strcmp(dev->bid_label, dev2->bid_label))
+				continue;
+			if (dev->bid_uuid && dev2->bid_uuid &&
+			    strcmp(dev->bid_uuid, dev2->bid_uuid))
+				continue;
+			if ((dev->bid_label && !dev2->bid_label) ||
+			    (!dev->bid_label && dev2->bid_label) ||
+			    (dev->bid_uuid && !dev2->bid_uuid) ||
+			    (!dev->bid_uuid && dev2->bid_uuid))
+				continue;
+			dev2 = blkid_verify(cache, dev2);
+			if (dev2 && !(dev2->bid_flags & BLKID_BID_FL_VERIFIED))
+				blkid_free_dev(dev2);
+		}
+	}
 	return dev;
 }
 
-#ifdef HAVE_DEVMAPPER
-static int dm_device_is_leaf(const dev_t dev);
-#endif
+/* Directories where we will try to search for device names */
+static const char *dirlist[] = { "/dev", "/devfs", "/devices", NULL };
+
+static int is_dm_leaf(const char *devname)
+{
+	struct dirent	*de, *d_de;
+	DIR		*dir, *d_dir;
+	char		path[256];
+	int		ret = 1;
+
+	if ((dir = opendir("/sys/block")) == NULL)
+		return 0;
+	while ((de = readdir(dir)) != NULL) {
+		if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..") ||
+		    !strcmp(de->d_name, devname) ||
+		    strncmp(de->d_name, "dm-", 3) ||
+		    strlen(de->d_name) > sizeof(path)-32)
+			continue;
+		sprintf(path, "/sys/block/%s/slaves", de->d_name);
+		if ((d_dir = opendir(path)) == NULL)
+			continue;
+		while ((d_de = readdir(d_dir)) != NULL) {
+			if (!strcmp(d_de->d_name, devname)) {
+				ret = 0;
+				break;
+			}
+		}
+		closedir(d_dir);
+		if (!ret)
+			break;
+	}
+	closedir(dir);
+	return ret;
+}
+
+/*
+ * Since 2.6.29 (patch 784aae735d9b0bba3f8b9faef4c8b30df3bf0128) kernel sysfs
+ * provides the real DM device names in /sys/block/<ptname>/dm/name
+ */
+static char *get_dm_name(const char *ptname)
+{
+	FILE	*f;
+	size_t	sz;
+	char	path[256], name[256], *res = NULL;
+
+	snprintf(path, sizeof(path), "/sys/block/%s/dm/name", ptname);
+	if ((f = fopen(path, "r")) == NULL)
+		return NULL;
+
+	/* read "<name>\n" from sysfs */
+	if (fgets(name, sizeof(name), f) && (sz = strlen(name)) > 1) {
+		name[sz - 1] = '\0';
+		snprintf(path, sizeof(path), "/dev/mapper/%s", name);
+		res = blkid_strdup(path);
+	}
+	fclose(f);
+	return res;
+}
 
 /*
  * Probe a single block device to add to the device cache.
@@ -94,35 +183,44 @@
 		      dev_t devno, int pri, int only_if_new)
 {
 	blkid_dev dev = NULL;
-	struct list_head *p;
+	struct list_head *p, *pnext;
 	const char **dir;
 	char *devname = NULL;
 
 	/* See if we already have this device number in the cache. */
-	list_for_each(p, &cache->bic_devs) {
+	list_for_each_safe(p, pnext, &cache->bic_devs) {
 		blkid_dev tmp = list_entry(p, struct blkid_struct_dev,
 					   bid_devs);
-#ifdef HAVE_DEVMAPPER
-		if (!dm_device_is_leaf(devno))
-			continue;
-#endif
 		if (tmp->bid_devno == devno) {
-			if (only_if_new)
+			if (only_if_new && !access(tmp->bid_name, F_OK))
 				return;
 			dev = blkid_verify(cache, tmp);
-			break;
+			if (dev && (dev->bid_flags & BLKID_BID_FL_VERIFIED))
+				break;
+			dev = 0;
 		}
 	}
 	if (dev && dev->bid_devno == devno)
 		goto set_pri;
 
+	/* Try to translate private device-mapper dm-<N> names
+	 * to standard /dev/mapper/<name>.
+	 */
+	if (!strncmp(ptname, "dm-", 3) && isdigit(ptname[3])) {
+		devname = get_dm_name(ptname);
+		if (!devname)
+			blkid__scan_dir("/dev/mapper", devno, 0, &devname);
+		if (devname)
+			goto get_dev;
+	}
+
 	/*
 	 * Take a quick look at /dev/ptname for the device number.  We check
 	 * all of the likely device directories.  If we don't find it, or if
 	 * the stat information doesn't check out, use blkid_devno_to_devname()
 	 * to find it via an exhaustive search for the device major/minor.
 	 */
-	for (dir = blkid_devdirs; *dir; dir++) {
+	for (dir = dirlist; *dir; dir++) {
 		struct stat st;
 		char device[256];
 
@@ -131,205 +229,39 @@
 		    dev->bid_devno == devno)
 			goto set_pri;
 
-		if (stat(device, &st) == 0 && S_ISBLK(st.st_mode) && 
+		if (stat(device, &st) == 0 && S_ISBLK(st.st_mode) &&
 		    st.st_rdev == devno) {
 			devname = blkid_strdup(device);
-			break;
+			goto get_dev;
 		}
 	}
+	/* Do a short-cut scan of /dev/mapper first */
+	if (!devname)
+		devname = get_dm_name(ptname);
+	if (!devname)
+		blkid__scan_dir("/dev/mapper", devno, 0, &devname);
 	if (!devname) {
 		devname = blkid_devno_to_devname(devno);
 		if (!devname)
 			return;
 	}
+get_dev:
 	dev = blkid_get_dev(cache, devname, BLKID_DEV_NORMAL);
 	free(devname);
-
 set_pri:
-	if (!pri && !strncmp(ptname, "md", 2))
-		pri = BLKID_PRI_MD;
-	if (dev)
-		dev->bid_pri = pri;
+	if (dev) {
+		if (pri)
+			dev->bid_pri = pri;
+		else if (!strncmp(dev->bid_name, "/dev/mapper/", 11)) {
+			dev->bid_pri = BLKID_PRI_DM;
+			if (is_dm_leaf(ptname))
+				dev->bid_pri += 5;
+		} else if (!strncmp(ptname, "md", 2))
+			dev->bid_pri = BLKID_PRI_MD;
+ 	}
 	return;
 }
 
-#ifdef HAVE_DEVMAPPER
-static void dm_quiet_log(int level __BLKID_ATTR((unused)), 
-			 const char *file __BLKID_ATTR((unused)), 
-			 int line __BLKID_ATTR((unused)),
-			 const char *f __BLKID_ATTR((unused)), ...)
-{
-	return;
-}
-
-/* 
- * device-mapper support 
- */
-static int dm_device_has_dep(const dev_t dev, const char *name)
-{
-	struct dm_task *task;
-	struct dm_deps *deps;
-	struct dm_info info;
-	unsigned int i;
-	int ret = 0;
-
-	task = dm_task_create(DM_DEVICE_DEPS);
-	if (!task)
-		goto out;
-
-	if (!dm_task_set_name(task, name))
-		goto out;
-
-	if (!dm_task_run(task))
-		goto out;
-
-	if (!dm_task_get_info(task, &info))
-		goto out;
-
-	if  (!info.exists)
-		goto out;
-  
-	deps = dm_task_get_deps(task);
-	if (!deps || deps->count == 0)
-		goto out;
-
-	for (i = 0; i < deps->count; i++) {
-		dev_t dep_dev = deps->device[i];
-
-		if (dev == dep_dev) {
-			ret = 1;
-			goto out;
-		}
-	}
-
-out:
-	if (task)
-		dm_task_destroy(task);
-
-	return ret;
-}
-
-static int dm_device_is_leaf(const dev_t dev)
-{
-	struct dm_task *task;
-	struct dm_names *names;
-	unsigned int next = 0;
-	int n, ret = 1;
-
-	dm_log_init(dm_quiet_log);
-	task = dm_task_create(DM_DEVICE_LIST);
-	if (!task)
-		goto out;
-
-	dm_log_init(0);
-
-	if (!dm_task_run(task))
-		goto out;
-
-	names = dm_task_get_names(task);
-	if (!names || !names->dev)
-		goto out;
-
-	n = 0;
-	do {
-		names = (struct dm_names *) ((char *)names + next);
-
-		if (dm_device_has_dep(dev, names->name))
-			ret = 0;
-
-		next = names->next;
-	} while (next);
-
-out:
-	if (task)
-		dm_task_destroy(task);
-
-	return ret;
-}
-
-static dev_t dm_get_devno(const char *name)
-{
-	struct dm_task *task;
-	struct dm_info info;
-	dev_t ret = 0;
-
-	task = dm_task_create(DM_DEVICE_INFO);
-	if (!task)
-		goto out;
-
-	if (!dm_task_set_name(task, name))
-		goto out;
-
-	if (!dm_task_run(task))
-		goto out;
-
-	if (!dm_task_get_info(task, &info))
-		goto out;
-
-	if (!info.exists)
-		goto out;
-
-	ret = makedev(info.major, info.minor);
-
-out:
-	if (task)
-		dm_task_destroy(task);
-	
-	return ret;
-}
-
-static void dm_probe_all(blkid_cache cache, int only_if_new)
-{
-	struct dm_task *task;
-	struct dm_names *names;
-	unsigned int next = 0;
-	int n;
-
-	dm_log_init(dm_quiet_log);
-	task = dm_task_create(DM_DEVICE_LIST);
-	if (!task)
-		goto out;
-	dm_log_init(0);
-
-	if (!dm_task_run(task))
-		goto out;
-
-	names = dm_task_get_names(task);
-	if (!names || !names->dev)
-		goto out;
-
-	n = 0;
-	do {
-		int rc;
-		char *device = NULL;
-		dev_t dev = 0;
-
-		names = (struct dm_names *) ((char *)names + next);
-
-		rc = asprintf(&device, "mapper/%s", names->name);
-		if (rc < 0)
-			goto try_next;
-
-		dev = dm_get_devno(names->name);
-		if (dev == 0)
-			goto try_next;
-
-		if (!dm_device_is_leaf(dev)) 
-			goto try_next;
-
-		probe_one(cache, device, dev, BLKID_PRI_DM, only_if_new);
-
-try_next:
-		free(device);
-		next = names->next;
-	} while (next);
-
-out:
-	if (task)
-		dm_task_destroy(task);
-}
-#endif /* HAVE_DEVMAPPER */
-
 #define PROC_PARTITIONS "/proc/partitions"
 #define VG_DIR		"/proc/lvm/VGs"
 
@@ -340,7 +272,6 @@
  * safe thing to do?)
  */
 #ifdef VG_DIR
-#include <dirent.h>
 static dev_t lvm_get_devno(const char *lvm_device)
 {
 	FILE *lvf;
@@ -417,7 +348,7 @@
 			DBG(DEBUG_DEVNAME, printf("LVM dev %s: devno 0x%04X\n",
 						  lvm_device,
 						  (unsigned int) dev));
-			probe_one(cache, lvm_device, dev, BLKID_PRI_LVM, 
+			probe_one(cache, lvm_device, dev, BLKID_PRI_LVM,
 				  only_if_new);
 			free(lvm_device);
 		}
@@ -471,6 +402,7 @@
 	unsigned long long sz;
 	int lens[2] = { 0, 0 };
 	int which = 0, last = 0;
+	struct list_head *p, *pnext;
 
 	ptnames[0] = ptname0;
 	ptnames[1] = ptname1;
@@ -483,9 +415,6 @@
 		return 0;
 
 	blkid_read_cache(cache);
-#ifdef HAVE_DEVMAPPER
-	dm_probe_all(cache, only_if_new);
-#endif
 	evms_probe_all(cache, only_if_new);
 #ifdef VG_DIR
 	lvm_probe_all(cache, only_if_new);
@@ -528,12 +457,35 @@
 				   ptname, (unsigned int) devs[which]));
 
 			if (sz > 1)
-				probe_one(cache, ptname, devs[which], 0, 
+				probe_one(cache, ptname, devs[which], 0,
 					  only_if_new);
 			lens[which] = 0;	/* mark as checked */
 		}
 
 		/*
+		 * If last was a whole disk and we just found a partition
+		 * on it, remove the whole-disk dev from the cache if
+		 * it exists.
+		 */
+		if (lens[last] && !strncmp(ptnames[last], ptname, lens[last])) {
+			list_for_each_safe(p, pnext, &cache->bic_devs) {
+				blkid_dev tmp;
+
+				/* find blkid dev for the whole-disk devno */
+				tmp = list_entry(p, struct blkid_struct_dev,
+						 bid_devs);
+				if (tmp->bid_devno == devs[last]) {
+					DBG(DEBUG_DEVNAME,
+						printf("freeing %s\n",
+						       tmp->bid_name));
+					blkid_free_dev(tmp);
+					cache->bic_flags |= BLKID_BIC_FL_CHANGED;
+					break;
+				}
+			}
+			lens[last] = 0;
+		}
+		/*
 		 * If last was not checked because it looked like a whole-disk
 		 * dev, and the device's base name has changed,
 		 * check last as well.
diff --git a/lib/blkid/devno.c b/lib/blkid/devno.c
index 61b34bf..c9f5c92 100644
--- a/lib/blkid/devno.c
+++ b/lib/blkid/devno.c
@@ -33,11 +33,6 @@
 
 #include "blkidP.h"
 
-struct dir_list {
-	char	*name;
-	struct dir_list *next;
-};
-
 char *blkid_strndup(const char *s, int length)
 {
 	char *ret;
@@ -95,8 +90,8 @@
 	*list = NULL;
 }
 
-static void scan_dir(char *dirname, dev_t devno, struct dir_list **list,
-			    char **devname)
+void blkid__scan_dir(char *dirname, dev_t devno, struct dir_list **list,
+		     char **devname)
 {
 	DIR	*dir;
 	struct dirent *dp;
@@ -127,7 +122,7 @@
 				   path, *devname));
 			break;
 		}
-		if (S_ISDIR(st.st_mode) && !lstat(path, &st) && 
+		if (list && S_ISDIR(st.st_mode) && !lstat(path, &st) &&
 		    S_ISDIR(st.st_mode))
 			add_to_dirlist(path, list);
 	}
@@ -136,7 +131,7 @@
 }
 
 /* Directories where we will try to search for device numbers */
-const char *blkid_devdirs[] = { "/devices", "/devfs", "/dev", NULL };
+static const char *devdirs[] = { "/devices", "/devfs", "/dev", NULL };
 
 /*
  * This function finds the pathname to a block device with a given
@@ -153,7 +148,7 @@
 	 * Add the starting directories to search in reverse order of
 	 * importance, since we are using a stack...
 	 */
-	for (dir = blkid_devdirs; *dir; dir++)
+	for (dir = devdirs; *dir; dir++)
 		add_to_dirlist(*dir, &list);
 
 	while (list) {
@@ -161,7 +156,7 @@
 
 		list = list->next;
 		DBG(DEBUG_DEVNO, printf("directory %s\n", current->name));
-		scan_dir(current->name, devno, &new_list, &devname);
+		blkid__scan_dir(current->name, devno, &new_list, &devname);
 		free(current->name);
 		free(current);
 		if (devname)
@@ -180,13 +175,13 @@
 
 	if (!devname) {
 		DBG(DEBUG_DEVNO,
-		    printf("blkid: couldn't find devno 0x%04lx\n", 
+		    printf("blkid: couldn't find devno 0x%04lx\n",
 			   (unsigned long) devno));
 	} else {
 		DBG(DEBUG_DEVNO,
 		    printf("found devno 0x%04llx as %s\n", (long long)devno, devname));
 	}
-	
+
 
 	return devname;
 }
@@ -227,8 +222,7 @@
 	}
 	printf("Looking for device 0x%04llx\n", (long long)devno);
 	devname = blkid_devno_to_devname(devno);
-	if (devname)
-		free(devname);
+	free(devname);
 	return 0;
 }
 #endif
diff --git a/lib/blkid/getsize.c b/lib/blkid/getsize.c
index 04a0cd8..10ba7ec 100644
--- a/lib/blkid/getsize.c
+++ b/lib/blkid/getsize.c
@@ -186,7 +186,7 @@
 #ifdef TEST_PROGRAM
 int main(int argc, char **argv)
 {
-	blkid_loff_t bytes;
+	long long bytes;
 	int	fd;
 
 	if (argc < 2) {
@@ -199,7 +199,7 @@
 		perror(argv[0]);
 
 	bytes = blkid_get_dev_size(fd);
-	printf("Device %s has %Ld 1k blocks.\n", argv[1], 
+	printf("Device %s has %Ld 1k blocks.\n", argv[1],
 	       (unsigned long long) bytes >> 10);
 
 	return 0;
diff --git a/lib/blkid/libblkid.3.in b/lib/blkid/libblkid.3.in
index 31958d1..bd24cb1 100644
--- a/lib/blkid/libblkid.3.in
+++ b/lib/blkid/libblkid.3.in
@@ -1,9 +1,9 @@
 .\" Copyright 2001 Andreas Dilger (adilger@turbolinux.com)
 .\"
 .\" This man page was created for libblkid.so.1.0 from e2fsprogs-1.24.
-.\" 
+.\"
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .\" Created  Wed Sep 14 12:02:12 2001, Andreas Dilger
 .TH LIBBLKID 3 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
@@ -35,8 +35,8 @@
 In situations where one is getting information about a single known device,
 it does not impact performance whether the cache is used or not (unless you
 are not able to read the block device directly).  If you are dealing with
-multiple devices use of the cache is highly recommended (even if empty) as
-devices will be scanned at most one time, and the on-disk cache will be
+multiple devices, use of the cache is highly recommended (even if empty) as
+devices will be scanned at most one time and the on-disk cache will be
 updated if possible.  There is rarely a reason not to use the cache.
 .P
 In some cases (modular kernels), block devices are not even visible until
@@ -51,7 +51,7 @@
 from Ted Ts'o.  The library was subsequently heavily modified by Ted Ts'o.
 .SH FILES
 .TP
-.I /etc/blkid.tab 
+.I /etc/blkid.tab
 Caches data extracted from each recognized block device.
 .SH AVAILABILITY
 .B libblkid
@@ -65,11 +65,11 @@
 .RS
 Free Software Foundation, Inc.
 .br
-59 Temple Place
+51 Franklin St
 .br
-Suite 330
+Fifth Floor
 .br
-Boston, MA  02111-1307  USA
+Boston, MA  02110-1301  USA
 .RE
 .PP
 or visit
@@ -77,10 +77,4 @@
 http://www.gnu.org/licenses/licenses.html#LGPL
 .UE
 .SH "SEE ALSO"
-.BR blkid_get_cache (3),
-.BR blkid_put_cache (3),
-.BR blkid_get_dev (3),
-.BR blkid_probe_all (3),
-.BR blkid_get_devname (3),
-.BR blkid_get_tag_value (3),
-.BR blkid.tab (7)
+.BR blkid (8)
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 4a5c7e7..6b75732 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -26,7 +26,9 @@
 #ifdef HAVE_SYS_MKDEV_H
 #include <sys/mkdev.h>
 #endif
+#ifdef __linux__
 #include <sys/utsname.h>
+#endif
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
@@ -47,7 +49,7 @@
 	return 0;
 }
 
-static unsigned char *get_buffer(struct blkid_probe *pr, 
+static unsigned char *get_buffer(struct blkid_probe *pr,
 			  blkid_loff_t off, size_t len)
 {
 	ssize_t		ret_read;
@@ -96,7 +98,7 @@
 	struct mdp_superblock_s *md;
 	blkid_loff_t		offset;
 	char			buf[4096];
-	
+
 	if (fd < 0)
 		return -BLKID_ERR_PARAM;
 
@@ -139,7 +141,7 @@
 	struct ext2_super_block *es = (struct ext2_super_block *) buf;
 	const char *label = 0;
 
-	DBG(DEBUG_PROBE, printf("ext2_sb.compat = %08X:%08X:%08X\n", 
+	DBG(DEBUG_PROBE, printf("ext2_sb.compat = %08X:%08X:%08X\n",
 		   blkid_le32(es->s_feature_compat),
 		   blkid_le32(es->s_feature_incompat),
 		   blkid_le32(es->s_feature_ro_compat)));
@@ -203,10 +205,11 @@
  */
 static int check_for_modules(const char *fs_name)
 {
+#ifdef __linux__
 	struct utsname	uts;
 	FILE		*f;
-	char		buf[1024], *cp, *t;
-	int		i;
+	char		buf[1024], *cp;
+	int		namesz;
 
 	if (uname(&uts))
 		return (0);
@@ -215,6 +218,9 @@
 	f = fopen(buf, "r");
 	if (!f)
 		return (0);
+
+	namesz = strlen(fs_name);
+
 	while (!feof(f)) {
 		if (!fgets(buf, sizeof(buf), f))
 			break;
@@ -224,26 +230,76 @@
 			continue;
 		if ((cp = strrchr(buf, '/')) != NULL)
 			cp++;
-		i = strlen(cp);
-		if (i > 3) {
-			t = cp + i - 3;
-			if (!strcmp(t, ".ko"))
-				*t = 0;
-		}
-		if (!strcmp(cp, fs_name))
+		else
+			cp = buf;
+		if (!strncmp(cp, fs_name, namesz) &&
+		    (!strcmp(cp + namesz, ".ko") ||
+		     !strcmp(cp + namesz, ".ko.gz"))) {
+			fclose(f);
 			return (1);
+		}
 	}
 	fclose(f);
+#endif
 	return (0);
 }
 
+static int linux_version_code()
+{
+#ifdef __linux__
+	struct utsname	ut;
+	static		version_code = -1;
+	int		major, minor, rev;
+	char		*endptr;
+	const char 	*cp;
+
+	if (version_code > 0)
+		return version_code;
+
+	if (uname(&ut))
+		return 0;
+	cp = ut.release;
+
+	major = strtol(cp, &endptr, 10);
+	if (cp == endptr || *endptr != '.')
+		return 0;
+	cp = endptr + 1;
+	minor = strtol(cp, &endptr, 10);
+	if (cp == endptr || *endptr != '.')
+		return 0;
+	cp = endptr + 1;
+	rev = strtol(cp, &endptr, 10);
+	if (cp == endptr)
+		return 0;
+	version_code = (((major * 256) + minor) * 256) + rev;
+	return version_code;
+#else
+	return 0;
+#endif
+}
+
+#define EXT4_SUPPORTS_EXT2 (2 * 65536 + 6*256 + 29)
+
+static int system_supports_ext2(void)
+{
+	static time_t	last_check = 0;
+	static int	ret = -1;
+	time_t		now = time(0);
+
+	if (ret != -1 || (now - last_check) < 5)
+		return ret;
+	last_check = now;
+	ret = (fs_proc_check("ext2") || check_for_modules("ext2"));
+	return ret;
+}
+
 static int system_supports_ext4(void)
 {
 	static time_t	last_check = 0;
 	static int	ret = -1;
 	time_t		now = time(0);
 
-	if (ret != -1 || (last_check - now) < 5)
+	if (ret != -1 || (now - last_check) < 5)
 		return ret;
 	last_check = now;
 	ret = (fs_proc_check("ext4") || check_for_modules("ext4"));
@@ -256,7 +312,7 @@
 	static int	ret = -1;
 	time_t		now = time(0);
 
-	if (ret != -1 || (last_check - now) < 5)
+	if (ret != -1 || (now - last_check) < 5)
 		return ret;
 	last_check = now;
 	ret = (fs_proc_check("ext4dev") || check_for_modules("ext4dev"));
@@ -275,10 +331,17 @@
 	    EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
 		return -BLKID_ERR_PARAM;
 
-	/* ext4dev requires a journal */
+	/* 
+	 * If the filesystem does not have a journal and ext2 and ext4
+	 * is not present, then force this to be detected as an
+	 * ext4dev filesystem.
+	 */
 	if (!(blkid_le32(es->s_feature_compat) &
-	      EXT3_FEATURE_COMPAT_HAS_JOURNAL))
-		return -BLKID_ERR_PARAM;
+	      EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+	    !system_supports_ext2() && !system_supports_ext4() &&
+	    system_supports_ext4dev() &&
+	    linux_version_code() >= EXT4_SUPPORTS_EXT2)
+		goto force_ext4dev;
 
 	/*
 	 * If the filesystem is marked as OK for use by in-development
@@ -296,6 +359,7 @@
 	} else
 		return -BLKID_ERR_PARAM;
 
+force_ext4dev:
     	get_ext2_info(probe->dev, id, buf);
 	return 0;
 }
@@ -307,14 +371,20 @@
 	es = (struct ext2_super_block *)buf;
 
 	/* Distinguish from jbd */
-	if (blkid_le32(es->s_feature_incompat) & 
+	if (blkid_le32(es->s_feature_incompat) &
 	    EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
 		return -BLKID_ERR_PARAM;
 
-	/* ext4 requires journal */
+	/* 
+	 * If the filesystem does not have a journal and ext2 is not
+	 * present, then force this to be detected as an ext2
+	 * filesystem.
+	 */
 	if (!(blkid_le32(es->s_feature_compat) &
-	      EXT3_FEATURE_COMPAT_HAS_JOURNAL))
-		return -BLKID_ERR_PARAM;
+	      EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+	    !system_supports_ext2() && system_supports_ext4() &&
+	    linux_version_code() >= EXT4_SUPPORTS_EXT2)
+		goto force_ext4;
 
 	/* Ext4 has at least one feature which ext3 doesn't understand */
 	if (!(blkid_le32(es->s_feature_ro_compat) &
@@ -323,6 +393,7 @@
 	      EXT3_FEATURE_INCOMPAT_UNSUPPORTED))
 		return -BLKID_ERR_PARAM;
 
+force_ext4:
 	/*
 	 * If the filesystem is a OK for use by in-development
 	 * filesystem code, and ext4dev is supported or ext4 is not
@@ -347,10 +418,6 @@
 	struct ext2_super_block *es;
 	es = (struct ext2_super_block *)buf;
 
-	/* Distinguish from ext4dev */
-	if (blkid_le32(es->s_flags) & EXT2_FLAGS_TEST_FILESYS)
-		return -BLKID_ERR_PARAM;
-
 	/* ext3 requires journal */
 	if (!(blkid_le32(es->s_feature_compat) &
 	      EXT3_FEATURE_COMPAT_HAS_JOURNAL))
@@ -386,6 +453,15 @@
 	     EXT2_FEATURE_INCOMPAT_UNSUPPORTED))
 		return -BLKID_ERR_PARAM;
 
+	/* 
+	 * If ext2 is not present, but ext4 or ext4dev are, then
+	 * disclaim we are ext2
+	 */
+	if (!system_supports_ext2() &&
+	    (system_supports_ext4() || system_supports_ext4dev()) &&
+	    linux_version_code() >= EXT4_SUPPORTS_EXT2)
+		return -BLKID_ERR_PARAM;
+
 	get_ext2_info(probe->dev, id, buf);
 	return 0;
 }
@@ -419,13 +495,13 @@
 	for (i = 0; i < count; i++) {
 		if (dir[i].name[0] == 0x00)
 			break;
-		
+
 		if ((dir[i].name[0] == FAT_ENTRY_FREE) ||
 		    (dir[i].cluster_high != 0 || dir[i].cluster_low != 0) ||
 		    ((dir[i].attr & FAT_ATTR_MASK) == FAT_ATTR_LONG_NAME))
 			continue;
 
-		if ((dir[i].attr & (FAT_ATTR_VOLUME_ID | FAT_ATTR_DIR)) == 
+		if ((dir[i].attr & (FAT_ATTR_VOLUME_ID | FAT_ATTR_DIR)) ==
 		    FAT_ATTR_VOLUME_ID) {
 			return dir[i].name;
 		}
@@ -436,7 +512,7 @@
 /* FAT label extraction from the root directory taken from Kay
  * Sievers's volume_id library */
 static int probe_fat(struct blkid_probe *probe,
-		      struct blkid_magic *id __BLKID_ATTR((unused)), 
+		      struct blkid_magic *id __BLKID_ATTR((unused)),
 		      unsigned char *buf)
 {
 	struct vfat_super_block *vs = (struct vfat_super_block *) buf;
@@ -484,11 +560,11 @@
 	if (ms->ms_fat_length) {
 		/* the label may be an attribute in the root directory */
 		root_start = (reserved + fat_size) * sector_size;
-		root_dir_entries = vs->vs_dir_entries[0] + 
+		root_dir_entries = vs->vs_dir_entries[0] +
 			(vs->vs_dir_entries[1] << 8);
 
 		buf_size = root_dir_entries * sizeof(struct vfat_dir_entry);
-		dir = (struct vfat_dir_entry *) get_buffer(probe, root_start, 
+		dir = (struct vfat_dir_entry *) get_buffer(probe, root_start,
 							   buf_size);
 		if (dir)
 			vol_label = search_fat_label(dir, root_dir_entries);
@@ -497,7 +573,7 @@
 			vol_label = ms->ms_label;
 		vol_serno = ms->ms_serno;
 
-		blkid_set_tag(probe->dev, "SEC_TYPE", "msdos", 
+		blkid_set_tag(probe->dev, "SEC_TYPE", "msdos",
 			      sizeof("msdos"));
 	} else {
 		/* Search the FAT32 root dir for the label attribute */
@@ -511,10 +587,10 @@
 			int count;
 
 			next_sect_off = (next - 2) * vs->vs_cluster_size;
-			next_off = (start_data_sect + next_sect_off) * 
+			next_off = (start_data_sect + next_sect_off) *
 				sector_size;
 
-			dir = (struct vfat_dir_entry *) 
+			dir = (struct vfat_dir_entry *)
 				get_buffer(probe, next_off, buf_size);
 			if (dir == NULL)
 				break;
@@ -526,7 +602,7 @@
 				break;
 
 			/* get FAT entry */
-			fat_entry_off = (reserved * sector_size) + 
+			fat_entry_off = (reserved * sector_size) +
 				(next * sizeof(__u32));
 			buf = get_buffer(probe, fat_entry_off, buf_size);
 			if (buf == NULL)
@@ -563,35 +639,48 @@
  * [7-Jul-2005, Karel Zak <kzak@redhat.com>]
  */
 static int probe_fat_nomagic(struct blkid_probe *probe,
-			     struct blkid_magic *id __BLKID_ATTR((unused)), 
+			     struct blkid_magic *id __BLKID_ATTR((unused)),
 			     unsigned char *buf)
 {
-	struct vfat_super_block *vs;
+	struct msdos_super_block *ms;
 
-	vs = (struct vfat_super_block *)buf;
+	ms = (struct msdos_super_block *)buf;
 
 	/* heads check */
-	if (vs->vs_heads == 0)
+	if (ms->ms_heads == 0)
 		return 1;
 
-	/* cluster size check*/	
-	if (vs->vs_cluster_size == 0 ||
-	    (vs->vs_cluster_size & (vs->vs_cluster_size-1)))
+	/* cluster size check*/
+	if (ms->ms_cluster_size == 0 ||
+	    (ms->ms_cluster_size & (ms->ms_cluster_size-1)))
 		return 1;
 
 	/* media check */
-	if (vs->vs_media < 0xf8 && vs->vs_media != 0xf0)
+	if (ms->ms_media < 0xf8 && ms->ms_media != 0xf0)
 		return 1;
 
 	/* fat counts(Linux kernel expects at least 1 FAT table) */
-	if (!vs->vs_fats)
+	if (!ms->ms_fats)
+		return 1;
+
+	/*
+	 * OS/2 and apparently DFSee will place a FAT12/16-like
+	 * pseudo-superblock in the first 512 bytes of non-FAT
+	 * filesystems --- at least JFS and HPFS, and possibly others.
+	 * So we explicitly check for those filesystems at the
+	 * FAT12/16 filesystem magic field identifier, and if they are
+	 * present, we rule this out as a FAT filesystem, despite the
+	 * FAT-like pseudo-header.
+         */
+	if ((memcmp(ms->ms_magic, "JFS     ", 8) == 0) ||
+	    (memcmp(ms->ms_magic, "HPFS    ", 8) == 0))
 		return 1;
 
 	return probe_fat(probe, id, buf);
 }
 
 static int probe_ntfs(struct blkid_probe *probe,
-		      struct blkid_magic *id __BLKID_ATTR((unused)), 
+		      struct blkid_magic *id __BLKID_ATTR((unused)),
 		      unsigned char *buf)
 {
 	struct ntfs_super_block *ns;
@@ -618,7 +707,7 @@
 	if (ns->cluster_per_mft_record < 0)
 		mft_record_size = 1 << (0-ns->cluster_per_mft_record);
 	else
-		mft_record_size = ns->cluster_per_mft_record * 
+		mft_record_size = ns->cluster_per_mft_record *
 			sectors_per_cluster * bytes_per_sector;
 	nr_clusters = blkid_le64(ns->number_of_sectors) / sectors_per_cluster;
 
@@ -626,7 +715,7 @@
 	    (blkid_le64(ns->mft_mirror_cluster_location) > nr_clusters))
 		return 1;
 
-	off = blkid_le64(ns->mft_mirror_cluster_location) * 
+	off = blkid_le64(ns->mft_mirror_cluster_location) *
 		bytes_per_sector * sectors_per_cluster;
 
 	buf_mft = get_buffer(probe, off, mft_record_size);
@@ -636,7 +725,7 @@
 	if (memcmp(buf_mft, "FILE", 4))
 		return 1;
 
-	off = blkid_le64(ns->mft_cluster_location) * bytes_per_sector * 
+	off = blkid_le64(ns->mft_cluster_location) * bytes_per_sector *
 		sectors_per_cluster;
 
 	buf_mft = get_buffer(probe, off, mft_record_size);
@@ -659,7 +748,7 @@
 
 	attr_off = blkid_le16(mft->attrs_offset);
 	label_str[0] = 0;
-	
+
 	while (1) {
 		attr = (struct file_attribute *) (buf_mft + attr_off);
 		attr_len = blkid_le16(attr->len);
@@ -699,7 +788,7 @@
 
 
 static int probe_xfs(struct blkid_probe *probe,
-		     struct blkid_magic *id __BLKID_ATTR((unused)), 
+		     struct blkid_magic *id __BLKID_ATTR((unused)),
 		     unsigned char *buf)
 {
 	struct xfs_super_block *xs;
@@ -743,7 +832,7 @@
 }
 
 static int probe_reiserfs4(struct blkid_probe *probe,
-			   struct blkid_magic *id __BLKID_ATTR((unused)), 
+			   struct blkid_magic *id __BLKID_ATTR((unused)),
 			   unsigned char *buf)
 {
 	struct reiser4_super_block *rs4 = (struct reiser4_super_block *) buf;
@@ -752,14 +841,14 @@
 	if (strlen((char *) rs4->rs4_label))
 		label = rs4->rs4_label;
 	set_uuid(probe->dev, rs4->rs4_uuid, 0);
-	blkid_set_tag(probe->dev, "LABEL", (const char *) label, 
+	blkid_set_tag(probe->dev, "LABEL", (const char *) label,
 		      sizeof(rs4->rs4_label));
 
 	return 0;
 }
 
 static int probe_jfs(struct blkid_probe *probe,
-		     struct blkid_magic *id __BLKID_ATTR((unused)), 
+		     struct blkid_magic *id __BLKID_ATTR((unused)),
 		     unsigned char *buf)
 {
 	struct jfs_super_block *js;
@@ -767,6 +856,16 @@
 
 	js = (struct jfs_super_block *)buf;
 
+	if (blkid_le32(js->js_bsize) != (1 << blkid_le16(js->js_l2bsize)))
+		return 1;
+
+	if (blkid_le32(js->js_pbsize) != (1 << blkid_le16(js->js_l2pbsize)))
+		return 1;
+
+	if ((blkid_le16(js->js_l2bsize) - blkid_le16(js->js_l2pbsize)) !=
+	    blkid_le16(js->js_l2bfactor))
+		return 1;
+
 	if (strlen((char *) js->js_label))
 		label = (char *) js->js_label;
 	blkid_set_tag(probe->dev, "LABEL", label, sizeof(js->js_label));
@@ -774,11 +873,26 @@
 	return 0;
 }
 
+static int probe_zfs(struct blkid_probe *probe, struct blkid_magic *id,
+		     unsigned char *buf)
+{
+#if 0
+	char *vdev_label;
+	const char *pool_name = 0;
+
+	/* read nvpair data for pool name, pool GUID (complex) */
+	blkid_set_tag(probe->dev, "LABEL", pool_name, sizeof(pool_name));
+	set_uuid(probe->dev, pool_guid, 0);
+#endif
+	return 0;
+}
+
 static int probe_luks(struct blkid_probe *probe,
 		       struct blkid_magic *id __BLKID_ATTR((unused)),
 		       unsigned char *buf)
 {
 	char uuid[40];
+
 	/* 168 is the offset to the 40 character uuid:
 	 * http://luks.endorphin.org/LUKS-on-disk-format.pdf */
 	strncpy(uuid, (char *) buf+168, 40);
@@ -787,7 +901,7 @@
 }
 
 static int probe_romfs(struct blkid_probe *probe,
-		       struct blkid_magic *id __BLKID_ATTR((unused)), 
+		       struct blkid_magic *id __BLKID_ATTR((unused)),
 		       unsigned char *buf)
 {
 	struct romfs_super_block *ros;
@@ -802,7 +916,7 @@
 }
 
 static int probe_cramfs(struct blkid_probe *probe,
-			struct blkid_magic *id __BLKID_ATTR((unused)), 
+			struct blkid_magic *id __BLKID_ATTR((unused)),
 			unsigned char *buf)
 {
 	struct cramfs_super_block *csb;
@@ -826,7 +940,7 @@
 }
 
 static int probe_swap1(struct blkid_probe *probe,
-		       struct blkid_magic *id __BLKID_ATTR((unused)),
+		       struct blkid_magic *id,
 		       unsigned char *buf __BLKID_ATTR((unused)))
 {
 	struct swap_id_block *sws;
@@ -842,10 +956,15 @@
 	if (!sws)
 		return 1;
 
+	/* check for wrong version or zeroed pagecount, for sanity */
+	if (!memcmp(id->bim_magic, "SWAPSPACE2", id->bim_len) &&
+			(sws->sws_version != 1 || sws->sws_lastpage == 0))
+		return 1;
+
 	/* arbitrary sanity check.. is there any garbage down there? */
 	if (sws->sws_pad[32] == 0 && sws->sws_pad[33] == 0)  {
 		if (sws->sws_volume[0])
-			blkid_set_tag(probe->dev, "LABEL", sws->sws_volume, 
+			blkid_set_tag(probe->dev, "LABEL", sws->sws_volume,
 				      sizeof(sws->sws_volume));
 		if (sws->sws_uuid[0])
 			set_uuid(probe->dev, sws->sws_uuid, 0);
@@ -854,7 +973,7 @@
 }
 
 static int probe_iso9660(struct blkid_probe *probe,
-			 struct blkid_magic *id __BLKID_ATTR((unused)), 
+			 struct blkid_magic *id __BLKID_ATTR((unused)),
 			 unsigned char *buf)
 {
 	struct iso_volume_descriptor *iso;
@@ -863,7 +982,7 @@
 	iso = (struct iso_volume_descriptor *) buf;
 	label = iso->volume_id;
 
-	blkid_set_tag(probe->dev, "LABEL", (const char *) label, 
+	blkid_set_tag(probe->dev, "LABEL", (const char *) label,
 		      figure_label_len(label, 32));
 	return 0;
 }
@@ -874,7 +993,7 @@
 		 "NSR03", "TEA01", 0 };
 
 static int probe_udf(struct blkid_probe *probe,
-		     struct blkid_magic *id __BLKID_ATTR((unused)), 
+		     struct blkid_magic *id __BLKID_ATTR((unused)),
 		     unsigned char *buf __BLKID_ATTR((unused)))
 {
 	int j, bs;
@@ -884,7 +1003,7 @@
 	/* determine the block size by scanning in 2K increments
 	   (block sizes larger than 2K will be null padded) */
 	for (bs = 1; bs < 16; bs++) {
-		isosb = (struct iso_volume_descriptor *) 
+		isosb = (struct iso_volume_descriptor *)
 			get_buffer(probe, bs*2048+32768, sizeof(isosb));
 		if (!isosb)
 			return 1;
@@ -895,8 +1014,8 @@
 	/* Scan up to another 64 blocks looking for additional VSD's */
 	for (j = 1; j < 64; j++) {
 		if (j > 1) {
-			isosb = (struct iso_volume_descriptor *) 
-				get_buffer(probe, j*bs*2048+32768, 
+			isosb = (struct iso_volume_descriptor *)
+				get_buffer(probe, j*bs*2048+32768,
 					   sizeof(isosb));
 			if (!isosb)
 				return 1;
@@ -917,7 +1036,7 @@
 }
 
 static int probe_ocfs(struct blkid_probe *probe,
-		      struct blkid_magic *id __BLKID_ATTR((unused)), 
+		      struct blkid_magic *id __BLKID_ATTR((unused)),
 		      unsigned char *buf)
 {
 	struct ocfs_volume_header ovh;
@@ -932,7 +1051,7 @@
 		blkid_set_tag(probe->dev,"SEC_TYPE","ocfs1",sizeof("ocfs1"));
 	else if (major >= 9)
 		blkid_set_tag(probe->dev,"SEC_TYPE","ntocfs",sizeof("ntocfs"));
-	
+
 	blkid_set_tag(probe->dev, "LABEL", ovl.label, ocfslabellen(ovl));
 	blkid_set_tag(probe->dev, "MOUNT", ovh.mount, ocfsmountlen(ovh));
 	set_uuid(probe->dev, ovl.vol_id, 0);
@@ -940,7 +1059,7 @@
 }
 
 static int probe_ocfs2(struct blkid_probe *probe,
-		       struct blkid_magic *id __BLKID_ATTR((unused)), 
+		       struct blkid_magic *id __BLKID_ATTR((unused)),
 		       unsigned char *buf)
 {
 	struct ocfs2_super_block *osb;
@@ -953,7 +1072,7 @@
 }
 
 static int probe_oracleasm(struct blkid_probe *probe,
-			   struct blkid_magic *id __BLKID_ATTR((unused)), 
+			   struct blkid_magic *id __BLKID_ATTR((unused)),
 			   unsigned char *buf)
 {
 	struct oracle_asm_disk_label *dl;
@@ -975,9 +1094,9 @@
 
 	if (blkid_be32(sbd->sb_fs_format) == GFS_FORMAT_FS &&
 	    blkid_be32(sbd->sb_multihost_format) == GFS_FORMAT_MULTI)
-	{	
+	{
 		blkid_set_tag(probe->dev, "UUID", 0, 0);
-	
+
 		if (strlen(sbd->sb_locktable))
 			label = sbd->sb_locktable;
 		blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable));
@@ -997,9 +1116,9 @@
 
 	if (blkid_be32(sbd->sb_fs_format) == GFS2_FORMAT_FS &&
 	    blkid_be32(sbd->sb_multihost_format) == GFS2_FORMAT_MULTI)
-	{	
+	{
 		blkid_set_tag(probe->dev, "UUID", 0, 0);
-	
+
 		if (strlen(sbd->sb_locktable))
 			label = sbd->sb_locktable;
 		blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable));
@@ -1008,17 +1127,178 @@
 	return 1;
 }
 
-static int probe_hfsplus(struct blkid_probe *probe __BLKID_ATTR((unused)),
+static void unicode_16be_to_utf8(unsigned char *str, int out_len,
+				 const unsigned char *buf, int in_len)
+{
+	int i, j;
+	unsigned int c;
+
+	for (i = j = 0; i + 2 <= in_len; i += 2) {
+		c = (buf[i] << 8) | buf[i+1];
+		if (c == 0) {
+			str[j] = '\0';
+			break;
+		} else if (c < 0x80) {
+			if (j+1 >= out_len)
+				break;
+			str[j++] = (unsigned char) c;
+		} else if (c < 0x800) {
+			if (j+2 >= out_len)
+				break;
+			str[j++] = (unsigned char) (0xc0 | (c >> 6));
+			str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+		} else {
+			if (j+3 >= out_len)
+				break;
+			str[j++] = (unsigned char) (0xe0 | (c >> 12));
+			str[j++] = (unsigned char) (0x80 | ((c >> 6) & 0x3f));
+			str[j++] = (unsigned char) (0x80 | (c & 0x3f));
+		}
+	}
+	str[j] = '\0';
+}
+
+static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
 			 struct blkid_magic *id __BLKID_ATTR((unused)),
 			 unsigned char *buf)
 {
-	struct hfs_mdb *sbd = (struct hfs_mdb *)buf;
+	struct hfs_mdb *hfs = (struct hfs_mdb *) buf;
+	char	uuid_str[17];
+	__u64	uuid;
+
+	if ((memcmp(hfs->embed_sig, "H+", 2) == 0) ||
+	    (memcmp(hfs->embed_sig, "HX", 2) == 0))
+		return 1;	/* Not hfs, but an embedded HFS+ */
+
+	uuid = blkid_le64(*((unsigned long long *) hfs->finder_info.id));
+	if (uuid) {
+		sprintf(uuid_str, "%016llX", uuid);
+		blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
+	}
+	blkid_set_tag(probe->dev, "LABEL", hfs->label, hfs->label_len);
+	return 0;
+}
+
+
+static int probe_hfsplus(struct blkid_probe *probe,
+			 struct blkid_magic *id,
+			 unsigned char *buf)
+{
+	struct hfsplus_extent extents[HFSPLUS_EXTENT_COUNT];
+	struct hfsplus_bnode_descriptor *descr;
+	struct hfsplus_bheader_record *bnode;
+	struct hfsplus_catalog_key *key;
+	struct hfsplus_vol_header *hfsplus;
+	struct hfs_mdb *sbd = (struct hfs_mdb *) buf;
+	unsigned int alloc_block_size;
+	unsigned int alloc_first_block;
+	unsigned int embed_first_block;
+	unsigned int off = 0;
+	unsigned int blocksize;
+	unsigned int cat_block;
+	unsigned int ext_block_start;
+	unsigned int ext_block_count;
+	unsigned int record_count;
+	unsigned int leaf_node_head;
+	unsigned int leaf_node_count;
+	unsigned int leaf_node_size;
+	unsigned int leaf_block;
+	unsigned int label_len;
+	int ext;
+	__u64 leaf_off, uuid;
+	char	uuid_str[17], label[512];
 
 	/* Check for a HFS+ volume embedded in a HFS volume */
-	if (memcmp(sbd->embed_sig, "H+", 2) == 0)
+	if (memcmp(sbd->signature, "BD", 2) == 0) {
+		if ((memcmp(sbd->embed_sig, "H+", 2) != 0) &&
+		    (memcmp(sbd->embed_sig, "HX", 2) != 0))
+			/* This must be an HFS volume, so fail */
+			return 1;
+
+		alloc_block_size = blkid_be32(sbd->al_blk_size);
+		alloc_first_block = blkid_be16(sbd->al_bl_st);
+		embed_first_block = blkid_be16(sbd->embed_startblock);
+		off = (alloc_first_block * 512) +
+			(embed_first_block * alloc_block_size);
+		buf = get_buffer(probe, off + (id->bim_kboff * 1024),
+				 sizeof(sbd));
+		if (!buf)
+			return 1;
+
+		hfsplus = (struct hfsplus_vol_header *) buf;
+	}
+
+	hfsplus = (struct hfsplus_vol_header *) buf;
+
+	if ((memcmp(hfsplus->signature, "H+", 2) != 0) &&
+	    (memcmp(hfsplus->signature, "HX", 2) != 0))
+		return 1;
+
+	uuid = blkid_le64(*((unsigned long long *) hfsplus->finder_info.id));
+	if (uuid) {
+		sprintf(uuid_str, "%016llX", uuid);
+		blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
+	}
+
+	blocksize = blkid_be32(hfsplus->blocksize);
+	memcpy(extents, hfsplus->cat_file.extents, sizeof(extents));
+	cat_block = blkid_be32(extents[0].start_block);
+
+	buf = get_buffer(probe, off + (cat_block * blocksize), 0x2000);
+	if (!buf)
 		return 0;
 
-	return 1;
+	bnode = (struct hfsplus_bheader_record *)
+		&buf[sizeof(struct hfsplus_bnode_descriptor)];
+
+	leaf_node_head = blkid_be32(bnode->leaf_head);
+	leaf_node_size = blkid_be16(bnode->node_size);
+	leaf_node_count = blkid_be32(bnode->leaf_count);
+	if (leaf_node_count == 0)
+		return 0;
+
+	leaf_block = (leaf_node_head * leaf_node_size) / blocksize;
+
+	/* get physical location */
+	for (ext = 0; ext < HFSPLUS_EXTENT_COUNT; ext++) {
+		ext_block_start = blkid_be32(extents[ext].start_block);
+		ext_block_count = blkid_be32(extents[ext].block_count);
+		if (ext_block_count == 0)
+			return 0;
+
+		/* this is our extent */
+		if (leaf_block < ext_block_count)
+			break;
+
+		leaf_block -= ext_block_count;
+	}
+	if (ext == HFSPLUS_EXTENT_COUNT)
+		return 0;
+
+	leaf_off = (ext_block_start + leaf_block) * blocksize;
+
+	buf = get_buffer(probe, off + leaf_off, leaf_node_size);
+	if (!buf)
+		return 0;
+
+	descr = (struct hfsplus_bnode_descriptor *) buf;
+	record_count = blkid_be16(descr->num_recs);
+	if (record_count == 0)
+		return 0;
+
+	if (descr->type != HFS_NODE_LEAF)
+		return 0;
+
+	key = (struct hfsplus_catalog_key *)
+		&buf[sizeof(struct hfsplus_bnode_descriptor)];
+
+	if (blkid_be32(key->parent_id) != HFSPLUS_POR_CNID)
+		return 0;
+
+	label_len = blkid_be16(key->unicode_len) * 2;
+	unicode_16be_to_utf8(label, sizeof(label), key->unicode, label_len);
+	blkid_set_tag(probe->dev, "LABEL", label, 0);
+	return 0;
 }
 
 #define LVM2_LABEL_SIZE 512
@@ -1042,12 +1322,11 @@
 }
 
 static int probe_lvm2(struct blkid_probe *probe,
-			struct blkid_magic *id __BLKID_ATTR((unused)),
+			struct blkid_magic *id,
 			unsigned char *buf)
 {
-	int sector = (id->bim_kboff) << 1;;
-	struct lvm2_pv_label_header *label;
-	label = (struct lvm2_pv_label_header *)buf;
+	int sector = (id->bim_kboff) << 1;
+	struct lvm2_pv_label_header *label= (struct lvm2_pv_label_header *)buf;
 	char *p, *q, uuid[40];
 	unsigned int i, b;
 
@@ -1088,15 +1367,22 @@
 
 	return 0;
 }
-/*
- * BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined
- * in the type_array table below + bim_kbalign.
- *
- * When probing for a lot of magics, we handle everything in 1kB buffers so
- * that we don't have to worry about reading each combination of block sizes.
- */
-#define BLKID_BLK_OFFS	64	/* currently reiserfs */
 
+static int probe_btrfs(struct blkid_probe *probe,
+			struct blkid_magic *id,
+			unsigned char *buf)
+{
+	struct btrfs_super_block *bs;
+	const char *label = 0;
+
+	bs = (struct btrfs_super_block *)buf;
+
+	if (strlen(bs->label))
+		label = bs->label;
+	blkid_set_tag(probe->dev, "LABEL", label, sizeof(bs->label));
+	set_uuid(probe->dev, bs->fsid, 0);
+	return 0;
+}
 /*
  * Various filesystem magics that we can check for.  Note that kboff and
  * sboff are in kilobytes and bytes respectively.  All magics are in
@@ -1147,9 +1433,14 @@
   { "iso9660",	32,	 1,  5, "CD001",		probe_iso9660 },
   { "iso9660",	32,	 9,  5, "CDROM",		probe_iso9660 },
   { "jfs",	32,	 0,  4, "JFS1",			probe_jfs },
+  { "zfs",       8,	 0,  8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
+  { "zfs",       8,	 0,  8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
+  { "zfs",     264,	 0,  8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
+  { "zfs",     264,	 0,  8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
   { "hfsplus",	 1,	 0,  2, "BD",			probe_hfsplus },
-  { "hfsplus",	 1,	 0,  2, "H+",			0 },
-  { "hfs",	 1,	 0,  2, "BD",			0 },
+  { "hfsplus",	 1,	 0,  2, "H+",			probe_hfsplus },
+  { "hfsplus",	 1,	 0,  2, "HX",			probe_hfsplus },
+  { "hfs",	 1,	 0,  2, "BD",			probe_hfs },
   { "ufs",	 8,  0x55c,  4, "T\031\001\000",	0 },
   { "hpfs",	 8,	 0,  4, "I\350\225\371",	0 },
   { "sysv",	 0,  0x3f8,  4, "\020~\030\375",	0 },
@@ -1157,22 +1448,27 @@
   { "swap",	 0,  0xff6, 10, "SWAPSPACE2",		probe_swap1 },
   { "swsuspend", 0,  0xff6,  9, "S1SUSPEND",		probe_swap1 },
   { "swsuspend", 0,  0xff6,  9, "S2SUSPEND",		probe_swap1 },
+  { "swsuspend", 0,  0xff6,  9, "ULSUSPEND",		probe_swap1 },
   { "swap",	 0, 0x1ff6, 10, "SWAP-SPACE",		probe_swap0 },
   { "swap",	 0, 0x1ff6, 10, "SWAPSPACE2",		probe_swap1 },
   { "swsuspend", 0, 0x1ff6,  9, "S1SUSPEND",		probe_swap1 },
   { "swsuspend", 0, 0x1ff6,  9, "S2SUSPEND",		probe_swap1 },
+  { "swsuspend", 0, 0x1ff6,  9, "ULSUSPEND",		probe_swap1 },
   { "swap",	 0, 0x3ff6, 10, "SWAP-SPACE",		probe_swap0 },
   { "swap",	 0, 0x3ff6, 10, "SWAPSPACE2",		probe_swap1 },
   { "swsuspend", 0, 0x3ff6,  9, "S1SUSPEND",		probe_swap1 },
   { "swsuspend", 0, 0x3ff6,  9, "S2SUSPEND",		probe_swap1 },
+  { "swsuspend", 0, 0x3ff6,  9, "ULSUSPEND",		probe_swap1 },
   { "swap",	 0, 0x7ff6, 10, "SWAP-SPACE",		probe_swap0 },
   { "swap",	 0, 0x7ff6, 10, "SWAPSPACE2",		probe_swap1 },
   { "swsuspend", 0, 0x7ff6,  9, "S1SUSPEND",		probe_swap1 },
   { "swsuspend", 0, 0x7ff6,  9, "S2SUSPEND",		probe_swap1 },
+  { "swsuspend", 0, 0x7ff6,  9, "ULSUSPEND",		probe_swap1 },
   { "swap",	 0, 0xfff6, 10, "SWAP-SPACE",		probe_swap0 },
   { "swap",	 0, 0xfff6, 10, "SWAPSPACE2",		probe_swap1 },
   { "swsuspend", 0, 0xfff6,  9, "S1SUSPEND",		probe_swap1 },
   { "swsuspend", 0, 0xfff6,  9, "S2SUSPEND",		probe_swap1 },
+  { "swsuspend", 0, 0xfff6,  9, "ULSUSPEND",		probe_swap1 },
   { "ocfs",	 0,	 8,  9,	"OracleCFS",		probe_ocfs },
   { "ocfs2",	 1,	 0,  6,	"OCFSV2",		probe_ocfs2 },
   { "ocfs2",	 2,	 0,  6,	"OCFSV2",		probe_ocfs2 },
@@ -1185,6 +1481,7 @@
   { "lvm2pv",	 0,  0x018,  8, "LVM2 001",		probe_lvm2 },
   { "lvm2pv",	 1,  0x018,  8, "LVM2 001",		probe_lvm2 },
   { "lvm2pv",	 1,  0x218,  8, "LVM2 001",		probe_lvm2 },
+  { "btrfs",	 64,  0x40,  8, "_BHRfS_M",		probe_btrfs },
   {   NULL,	 0,	 0,  0, NULL,			NULL }
 };
 
@@ -1214,28 +1511,40 @@
 	now = time(0);
 	diff = now - dev->bid_time;
 
-	if ((now > dev->bid_time) && (diff > 0) && 
-	    ((diff < BLKID_PROBE_MIN) || 
+	if (stat(dev->bid_name, &st) < 0) {
+		DBG(DEBUG_PROBE,
+		    printf("blkid_verify: error %s (%d) while "
+			   "trying to stat %s\n", strerror(errno), errno,
+			   dev->bid_name));
+	open_err:
+		if ((errno == EPERM) || (errno == EACCES) || (errno == ENOENT)) {
+			/* We don't have read permission, just return cache data. */
+			DBG(DEBUG_PROBE, printf("returning unverified data for %s\n",
+						dev->bid_name));
+			return dev;
+		}
+		blkid_free_dev(dev);
+		return NULL;
+	}
+
+	if ((now >= dev->bid_time) &&
+	    (st.st_mtime <= dev->bid_time) &&
+	    ((diff < BLKID_PROBE_MIN) ||
 	     (dev->bid_flags & BLKID_BID_FL_VERIFIED &&
 	      diff < BLKID_PROBE_INTERVAL)))
 		return dev;
 
 	DBG(DEBUG_PROBE,
-	    printf("need to revalidate %s (time since last check %llu)\n", 
-		   dev->bid_name, (unsigned long long)diff));
+	    printf("need to revalidate %s (cache time %lu, stat time %lu,\n\t"
+		   "time since last check %lu)\n",
+		   dev->bid_name, (unsigned long)dev->bid_time,
+		   (unsigned long)st.st_mtime, (unsigned long)diff));
 
-	if (((probe.fd = open(dev->bid_name, O_RDONLY)) < 0) ||
-	    (fstat(probe.fd, &st) < 0)) {
-		if (probe.fd >= 0) close(probe.fd);
-		if (errno != EPERM) {
-			blkid_free_dev(dev);
-			return NULL;
-		}
-		/* We don't have read permission, just return cache data. */
-		DBG(DEBUG_PROBE,
-		    printf("returning unverified data for %s\n",
-			   dev->bid_name));
-		return dev;
+	if ((probe.fd = open(dev->bid_name, O_RDONLY)) < 0) {
+		DBG(DEBUG_PROBE, printf("blkid_verify: error %s (%d) while "
+					"opening %s\n", strerror(errno), errno,
+					dev->bid_name));
+		goto open_err;
 	}
 
 	probe.cache = cache;
@@ -1243,12 +1552,12 @@
 	probe.sbbuf = 0;
 	probe.buf = 0;
 	probe.buf_max = 0;
-	
+
 	/*
 	 * Iterate over the type array.  If we already know the type,
 	 * then try that first.  If it doesn't work, then blow away
 	 * the type information, and try again.
-	 * 
+	 *
 	 */
 try_again:
 	type = 0;
@@ -1271,7 +1580,7 @@
 		if (!buf)
 			continue;
 
-		if (memcmp(id->bim_magic, buf + (id->bim_sboff&0x3ff),
+		if (memcmp(id->bim_magic, buf + (id->bim_sboff & 0x3ff),
 			   id->bim_len))
 			continue;
 
@@ -1301,7 +1610,7 @@
 		dev = 0;
 		goto found_type;
 	}
-		
+
 found_type:
 	if (dev && type) {
 		dev->bid_devno = st.st_rdev;
@@ -1310,16 +1619,14 @@
 		cache->bic_flags |= BLKID_BIC_FL_CHANGED;
 
 		blkid_set_tag(dev, "TYPE", type, 0);
-				
+
 		DBG(DEBUG_PROBE, printf("%s: devno 0x%04llx, type %s\n",
 			   dev->bid_name, (long long)st.st_rdev, type));
 	}
 
-	if (probe.sbbuf)
-		free(probe.sbbuf);
-	if (probe.buf)
-		free(probe.buf);
-	if (probe.fd >= 0) 
+	free(probe.sbbuf);
+	free(probe.buf);
+	if (probe.fd >= 0)
 		close(probe.fd);
 
 	return dev;
@@ -1363,7 +1670,7 @@
 		printf("LABEL='%s'\n", dev->bid_label);
 	if (dev->bid_uuid)
 		printf("UUID='%s'\n", dev->bid_uuid);
-	
+
 	blkid_free_dev(dev);
 	return (0);
 }
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index b3cc26b..37fc9c0 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -30,7 +30,7 @@
 	size_t			buf_max;
 };
 
-typedef int (*blkid_probe_t)(struct blkid_probe *probe, 
+typedef int (*blkid_probe_t)(struct blkid_probe *probe,
 			     struct blkid_magic *id, unsigned char *buf);
 
 struct blkid_magic {
@@ -181,10 +181,13 @@
 	unsigned char	js_magic[4];
 	__u32		js_version;
 	__u64		js_size;
-	__u32		js_bsize;
-	__u32		js_dummy1;
-	__u32		js_pbsize;
-	__u32		js_dummy2[27];
+	__u32		js_bsize;	/* 4: aggregate block size in bytes */
+	__u16		js_l2bsize;	/* 2: log2 of s_bsize */
+	__u16		js_l2bfactor;	/* 2: log2(s_bsize/hardware block size) */
+	__u32		js_pbsize;	/* 4: hardware/LVM block size in bytes */
+	__u16		js_l2pbsize;	/* 2: log2 of s_pbsize */
+	__u16 		js_pad;		/* 2: padding necessary for alignment */
+	__u32		js_dummy2[26];
 	unsigned char	js_uuid[16];
 	unsigned char	js_label[16];
 	unsigned char	js_loguuid[16];
@@ -344,7 +347,7 @@
 
 struct ocfs_volume_label {
 	unsigned char	disk_lock[48];
-	char		label[64];	
+	char		label[64];
 	unsigned char	label_len[2];
 	unsigned char  vol_id[16];
 	unsigned char  vol_id_len[2];
@@ -429,15 +432,15 @@
 	__u32 sb_fs_format;
 	__u32 sb_multihost_format;
 	__u32  __pad0;  /* Was superblock flags in gfs1 */
-	
+
 	__u32 sb_bsize;
 	__u32 sb_bsize_shift;
 	__u32 __pad1;   /* Was journal segment size in gfs1 */
-	
+
 	struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
 	struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
 	struct gfs2_inum sb_root_dir;
-	
+
 	char sb_lockproto[GFS_LOCKNAME_LEN];
 	char sb_locktable[GFS_LOCKNAME_LEN];
 	/* In gfs1, quota and license dinodes followed */
@@ -531,6 +534,78 @@
         __u16        embed_blockcount;
 } __attribute__((packed));
 
+
+#define HFS_NODE_LEAF			0xff
+#define HFSPLUS_POR_CNID		1
+
+struct hfsplus_bnode_descriptor {
+	__u32		next;
+	__u32		prev;
+	__u8		type;
+	__u8		height;
+	__u16		num_recs;
+	__u16		reserved;
+} __attribute__((packed));
+
+struct hfsplus_bheader_record {
+	__u16		depth;
+	__u32		root;
+	__u32		leaf_count;
+	__u32		leaf_head;
+	__u32		leaf_tail;
+	__u16		node_size;
+} __attribute__((packed));
+
+struct hfsplus_catalog_key {
+	__u16	key_len;
+	__u32	parent_id;
+	__u16	unicode_len;
+	__u8		unicode[255 * 2];
+} __attribute__((packed));
+
+struct hfsplus_extent {
+	__u32		start_block;
+	__u32		block_count;
+} __attribute__((packed));
+
+#define HFSPLUS_EXTENT_COUNT		8
+struct hfsplus_fork {
+	__u64		total_size;
+	__u32		clump_size;
+	__u32		total_blocks;
+	struct hfsplus_extent extents[HFSPLUS_EXTENT_COUNT];
+} __attribute__((packed));
+
+struct hfsplus_vol_header {
+	__u8		signature[2];
+	__u16		version;
+	__u32		attributes;
+	__u32		last_mount_vers;
+	__u32		reserved;
+	__u32		create_date;
+	__u32		modify_date;
+	__u32		backup_date;
+	__u32		checked_date;
+	__u32		file_count;
+	__u32		folder_count;
+	__u32		blocksize;
+	__u32		total_blocks;
+	__u32		free_blocks;
+	__u32		next_alloc;
+	__u32		rsrc_clump_sz;
+	__u32		data_clump_sz;
+	__u32		next_cnid;
+	__u32		write_count;
+	__u64		encodings_bmp;
+	struct hfs_finder_info finder_info;
+	struct hfsplus_fork alloc_file;
+	struct hfsplus_fork ext_file;
+	struct hfsplus_fork cat_file;
+	struct hfsplus_fork attr_file;
+	struct hfsplus_fork start_file;
+}  __attribute__((packed));
+
+
 /* this is lvm's label_header & pv_header combined. */
 
 #define LVM2_ID_LEN 32
@@ -546,6 +621,110 @@
 	__u8	pv_uuid[LVM2_ID_LEN];
 } __attribute__ ((packed));
 
+
+/*
+ * this is a very generous portion of the super block, giving us
+ * room to translate 14 chunks with 3 stripes each.
+ */
+#define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
+#define BTRFS_LABEL_SIZE 256
+#define BTRFS_UUID_SIZE 16
+#define BTRFS_FSID_SIZE 16
+#define BTRFS_CSUM_SIZE 32
+
+struct btrfs_dev_item {
+	/* the internal btrfs device id */
+	__u64 devid;
+
+	/* size of the device */
+	__u64 total_bytes;
+
+	/* bytes used */
+	__u64 bytes_used;
+
+	/* optimal io alignment for this device */
+	__u32 io_align;
+
+	/* optimal io width for this device */
+	__u32 io_width;
+
+	/* minimal io size for this device */
+	__u32 sector_size;
+
+	/* type and info about this device */
+	__u64 type;
+
+	/* expected generation for this device */
+	__u64 generation;
+
+	/*
+	 * starting byte of this partition on the device,
+	 * to allowr for stripe alignment in the future
+	 */
+	__u64 start_offset;
+
+	/* grouping information for allocation decisions */
+	__u32 dev_group;
+
+	/* seek speed 0-100 where 100 is fastest */
+	__u8 seek_speed;
+
+	/* bandwidth 0-100 where 100 is fastest */
+	__u8 bandwidth;
+
+	/* btrfs generated uuid for this device */
+	__u8 uuid[BTRFS_UUID_SIZE];
+
+	/* uuid of FS who owns this device */
+	__u8 fsid[BTRFS_UUID_SIZE];
+} __attribute__ ((__packed__));
+
+/*
+ * the super block basically lists the main trees of the FS
+ * it currently lacks any block count etc etc
+ */
+struct btrfs_super_block {
+	__u8 csum[BTRFS_CSUM_SIZE];
+	/* the first 3 fields must match struct btrfs_header */
+	__u8 fsid[BTRFS_FSID_SIZE];    /* FS specific uuid */
+	__u64 bytenr; /* this block number */
+	__u64 flags;
+
+	/* allowed to be different from the btrfs_header from here own down */
+	__u64 magic;
+	__u64 generation;
+	__u64 root;
+	__u64 chunk_root;
+	__u64 log_root;
+
+	/* this will help find the new super based on the log root */
+	__u64 log_root_transid;
+	__u64 total_bytes;
+	__u64 bytes_used;
+	__u64 root_dir_objectid;
+	__u64 num_devices;
+	__u32 sectorsize;
+	__u32 nodesize;
+	__u32 leafsize;
+	__u32 stripesize;
+	__u32 sys_chunk_array_size;
+	__u64 chunk_root_generation;
+	__u64 compat_flags;
+	__u64 compat_ro_flags;
+	__u64 incompat_flags;
+	__u16 csum_type;
+	__u8 root_level;
+	__u8 chunk_root_level;
+	__u8 log_root_level;
+	struct btrfs_dev_item dev_item;
+
+	char label[BTRFS_LABEL_SIZE];
+
+	/* future expansion */
+	__u64 reserved[32];
+	__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
+} __attribute__ ((__packed__));
+
 /*
  * Byte swap functions
  */
@@ -611,7 +790,7 @@
 	return (blkid_swab32(val >> 32) |
 		(((__u64) blkid_swab32(val & 0xFFFFFFFFUL)) << 32));
 }
-#endif 
+#endif
 
 
 
diff --git a/lib/blkid/read.c b/lib/blkid/read.c
index dad6147..ca2798f 100644
--- a/lib/blkid/read.c
+++ b/lib/blkid/read.c
@@ -10,6 +10,8 @@
  * %End-Header%
  */
 
+#define _XOPEN_SOURCE 600 /* for inclusion of strtoull */
+
 #include <stdio.h>
 #include <ctype.h>
 #include <string.h>
@@ -26,7 +28,6 @@
 #include "uuid/uuid.h"
 
 #ifdef HAVE_STRTOULL
-#define __USE_ISOC9X
 #define STRTOULL strtoull /* defined in stdlib.h if you try hard enough */
 #else
 /* FIXME: need to support real strtoull here */
@@ -314,13 +315,12 @@
 		return ret;
 
 	/* Some tags are stored directly in the device struct */
-	if (!strcmp(name, "DEVNO")) 
+	if (!strcmp(name, "DEVNO"))
 		dev->bid_devno = STRTOULL(value, 0, 0);
 	else if (!strcmp(name, "PRI"))
 		dev->bid_pri = strtol(value, 0, 0);
 	else if (!strcmp(name, "TIME"))
-		/* FIXME: need to parse a long long eventually */
-		dev->bid_time = strtol(value, 0, 0);
+		dev->bid_time = STRTOULL(value, 0, 0);
 	else
 		ret = blkid_set_tag(dev, name, value, strlen(value));
 
@@ -401,7 +401,7 @@
 					cache->bic_filename));
 		goto errout;
 	}
-	
+
 	DBG(DEBUG_CACHE, printf("reading cache file %s\n",
 				cache->bic_filename));
 
@@ -463,7 +463,7 @@
 	list_for_each(p, &dev->bid_tags) {
 		blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags);
 		if (tag)
-			printf("    tag: %s=\"%s\"\n", tag->bit_name, 
+			printf("    tag: %s=\"%s\"\n", tag->bit_name,
 			       tag->bit_val);
 		else
 			printf("    tag: NULL\n");
diff --git a/lib/blkid/resolve.c b/lib/blkid/resolve.c
index b4a9308..6c2e268 100644
--- a/lib/blkid/resolve.c
+++ b/lib/blkid/resolve.c
@@ -68,7 +68,7 @@
 
 	if (!token)
 		return NULL;
-	
+
 	if (!cache) {
 		if (blkid_get_cache(&c, NULL) < 0)
 			return NULL;
@@ -97,10 +97,8 @@
 	ret = blkid_strdup(blkid_dev_devname(dev));
 
 out:
-	if (t)
-		free(t);
-	if (v)
-		free(v);
+	free(t);
+	free(v);
 	if (!cache) {
 		blkid_put_cache(c);
 	}
@@ -126,7 +124,7 @@
 		fprintf(stderr, "Couldn't get blkid cache\n");
 		exit(1);
 	}
-	
+
 	if (argv[2]) {
 		value = blkid_get_tag_value(cache, argv[1], argv[2]);
 		printf("%s has tag %s=%s\n", argv[2], argv[1],
diff --git a/lib/blkid/save.c b/lib/blkid/save.c
index 76f2f9e..6802e9d 100644
--- a/lib/blkid/save.c
+++ b/lib/blkid/save.c
@@ -34,7 +34,8 @@
 		return 0;
 
 	DBG(DEBUG_SAVE,
-	    printf("device %s, type %s\n", dev->bid_name, dev->bid_type));
+	    printf("device %s, type %s\n", dev->bid_name, dev->bid_type ?
+		   dev->bid_type : "(null)"));
 
 	fprintf(file,
 		"<device DEVNO=\"0x%04lx\" TIME=\"%ld\"",
@@ -152,8 +153,7 @@
 	}
 
 errout:
-	if (tmp)
-		free(tmp);
+	free(tmp);
 	return ret;
 }
 
@@ -180,7 +180,7 @@
 		exit(1);
 	}
 	cache->bic_filename = blkid_strdup(argv[1]);
-	
+
 	if ((ret = blkid_flush_cache(cache)) < 0) {
 		fprintf(stderr, "error (%d) saving cache\n", ret);
 		exit(1);
diff --git a/lib/blkid/tag.c b/lib/blkid/tag.c
index 44dd86d..639ef89 100644
--- a/lib/blkid/tag.c
+++ b/lib/blkid/tag.c
@@ -10,6 +10,7 @@
  * %End-Header%
  */
 
+#include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -53,10 +54,8 @@
 	list_del(&tag->bit_tags);	/* list of tags for this device */
 	list_del(&tag->bit_names);	/* list of tags with this type */
 
-	if (tag->bit_name)
-		free(tag->bit_name);
-	if (tag->bit_val)
-		free(tag->bit_val);
+	free(tag->bit_name);
+	free(tag->bit_val);
 
 	free(tag);
 }
@@ -82,7 +81,7 @@
 	return NULL;
 }
 
-extern int blkid_dev_has_tag(blkid_dev dev, const char *type, 
+extern int blkid_dev_has_tag(blkid_dev dev, const char *type,
 			     const char *value)
 {
 	blkid_tag		tag;
@@ -124,7 +123,7 @@
 
 /*
  * Set a tag on an existing device.
- * 
+ *
  * If value is NULL, then delete the tagsfrom the device.
  */
 int blkid_set_tag(blkid_dev dev, const char *name,
@@ -140,7 +139,7 @@
 	if (!(val = blkid_strndup(value, vlength)) && value)
 		return -BLKID_ERR_MEM;
 
-	/* 
+	/*
 	 * Certain common tags are linked directly to the device struct
 	 * We need to know what they are before we do anything else because
 	 * the function name parameter might get freed later on.
@@ -173,7 +172,7 @@
 		t->bit_dev = dev;
 
 		list_add_tail(&t->bit_tags, &dev->bid_tags);
-		
+
 		if (dev->bid_cache) {
 			head = blkid_find_head_cache(dev->bid_cache,
 						     t->bit_name);
@@ -193,11 +192,11 @@
 			list_add_tail(&t->bit_names, &head->bit_names);
 		}
 	}
-	
+
 	/* Link common tags directly to the device struct */
 	if (dev_var)
 		*dev_var = val;
-		
+
 	if (dev->bid_cache)
 		dev->bid_cache->bic_flags |= BLKID_BIC_FL_CHANGED;
 	return 0;
@@ -205,8 +204,7 @@
 errout:
 	if (t)
 		blkid_free_tag(t);
-	else if (val)
-		free(val);
+	else free(val);
 	if (head)
 		blkid_free_tag(head);
 	return -BLKID_ERR_MEM;
@@ -273,7 +271,7 @@
  * This series of functions iterate over all tags in a device
  */
 #define TAG_ITERATE_MAGIC	0x01a5284c
-	
+
 struct blkid_struct_tag_iterate {
 	int			magic;
 	blkid_dev		dev;
@@ -300,7 +298,7 @@
 			  const char **type, const char **value)
 {
 	blkid_tag tag;
-	
+
 	*type = 0;
 	*value = 0;
 	if (!iter || iter->magic != TAG_ITERATE_MAGIC ||
@@ -341,9 +339,9 @@
 		return NULL;
 
 	blkid_read_cache(cache);
-	
+
 	DBG(DEBUG_TAG, printf("looking for %s=%s in cache\n", type, value));
-	
+
 try_again:
 	pri = -1;
 	dev = 0;
@@ -351,11 +349,12 @@
 
 	if (head) {
 		list_for_each(p, &head->bit_names) {
-			blkid_tag tmp = list_entry(p, struct blkid_struct_tag, 
+			blkid_tag tmp = list_entry(p, struct blkid_struct_tag,
 						   bit_names);
 
 			if (!strcmp(tmp->bit_val, value) &&
-			    tmp->bit_dev->bid_pri > pri) {
+			    (tmp->bit_dev->bid_pri > pri) &&
+			    !access(tmp->bit_dev->bid_name, F_OK)) {
 				dev = tmp->bit_dev;
 				pri = dev->bid_pri;
 			}
@@ -363,7 +362,7 @@
 	}
 	if (dev && !(dev->bid_flags & BLKID_BID_FL_VERIFIED)) {
 		dev = blkid_verify(cache, dev);
-		if (dev && (dev->bid_flags & BLKID_BID_FL_VERIFIED))
+		if (!dev || (dev && (dev->bid_flags & BLKID_BID_FL_VERIFIED)))
 			goto try_again;
 	}
 
@@ -393,7 +392,7 @@
 void usage(char *prog)
 {
 	fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask] device "
-		"[type value]\n", 
+		"[type value]\n",
 		prog);
 	fprintf(stderr, "\tList all tags for a device and exit\n");
 	exit(1);
@@ -421,7 +420,7 @@
 		case 'm':
 			blkid_debug_mask = strtoul (optarg, &tmp, 0);
 			if (*tmp) {
-				fprintf(stderr, "Invalid debug mask: %s\n", 
+				fprintf(stderr, "Invalid debug mask: %s\n",
 					optarg);
 				exit(1);
 			}
@@ -446,14 +445,14 @@
 
 	dev = blkid_get_dev(cache, devname, flags);
 	if (!dev) {
-		fprintf(stderr, "%s: Can not find device in blkid cache\n", 
+		fprintf(stderr, "%s: Can not find device in blkid cache\n",
 			devname);
 		exit(1);
 	}
 	if (search_type) {
 		found = blkid_dev_has_tag(dev, search_type, search_value);
 		printf("Device %s: (%s, %s) %s\n", blkid_dev_devname(dev),
-		       search_type, search_value ? search_value : "NULL", 
+		       search_type, search_value ? search_value : "NULL",
 		       found ? "FOUND" : "NOT FOUND");
 		return(!found);
 	}
diff --git a/lib/blkid/test_probe.in b/lib/blkid/test_probe.in
index 02d42bb..9b3edf5 100644
--- a/lib/blkid/test_probe.in
+++ b/lib/blkid/test_probe.in
@@ -8,27 +8,49 @@
 	done
 fi
 
-mkdir -p tests
+mkdir -p tests/tmp
 
 for i in $TESTS
 do
 	printf "%s: " $i
-	if test ! -f $SRCDIR/tests/$i.img.bz2 -a \
-		! -f $SRCDIR/tests/$i.results ; 
+	RESULTS=$SRCDIR/tests/$i.results
+	IMAGE_BZ2=$SRCDIR/tests/$i.img.bz2
+	IMAGE=tests/tmp/$i.img.$$
+	if test ! -f $IMAGE_BZ2 -a ! -f $RESULTS ;
 	then
 		echo "non-existent"
 		continue
 	fi
-	bunzip2 < $SRCDIR/tests/$i.img.bz2 > /tmp/test.img.$$
-	./tst_probe /tmp/test.img.$$ > tests/$i.out
-	/bin/rm -f /tmp/test.img.$$ tests/$i.ok tests/$i.failed
-	cmp -s tests/$i.out $SRCDIR/tests/$i.results
+	if [ "$i" = "swap0" ]; then
+		# swap is native-endian, so regenerate before testing
+		dd if=/dev/zero of=$IMAGE bs=16k count=64 2> /dev/null
+		mkswap -v0 $IMAGE > /dev/null
+	elif [ "$i" = "swap1" ]; then
+		# swap is native-endian, so regenerate before testing
+		dd if=/dev/zero of=$IMAGE bs=16k count=64 2> /dev/null
+		# check if mkswap supports the "-U" option
+		if mkswap -h 2>&1 | grep -q -- '-U'; then
+			UUID="-U 8ff8e77f-8553-485e-8656-58be67a81666"
+		else
+			RMUUID="| grep -v UUID"
+			RES_TMP=$SRCDIR/tests/tmp/$i.results
+			grep -v UUID $RESULTS > $RES_TMP
+			RESULTS=$RES_TMP
+		fi
+		mkswap -v1 -L SWAP-TEST $UUID $IMAGE >/dev/null
+	else
+		bunzip2 < $IMAGE_BZ2 > $IMAGE
+	fi
+	eval ./tst_probe $IMAGE $RMUUID > tests/$i.out
+	rm -f $IMAGE tests/$i.ok tests/$i.failed
+	cmp -s tests/$i.out $RESULTS
+	unset RMUUID
 	if [ $? = 0 ];  then
 		echo ok
 		touch tests/$i.ok
 	else	
 		echo failed
-		diff -c tests/$i.out $SRCDIR/tests/$i.results > tests/$i.failed
+		diff -c tests/$i.out $RESULTS > tests/$i.failed
 	fi
 done
 
diff --git a/lib/blkid/tests/zfs.img.bz2 b/lib/blkid/tests/zfs.img.bz2
new file mode 100644
index 0000000..92f445a
--- /dev/null
+++ b/lib/blkid/tests/zfs.img.bz2
Binary files differ
diff --git a/lib/blkid/tests/zfs.results b/lib/blkid/tests/zfs.results
new file mode 100644
index 0000000..c0f8fb9
--- /dev/null
+++ b/lib/blkid/tests/zfs.results
@@ -0,0 +1 @@
+TYPE='zfs'
diff --git a/lib/blkid/tst_types.c b/lib/blkid/tst_types.c
index 8e3055d..3003c8b 100644
--- a/lib/blkid/tst_types.c
+++ b/lib/blkid/tst_types.c
@@ -2,7 +2,7 @@
  * This testing program makes sure the blkid_types header file
  *
  * Copyright (C) 2006 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
diff --git a/lib/blkid/version.c b/lib/blkid/version.c
index 7722916..c9754fa 100644
--- a/lib/blkid/version.c
+++ b/lib/blkid/version.c
@@ -16,7 +16,7 @@
 #include <stdio.h>
 #include <ctype.h>
 
-#include "blkid.h"
+#include <blkid/blkid.h>
 #include "../../version.h"
 
 static const char *lib_version = E2FSPROGS_VERSION;
diff --git a/lib/e2p/Android.mk b/lib/e2p/Android.mk
index d05feb4..79a29e6 100644
--- a/lib/e2p/Android.mk
+++ b/lib/e2p/Android.mk
@@ -1,7 +1,6 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+libext2_e2p_src_files := \
 	feature.c \
 	fgetflags.c \
 	fsetflags.c \
@@ -23,14 +22,9 @@
 	ostype.c \
 	percent.c
 
+libext2_e2p_c_includes := external/e2fsprogs/lib
 
-LOCAL_MODULE := libext2_e2p
-LOCAL_MODULE_TAGS := eng
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
-
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2_e2p_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
@@ -51,8 +45,32 @@
 	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+libext2_e2p_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_e2p_src_files)
+LOCAL_C_INCLUDES := $(libext2_e2p_c_includes)
+LOCAL_CFLAGS := $(libext2_e2p_cflags)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_e2p_system_shared_libraries)
 LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_e2p
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 
 include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_e2p_src_files)
+LOCAL_C_INCLUDES := $(libext2_e2p_c_includes)
+LOCAL_CFLAGS := $(libext2_e2p_cflags)
+LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2_e2p_host
+LOCAL_MODULE_STEM := libext2_e2p
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/e2p/Makefile.in b/lib/e2p/Makefile.in
index 494ecd2..9775a98 100644
--- a/lib/e2p/Makefile.in
+++ b/lib/e2p/Makefile.in
@@ -28,7 +28,7 @@
 		$(srcdir)/ls.c $(srcdir)/mntopts.c $(srcdir)/parse_num.c \
 		$(srcdir)/pe.c $(srcdir)/pf.c $(srcdir)/ps.c \
 		$(srcdir)/setflags.c $(srcdir)/setversion.c $(srcdir)/uuid.c \
-		$(srcdir)/ostype.c $(srcdir)/percent.o
+		$(srcdir)/ostype.c $(srcdir)/percent.c
 HFILES= e2p.h
 
 LIBRARY= libe2p
@@ -53,41 +53,47 @@
 @MAKEFILE_CHECKER@
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 e2p.pc: $(srcdir)/e2p.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/e2p/e2p.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/e2p/e2p.pc ./config.status
 
 tst_ostype: $(srcdir)/ostype.c
-	@echo "	LD $@"
-	@$(CC) -DTEST_PROGRAM -I$(top_srcdir)/lib -o tst_ostype \
+	$(E) "	LD $@"
+	$(Q) $(CC) -DTEST_PROGRAM -I$(top_srcdir)/lib -o tst_ostype \
 		$(srcdir)/ostype.c $(ALL_CFLAGS)
 
-check::	tst_ostype
+tst_feature: $(srcdir)/feature.c
+	$(E) "	LD $@"
+	$(Q) $(CC) -DTEST_PROGRAM -I$(top_srcdir)/lib -o tst_feature \
+		$(srcdir)/feature.c $(ALL_CFLAGS)
+
+check::	tst_ostype tst_feature
 	./tst_ostype
+	./tst_feature
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/e2p"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/e2p"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
 		$(DESTDIR)$(includedir)/e2p $(DESTDIR)$(libdir)/pkgconfig
 
 install:: all installdirs 
-	@echo "	INSTALL_DATA $(libdir)/libe2p.a"
-	@$(INSTALL_DATA) libe2p.a $(DESTDIR)$(libdir)/libe2p.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libe2p.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libe2p.a
-	@set -e; for i in $(HFILES); do \
+	$(E) "	INSTALL_DATA $(libdir)/libe2p.a"
+	$(Q) $(INSTALL_DATA) libe2p.a $(DESTDIR)$(libdir)/libe2p.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libe2p.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libe2p.a
+	$(Q) set -e; for i in $(HFILES); do \
 	  echo "	INSTALL_DATA $(includedir)/e2p/$$i"; \
 	  $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/e2p/$$i; \
 	done
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/e2p.pc"
-	@$(INSTALL_DATA) e2p.pc $(DESTDIR)$(libdir)/pkgconfig/e2p.pc
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/e2p.pc"
+	$(Q) $(INSTALL_DATA) e2p.pc $(DESTDIR)$(libdir)/pkgconfig/e2p.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libe2p.a \
@@ -96,7 +102,7 @@
 
 clean::
 	$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/*
-	$(RM) -f ../libe2p.a ../libe2p_p.a tst_ostype
+	$(RM) -f ../libe2p.a ../libe2p_p.a tst_ostype tst_feature
 
 mostlyclean:: clean
 distclean:: clean
@@ -111,7 +117,13 @@
 # the Makefile.in file
 #
 feature.o: $(srcdir)/feature.c $(srcdir)/e2p.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/ext2fs/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
+ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h
 fgetflags.o: $(srcdir)/fgetflags.c $(srcdir)/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
 fsetflags.o: $(srcdir)/fsetflags.c $(srcdir)/e2p.h \
@@ -148,3 +160,5 @@
  $(srcdir)/e2p.h $(top_srcdir)/lib/ext2fs/ext2_fs.h
 ostype.o: $(srcdir)/ostype.c $(srcdir)/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
+percent.o: $(srcdir)/percent.c $(srcdir)/e2p.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h
diff --git a/lib/e2p/e2p.h b/lib/e2p/e2p.h
index 06e2120..d125e14 100644
--- a/lib/e2p/e2p.h
+++ b/lib/e2p/e2p.h
@@ -11,6 +11,9 @@
 
 #define E2P_FEATURE_NEGATE_FLAG	0x80
 
+#define E2P_FS_FEATURE		0
+#define E2P_JOURNAL_FEATURE	1
+
 /* `options' for print_flags() */
 
 #define PFOPT_LONG  1 /* Must be 1 for compatibility with `int long_format'. */
@@ -34,10 +37,12 @@
 int setversion (int fd, unsigned long version);
 
 const char *e2p_feature2string(int compat, unsigned int mask);
+const char *e2p_jrnl_feature2string(int compat, unsigned int mask);
 int e2p_string2feature(char *string, int *compat, unsigned int *mask);
+int e2p_jrnl_string2feature(char *string, int *compat_type, unsigned int *mask);
 int e2p_edit_feature(const char *str, __u32 *compat_array, __u32 *ok_array);
 int e2p_edit_feature2(const char *str, __u32 *compat_array, __u32 *ok_array,
-		      __u32 *clear_ok_array, int *type_err, 
+		      __u32 *clear_ok_array, int *type_err,
 		      unsigned int *mask_err);
 
 int e2p_is_null_uuid(void *uu);
diff --git a/lib/e2p/e2p.pc.in b/lib/e2p/e2p.pc.in
index 41b4129..98ee9fb 100644
--- a/lib/e2p/e2p.pc.in
+++ b/lib/e2p/e2p.pc.in
@@ -7,5 +7,5 @@
 Description: Ext2fs userpace programs utility library
 Version: @E2FSPROGS_VERSION@
 Requires: 
-Cflags: -I${includedir} 
+Cflags: -I${includedir}/e2p
 Libs: -L${libdir} -le2p
diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c
index e5f3c3d..1da3c7d 100644
--- a/lib/e2p/feature.c
+++ b/lib/e2p/feature.c
@@ -1,11 +1,11 @@
 /*
  * feature.c --- convert between features and strings
- * 
+ *
  * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
- * 
+ *
  */
 
 #include <stdio.h>
@@ -15,6 +15,8 @@
 #include <errno.h>
 
 #include "e2p.h"
+#include <ext2fs/ext2fs.h>
+#include <ext2fs/jfs_user.h>
 
 struct feature {
 	int		compat;
@@ -45,7 +47,9 @@
 	{	E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_HUGE_FILE,
 			"huge_file" },
 	{	E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_GDT_CSUM,
-			"gdt_checksum" },
+			"uninit_bg" },
+	{	E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_GDT_CSUM,
+			"uninit_groups" },
 	{	E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_DIR_NLINK,
 			"dir_nlink" },
 	{	E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE,
@@ -60,16 +64,29 @@
 	{	E2P_FEATURE_INCOMPAT, EXT3_FEATURE_INCOMPAT_JOURNAL_DEV,
 			"journal_dev" },
 	{	E2P_FEATURE_INCOMPAT, EXT3_FEATURE_INCOMPAT_EXTENTS,
+			"extent" },
+	{	E2P_FEATURE_INCOMPAT, EXT3_FEATURE_INCOMPAT_EXTENTS,
 			"extents" },
 	{	E2P_FEATURE_INCOMPAT, EXT2_FEATURE_INCOMPAT_META_BG,
 			"meta_bg" },
-	{	E2P_FEATURE_INCOMPAT, EXT3_FEATURE_INCOMPAT_EXTENTS,
-			"extent" },
 	{	E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_64BIT,
 			"64bit" },
+	{       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_FLEX_BG,
+                        "flex_bg"},
 	{	0, 0, 0 },
 };
 
+static struct feature jrnl_feature_list[] = {
+       {       E2P_FEATURE_COMPAT, JFS_FEATURE_COMPAT_CHECKSUM,
+                       "journal_checksum" },
+
+       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_REVOKE,
+                       "journal_incompat_revoke" },
+       {       E2P_FEATURE_INCOMPAT, JFS_FEATURE_INCOMPAT_ASYNC_COMMIT,
+                       "journal_async_commit" },
+       {       0, 0, 0 },
+};
+
 const char *e2p_feature2string(int compat, unsigned int mask)
 {
 	struct feature  *f;
@@ -144,6 +161,79 @@
 	return 0;
 }
 
+const char *e2p_jrnl_feature2string(int compat, unsigned int mask)
+{
+	struct feature  *f;
+	static char buf[20];
+	char	fchar;
+	int	fnum;
+
+	for (f = jrnl_feature_list; f->string; f++) {
+		if ((compat == f->compat) &&
+		    (mask == f->mask))
+			return f->string;
+	}
+	switch (compat) {
+	case  E2P_FEATURE_COMPAT:
+		fchar = 'C';
+		break;
+	case E2P_FEATURE_INCOMPAT:
+		fchar = 'I';
+		break;
+	case E2P_FEATURE_RO_INCOMPAT:
+		fchar = 'R';
+		break;
+	default:
+		fchar = '?';
+		break;
+	}
+	for (fnum = 0; mask >>= 1; fnum++);
+	sprintf(buf, "FEATURE_%c%d", fchar, fnum);
+	return buf;
+}
+
+int e2p_jrnl_string2feature(char *string, int *compat_type, unsigned int *mask)
+{
+	struct feature  *f;
+	char		*eptr;
+	int		num;
+
+	for (f = jrnl_feature_list; f->string; f++) {
+		if (!strcasecmp(string, f->string)) {
+			*compat_type = f->compat;
+			*mask = f->mask;
+			return 0;
+		}
+	}
+	if (strncasecmp(string, "FEATURE_", 8))
+		return 1;
+
+	switch (string[8]) {
+	case 'c':
+	case 'C':
+		*compat_type = E2P_FEATURE_COMPAT;
+		break;
+	case 'i':
+	case 'I':
+		*compat_type = E2P_FEATURE_INCOMPAT;
+		break;
+	case 'r':
+	case 'R':
+		*compat_type = E2P_FEATURE_RO_INCOMPAT;
+		break;
+	default:
+		return 1;
+	}
+	if (string[9] == 0)
+		return 1;
+	num = strtol(string+9, &eptr, 10);
+	if (num > 32 || num < 0)
+		return 1;
+	if (*eptr)
+		return 1;
+	*mask = 1 << num;
+	return 0;
+}
 static char *skip_over_blanks(char *cp)
 {
 	while (*cp && isspace(*cp))
@@ -161,11 +251,11 @@
 /*
  * Edit a feature set array as requested by the user.  The ok_array,
  * if set, allows the application to limit what features the user is
- * allowed to set or clear using this function.  If clear_ok_array is set, 
+ * allowed to set or clear using this function.  If clear_ok_array is set,
  * then use it tell whether or not it is OK to clear a filesystem feature.
  */
 int e2p_edit_feature2(const char *str, __u32 *compat_array, __u32 *ok_array,
-		      __u32 *clear_ok_array, int *type_err, 
+		      __u32 *clear_ok_array, int *type_err,
 		      unsigned int *mask_err)
 {
 	char		*cp, *buf, *next;
@@ -190,7 +280,7 @@
 		neg = 0;
 		cp = skip_over_blanks(cp);
 		next = skip_over_word(cp);
-		
+
 		if (*next == 0)
 			next = 0;
 		else
@@ -217,11 +307,11 @@
 			break;
 		}
 		if (neg) {
-			if (clear_ok_array && 
+			if (clear_ok_array &&
 			    !(clear_ok_array[compat_type] & mask)) {
 				rc = 1;
 				if (type_err)
-					*type_err = (compat_type | 
+					*type_err = (compat_type |
 						     E2P_FEATURE_NEGATE_FLAG);
 				if (mask_err)
 					*mask_err = mask;
@@ -248,3 +338,47 @@
 {
 	return e2p_edit_feature2(str, compat_array, ok_array, 0, 0, 0);
 }
+
+#ifdef TEST_PROGRAM
+int main(int argc, char **argv)
+{
+	int compat, compat2, i;
+	unsigned int mask, mask2;
+	const char *str;
+	struct feature *f;
+
+	for (i = 0; i < 2; i++) {
+		if (i == 0) {
+			f = feature_list;
+			printf("Feature list:\n");
+		} else {
+			printf("\nJournal feature list:\n");
+			f = jrnl_feature_list;
+		}
+		for (; f->string; f++) {
+			if (i == 0) {
+				e2p_string2feature((char *)f->string, &compat,
+						   &mask);
+				str = e2p_feature2string(compat, mask);
+			} else {
+				e2p_jrnl_string2feature((char *)f->string,
+							&compat, &mask);
+				str = e2p_jrnl_feature2string(compat, mask);
+			}
+
+			printf("\tCompat = %d, Mask = %u, %s\n",
+			       compat, mask, f->string);
+			if (strcmp(f->string, str)) {
+				if (e2p_string2feature((char *) str, &compat2,
+						       &mask2) ||
+				    (compat2 != compat) ||
+				    (mask2 != mask)) {
+					fprintf(stderr, "Failure!\n");
+					exit(1);
+				}
+			}
+		}
+	}
+	exit(0);
+}
+#endif
diff --git a/lib/e2p/fgetflags.c b/lib/e2p/fgetflags.c
index 0aed6c8..372304f 100644
--- a/lib/e2p/fgetflags.c
+++ b/lib/e2p/fgetflags.c
@@ -65,7 +65,7 @@
 #if HAVE_EXT2_IOCTLS
 	int fd, r, f, save_errno = 0;
 
-	if (!stat(name, &buf) &&
+	if (!lstat(name, &buf) &&
 	    !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) {
 		goto notsupp;
 	}
diff --git a/lib/e2p/fsetflags.c b/lib/e2p/fsetflags.c
index 2f1277f..62189c9 100644
--- a/lib/e2p/fsetflags.c
+++ b/lib/e2p/fsetflags.c
@@ -32,8 +32,8 @@
 
 #include "e2p.h"
 
-/* 
- * Deal with lame glibc's that define this function without actually 
+/*
+ * Deal with lame glibc's that define this function without actually
  * implementing it.  Can you say "attractive nuisance", boys and girls?
  * I knew you could!
  */
@@ -71,7 +71,7 @@
 #if HAVE_EXT2_IOCTLS
 	int fd, r, f, save_errno = 0;
 
-	if (!stat(name, &buf) &&
+	if (!lstat(name, &buf) &&
 	    !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) {
 		goto notsupp;
 	}
diff --git a/lib/e2p/getflags.c b/lib/e2p/getflags.c
index acf7a12..7b35246 100644
--- a/lib/e2p/getflags.c
+++ b/lib/e2p/getflags.c
@@ -51,7 +51,7 @@
 #else
 #if HAVE_EXT2_IOCTLS
 	int r, f;
-	
+
 	if (!fstat(fd, &buf) &&
 	    !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode))
 		goto notsupp;
diff --git a/lib/e2p/getversion.c b/lib/e2p/getversion.c
index 38b7d0f..47c588f 100644
--- a/lib/e2p/getversion.c
+++ b/lib/e2p/getversion.c
@@ -25,7 +25,7 @@
 {
 #if HAVE_EXT2_IOCTLS
 	int	r, ver;
-	
+
 	r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
 	*version = ver;
 	return 0;
diff --git a/lib/e2p/hashstr.c b/lib/e2p/hashstr.c
index b257eb2..ece4d05 100644
--- a/lib/e2p/hashstr.c
+++ b/lib/e2p/hashstr.c
@@ -1,11 +1,11 @@
 /*
  * feature.c --- convert between features and strings
- * 
+ *
  * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
- * 
+ *
  */
 
 #include <stdio.h>
diff --git a/lib/e2p/iod.c b/lib/e2p/iod.c
index 808d3a3..1edfc4f 100644
--- a/lib/e2p/iod.c
+++ b/lib/e2p/iod.c
@@ -27,9 +27,9 @@
 {
 	DIR * dir;
 	struct dirent *de, *dep;
-	int	max_len = -1, len;
+	int	max_len = -1, len, ret = 0;
 
-#if HAVE_PATHCONF && defined(_PC_NAME_MAX) 
+#if HAVE_PATHCONF && defined(_PC_NAME_MAX)
 	max_len = pathconf(dir_name, _PC_NAME_MAX);
 #endif
 	if (max_len == -1) {
@@ -56,17 +56,18 @@
 		return -1;
 	}
 	while ((dep = readdir (dir))) {
-		len = sizeof(struct dirent);
 #ifdef HAVE_RECLEN_DIRENT
-		if (len < dep->d_reclen)
-			len = dep->d_reclen;
+		len = dep->d_reclen;
 		if (len > max_len)
 			len = max_len;
+#else
+		len = sizeof(struct dirent);
 #endif
 		memcpy(de, dep, len);
-		(*func) (dir_name, de, private);
+		if ((*func)(dir_name, de, private))
+			ret++;
 	}
 	free(de);
 	closedir(dir);
-	return 0;
+	return ret;
 }
diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c
index d249f88..eb9a772 100644
--- a/lib/e2p/ls.c
+++ b/lib/e2p/ls.c
@@ -6,7 +6,7 @@
  *                                 Universite Pierre et Marie Curie (Paris VI)
  *
  * Copyright (C) 1995, 1996, 1997  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
  */
@@ -227,7 +227,7 @@
 	fprintf(f, "Block size:               %u\n", EXT2_BLOCK_SIZE(sb));
 	fprintf(f, "Fragment size:            %u\n", EXT2_FRAG_SIZE(sb));
 	if (sb->s_reserved_gdt_blocks)
-		fprintf(f, "Reserved GDT blocks:      %u\n", 
+		fprintf(f, "Reserved GDT blocks:      %u\n",
 			sb->s_reserved_gdt_blocks);
 	fprintf(f, "Blocks per group:         %u\n", sb->s_blocks_per_group);
 	fprintf(f, "Fragments per group:      %u\n", sb->s_frags_per_group);
@@ -242,6 +242,9 @@
 	if (sb->s_first_meta_bg)
 		fprintf(f, "First meta block group:   %u\n",
 			sb->s_first_meta_bg);
+	if (sb->s_log_groups_per_flex)
+		fprintf(f, "Flex block group size:    %u\n",
+			1 << sb->s_log_groups_per_flex);
 	if (sb->s_mkfs_time) {
 		tm = sb->s_mkfs_time;
 		fprintf(f, "Filesystem created:       %s", ctime(&tm));
@@ -264,13 +267,37 @@
 		next = sb->s_lastcheck + sb->s_checkinterval;
 		fprintf(f, "Next check after:         %s", ctime(&next));
 	}
+#define POW2(x) ((__u64) 1 << (x))
+	if (sb->s_kbytes_written) {
+		fprintf(f, "Lifetime writes:          ");
+		if (sb->s_kbytes_written < POW2(13))
+			fprintf(f, "%llu kB\n", sb->s_kbytes_written);
+		else if (sb->s_kbytes_written < POW2(23))
+			fprintf(f, "%llu MB\n",
+				(sb->s_kbytes_written + POW2(9)) >> 10);
+		else if (sb->s_kbytes_written < POW2(33))
+			fprintf(f, "%llu GB\n",
+				(sb->s_kbytes_written + POW2(19)) >> 20);
+		else if (sb->s_kbytes_written < POW2(43))
+			fprintf(f, "%llu TB\n",
+				(sb->s_kbytes_written + POW2(29)) >> 30);
+		else
+			fprintf(f, "%llu PB\n",
+				(sb->s_kbytes_written + POW2(39)) >> 40);
+	}
 	fprintf(f, "Reserved blocks uid:      ");
 	print_user(sb->s_def_resuid, f);
 	fprintf(f, "Reserved blocks gid:      ");
 	print_group(sb->s_def_resgid, f);
 	if (sb->s_rev_level >= EXT2_DYNAMIC_REV) {
 		fprintf(f, "First inode:              %d\n", sb->s_first_ino);
-		fprintf(f, "Inode size:		  %d\n", sb->s_inode_size);
+		fprintf(f, "Inode size:	          %d\n", sb->s_inode_size);
+		if (sb->s_min_extra_isize)
+			fprintf(f, "Required extra isize:     %d\n",
+				sb->s_min_extra_isize);
+		if (sb->s_want_extra_isize)
+			fprintf(f, "Desired extra isize:      %d\n",
+				sb->s_want_extra_isize);
 	}
 	if (!e2p_is_null_uuid(sb->s_journal_uuid))
 		fprintf(f, "Journal UUID:             %s\n",
diff --git a/lib/e2p/mntopts.c b/lib/e2p/mntopts.c
index 4e50e9f..51e349d 100644
--- a/lib/e2p/mntopts.c
+++ b/lib/e2p/mntopts.c
@@ -1,11 +1,11 @@
 /*
  * mountopts.c --- convert between default mount options and strings
- * 
+ *
  * Copyright (C) 2002  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
- * 
+ *
  */
 
 #include <stdio.h>
diff --git a/lib/e2p/ostype.c b/lib/e2p/ostype.c
index 826e080..c477535 100644
--- a/lib/e2p/ostype.c
+++ b/lib/e2p/ostype.c
@@ -11,11 +11,11 @@
 #include <string.h>
 #include <stdlib.h>
 
-const char *os_tab[] =
-	{ "Linux", 
-	  "Hurd", 
-	  "Masix", 
-	  "FreeBSD", 
+static const char *os_tab[] =
+	{ "Linux",
+	  "Hurd",
+	  "Masix",
+	  "FreeBSD",
 	  "Lites",
 	  0 };
 
diff --git a/lib/e2p/parse_num.c b/lib/e2p/parse_num.c
index 7e9ee71..7f817d6 100644
--- a/lib/e2p/parse_num.c
+++ b/lib/e2p/parse_num.c
@@ -1,8 +1,8 @@
 /*
- * parse_num.c		- Parse the number of blocks 
+ * parse_num.c		- Parse the number of blocks
  *
  * Copyright (C) 2004,2005  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
  */
@@ -18,25 +18,25 @@
 
 	num = strtoull(arg, &p, 0);
 
-	if (p[0] && p[1]) 
+	if (p[0] && p[1])
 		return 0;
 
 	switch (*p) {		/* Using fall-through logic */
-	case 'T': case 't': 
+	case 'T': case 't':
 		num <<= 10;
-	case 'G': case 'g': 
+	case 'G': case 'g':
 		num <<= 10;
-	case 'M': case 'm': 
+	case 'M': case 'm':
 		num <<= 10;
-	case 'K': case 'k': 
-		num >>= log_block_size; 
+	case 'K': case 'k':
+		num >>= log_block_size;
 		break;
-	case 's': 
+	case 's':
 		num >>= (1+log_block_size);
 		break;
 	case '\0':
 		break;
-	default: 
+	default:
 		return 0;
 	}
 	return num;
diff --git a/lib/e2p/percent.c b/lib/e2p/percent.c
index b8c936d..94d71e5 100644
--- a/lib/e2p/percent.c
+++ b/lib/e2p/percent.c
@@ -2,7 +2,7 @@
  * percent.c		- Take percentage of a number
  *
  * Copyright (C) 2006  Theodore Ts'o <tytso@mit.edu>
- * 
+ *
  * This file can be redistributed under the terms of the GNU Library General
  * Public License
  */
@@ -23,7 +23,7 @@
 		return 0;
 	if (100 % percent == 0)
 		return base / (100 / percent);
-	if (mask & base) 
+	if (mask & base)
 		return (base / 100) * percent;
 	return base * percent / 100;
 }
@@ -49,7 +49,7 @@
 		fprintf(stderr, "Bad percent: %s\n", argv[1]);
 		exit(1);
 	}
-	
+
 	base = strtoul(argv[2], &p, 0);
 	if (p[0] && p[1]) {
 		fprintf(stderr, "Bad base: %s\n", argv[2]);
diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
index 3e9a7cd..4a61176 100644
--- a/lib/e2p/pf.c
+++ b/lib/e2p/pf.c
@@ -41,10 +41,11 @@
 	{ EXT2_ECOMPR_FL, "E", "Compression_Error" },
 #endif
 	{ EXT3_JOURNAL_DATA_FL, "j", "Journaled_Data" },
-	{ EXT2_INDEX_FL, "I", "Indexed_direcctory" }, 
+	{ EXT2_INDEX_FL, "I", "Indexed_directory" },
 	{ EXT2_NOTAIL_FL, "t", "No_Tailmerging" },
 	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
 	{ EXT4_EXTENTS_FL, "e", "Extents" },
+	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
 	{ 0, NULL, NULL }
 };
 
diff --git a/lib/e2p/setflags.c b/lib/e2p/setflags.c
index 47c52a7..908f0f1 100644
--- a/lib/e2p/setflags.c
+++ b/lib/e2p/setflags.c
@@ -25,8 +25,8 @@
 
 #include "e2p.h"
 
-/* 
- * Deal with lame glibc's that define this function without actually 
+/*
+ * Deal with lame glibc's that define this function without actually
  * implementing it.  Can you say "attractive nuisance", boys and girls?
  * I knew you could!
  */
diff --git a/lib/e2p/uuid.c b/lib/e2p/uuid.c
index 60d42ba..0bf8f82 100644
--- a/lib/e2p/uuid.c
+++ b/lib/e2p/uuid.c
@@ -42,7 +42,7 @@
 	tmp = *ptr++;
 	tmp = (tmp << 8) | *ptr++;
 	uu->time_mid = tmp;
-	
+
 	tmp = *ptr++;
 	tmp = (tmp << 8) | *ptr++;
 	uu->time_hi_and_version = tmp;
diff --git a/lib/et/Android.mk b/lib/et/Android.mk
index 45406ac..a7da0e7 100644
--- a/lib/et/Android.mk
+++ b/lib/et/Android.mk
@@ -1,26 +1,21 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+libext2_com_err_src_files := \
 	error_message.c \
 	et_name.c \
 	init_et.c \
 	com_err.c \
 	com_right.c
 
-LOCAL_MODULE := libext2_com_err
-LOCAL_MODULE_TAGS := eng
+libext2_com_err_c_includes := external/e2fsprogs/lib
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
-
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2_com_err_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
 	-DHAVE_SYS_IOCTL_H \
 	-DHAVE_SYS_MMAN_H \
 	-DHAVE_SYS_MOUNT_H \
-	-DHAVE_SYS_PRCTL_H \
 	-DHAVE_SYS_RESOURCE_H \
 	-DHAVE_SYS_SELECT_H \
 	-DHAVE_SYS_STAT_H \
@@ -30,13 +25,43 @@
 	-DHAVE_MMAP \
 	-DHAVE_UTIME_H \
 	-DHAVE_GETPAGESIZE \
-	-DHAVE_LSEEK64 \
-	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
-	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+libext2_com_err_cflags_linux := \
+	-DHAVE_LINUX_FD_H \
+	-DHAVE_SYS_PRCTL_H \
+	-DHAVE_LSEEK64 \
+	-DHAVE_LSEEK64_PROTOTYPE
+
+libext2_com_err_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_com_err_src_files)
+LOCAL_C_INCLUDES := $(libext2_com_err_c_includes)
+LOCAL_CFLAGS := $(libext2_com_err_cflags) $(libext2_com_err_cflags_linux)
+LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+LOCAL_MODULE := libext2_com_err
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 LOCAL_PRELINK_MODULE := false
 
 include $(BUILD_SHARED_LIBRARY)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_com_err_src_files)
+LOCAL_C_INCLUDES := $(libext2_com_err_c_includes)
+ifeq ($(HOST_OS),linux)
+LOCAL_CFLAGS := $(libext2_com_err_cflags) $(libext2_com_err_cflags_linux)
+else
+LOCAL_CFLAGS := $(libext2_com_err_cflags)
+endif
+LOCAL_MODULE := libext2_com_err_host
+LOCAL_MODULE_STEM := libext2_com_err
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/et/Makefile.in b/lib/et/Makefile.in
index fc2aa61..a7e273c 100644
--- a/lib/et/Makefile.in
+++ b/lib/et/Makefile.in
@@ -30,7 +30,7 @@
 ELF_IMAGE = libcom_err
 ELF_MYDIR = et
 ELF_INSTALL_DIR = $(root_libdir)
-ELF_OTHER_LIBS = 
+ELF_OTHER_LIBS = @SEM_INIT_LIB@
 
 BSDLIB_VERSION = 1.1
 BSDLIB_IMAGE = libcom_err
@@ -41,12 +41,12 @@
 # what to build...
 #
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 @MAKEFILE_LIBRARY@
 @MAKEFILE_ELF@
@@ -55,16 +55,23 @@
 @MAKEFILE_CHECKER@
 
 compile_et: $(DEP_SUBSTITUTE) $(srcdir)/compile_et.sh.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE) $(srcdir)/compile_et.sh.in compile_et
-	@$(CHMOD) +x compile_et
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE) $(srcdir)/compile_et.sh.in compile_et
+	$(Q) $(CHMOD) +x compile_et
 
 com_err.ps : com_err.dvi
 com_err.dvi: com_err.texinfo
 
+com_err_abt.html: $(srcdir)/com_err.texinfo
+	$(E) "	TEXI2HTML $@"
+	-$(Q) texi2html -split_chapter $(srcdir)/com_err.texinfo
+	-$(Q) if test -d com_err ; then \
+		mv com_err/* . ; rmdir com_err ; \
+		fi
+
 com_err.pc: $(srcdir)/com_err.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/et/com_err.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/et/com_err.pc ./config.status
 
 #libcom_err.o:	$(LIBOBJS)
 #	$(LD) -r -s -o libcom_err.o $(LIBOBJS)
@@ -74,34 +81,34 @@
 	$(TAGS) $(SRCS)
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/et $(datadir)/et $(bindir) $(man1dir) $(man3dir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/et $(datadir)/et $(bindir) $(man1dir) $(man3dir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
 		$(DESTDIR)$(includedir)/et $(DESTDIR)$(datadir)/et \
 		$(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) \
 		$(DESTDIR)$(man3dir) $(DESTDIR)$(libdir)/pkgconfig
 
 install:: compile_et libcom_err.a $(HFILES) installdirs com_err.pc
-	@echo "	INSTALL_DATA $(libdir)/libcom_err.a"
-	@$(INSTALL_DATA) libcom_err.a $(DESTDIR)$(libdir)/libcom_err.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libcom_err.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libcom_err.a
-	@for i in $(HFILES); do \
+	$(E) "	INSTALL_DATA $(libdir)/libcom_err.a"
+	$(Q) $(INSTALL_DATA) libcom_err.a $(DESTDIR)$(libdir)/libcom_err.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libcom_err.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libcom_err.a
+	$(Q) for i in $(HFILES); do \
 		echo "	INSTALL_DATA $(includedir)/et/$$i"; \
 		$(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/et/$$i; \
 	done
-	@for i in $(SHARE_FILES); do \
+	$(Q) for i in $(SHARE_FILES); do \
 		echo "	INSTALL_DATA $(datadir)/et/$$i"; \
 		$(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(datadir)/et/$$i; \
 	done
-	@echo "	INSTALL_SCRIPT $(bindir)/compile_et"
-	@$(INSTALL_SCRIPT) compile_et $(DESTDIR)$(bindir)/compile_et
-	@echo "	INSTALL_DATA $(man3dir)/com_err.3"
-	@$(INSTALL_DATA) $(srcdir)/com_err.3 $(DESTDIR)$(man3dir)/com_err.3
-	@echo "	INSTALL_DATA $(man1dir)/compile_et.1"
-	@$(INSTALL_DATA) $(srcdir)/compile_et.1 \
+	$(E) "	INSTALL_SCRIPT $(bindir)/compile_et"
+	$(Q) $(INSTALL_SCRIPT) compile_et $(DESTDIR)$(bindir)/compile_et
+	$(E) "	INSTALL_DATA $(man3dir)/com_err.3"
+	$(Q) $(INSTALL_DATA) $(srcdir)/com_err.3 $(DESTDIR)$(man3dir)/com_err.3
+	$(E) "	INSTALL_DATA $(man1dir)/compile_et.1"
+	$(Q) $(INSTALL_DATA) $(srcdir)/compile_et.1 \
 			$(DESTDIR)$(man1dir)/compile_et.1
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/com_err.pc"
-	@$(INSTALL_DATA) com_err.pc $(DESTDIR)$(libdir)/pkgconfig/com_err.pc
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/com_err.pc"
+	$(Q) $(INSTALL_DATA) com_err.pc $(DESTDIR)$(libdir)/pkgconfig/com_err.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libcom_err.a \
@@ -124,7 +131,7 @@
 clean::
 	$(RM) -f compile_et libcom_err.a libcom_err_p.a com_err.info
 	$(RM) -f $(OBJS) profiled/*
-	$(RM) -f *~ \#* *.bak *.otl *.aux *.toc *.PS *.dvi *.ps TAGS *.ln
+	$(RM) -f *~ \#* *.bak *.otl *.aux *.toc *.PS *.dvi *.ps TAGS *.ln *.html
 	$(RM) -f ../libcom_err.a ../libcom_err_p.a
 
 mostlyclean:: clean
diff --git a/lib/et/com_err.c b/lib/et/com_err.c
index 77938b0..d83d6a9 100644
--- a/lib/et/com_err.c
+++ b/lib/et/com_err.c
@@ -1,6 +1,6 @@
 /*
  * Copyright 1987, 1988 by MIT Student Information Processing Board.
- * 
+ *
  * Permission to use, copy, modify, and distribute this software and
  * its documentation for any purpose is hereby granted, provided that
  * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
diff --git a/lib/et/com_err.h b/lib/et/com_err.h
index a49c5a5..eb2106f 100644
--- a/lib/et/com_err.h
+++ b/lib/et/com_err.h
@@ -16,6 +16,7 @@
 #define COM_ERR_ATTR(x)
 #endif
 
+#include <stddef.h>
 #include <stdarg.h>
 
 typedef long errcode_t;
@@ -36,10 +37,10 @@
 
 extern char const *error_message (long);
 extern void (*com_err_hook) (const char *, long, const char *, va_list);
-extern void (*set_com_err_hook (void (*) (const char *, long, 
+extern void (*set_com_err_hook (void (*) (const char *, long,
 					  const char *, va_list)))
 	(const char *, long, const char *, va_list);
-extern void (*reset_com_err_hook (void)) (const char *, long, 
+extern void (*reset_com_err_hook (void)) (const char *, long,
 					  const char *, va_list);
 extern int init_error_table(const char * const *msgs, long base, int count);
 
@@ -49,12 +50,17 @@
 
 /* Provided for Heimdall compatibility */
 extern const char *com_right(struct et_list *list, long code);
-extern void initialize_error_table_r(struct et_list **list, 
-				     const char **messages, 
+extern const char *com_right_r(struct et_list *list, long code, char *str, size_t len);
+extern void initialize_error_table_r(struct et_list **list,
+				     const char **messages,
 				     int num_errors,
 				     long base);
 extern void free_error_table(struct et_list *et);
 
+/* Provided for compatibility with other com_err libraries */
+extern int et_list_lock(void);
+extern int et_list_unlock(void);
+
 #define __COM_ERR_H
 #define __COM_ERR_H__
 #endif /* !defined(__COM_ERR_H) && !defined(__COM_ERR_H__)*/
diff --git a/lib/et/com_err.pc.in b/lib/et/com_err.pc.in
index c42774a..772efa1 100644
--- a/lib/et/com_err.pc.in
+++ b/lib/et/com_err.pc.in
@@ -7,5 +7,6 @@
 Description: Common error description library
 Version: @E2FSPROGS_VERSION@
 Requires:
-Cflags: -I${includedir} 
+Cflags: -I${includedir}/et
 Libs: -L${libdir} -lcom_err
+Libs.private: @SEM_INIT_LIB@
diff --git a/lib/et/com_err.texinfo b/lib/et/com_err.texinfo
index def088c..7e6a494 100644
--- a/lib/et/com_err.texinfo
+++ b/lib/et/com_err.texinfo
@@ -19,11 +19,9 @@
 
 @ifinfo
 @dircategory Development
-@format
-START-INFO-DIR-ENTRY
+@direntry
 * Com_err: (com_err).   A Common Error Description Library for UNIX.
-END-INFO-DIR-ENTRY
-@end format
+@end direntry
 @end ifinfo
 
 @iftex
@@ -539,4 +537,5 @@
 originally written; and everyone I've talked into --- I mean, asked to read
 this document and the ``man'' pages.
 
+@contents
 @bye
diff --git a/lib/et/com_right.c b/lib/et/com_right.c
index 5ac6e7f..f00e910 100644
--- a/lib/et/com_right.c
+++ b/lib/et/com_right.c
@@ -1,41 +1,41 @@
 /*
  * com_right.c -- provide Heimdall / Kerberos4kth com_err interfaces
- * 	for backwards compatbility 
- * 
+ * 	for backwards compatbility
+ *
  * Copyright (c) 2003 by Theodore Ts'o
  *
  * Taken from lib/com_err/error.c from Kerberos4kth distribution.
- * 
+ *
  * Copyright (c) 1997, 1998, 2001 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden). 
- * All rights reserved. 
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met: 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
  *
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer. 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
  *
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in the 
- *    documentation and/or other materials provided with the distribution. 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
  *
- * 3. Neither the name of the Institute nor the names of its contributors 
- *    may be used to endorse or promote products derived from this software 
- *    without specific prior written permission. 
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE. 
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #include <stdio.h>
@@ -55,6 +55,21 @@
     return NULL;
 }
 
+const char *
+com_right_r(struct et_list *list, long code, char *str, size_t len)
+{
+    struct et_list *p;
+    for (p = list; p; p = p->next) {
+	if ((code >= p->table->base) &&
+	    (code < p->table->base + p->table->n_msgs)) {
+            strncpy(str, p->table->msgs[code - p->table->base], len);
+            str[len-1] = '\0';
+            return str;
+        }
+    }
+    return NULL;
+}
+
 struct foobar {
     struct et_list etl;
     struct error_table tab;
@@ -68,8 +83,8 @@
  * afoul of dependencies.
  */
 void
-initialize_error_table_r(struct et_list **list, 
-			 const char **messages, 
+initialize_error_table_r(struct et_list **list,
+			 const char **messages,
 			 int num_errors,
 			 long base)
 {
@@ -91,7 +106,7 @@
     et->next = NULL;
     *end = et;
 }
-			
+
 
 void
 free_error_table(struct et_list *et)
diff --git a/lib/et/error_message.c b/lib/et/error_message.c
index 2507fc0..1b08c16 100644
--- a/lib/et/error_message.c
+++ b/lib/et/error_message.c
@@ -28,9 +28,13 @@
 #if (!defined(HAVE_PRCTL) && defined(linux))
 #include <sys/syscall.h>
 #endif
+#ifdef HAVE_SEMAPHORE_H
+#include <semaphore.h>
+#endif
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#include <fcntl.h>
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -49,6 +53,49 @@
 struct et_list * _et_list = (struct et_list *) NULL;
 struct et_list * _et_dynamic_list = (struct et_list *) NULL;
 
+#ifdef __GNUC__
+#define COMERR_ATTR(x) __attribute__(x)
+#else
+#define COMERR_ATTR(x)
+#endif
+
+#ifdef HAVE_SEM_INIT
+static sem_t _et_lock;
+static int _et_lock_initialized;
+
+static void COMERR_ATTR((constructor)) setup_et_lock(void)
+{
+	sem_init(&_et_lock, 0, 1);
+	_et_lock_initialized = 1;
+}
+
+static void COMERR_ATTR((destructor)) fini_et_lock(void)
+{
+	sem_destroy(&_et_lock);
+	_et_lock_initialized = 0;
+}
+#endif
+
+
+int et_list_lock(void)
+{
+#ifdef HAVE_SEM_INIT
+	if (!_et_lock_initialized)
+		setup_et_lock();
+	return sem_wait(&_et_lock);
+#else
+	return 0;
+#endif
+}
+
+int et_list_unlock(void)
+{
+#ifdef HAVE_SEM_INIT
+	if (_et_lock_initialized)
+		return sem_post(&_et_lock);
+#endif
+	return 0;
+}
 
 const char * error_message (errcode_t code)
 {
@@ -74,22 +121,32 @@
 	    goto oops;
 #endif
     }
+    et_list_lock();
     for (et = _et_list; et; et = et->next) {
 	if ((et->table->base & 0xffffffL) == (table_num & 0xffffffL)) {
 	    /* This is the right table */
-	    if (et->table->n_msgs <= offset)
-		goto oops;
-	    return(et->table->msgs[offset]);
+	    if (et->table->n_msgs <= offset) {
+		break;
+	    } else {
+		const char *msg = et->table->msgs[offset];
+		et_list_unlock();
+		return msg;
+	    }
 	}
     }
     for (et = _et_dynamic_list; et; et = et->next) {
 	if ((et->table->base & 0xffffffL) == (table_num & 0xffffffL)) {
 	    /* This is the right table */
-	    if (et->table->n_msgs <= offset)
-		goto oops;
-	    return(et->table->msgs[offset]);
+	    if (et->table->n_msgs <= offset) {
+		break;
+	    } else {
+		const char *msg = et->table->msgs[offset];
+		et_list_unlock();
+		return msg;
+	    }
 	}
     }
+    et_list_unlock();
 oops:
     strcpy (buffer, "Unknown code ");
     if (table_num) {
@@ -145,25 +202,38 @@
 
 static void init_debug(void)
 {
-	char *dstr;
-	char *fn;
+	char	*dstr, *fn, *tmp;
+	int	fd, flags;
 
 	if (debug_mask & DEBUG_INIT)
 		return;
 
 	dstr = getenv("COMERR_DEBUG");
-	if (dstr)
-		debug_mask = strtoul(dstr, 0, 0);
+	if (dstr) {
+		debug_mask = strtoul(dstr, &tmp, 0);
+		if (*tmp || errno)
+			debug_mask = 0;
+	}
+
+	debug_mask |= DEBUG_INIT;
+	if (debug_mask == DEBUG_INIT)
+		return;
 
 	fn = safe_getenv("COMERR_DEBUG_FILE");
 	if (fn)
 		debug_f = fopen(fn, "a");
 	if (!debug_f)
 		debug_f = fopen("/dev/tty", "a");
-	if (!debug_f)
-		debug_mask = 0;
+	if (debug_f) {
+		fd = fileno(debug_f);
+		if (fd >= 0) {
+			flags = fcntl(fd, F_GETFD);
+			if (flags >= 0)
+				fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
+		}
+	} else
+		debug_mask = DEBUG_INIT;
 
-	debug_mask |= DEBUG_INIT;
 }
 
 /*
@@ -176,6 +246,11 @@
 	if (!(el = (struct et_list *) malloc(sizeof(struct et_list))))
 		return ENOMEM;
 
+	if (et_list_lock() != 0) {
+		free(el);
+		return errno;
+	}
+
 	el->table = et;
 	el->next = _et_dynamic_list;
 	_et_dynamic_list = el;
@@ -186,6 +261,7 @@
 			error_table_name(et->base),
 			(const void *) et);
 
+	et_list_unlock();
 	return 0;
 }
 
@@ -194,9 +270,13 @@
  */
 errcode_t remove_error_table(const struct error_table * et)
 {
-	struct et_list *el = _et_dynamic_list;
+	struct et_list *el;
 	struct et_list *el2 = 0;
 
+	if (et_list_lock() != 0)
+		return ENOENT;
+
+	el = _et_dynamic_list;
 	init_debug();
 	while (el) {
 		if (el->table->base == et->base) {
@@ -210,6 +290,7 @@
 					"remove_error_table: %s (0x%p)\n",
 					error_table_name(et->base),
 					(const void *) et);
+			et_list_unlock();
 			return 0;
 		}
 		el2 = el;
@@ -219,6 +300,7 @@
 		fprintf(debug_f, "remove_error_table FAILED: %s (0x%p)\n",
 			error_table_name(et->base),
 			(const void *) et);
+	et_list_unlock();
 	return ENOENT;
 }
 
diff --git a/lib/ext2fs/Android.mk b/lib/ext2fs/Android.mk
index 1b87f53..2de0ac6 100644
--- a/lib/ext2fs/Android.mk
+++ b/lib/ext2fs/Android.mk
@@ -1,7 +1,6 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+libext2fs_src_files := \
 	ext2_err.c \
 	alloc.c \
 	alloc_sb.c \
@@ -14,6 +13,8 @@
 	block.c \
 	bmap.c \
 	check_desc.c \
+	crc16.c \
+	csum.c \
 	closefs.c \
 	dblist.c \
 	dblist_dir.c \
@@ -23,6 +24,7 @@
 	dupfs.c \
 	expanddir.c \
 	ext_attr.c \
+	extent.c \
 	finddev.c \
 	flushb.c \
 	freefs.c \
@@ -30,6 +32,7 @@
 	get_pathname.c \
 	getsize.c \
 	getsectsize.c \
+	i_block.c \
 	icount.c \
 	ind_block.c \
 	initialize.c \
@@ -48,38 +51,35 @@
 	read_bb.c \
 	read_bb_file.c \
 	res_gdt.c \
-	rs_bitmap.c \
 	rw_bitmaps.c \
 	swapfs.c \
 	tdb.c \
+	undo_io.c \
 	unix_io.c \
 	unlink.c \
 	valid_blk.c \
 	version.c
 
 # get rid of this?!
-LOCAL_SRC_FILES += test_io.c
+libext2fs_src_files += test_io.c
 
-LOCAL_MODULE := libext2fs
-LOCAL_MODULE_TAGS := eng
-
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
+libext2fs_shared_libraries := \
 	libext2_com_err \
 	libext2_uuid \
 	libext2_blkid \
-	libext2_e2p \
-	libc
+	libext2_e2p
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
+libext2fs_system_shared_libraries := libc
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2fs_c_includes := external/e2fsprogs/lib
+
+libext2fs_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
 	-DHAVE_SYS_IOCTL_H \
 	-DHAVE_SYS_MMAN_H \
 	-DHAVE_SYS_MOUNT_H \
-	-DHAVE_SYS_PRCTL_H \
 	-DHAVE_SYS_RESOURCE_H \
 	-DHAVE_SYS_SELECT_H \
 	-DHAVE_SYS_STAT_H \
@@ -89,13 +89,43 @@
 	-DHAVE_MMAP \
 	-DHAVE_UTIME_H \
 	-DHAVE_GETPAGESIZE \
-	-DHAVE_LSEEK64 \
-	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
-	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+libext2fs_cflags_linux := \
+	-DHAVE_LINUX_FD_H \
+	-DHAVE_SYS_PRCTL_H \
+	-DHAVE_LSEEK64 \
+	-DHAVE_LSEEK64_PROTOTYPE
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2fs_src_files)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2fs_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(libext2fs_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2fs_c_includes)
+LOCAL_CFLAGS := $(libext2fs_cflags) $(libext2fs_cflags_linux)
 LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 
 include $(BUILD_SHARED_LIBRARY)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2fs_src_files)
+LOCAL_SHARED_LIBRARIES := $(libext2fs_shared_libraries)
+LOCAL_C_INCLUDES := $(libext2fs_c_includes)
+ifeq ($(HOST_OS),linux)
+LOCAL_CFLAGS := $(libext2fs_cflags) $(libext2fs_cflags_linux)
+else
+LOCAL_CFLAGS := $(libext2fs_cflags)
+endif
+LOCAL_PRELINK_MODULE := false
+LOCAL_MODULE := libext2fs_host
+LOCAL_MODULE_STEM := libext2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/ext2fs/Makefile.in b/lib/ext2fs/Makefile.in
index 199164a..a350181 100644
--- a/lib/ext2fs/Makefile.in
+++ b/lib/ext2fs/Makefile.in
@@ -7,14 +7,16 @@
 
 @MCONFIG@
 
-@DEBUGFS_CMT@DEBUGFS_LIB_OBJS = bb_compat.o cmp_bitmaps.o fileio.o \
-@DEBUGFS_CMT@	inode_io.o namei.o write_bb_file.o 
+@DEBUGFS_CMT@DEBUGFS_LIB_OBJS = bb_compat.o inode_io.o namei.o write_bb_file.o
 
-@RESIZER_CMT@RESIZE_LIB_OBJS = rs_bitmap.o dupfs.o test_io.o 
+MK_CMDS=	_SS_DIR_OVERRIDE=../ss ../ss/mk_cmds
 
+@RESIZER_CMT@RESIZE_LIB_OBJS = dupfs.o
+@TEST_IO_CMT@TEST_IO_LIB_OBJS = test_io.o
 @IMAGER_CMT@E2IMAGE_LIB_OBJS = imager.o
 
 OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) \
+	$(TEST_IO_LIB_OBJS) \
 	ext2_err.o \
 	alloc.o \
 	alloc_sb.o \
@@ -28,6 +30,8 @@
 	bmap.o \
 	check_desc.o \
 	closefs.o \
+	crc16.o \
+	csum.o \
 	dblist.o \
 	dblist_dir.o \
 	dirblock.o \
@@ -35,6 +39,8 @@
 	dir_iterate.o \
 	expanddir.o \
 	ext_attr.o \
+	extent.o \
+	fileio.o \
 	finddev.o \
 	flushb.o \
 	freefs.o \
@@ -42,6 +48,7 @@
 	get_pathname.o \
 	getsize.o \
 	getsectsize.o \
+	i_block.o \
 	icount.o \
 	ind_block.o \
 	initialize.o \
@@ -63,6 +70,7 @@
 	rw_bitmaps.o \
 	swapfs.o \
 	tdb.o \
+	undo_io.o \
 	unix_io.o \
 	unlink.o \
 	valid_blk.o \
@@ -82,7 +90,8 @@
 	$(srcdir)/bmap.c \
 	$(srcdir)/check_desc.c \
 	$(srcdir)/closefs.c \
-	$(srcdir)/cmp_bitmaps.c \
+	$(srcdir)/crc16.c \
+	$(srcdir)/csum.c \
 	$(srcdir)/dblist.c \
 	$(srcdir)/dblist_dir.c \
 	$(srcdir)/dirblock.c \
@@ -91,6 +100,7 @@
 	$(srcdir)/dupfs.c \
 	$(srcdir)/expanddir.c \
 	$(srcdir)/ext_attr.c \
+	$(srcdir)/extent.c \
 	$(srcdir)/fileio.c \
 	$(srcdir)/finddev.c \
 	$(srcdir)/flushb.c \
@@ -99,6 +109,7 @@
 	$(srcdir)/get_pathname.c \
 	$(srcdir)/getsize.c \
 	$(srcdir)/getsectsize.c \
+	$(srcdir)/i_block.c \
 	$(srcdir)/icount.c \
 	$(srcdir)/ind_block.c \
 	$(srcdir)/initialize.c \
@@ -120,21 +131,21 @@
 	$(srcdir)/read_bb.c \
 	$(srcdir)/read_bb_file.c \
 	$(srcdir)/res_gdt.c \
-	$(srcdir)/rs_bitmap.c \
 	$(srcdir)/rw_bitmaps.c \
 	$(srcdir)/swapfs.c \
 	$(srcdir)/tdb.c \
 	$(srcdir)/test_io.c \
-	$(srcdir)/unix_io.c \
-	$(srcdir)/unlink.c \
-	$(srcdir)/valid_blk.c \
-	$(srcdir)/version.c \
-	$(srcdir)/write_bb_file.c \
 	$(srcdir)/tst_badblocks.c \
 	$(srcdir)/tst_bitops.c \
 	$(srcdir)/tst_byteswap.c \
 	$(srcdir)/tst_getsize.c \
-	$(srcdir)/tst_iscan.c
+	$(srcdir)/tst_iscan.c \
+	$(srcdir)/undo_io.c \
+	$(srcdir)/unix_io.c \
+	$(srcdir)/unlink.c \
+	$(srcdir)/valid_blk.c \
+	$(srcdir)/version.c \
+	$(srcdir)/write_bb_file.c
 
 HFILES= bitops.h ext2fs.h ext2_io.h ext2_fs.h ext2_ext_attr.h ext3_extents.h \
 	tdb.h
@@ -164,117 +175,182 @@
 all:: ext2fs.pc
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 COMPILE_ET=../et/compile_et --build-tree
 
 DISTFILES= Makefile *.c *.h image
 
 ext2_err.et: $(DEP_SUBSTITUTE) $(srcdir)/ext2_err.et.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE) $(srcdir)/ext2_err.et.in ext2_err.et
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE) $(srcdir)/ext2_err.et.in ext2_err.et
 
 ext2_err.c ext2_err.h: ext2_err.et
-	@echo "	COMPILE_ET ext2_err.et"
-	@$(COMPILE_ET) ext2_err.et
+	$(E) "	COMPILE_ET ext2_err.et"
+	$(Q) $(COMPILE_ET) ext2_err.et
 
 ext2fs.pc: $(srcdir)/ext2fs.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/ext2fs/ext2fs.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/ext2fs/ext2fs.pc ./config.status
 
-tst_badblocks: tst_badblocks.o freefs.o \
-		read_bb_file.o write_bb_file.o badblocks.o 
-	@echo "	LD $@"
-	@$(CC) -o tst_badblocks tst_badblocks.o freefs.o \
-		read_bb_file.o write_bb_file.o badblocks.o \
-		inline.o bitops.o gen_bitmap.o $(LIBCOM_ERR)
-
-tst_icount: icount.c initialize.o  $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_icount $(srcdir)/icount.c initialize.o \
-		-DDEBUG $(ALL_CFLAGS) \
-		$(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
-
-tst_iscan: tst_iscan.o inode.o badblocks.o test_io.o $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_iscan tst_iscan.o inode.o badblocks.o test_io.o \
-		$(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
-
-tst_getsize: tst_getsize.o getsize.o $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_getsize tst_getsize.o getsize.o $(STATIC_LIBEXT2FS) \
+tst_badblocks: tst_badblocks.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_badblocks tst_badblocks.o $(STATIC_LIBEXT2FS) \
 		$(LIBCOM_ERR)
 
-tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_ismounted $(srcdir)/ismounted.c -DDEBUG $(ALL_CFLAGS) $(LIBCOM_ERR) 
-
-tst_byteswap: tst_byteswap.o bitops.o $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_byteswap tst_byteswap.o bitops.o $(STATIC_LIBEXT2FS) \
-		$(LIBCOM_ERR)
-
-tst_bitops: tst_bitops.o inline.o $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_bitops tst_bitops.o inline.o $(ALL_CFLAGS) \
+tst_icount: $(srcdir)/icount.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_icount $(srcdir)/icount.c -DDEBUG $(ALL_CFLAGS) \
 		$(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
 
-tst_getsectsize: tst_getsectsize.o getsectsize.o $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o tst_sectgetsize tst_getsectsize.o getsectsize.o \
+tst_iscan: tst_iscan.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_iscan tst_iscan.o $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+
+tst_getsize: tst_getsize.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_getsize tst_getsize.o $(STATIC_LIBEXT2FS) \
+		$(LIBCOM_ERR)
+
+tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_ismounted $(srcdir)/ismounted.c \
+		$(STATIC_LIBEXT2FS) -DDEBUG $(ALL_CFLAGS) \
+		$(LIBCOM_ERR) 
+
+tst_byteswap: tst_byteswap.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_byteswap tst_byteswap.o $(STATIC_LIBEXT2FS) \
+		$(LIBCOM_ERR)
+
+tst_bitops: tst_bitops.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_bitops tst_bitops.o $(ALL_CFLAGS) \
+		$(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+
+tst_getsectsize: tst_getsectsize.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_sectgetsize tst_getsectsize.o \
 		$(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
 
 tst_types: tst_types.o ext2_types.h 
-	@echo "	LD $@"
-	@$(CC) -o tst_types tst_types.o 
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_types tst_types.o 
 
 tst_super_size: tst_super_size.o ext2_fs.h
-	@echo "	LD $@"
-	@$(CC) -o tst_super_size tst_super_size.o 
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_super_size tst_super_size.o 
 
 ext2_tdbtool: tdbtool.o
-	@echo "	LD $@"
-	@$(CC) -o ext2_tdbtool tdbtool.o tdb.o
+	$(E) "	LD $@"
+	$(Q) $(CC) -o ext2_tdbtool tdbtool.o tdb.o
 
-mkjournal: mkjournal.c $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	@$(CC) -o mkjournal $(srcdir)/mkjournal.c -DDEBUG $(STATIC_LIBEXT2FS) $(LIBCOM_ERR) $(ALL_CFLAGS)
+extent_dbg.c: $(srcdir)/extent_dbg.ct
+	$(E) "	MK_CMDS $<"
+	$(Q) $(MK_CMDS) $(srcdir)/extent_dbg.ct
 
-check:: tst_bitops tst_badblocks tst_iscan @SWAPFS_CMT@ tst_byteswap \
-	tst_types tst_icount tst_super_size
+debug_cmds.c debug_cmds.h: $(top_srcdir)/debugfs/debug_cmds.ct
+	$(E) "	MK_CMDS $<@"
+	$(Q) $(MK_CMDS) $(top_srcdir)/debugfs/debug_cmds.ct
+
+DEBUG_OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \
+	lsdel.o dump.o set_fields.o logdump.o htree.o unused.o
+
+debugfs.o: $(top_srcdir)/debugfs/debugfs.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+util.o: $(top_srcdir)/debugfs/util.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+ncheck.o: $(top_srcdir)/debugfs/ncheck.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+icheck.o: $(top_srcdir)/debugfs/icheck.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+ls.o: $(top_srcdir)/debugfs/ls.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+lsdel.o: $(top_srcdir)/debugfs/lsdel.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+dump.o: $(top_srcdir)/debugfs/dump.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+set_fields.o: $(top_srcdir)/debugfs/set_fields.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+logdump.o: $(top_srcdir)/debugfs/logdump.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+htree.o: $(top_srcdir)/debugfs/htree.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+unused.o: $(top_srcdir)/debugfs/unused.c
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
+tst_extents: $(srcdir)/extent.c extent_dbg.c $(DEBUG_OBJS) $(DEPLIBSS) \
+	$(LIBE2P) $(DEPLIBUUID) $(DEPLIBBLKID) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_extents $(srcdir)/extent.c extent_dbg.c \
+		$(ALL_CFLAGS) -DDEBUG $(DEBUG_OBJS) $(LIBSS) $(LIBE2P) \
+		$(STATIC_LIBEXT2FS) $(LIBBLKID) $(LIBUUID) $(LIBCOM_ERR) \
+		-I $(top_srcdir)/debugfs
+
+tst_csum: csum.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o tst_csum $(srcdir)/csum.c -DDEBUG \
+		$(ALL_CFLAGS) $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+
+mkjournal: mkjournal.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o mkjournal $(srcdir)/mkjournal.c -DDEBUG $(STATIC_LIBEXT2FS) $(LIBCOM_ERR) $(ALL_CFLAGS)
+
+check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount tst_super_size tst_types tst_csum
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_bitops
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_badblocks
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_iscan
-@SWAPFS_CMT@	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_byteswap
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_types
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_icount
 	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_super_size
+	LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_csum
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/ext2fs"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/ext2fs"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
 		$(DESTDIR)$(includedir)/ext2fs $(DESTDIR)$(libdir)/pkgconfig
 
 install:: all $(HFILES) $(HFILES_IN) installdirs ext2fs.pc
-	@echo "	INSTALL_DATA $(libdir)/libext2fs.a"
-	@$(INSTALL_DATA) libext2fs.a $(DESTDIR)$(libdir)/libext2fs.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libext2fs.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libext2fs.a
-	@for i in $(HFILES); do \
+	$(E) "	INSTALL_DATA $(libdir)/libext2fs.a"
+	$(Q) $(INSTALL_DATA) libext2fs.a $(DESTDIR)$(libdir)/libext2fs.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libext2fs.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libext2fs.a
+	$(Q) for i in $(HFILES); do \
 		echo "	INSTALL_DATA $(includedir)/ext2fs/$$i"; \
 		$(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/ext2fs/$$i; \
 	done
-	@for i in $(HFILES_IN); do \
+	$(Q) for i in $(HFILES_IN); do \
 		echo "	INSTALL_DATA $(includedir)/ext2fs/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(includedir)/ext2fs/$$i; \
 	done
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/ext2fs.pc"
-	@$(INSTALL_DATA) ext2fs.pc $(DESTDIR)$(libdir)/pkgconfig/ext2fs.pc
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/ext2fs.pc"
+	$(Q) $(INSTALL_DATA) ext2fs.pc $(DESTDIR)$(libdir)/pkgconfig/ext2fs.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libext2fs.a \
@@ -285,8 +361,8 @@
 	$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/* \
 		tst_badblocks tst_iscan ext2_err.et ext2_err.c ext2_err.h \
 		tst_byteswap tst_ismounted tst_getsize tst_sectgetsize \
-		tst_bitops tst_types tst_icount tst_super_size \
-		ext2_tdbtool mkjournal \
+		tst_bitops tst_types tst_icount tst_super_size tst_csum \
+		ext2_tdbtool mkjournal debug_cmds.c \
 		../libext2fs.a ../libext2fs_p.a ../libext2fs_chk.a
 
 mostlyclean:: clean
@@ -309,277 +385,348 @@
 alloc.o: $(srcdir)/alloc.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 alloc_sb.o: $(srcdir)/alloc_sb.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 alloc_stats.o: $(srcdir)/alloc_stats.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 alloc_tables.o: $(srcdir)/alloc_tables.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 badblocks.o: $(srcdir)/badblocks.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 bb_compat.o: $(srcdir)/bb_compat.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 bb_inode.o: $(srcdir)/bb_inode.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 bitmaps.o: $(srcdir)/bitmaps.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 bitops.o: $(srcdir)/bitops.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 block.o: $(srcdir)/block.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 bmap.o: $(srcdir)/bmap.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 check_desc.o: $(srcdir)/check_desc.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 closefs.o: $(srcdir)/closefs.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-cmp_bitmaps.o: $(srcdir)/cmp_bitmaps.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
+crc16.o: $(srcdir)/crc16.c $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(srcdir)/crc16.h
+csum.o: $(srcdir)/csum.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h $(srcdir)/crc16.h
 dblist.o: $(srcdir)/dblist.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 dblist_dir.o: $(srcdir)/dblist_dir.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 dirblock.o: $(srcdir)/dirblock.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 dirhash.o: $(srcdir)/dirhash.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 dir_iterate.o: $(srcdir)/dir_iterate.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 dupfs.o: $(srcdir)/dupfs.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 expanddir.o: $(srcdir)/expanddir.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 ext_attr.o: $(srcdir)/ext_attr.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2_ext_attr.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
+extent.o: $(srcdir)/extent.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
+ $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
+ $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h $(srcdir)/e2image.h
 fileio.o: $(srcdir)/fileio.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 finddev.o: $(srcdir)/finddev.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 flushb.o: $(srcdir)/flushb.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 freefs.o: $(srcdir)/freefs.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h
 gen_bitmap.o: $(srcdir)/gen_bitmap.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 get_pathname.o: $(srcdir)/get_pathname.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 getsize.o: $(srcdir)/getsize.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 getsectsize.o: $(srcdir)/getsectsize.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+i_block.o: $(srcdir)/i_block.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 icount.o: $(srcdir)/icount.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(srcdir)/tdb.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h $(srcdir)/tdb.h
 ind_block.o: $(srcdir)/ind_block.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 initialize.o: $(srcdir)/initialize.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 inline.o: $(srcdir)/inline.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 inode.o: $(srcdir)/inode.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fsP.h \
  $(srcdir)/ext2fs.h $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h $(srcdir)/e2image.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h $(srcdir)/e2image.h
 inode_io.o: $(srcdir)/inode_io.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 imager.o: $(srcdir)/imager.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 io_manager.o: $(srcdir)/io_manager.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 ismounted.o: $(srcdir)/ismounted.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 link.o: $(srcdir)/link.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 llseek.o: $(srcdir)/llseek.c $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/ext2_io.h
 lookup.o: $(srcdir)/lookup.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 mkdir.o: $(srcdir)/mkdir.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 mkjournal.o: $(srcdir)/mkjournal.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/e2p/e2p.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(srcdir)/jfs_user.h $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h \
- $(srcdir)/kernel-list.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+ $(srcdir)/bitops.h $(srcdir)/jfs_user.h $(srcdir)/kernel-jbd.h \
+ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h
 namei.o: $(srcdir)/namei.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 native.o: $(srcdir)/native.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 newdir.o: $(srcdir)/newdir.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 openfs.o: $(srcdir)/openfs.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(srcdir)/e2image.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h $(srcdir)/e2image.h
 read_bb.o: $(srcdir)/read_bb.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 read_bb_file.o: $(srcdir)/read_bb_file.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 res_gdt.o: $(srcdir)/res_gdt.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-rs_bitmap.o: $(srcdir)/rs_bitmap.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 rw_bitmaps.o: $(srcdir)/rw_bitmaps.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(srcdir)/e2image.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h $(srcdir)/e2image.h
 swapfs.o: $(srcdir)/swapfs.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(srcdir)/ext2_ext_attr.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tdb.o: $(srcdir)/tdb.c $(srcdir)/tdb.h
 test_io.o: $(srcdir)/test_io.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-unix_io.o: $(srcdir)/unix_io.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-unlink.o: $(srcdir)/unlink.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-valid_blk.o: $(srcdir)/valid_blk.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
-version.o: $(srcdir)/version.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h \
- $(top_srcdir)/version.h
-write_bb_file.o: $(srcdir)/write_bb_file.c $(srcdir)/ext2_fs.h \
- $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
- $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tst_badblocks.o: $(srcdir)/tst_badblocks.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tst_bitops.o: $(srcdir)/tst_bitops.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tst_byteswap.o: $(srcdir)/tst_byteswap.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tst_getsize.o: $(srcdir)/tst_getsize.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tst_iscan.o: $(srcdir)/tst_iscan.c $(srcdir)/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+undo_io.o: $(srcdir)/undo_io.c $(srcdir)/tdb.h $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+unix_io.o: $(srcdir)/unix_io.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+unlink.o: $(srcdir)/unlink.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+valid_blk.o: $(srcdir)/valid_blk.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+version.o: $(srcdir)/version.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h $(top_srcdir)/version.h
+write_bb_file.o: $(srcdir)/write_bb_file.c $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
diff --git a/lib/ext2fs/alloc.c b/lib/ext2fs/alloc.c
index 65f3ea1..ade5149 100644
--- a/lib/ext2fs/alloc.c
+++ b/lib/ext2fs/alloc.c
@@ -7,7 +7,7 @@
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <stdio.h>
@@ -27,12 +27,79 @@
 #include "ext2fs.h"
 
 /*
+ * Check for uninit block bitmaps and deal with them appropriately
+ */
+static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
+			  dgrp_t group)
+{
+	blk_t		i;
+	blk_t		blk, super_blk, old_desc_blk, new_desc_blk;
+	int		old_desc_blocks;
+
+	if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					 EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) ||
+	    !(fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT))
+		return;
+
+	blk = (group * fs->super->s_blocks_per_group) +
+		fs->super->s_first_data_block;
+
+	ext2fs_super_and_bgd_loc(fs, group, &super_blk,
+				 &old_desc_blk, &new_desc_blk, 0);
+
+	if (fs->super->s_feature_incompat &
+	    EXT2_FEATURE_INCOMPAT_META_BG)
+		old_desc_blocks = fs->super->s_first_meta_bg;
+	else
+		old_desc_blocks = fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
+
+	for (i=0; i < fs->super->s_blocks_per_group; i++, blk++) {
+		if ((blk == super_blk) ||
+		    (old_desc_blk && old_desc_blocks &&
+		     (blk >= old_desc_blk) &&
+		     (blk < old_desc_blk + old_desc_blocks)) ||
+		    (new_desc_blk && (blk == new_desc_blk)) ||
+		    (blk == fs->group_desc[group].bg_block_bitmap) ||
+		    (blk == fs->group_desc[group].bg_inode_bitmap) ||
+		    (blk >= fs->group_desc[group].bg_inode_table &&
+		     (blk < fs->group_desc[group].bg_inode_table
+		      + fs->inode_blocks_per_group)))
+			ext2fs_fast_mark_block_bitmap(map, blk);
+		else
+			ext2fs_fast_unmark_block_bitmap(map, blk);
+	}
+	fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+	ext2fs_group_desc_csum_set(fs, group);
+}
+
+/*
+ * Check for uninit inode bitmaps and deal with them appropriately
+ */
+static void check_inode_uninit(ext2_filsys fs, ext2fs_inode_bitmap map,
+			  dgrp_t group)
+{
+	ext2_ino_t	i, ino;
+
+	if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					 EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) ||
+	    !(fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT))
+		return;
+
+	ino = (group * fs->super->s_inodes_per_group) + 1;
+	for (i=0; i < fs->super->s_inodes_per_group; i++, ino++)
+		ext2fs_fast_unmark_inode_bitmap(map, ino);
+
+	fs->group_desc[group].bg_flags &= ~EXT2_BG_INODE_UNINIT;
+	check_block_uninit(fs, fs->block_map, group);
+}
+
+/*
  * Right now, just search forward from the parent directory's block
  * group to find the next free inode.
  *
  * Should have a special policy for directories.
  */
-errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir, 
+errcode_t ext2fs_new_inode(ext2_filsys fs, ext2_ino_t dir,
 			   int mode EXT2FS_ATTR((unused)),
 			   ext2fs_inode_bitmap map, ext2_ino_t *ret)
 {
@@ -41,28 +108,34 @@
 	ext2_ino_t	start_inode;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
-	
+
 	if (!map)
 		map = fs->inode_map;
 	if (!map)
 		return EXT2_ET_NO_INODE_BITMAP;
-	
-	if (dir > 0) 
+
+	if (dir > 0)
 		dir_group = (dir - 1) / EXT2_INODES_PER_GROUP(fs->super);
 
 	start_inode = (dir_group * EXT2_INODES_PER_GROUP(fs->super)) + 1;
 	if (start_inode < EXT2_FIRST_INODE(fs->super))
 		start_inode = EXT2_FIRST_INODE(fs->super);
+	if (start_inode > fs->super->s_inodes_count)
+		return EXT2_ET_INODE_ALLOC_FAIL;
 	i = start_inode;
 
 	do {
+		if (((i - 1) % EXT2_INODES_PER_GROUP(fs->super)) == 0)
+			check_inode_uninit(fs, map, (i - 1) /
+					   EXT2_INODES_PER_GROUP(fs->super));
+
 		if (!ext2fs_fast_test_inode_bitmap(map, i))
 			break;
 		i++;
 		if (i > fs->super->s_inodes_count)
 			i = EXT2_FIRST_INODE(fs->super);
 	} while (i != start_inode);
-	
+
 	if (ext2fs_test_inode_bitmap(map, i))
 		return EXT2_ET_INODE_ALLOC_FAIL;
 	*ret = i;
@@ -87,7 +160,16 @@
 	if (!goal || (goal >= fs->super->s_blocks_count))
 		goal = fs->super->s_first_data_block;
 	i = goal;
+	check_block_uninit(fs, map,
+			   (i - fs->super->s_first_data_block) /
+			   EXT2_BLOCKS_PER_GROUP(fs->super));
 	do {
+		if (((i - fs->super->s_first_data_block) %
+		     EXT2_BLOCKS_PER_GROUP(fs->super)) == 0)
+			check_block_uninit(fs, map,
+					   (i - fs->super->s_first_data_block) /
+					   EXT2_BLOCKS_PER_GROUP(fs->super));
+
 		if (!ext2fs_fast_test_block_bitmap(map, i)) {
 			*ret = i;
 			return 0;
@@ -118,20 +200,29 @@
 	}
 	memset(block_buf, 0, fs->blocksize);
 
-	if (!fs->block_map) {
-		retval = ext2fs_read_block_bitmap(fs);
+	if (fs->get_alloc_block) {
+		blk64_t	new;
+
+		retval = (fs->get_alloc_block)(fs, (blk64_t) goal, &new);
+		if (retval)
+			goto fail;
+		block = (blk_t) new;
+	} else {
+		if (!fs->block_map) {
+			retval = ext2fs_read_block_bitmap(fs);
+			if (retval)
+				goto fail;
+		}
+
+		retval = ext2fs_new_block(fs, goal, 0, &block);
 		if (retval)
 			goto fail;
 	}
 
-	retval = ext2fs_new_block(fs, goal, 0, &block);
-	if (retval)
-		goto fail;
-
 	retval = io_channel_write_blk(fs->io, block, 1, block_buf);
 	if (retval)
 		goto fail;
-	
+
 	ext2fs_block_alloc_stats(fs, block, +1);
 	*ret = block;
 
@@ -170,3 +261,19 @@
 	return EXT2_ET_BLOCK_ALLOC_FAIL;
 }
 
+void ext2fs_set_alloc_block_callback(ext2_filsys fs,
+				     errcode_t (*func)(ext2_filsys fs,
+						       blk64_t goal,
+						       blk64_t *ret),
+				     errcode_t (**old)(ext2_filsys fs,
+						       blk64_t goal,
+						       blk64_t *ret))
+{
+	if (!fs || fs->magic != EXT2_ET_MAGIC_EXT2FS_FILSYS)
+		return;
+
+	if (old)
+		*old = fs->get_alloc_block;
+
+	fs->get_alloc_block = func;
+}
diff --git a/lib/ext2fs/alloc_sb.c b/lib/ext2fs/alloc_sb.c
index ef40b93..b0aeb96 100644
--- a/lib/ext2fs/alloc_sb.c
+++ b/lib/ext2fs/alloc_sb.c
@@ -1,5 +1,5 @@
 /*
- * alloc_sb.c --- Allocate the superblock and block group descriptors for a 
+ * alloc_sb.c --- Allocate the superblock and block group descriptors for a
  * newly initialized filesystem.  Used by mke2fs when initializing a filesystem
  *
  * Copyright (C) 1994, 1995, 1996, 2003 Theodore Ts'o.
@@ -27,28 +27,45 @@
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
-int ext2fs_reserve_super_and_bgd(ext2_filsys fs, 
+/*
+ * This function reserves the superblock and block group descriptors
+ * for a given block group.  It currently returns the number of free
+ * blocks assuming that inode table and allocation bitmaps will be in
+ * the group.  This is not necessarily the case when the flex_bg
+ * feature is enabled, so callers should take care!  It was only
+ * really intended for use by mke2fs, and even there it's not that
+ * useful.  In the future, when we redo this function for 64-bit block
+ * numbers, we should probably return the number of blocks used by the
+ * super block and group descriptors instead.
+ *
+ * See also the comment for ext2fs_super_and_bgd_loc()
+ */
+int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
 				 dgrp_t group,
 				 ext2fs_block_bitmap bmap)
 {
 	blk_t	super_blk, old_desc_blk, new_desc_blk;
 	int	j, old_desc_blocks, num_blocks;
 
-	num_blocks = ext2fs_super_and_bgd_loc(fs, group, &super_blk, 
+	num_blocks = ext2fs_super_and_bgd_loc(fs, group, &super_blk,
 					      &old_desc_blk, &new_desc_blk, 0);
 
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
 		old_desc_blocks = fs->super->s_first_meta_bg;
 	else
-		old_desc_blocks = 
+		old_desc_blocks =
 			fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
 
 	if (super_blk || (group == 0))
 		ext2fs_mark_block_bitmap(bmap, super_blk);
 
 	if (old_desc_blk) {
+		if (fs->super->s_reserved_gdt_blocks && fs->block_map == bmap)
+			fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
 		for (j=0; j < old_desc_blocks; j++)
-			ext2fs_mark_block_bitmap(bmap, old_desc_blk + j);
+			if (old_desc_blk + j < fs->super->s_blocks_count)
+				ext2fs_mark_block_bitmap(bmap,
+							 old_desc_blk + j);
 	}
 	if (new_desc_blk)
 		ext2fs_mark_block_bitmap(bmap, new_desc_blk);
diff --git a/lib/ext2fs/alloc_stats.c b/lib/ext2fs/alloc_stats.c
index 4088f7b..b2f086e 100644
--- a/lib/ext2fs/alloc_stats.c
+++ b/lib/ext2fs/alloc_stats.c
@@ -7,7 +7,7 @@
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <stdio.h>
@@ -20,6 +20,13 @@
 {
 	int	group = ext2fs_group_of_ino(fs, ino);
 
+#ifndef OMIT_COM_ERR
+	if (ino > fs->super->s_inodes_count) {
+		com_err("ext2fs_inode_alloc_stats2", 0,
+			"Illegal inode number: %lu", (unsigned long) ino);
+		return;
+	}
+#endif
 	if (inuse > 0)
 		ext2fs_mark_inode_bitmap(fs->inode_map, ino);
 	else
@@ -27,6 +34,23 @@
 	fs->group_desc[group].bg_free_inodes_count -= inuse;
 	if (isdir)
 		fs->group_desc[group].bg_used_dirs_count += inuse;
+
+	/* We don't strictly need to be clearing the uninit flag if inuse < 0
+	 * (i.e. freeing inodes) but it also means something is bad. */
+	fs->group_desc[group].bg_flags &= ~EXT2_BG_INODE_UNINIT;
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+		ext2_ino_t first_unused_inode =	fs->super->s_inodes_per_group -
+			fs->group_desc[group].bg_itable_unused +
+			group * fs->super->s_inodes_per_group + 1;
+
+		if (ino >= first_unused_inode)
+			fs->group_desc[group].bg_itable_unused =
+				group * fs->super->s_inodes_per_group +
+				fs->super->s_inodes_per_group - ino;
+		ext2fs_group_desc_csum_set(fs, group);
+	}
+
 	fs->super->s_free_inodes_count -= inuse;
 	ext2fs_mark_super_dirty(fs);
 	ext2fs_mark_ib_dirty(fs);
@@ -41,12 +65,40 @@
 {
 	int	group = ext2fs_group_of_blk(fs, blk);
 
+#ifndef OMIT_COM_ERR
+	if (blk >= fs->super->s_blocks_count) {
+		com_err("ext2fs_block_alloc_stats", 0,
+			"Illegal block number: %lu", (unsigned long) blk);
+		return;
+	}
+#endif
 	if (inuse > 0)
 		ext2fs_mark_block_bitmap(fs->block_map, blk);
 	else
 		ext2fs_unmark_block_bitmap(fs->block_map, blk);
 	fs->group_desc[group].bg_free_blocks_count -= inuse;
+	fs->group_desc[group].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+	ext2fs_group_desc_csum_set(fs, group);
+
 	fs->super->s_free_blocks_count -= inuse;
 	ext2fs_mark_super_dirty(fs);
 	ext2fs_mark_bb_dirty(fs);
+	if (fs->block_alloc_stats)
+		(fs->block_alloc_stats)(fs, (blk64_t) blk, inuse);
+}
+
+void ext2fs_set_block_alloc_stats_callback(ext2_filsys fs,
+					   void (*func)(ext2_filsys fs,
+							blk64_t blk,
+							int inuse),
+					   void (**old)(ext2_filsys fs,
+							blk64_t blk,
+							int inuse))
+{
+	if (!fs || fs->magic != EXT2_ET_MAGIC_EXT2FS_FILSYS)
+		return;
+	if (old)
+		*old = fs->block_alloc_stats;
+
+	fs->block_alloc_stats = func;
 }
diff --git a/lib/ext2fs/alloc_tables.c b/lib/ext2fs/alloc_tables.c
index 4ad2ba9..55e6174 100644
--- a/lib/ext2fs/alloc_tables.c
+++ b/lib/ext2fs/alloc_tables.c
@@ -27,19 +27,81 @@
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
+/*
+ * This routine searches for free blocks that can allocate a full
+ * group of bitmaps or inode tables for a flexbg group.  Returns the
+ * block number with a correct offset were the bitmaps and inode
+ * tables can be allocated continously and in order.
+ */
+static blk_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk_t start_blk,
+			   ext2fs_block_bitmap bmap, int offset, int size,
+			   int elem_size)
+{
+	int		flexbg, flexbg_size;
+	blk_t		last_blk, first_free = 0;
+	dgrp_t	       	last_grp;
+
+	flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+	flexbg = group / flexbg_size;
+
+	if (size > (int) (fs->super->s_blocks_per_group / 8))
+		size = (int) fs->super->s_blocks_per_group / 8;
+
+	if (offset)
+		offset -= 1;
+
+	/*
+	 * Don't do a long search if the previous block
+	 * search is still valid.
+	 */
+	if (start_blk && group % flexbg_size) {
+		if (ext2fs_test_block_bitmap_range(bmap, start_blk + elem_size,
+						   size))
+			return start_blk + elem_size;
+	}
+
+	start_blk = ext2fs_group_first_block(fs, flexbg_size * flexbg);
+	last_grp = group | (flexbg_size - 1);
+	if (last_grp > fs->group_desc_count)
+		last_grp = fs->group_desc_count;
+	last_blk = ext2fs_group_last_block(fs, last_grp);
+
+	/* Find the first available block */
+	if (ext2fs_get_free_blocks(fs, start_blk, last_blk, 1, bmap,
+				   &first_free))
+		return first_free;
+
+	if (ext2fs_get_free_blocks(fs, first_free + offset, last_blk, size,
+				   bmap, &first_free))
+		return first_free;
+
+	return first_free;
+}
+
 errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
 				      ext2fs_block_bitmap bmap)
 {
 	errcode_t	retval;
 	blk_t		group_blk, start_blk, last_blk, new_blk, blk;
-	int		j;
+	dgrp_t		last_grp = 0;
+	int		j, rem_grps = 0, flexbg_size = 0;
 
 	group_blk = ext2fs_group_first_block(fs, group);
 	last_blk = ext2fs_group_last_block(fs, group);
 
 	if (!bmap)
 		bmap = fs->block_map;
-	
+
+	if (EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+				      EXT4_FEATURE_INCOMPAT_FLEX_BG) &&
+	    fs->super->s_log_groups_per_flex) {
+		flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+		last_grp = group | (flexbg_size - 1);
+		rem_grps = last_grp - group;
+		if (last_grp > fs->group_desc_count)
+			last_grp = fs->group_desc_count;
+	}
+
 	/*
 	 * Allocate the block and inode bitmaps, if necessary
 	 */
@@ -56,33 +118,79 @@
 	} else
 		start_blk = group_blk;
 
+	if (flexbg_size) {
+		blk_t prev_block = 0;
+		if (group && fs->group_desc[group-1].bg_block_bitmap)
+			prev_block = fs->group_desc[group-1].bg_block_bitmap;
+		start_blk = flexbg_offset(fs, group, prev_block, bmap,
+						 0, rem_grps, 1);
+		last_blk = ext2fs_group_last_block(fs, last_grp);
+	}
+
 	if (!fs->group_desc[group].bg_block_bitmap) {
 		retval = ext2fs_get_free_blocks(fs, start_blk, last_blk,
 						1, bmap, &new_blk);
-		if (retval == EXT2_ET_BLOCK_ALLOC_FAIL) 
+		if (retval == EXT2_ET_BLOCK_ALLOC_FAIL)
 			retval = ext2fs_get_free_blocks(fs, group_blk,
 					last_blk, 1, bmap, &new_blk);
 		if (retval)
 			return retval;
 		ext2fs_mark_block_bitmap(bmap, new_blk);
 		fs->group_desc[group].bg_block_bitmap = new_blk;
+		if (flexbg_size) {
+			dgrp_t gr = ext2fs_group_of_blk(fs, new_blk);
+			fs->group_desc[gr].bg_free_blocks_count--;
+			fs->super->s_free_blocks_count--;
+			fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+			ext2fs_group_desc_csum_set(fs, gr);
+		}
+	}
+
+	if (flexbg_size) {
+		blk_t prev_block = 0;
+		if (group && fs->group_desc[group-1].bg_inode_bitmap)
+			prev_block = fs->group_desc[group-1].bg_inode_bitmap;
+		start_blk = flexbg_offset(fs, group, prev_block, bmap,
+						 flexbg_size, rem_grps, 1);
+		last_blk = ext2fs_group_last_block(fs, last_grp);
 	}
 
 	if (!fs->group_desc[group].bg_inode_bitmap) {
 		retval = ext2fs_get_free_blocks(fs, start_blk, last_blk,
 						1, bmap, &new_blk);
-		if (retval == EXT2_ET_BLOCK_ALLOC_FAIL) 
+		if (retval == EXT2_ET_BLOCK_ALLOC_FAIL)
 			retval = ext2fs_get_free_blocks(fs, group_blk,
 					last_blk, 1, bmap, &new_blk);
 		if (retval)
 			return retval;
 		ext2fs_mark_block_bitmap(bmap, new_blk);
 		fs->group_desc[group].bg_inode_bitmap = new_blk;
+		if (flexbg_size) {
+			dgrp_t gr = ext2fs_group_of_blk(fs, new_blk);
+			fs->group_desc[gr].bg_free_blocks_count--;
+			fs->super->s_free_blocks_count--;
+			fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+			ext2fs_group_desc_csum_set(fs, gr);
+		}
 	}
 
 	/*
 	 * Allocate the inode table
 	 */
+	if (flexbg_size) {
+		blk_t prev_block = 0;
+		if (group && fs->group_desc[group-1].bg_inode_table)
+			prev_block = fs->group_desc[group-1].bg_inode_table;
+		if (last_grp == fs->group_desc_count)
+			rem_grps = last_grp - group;
+		group_blk = flexbg_offset(fs, group, prev_block, bmap,
+						 flexbg_size * 2,
+						 fs->inode_blocks_per_group *
+						 rem_grps,
+						 fs->inode_blocks_per_group);
+		last_blk = ext2fs_group_last_block(fs, last_grp);
+	}
+
 	if (!fs->group_desc[group].bg_inode_table) {
 		retval = ext2fs_get_free_blocks(fs, group_blk, last_blk,
 						fs->inode_blocks_per_group,
@@ -91,17 +199,22 @@
 			return retval;
 		for (j=0, blk = new_blk;
 		     j < fs->inode_blocks_per_group;
-		     j++, blk++)
+		     j++, blk++) {
 			ext2fs_mark_block_bitmap(bmap, blk);
+			if (flexbg_size) {
+				dgrp_t gr = ext2fs_group_of_blk(fs, blk);
+				fs->group_desc[gr].bg_free_blocks_count--;
+				fs->super->s_free_blocks_count--;
+				fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+				ext2fs_group_desc_csum_set(fs, gr);
+			}
+		}
 		fs->group_desc[group].bg_inode_table = new_blk;
 	}
-
-	
+	ext2fs_group_desc_csum_set(fs, group);
 	return 0;
 }
 
-	
-
 errcode_t ext2fs_allocate_tables(ext2_filsys fs)
 {
 	errcode_t	retval;
diff --git a/lib/ext2fs/badblocks.c b/lib/ext2fs/badblocks.c
index da7889d..6eadb12 100644
--- a/lib/ext2fs/badblocks.c
+++ b/lib/ext2fs/badblocks.c
@@ -1,6 +1,6 @@
 /*
  * badblocks.c --- routines to manipulate the bad block structure
- * 
+ *
  * Copyright (C) 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -34,7 +34,7 @@
 {
 	ext2_u32_list	bb;
 	errcode_t	retval;
-	
+
 	retval = ext2fs_get_mem(sizeof(struct ext2_struct_u32_list), &bb);
 	if (retval)
 		return retval;
@@ -54,7 +54,7 @@
 	*ret = bb;
 	return 0;
 }
-	
+
 
 /*
  * This procedure creates an empty u32 list.
@@ -79,7 +79,7 @@
 errcode_t ext2fs_u32_copy(ext2_u32_list src, ext2_u32_list *dest)
 {
 	errcode_t	retval;
-	
+
 	retval = make_u32_list(src->size, src->num, src->list, dest);
 	if (retval)
 		return retval;
@@ -271,11 +271,11 @@
 
 	if (bb->magic != EXT2_ET_MAGIC_BADBLOCKS_LIST)
 		return 0;
-	
+
 	if (iter->ptr < bb->num) {
 		*blk = bb->list[iter->ptr++];
 		return 1;
-	} 
+	}
 	*blk = 0;
 	return 0;
 }
diff --git a/lib/ext2fs/bb_compat.c b/lib/ext2fs/bb_compat.c
index 40f7343..5a158b3 100644
--- a/lib/ext2fs/bb_compat.c
+++ b/lib/ext2fs/bb_compat.c
@@ -1,6 +1,6 @@
 /*
  * bb_compat.c --- compatibility badblocks routines
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/lib/ext2fs/bb_inode.c b/lib/ext2fs/bb_inode.c
index 1f5b4e8..cbeeb98 100644
--- a/lib/ext2fs/bb_inode.c
+++ b/lib/ext2fs/bb_inode.c
@@ -1,12 +1,12 @@
 /*
  * bb_inode.c --- routines to update the bad block inode.
- * 
+ *
  * WARNING: This routine modifies a lot of state in the filesystem; if
  * this routine returns an error, the bad block inode may be in an
  * inconsistent state.
- * 
+ *
  * Copyright (C) 1994, 1995 Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -49,7 +49,7 @@
 				e2_blkcnt_t blockcnt,
 				blk_t ref_block, int ref_offset,
 				void *priv_data);
-	
+
 /*
  * Given a bad blocks bitmap, update the bad blocks inode to reflect
  * the map.
@@ -59,12 +59,12 @@
 	errcode_t			retval;
 	struct set_badblock_record 	rec;
 	struct ext2_inode		inode;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	if (!fs->block_map)
 		return EXT2_ET_NO_BLOCK_BITMAP;
-	
+
 	rec.bad_block_count = 0;
 	rec.ind_blocks_size = rec.ind_blocks_ptr = 0;
 	rec.max_ind_blocks = 10;
@@ -78,9 +78,9 @@
 		goto cleanup;
 	memset(rec.block_buf, 0, fs->blocksize);
 	rec.err = 0;
-	
+
 	/*
-	 * First clear the old bad blocks (while saving the indirect blocks) 
+	 * First clear the old bad blocks (while saving the indirect blocks)
 	 */
 	retval = ext2fs_block_iterate2(fs, EXT2_BAD_INO,
 				       BLOCK_FLAG_DEPTH_TRAVERSE, 0,
@@ -91,7 +91,7 @@
 		retval = rec.err;
 		goto cleanup;
 	}
-	
+
 	/*
 	 * Now set the bad blocks!
 	 *
@@ -108,32 +108,32 @@
 					       BLOCK_FLAG_APPEND, 0,
 					       set_bad_block_proc, &rec);
 		ext2fs_badblocks_list_iterate_end(rec.bb_iter);
-		if (retval) 
+		if (retval)
 			goto cleanup;
 		if (rec.err) {
 			retval = rec.err;
 			goto cleanup;
 		}
 	}
-	
+
 	/*
 	 * Update the bad block inode's mod time and block count
-	 * field.  
+	 * field.
 	 */
 	retval = ext2fs_read_inode(fs, EXT2_BAD_INO, &inode);
 	if (retval)
 		goto cleanup;
-	
+
 	inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(0);
 	if (!inode.i_ctime)
 		inode.i_ctime = fs->now ? fs->now : time(0);
-	inode.i_blocks = rec.bad_block_count * (fs->blocksize / 512);
+	ext2fs_iblk_set(fs, &inode, rec.bad_block_count);
 	inode.i_size = rec.bad_block_count * fs->blocksize;
 
 	retval = ext2fs_write_inode(fs, EXT2_BAD_INO, &inode);
 	if (retval)
 		goto cleanup;
-	
+
 cleanup:
 	ext2fs_free_mem(&rec.ind_blocks);
 	ext2fs_free_mem(&rec.block_buf);
@@ -176,7 +176,7 @@
 		if (rec->ind_blocks_size >= rec->max_ind_blocks) {
 			old_size = rec->max_ind_blocks * sizeof(blk_t);
 			rec->max_ind_blocks += 10;
-			retval = ext2fs_resize_mem(old_size, 
+			retval = ext2fs_resize_mem(old_size,
 				   rec->max_ind_blocks * sizeof(blk_t),
 				   &rec->ind_blocks);
 			if (retval) {
@@ -192,12 +192,12 @@
 	 * Mark the block as unused, and update accounting information
 	 */
 	ext2fs_block_alloc_stats(fs, *block_nr, -1);
-	
+
 	*block_nr = 0;
 	return BLOCK_CHANGED;
 }
 
-	
+
 /*
  * Helper function for update_bb_inode()
  *
@@ -250,12 +250,12 @@
 			return BLOCK_ABORT;
 		}
 	}
-	
+
 	/*
 	 * Update block counts
 	 */
 	ext2fs_block_alloc_stats(fs, blk, +1);
-	
+
 	*block_nr = blk;
 	return BLOCK_CHANGED;
 }
diff --git a/lib/ext2fs/bitmaps.c b/lib/ext2fs/bitmaps.c
index 696baad..ea08b3e 100644
--- a/lib/ext2fs/bitmaps.c
+++ b/lib/ext2fs/bitmaps.c
@@ -27,96 +27,31 @@
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
-static errcode_t make_bitmap(__u32 start, __u32 end, __u32 real_end,
-			     const char *descr, char *init_map,
-			     ext2fs_generic_bitmap *ret)
+void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap)
 {
-	ext2fs_generic_bitmap	bitmap;
-	errcode_t		retval;
-	size_t			size;
-
-	retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap), 
-				&bitmap);
-	if (retval)
-		return retval;
-
-	bitmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP;
-	bitmap->fs = NULL;
-	bitmap->start = start;
-	bitmap->end = end;
-	bitmap->real_end = real_end;
-	bitmap->base_error_code = EXT2_ET_BAD_GENERIC_MARK;
-	if (descr) {
-		retval = ext2fs_get_mem(strlen(descr)+1, &bitmap->description);
-		if (retval) {
-			ext2fs_free_mem(&bitmap);
-			return retval;
-		}
-		strcpy(bitmap->description, descr);
-	} else
-		bitmap->description = 0;
-
-	size = (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1);
-	retval = ext2fs_get_mem(size, &bitmap->bitmap);
-	if (retval) {
-		ext2fs_free_mem(&bitmap->description);
-		ext2fs_free_mem(&bitmap);
-		return retval;
-	}
-
-	if (init_map)
-		memcpy(bitmap->bitmap, init_map, size);
-	else
-		memset(bitmap->bitmap, 0, size);
-	*ret = bitmap;
-	return 0;
+	ext2fs_free_generic_bitmap(bitmap);
 }
 
-errcode_t ext2fs_allocate_generic_bitmap(__u32 start,
-					 __u32 end,
-					 __u32 real_end,
-					 const char *descr,
-					 ext2fs_generic_bitmap *ret)
+void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap)
 {
-	return make_bitmap(start, end, real_end, descr, 0, ret);
+	ext2fs_free_generic_bitmap(bitmap);
 }
 
 errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src,
 			     ext2fs_generic_bitmap *dest)
 {
-	errcode_t		retval;
-	ext2fs_generic_bitmap	new_map;
-
-	retval = make_bitmap(src->start, src->end, src->real_end,
-			     src->description, src->bitmap, &new_map);
-	if (retval)
-		return retval;
-	new_map->magic = src->magic;
-	new_map->fs = src->fs;
-	new_map->base_error_code = src->base_error_code;
-	*dest = new_map;
-	return 0;
+	return (ext2fs_copy_generic_bitmap(src, dest));
 }
 
 void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map)
 {
-	__u32	i, j;
-
-	/* Protect loop from wrap-around if map->real_end is maxed */
-	for (i=map->end+1, j = i - map->start; 
-	     i <= map->real_end && i > map->end; 
-	     i++, j++)
-		ext2fs_set_bit(j, map->bitmap);
-
-	return;
-}	
+	ext2fs_set_generic_bitmap_padding(map);
+}
 
 errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
 				       const char *descr,
 				       ext2fs_inode_bitmap *ret)
 {
-	ext2fs_inode_bitmap bitmap;
-	errcode_t	retval;
 	__u32		start, end, real_end;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
@@ -127,25 +62,15 @@
 	end = fs->super->s_inodes_count;
 	real_end = (EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count);
 
-	retval = ext2fs_allocate_generic_bitmap(start, end, real_end,
-						descr, &bitmap);
-	if (retval)
-		return retval;
-	
-	bitmap->magic = EXT2_ET_MAGIC_INODE_BITMAP;
-	bitmap->fs = fs;
-	bitmap->base_error_code = EXT2_ET_BAD_INODE_MARK;
-	
-	*ret = bitmap;
-	return 0;
+	return (ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_INODE_BITMAP, fs,
+					   start, end, real_end,
+					   descr, 0, ret));
 }
 
 errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
 				       const char *descr,
 				       ext2fs_block_bitmap *ret)
 {
-	ext2fs_block_bitmap bitmap;
-	errcode_t	retval;
 	__u32		start, end, real_end;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
@@ -154,62 +79,105 @@
 
 	start = fs->super->s_first_data_block;
 	end = fs->super->s_blocks_count-1;
-	real_end = (EXT2_BLOCKS_PER_GROUP(fs->super)  
+	real_end = (EXT2_BLOCKS_PER_GROUP(fs->super)
 		    * fs->group_desc_count)-1 + start;
-	
-	retval = ext2fs_allocate_generic_bitmap(start, end, real_end,
-						descr, &bitmap);
-	if (retval)
-		return retval;
 
-	bitmap->magic = EXT2_ET_MAGIC_BLOCK_BITMAP;
-	bitmap->fs = fs;
-	bitmap->base_error_code = EXT2_ET_BAD_BLOCK_MARK;
-	
-	*ret = bitmap;
-	return 0;
+	return (ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP, fs,
+					   start, end, real_end,
+					   descr, 0, ret));
 }
 
 errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap,
 					ext2_ino_t end, ext2_ino_t *oend)
 {
-	EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP);
-	
-	if (end > bitmap->real_end)
-		return EXT2_ET_FUDGE_INODE_BITMAP_END;
-	if (oend)
-		*oend = bitmap->end;
-	bitmap->end = end;
-	return 0;
+
+	return (ext2fs_fudge_generic_bitmap_end(bitmap,
+						EXT2_ET_MAGIC_INODE_BITMAP,
+						EXT2_ET_FUDGE_INODE_BITMAP_END,
+						end, oend));
 }
 
 errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap,
 					blk_t end, blk_t *oend)
 {
-	EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP);
-	
-	if (end > bitmap->real_end)
-		return EXT2_ET_FUDGE_BLOCK_BITMAP_END;
-	if (oend)
-		*oend = bitmap->end;
-	bitmap->end = end;
-	return 0;
+	return (ext2fs_fudge_generic_bitmap_end(bitmap,
+						EXT2_ET_MAGIC_BLOCK_BITMAP,
+						EXT2_ET_FUDGE_BLOCK_BITMAP_END,
+						end, oend));
 }
 
 void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap)
 {
-	if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
-		return;
-
-	memset(bitmap->bitmap, 0,
-	       (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1));
+	ext2fs_clear_generic_bitmap(bitmap);
 }
 
 void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap)
 {
-	if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
-		return;
+	ext2fs_clear_generic_bitmap(bitmap);
+}
 
-	memset(bitmap->bitmap, 0,
-	       (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1));
+errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end,
+				     ext2fs_inode_bitmap bmap)
+{
+	return (ext2fs_resize_generic_bitmap(EXT2_ET_MAGIC_INODE_BITMAP,
+					     new_end, new_real_end, bmap));
+}
+
+errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end,
+				     ext2fs_block_bitmap bmap)
+{
+	return (ext2fs_resize_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP,
+					     new_end, new_real_end, bmap));
+}
+
+errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1,
+				      ext2fs_block_bitmap bm2)
+{
+	return (ext2fs_compare_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP,
+					      EXT2_ET_NEQ_BLOCK_BITMAP,
+					      bm1, bm2));
+}
+
+errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1,
+				      ext2fs_inode_bitmap bm2)
+{
+	return (ext2fs_compare_generic_bitmap(EXT2_ET_MAGIC_INODE_BITMAP,
+					      EXT2_ET_NEQ_INODE_BITMAP,
+					      bm1, bm2));
+}
+
+errcode_t ext2fs_set_inode_bitmap_range(ext2fs_inode_bitmap bmap,
+					ext2_ino_t start, unsigned int num,
+					void *in)
+{
+	return (ext2fs_set_generic_bitmap_range(bmap,
+						EXT2_ET_MAGIC_INODE_BITMAP,
+						start, num, in));
+}
+
+errcode_t ext2fs_get_inode_bitmap_range(ext2fs_inode_bitmap bmap,
+					ext2_ino_t start, unsigned int num,
+					void *out)
+{
+	return (ext2fs_get_generic_bitmap_range(bmap,
+						EXT2_ET_MAGIC_INODE_BITMAP,
+						start, num, out));
+}
+
+errcode_t ext2fs_set_block_bitmap_range(ext2fs_block_bitmap bmap,
+					blk_t start, unsigned int num,
+					void *in)
+{
+	return (ext2fs_set_generic_bitmap_range(bmap,
+						EXT2_ET_MAGIC_BLOCK_BITMAP,
+						start, num, in));
+}
+
+errcode_t ext2fs_get_block_bitmap_range(ext2fs_block_bitmap bmap,
+					blk_t start, unsigned int num,
+					void *out)
+{
+	return (ext2fs_get_generic_bitmap_range(bmap,
+						EXT2_ET_MAGIC_BLOCK_BITMAP,
+						start, num, out));
 }
diff --git a/lib/ext2fs/bitops.c b/lib/ext2fs/bitops.c
index 78632c6..485e997 100644
--- a/lib/ext2fs/bitops.c
+++ b/lib/ext2fs/bitops.c
@@ -1,7 +1,7 @@
 /*
  * bitops.c --- Bitmap frobbing code.  See bitops.h for the inlined
  * 	routines.
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -76,16 +76,3 @@
 		com_err(0, errcode, "#%lu", arg);
 #endif
 }
-
-void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
-			    int code, unsigned long arg)
-{
-#ifndef OMIT_COM_ERR
-	if (bitmap->description)
-		com_err(0, bitmap->base_error_code+code,
-			"#%lu for %s", arg, bitmap->description);
-	else
-		com_err(0, bitmap->base_error_code + code, "#%lu", arg);
-#endif
-}
-
diff --git a/lib/ext2fs/bitops.h b/lib/ext2fs/bitops.h
index 76f902d..32111ba 100644
--- a/lib/ext2fs/bitops.h
+++ b/lib/ext2fs/bitops.h
@@ -1,14 +1,14 @@
 /*
  * bitops.h --- Bitmap frobbing code.  The byte swapping routines are
  * 	also included here.
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  * i386 bitops operations taken from <asm/bitops.h>, Copyright 1992,
  * Linus Torvalds.
  */
@@ -96,6 +96,8 @@
 					     blk_t block, int num);
 extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
 					  blk_t block, int num);
+extern int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
+					  ino_t inode, int num);
 extern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
 						blk_t block, int num);
 extern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
@@ -104,14 +106,21 @@
 					       blk_t block, int num);
 extern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
 
-/* These two routines moved to gen_bitmap.c */
+/* These routines moved to gen_bitmap.c */
 extern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
 					 __u32 bitno);
 extern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
 					   blk_t bitno);
+extern int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
+				      blk_t bitno);
+extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
+					  blk_t block, int num);
+extern __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap);
+extern __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap);
+
 /*
  * The inline routines themselves...
- * 
+ *
  * If NO_INLINE_FUNCS is defined, then we won't try to do inline
  * functions at all; they will be included as normal functions in
  * inline.c
@@ -163,7 +172,6 @@
 
 #define _EXT2_HAVE_ASM_BITOPS_
 #define _EXT2_HAVE_ASM_SWAB_
-#define _EXT2_HAVE_ASM_FINDBIT_
 
 /*
  * These are done by inline assembly for speed reasons.....
@@ -178,7 +186,7 @@
  */
 struct __dummy_h { unsigned long a[100]; };
 #define EXT2FS_ADDR (*(struct __dummy_h *) addr)
-#define EXT2FS_CONST_ADDR (*(const struct __dummy_h *) addr)	
+#define EXT2FS_CONST_ADDR (*(const struct __dummy_h *) addr)
 
 _INLINE_ int ext2fs_set_bit(unsigned int nr, void * addr)
 {
@@ -213,61 +221,6 @@
 	return oldbit;
 }
 
-#if 0
-_INLINE_ int ext2fs_find_first_bit_set(void * addr, unsigned size)
-{
-	int d0, d1, d2;
-	int res;
-
-	if (!size)
-		return 0;
-	/* This looks at memory. Mark it volatile to tell gcc not to move it around */
-	__asm__ __volatile__(
-		"cld\n\t"			     
-		"xorl %%eax,%%eax\n\t"
-		"xorl %%edx,%%edx\n\t"
-		"repe; scasl\n\t"
-		"je 1f\n\t"
-		"movl -4(%%edi),%%eax\n\t"
-		"subl $4,%%edi\n\t"
-		"bsfl %%eax,%%edx\n"
-		"1:\tsubl %%esi,%%edi\n\t"
-		"shll $3,%%edi\n\t"
-		"addl %%edi,%%edx"
-		:"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2)
-		:"1" ((size + 31) >> 5), "2" (addr), "S" (addr));
-	return res;
-}
-
-_INLINE_ int ext2fs_find_next_bit_set (void * addr, int size, int offset)
-{
-	unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
-	int set = 0, bit = offset & 31, res;
-	
-	if (bit) {
-		/*
-		 * Look for zero in first byte
-		 */
-		__asm__("bsfl %1,%0\n\t"
-			"jne 1f\n\t"
-			"movl $32, %0\n"
-			"1:"
-			: "=r" (set)
-			: "r" (*p >> bit));
-		if (set < (32 - bit))
-			return set + offset;
-		set = 32 - bit;
-		p++;
-	}
-	/*
-	 * No bit found yet, search remaining full bytes for a bit
-	 */
-	res = ext2fs_find_first_bit_set(p, size - 32 * (p - (unsigned long *) addr));
-	return (offset + set + res);
-}
-#endif
-
-#ifdef EXT2FS_ENABLE_SWAPFS
 _INLINE_ __u32 ext2fs_swab32(__u32 val)
 {
 #ifdef EXT2FS_REQUIRE_486
@@ -290,13 +243,6 @@
 		return val;
 }
 
-_INLINE_ __u64 ext2fs_swab64(__u64 val)
-{
-	return (ext2fs_swab32(val >> 32) |
-		(((__u64)ext2fs_swab32(val & 0xFFFFFFFFUL)) << 32));
-}
-#endif
-
 #undef EXT2FS_ADDR
 
 #endif	/* i386 */
@@ -339,7 +285,7 @@
 #endif /* __mc68000__ */
 
 
-#if !defined(_EXT2_HAVE_ASM_SWAB_) && defined(EXT2FS_ENABLE_SWAPFS)
+#if !defined(_EXT2_HAVE_ASM_SWAB_)
 
 _INLINE_ __u16 ext2fs_swab16(__u16 val)
 {
@@ -354,303 +300,128 @@
 
 #endif /* !_EXT2_HAVE_ASM_SWAB */
 
-#if !defined(_EXT2_HAVE_ASM_FINDBIT_)
-_INLINE_ int ext2fs_find_first_bit_set(void * addr, unsigned size)
+_INLINE_ __u64 ext2fs_swab64(__u64 val)
 {
-	char	*cp = (char *) addr;
-	int 	res = 0, d0;
-
-	if (!size)
-		return 0;
-
-	while ((size > res) && (*cp == 0)) {
-		cp++;
-		res += 8;
-	}
-	d0 = ffs(*cp);
-	if (d0 == 0)
-		return size;
-	
-	return res + d0 - 1;
-}
-
-_INLINE_ int ext2fs_find_next_bit_set (void * addr, int size, int offset)
-{
-	unsigned char * p;
-	int set = 0, bit = offset & 7, res = 0, d0;
-	
-	res = offset >> 3;
-	p = ((unsigned char *) addr) + res;
-	
-	if (bit) {
-		set = ffs(*p & ~((1 << bit) - 1));
-		if (set)
-			return (offset & ~7) + set - 1;
-		p++;
-		res += 8;
-	}
-	while ((size > res) && (*p == 0)) {
-		p++;
-		res += 8;
-	}
-	d0 = ffs(*p);
-	if (d0 == 0)
-		return size;
-
-	return (res + d0 - 1);
-}
-#endif	
-
-_INLINE_ int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
-					blk_t bitno);
-
-_INLINE_ int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
-					blk_t bitno)
-{
-	if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
-		ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, bitno);
-		return 0;
-	}
-	return ext2fs_test_bit(bitno - bitmap->start, bitmap->bitmap);
+	return (ext2fs_swab32(val >> 32) |
+		(((__u64)ext2fs_swab32(val & 0xFFFFFFFFUL)) << 32));
 }
 
 _INLINE_ int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap,
 				       blk_t block)
 {
-	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap)
-				       bitmap,
+	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 					  block);
 }
 
 _INLINE_ int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
 					 blk_t block)
 {
-	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, 
+	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 					    block);
 }
 
 _INLINE_ int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap,
 				       blk_t block)
 {
-	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap, 
+	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 					  block);
 }
 
 _INLINE_ int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
 				       ext2_ino_t inode)
 {
-	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, 
+	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 					  inode);
 }
 
 _INLINE_ int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
 					 ext2_ino_t inode)
 {
-	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, 
+	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 				     inode);
 }
 
 _INLINE_ int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
 				       ext2_ino_t inode)
 {
-	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap, 
+	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
 					  inode);
 }
 
 _INLINE_ void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
 					    blk_t block)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
-				   bitmap->description);
-		return;
-	}
-#endif	
-	ext2fs_fast_set_bit(block - bitmap->start, bitmap->bitmap);
+	ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
 }
 
 _INLINE_ void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
 					      blk_t block)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK,
-				   block, bitmap->description);
-		return;
-	}
-#endif
-	ext2fs_fast_clear_bit(block - bitmap->start, bitmap->bitmap);
+	ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
 }
 
 _INLINE_ int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
 					    blk_t block)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
-				   block, bitmap->description);
-		return 0;
-	}
-#endif
-	return ext2fs_test_bit(block - bitmap->start, bitmap->bitmap);
+	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
+					  block);
 }
 
 _INLINE_ void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
 					    ext2_ino_t inode)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((inode < bitmap->start) || (inode > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_MARK,
-				   inode, bitmap->description);
-		return;
-	}
-#endif
-	ext2fs_fast_set_bit(inode - bitmap->start, bitmap->bitmap);
+	ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
 }
 
 _INLINE_ void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
 					      ext2_ino_t inode)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((inode < bitmap->start) || (inode > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_UNMARK,
-				   inode, bitmap->description);
-		return;
-	}
-#endif
-	ext2fs_fast_clear_bit(inode - bitmap->start, bitmap->bitmap);
+	ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
 }
 
 _INLINE_ int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
 					   ext2_ino_t inode)
 {
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((inode < bitmap->start) || (inode > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST,
-				   inode, bitmap->description);
-		return 0;
-	}
-#endif
-	return ext2fs_test_bit(inode - bitmap->start, bitmap->bitmap);
+	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
+					  inode);
 }
 
 _INLINE_ blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap)
 {
-	return bitmap->start;
+	return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
 }
 
 _INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap)
 {
-	return bitmap->start;
+	return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
 }
 
 _INLINE_ blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap)
 {
-	return bitmap->end;
+	return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
 }
 
 _INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap)
 {
-	return bitmap->end;
-}
-
-_INLINE_ int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
-					    blk_t block, int num)
-{
-	int	i;
-
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
-				   block, bitmap->description);
-		return 0;
-	}
-	for (i=0; i < num; i++) {
-		if (ext2fs_fast_test_block_bitmap(bitmap, block+i))
-			return 0;
-	}
-	return 1;
+	return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
 }
 
 _INLINE_ int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
 						 blk_t block, int num)
 {
-	int	i;
-
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
-				   block, bitmap->description);
-		return 0;
-	}
-#endif
-	for (i=0; i < num; i++) {
-		if (ext2fs_fast_test_block_bitmap(bitmap, block+i))
-			return 0;
-	}
-	return 1;
-}
-
-_INLINE_ void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
-					     blk_t block, int num)
-{
-	int	i;
-	
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
-				   bitmap->description);
-		return;
-	}
-	for (i=0; i < num; i++)
-		ext2fs_fast_set_bit(block + i - bitmap->start, bitmap->bitmap);
+	return ext2fs_test_block_bitmap_range(bitmap, block, num);
 }
 
 _INLINE_ void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
 						  blk_t block, int num)
 {
-	int	i;
-	
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
-				   bitmap->description);
-		return;
-	}
-#endif	
-	for (i=0; i < num; i++)
-		ext2fs_fast_set_bit(block + i - bitmap->start, bitmap->bitmap);
-}
-
-_INLINE_ void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
-					       blk_t block, int num)
-{
-	int	i;
-	
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
-				   bitmap->description);
-		return;
-	}
-	for (i=0; i < num; i++)
-		ext2fs_fast_clear_bit(block + i - bitmap->start, 
-				      bitmap->bitmap);
+	ext2fs_mark_block_bitmap_range(bitmap, block, num);
 }
 
 _INLINE_ void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
 						    blk_t block, int num)
 {
-	int	i;
-	
-#ifdef EXT2FS_DEBUG_FAST_OPS
-	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
-		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
-				   bitmap->description);
-		return;
-	}
-#endif	
-	for (i=0; i < num; i++)
-		ext2fs_fast_clear_bit(block + i - bitmap->start, 
-				      bitmap->bitmap);
+	ext2fs_unmark_block_bitmap_range(bitmap, block, num);
 }
 #undef _INLINE_
 #endif
diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
index 07a6415..c8d6b17 100644
--- a/lib/ext2fs/block.c
+++ b/lib/ext2fs/block.c
@@ -1,6 +1,6 @@
 /*
  * block.c --- iterate over all blocks in an inode
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -36,6 +36,26 @@
 	void	*priv_data;
 };
 
+#define check_for_ro_violation_return(ctx, ret)				\
+	do {								\
+		if (((ctx)->flags & BLOCK_FLAG_READ_ONLY) &&		\
+		    ((ret) & BLOCK_CHANGED)) {				\
+			(ctx)->errcode = EXT2_ET_RO_BLOCK_ITERATE;	\
+			ret |= BLOCK_ABORT | BLOCK_ERROR;		\
+			return ret;					\
+		}							\
+	} while (0)
+
+#define check_for_ro_violation_goto(ctx, ret, label)			\
+	do {								\
+		if (((ctx)->flags & BLOCK_FLAG_READ_ONLY) &&		\
+		    ((ret) & BLOCK_CHANGED)) {				\
+			(ctx)->errcode = EXT2_ET_RO_BLOCK_ITERATE;	\
+			ret |= BLOCK_ABORT | BLOCK_ERROR;		\
+			goto label;					\
+		}							\
+	} while (0)
+
 static int block_iterate_ind(blk_t *ind_block, blk_t ref_block,
 			     int ref_offset, struct block_context *ctx)
 {
@@ -49,6 +69,7 @@
 		ret = (*ctx->func)(ctx->fs, ind_block,
 				   BLOCK_COUNT_IND, ref_block,
 				   ref_offset, ctx->priv_data);
+	check_for_ro_violation_return(ctx, ret);
 	if (!*ind_block || (ret & BLOCK_ABORT)) {
 		ctx->bcount += limit;
 		return ret;
@@ -59,7 +80,7 @@
 		ret |= BLOCK_ERROR;
 		return ret;
 	}
-	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *ind_block, 
+	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *ind_block,
 					     ctx->ind_buf);
 	if (ctx->errcode) {
 		ret |= BLOCK_ERROR;
@@ -71,7 +92,7 @@
 	if (ctx->flags & BLOCK_FLAG_APPEND) {
 		for (i = 0; i < limit; i++, ctx->bcount++, block_nr++) {
 			flags = (*ctx->func)(ctx->fs, block_nr, ctx->bcount,
-					     *ind_block, offset, 
+					     *ind_block, offset,
 					     ctx->priv_data);
 			changed	|= flags;
 			if (flags & BLOCK_ABORT) {
@@ -85,7 +106,7 @@
 			if (*block_nr == 0)
 				continue;
 			flags = (*ctx->func)(ctx->fs, block_nr, ctx->bcount,
-					     *ind_block, offset, 
+					     *ind_block, offset,
 					     ctx->priv_data);
 			changed	|= flags;
 			if (flags & BLOCK_ABORT) {
@@ -95,6 +116,7 @@
 			offset += sizeof(blk_t);
 		}
 	}
+	check_for_ro_violation_return(ctx, changed);
 	if (changed & BLOCK_CHANGED) {
 		ctx->errcode = ext2fs_write_ind_block(ctx->fs, *ind_block,
 						      ctx->ind_buf);
@@ -107,9 +129,10 @@
 		ret |= (*ctx->func)(ctx->fs, ind_block,
 				    BLOCK_COUNT_IND, ref_block,
 				    ref_offset, ctx->priv_data);
+	check_for_ro_violation_return(ctx, ret);
 	return ret;
 }
-	
+
 static int block_iterate_dind(blk_t *dind_block, blk_t ref_block,
 			      int ref_offset, struct block_context *ctx)
 {
@@ -123,6 +146,7 @@
 		ret = (*ctx->func)(ctx->fs, dind_block,
 				   BLOCK_COUNT_DIND, ref_block,
 				   ref_offset, ctx->priv_data);
+	check_for_ro_violation_return(ctx, ret);
 	if (!*dind_block || (ret & BLOCK_ABORT)) {
 		ctx->bcount += limit*limit;
 		return ret;
@@ -133,7 +157,7 @@
 		ret |= BLOCK_ERROR;
 		return ret;
 	}
-	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *dind_block, 
+	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *dind_block,
 					     ctx->dind_buf);
 	if (ctx->errcode) {
 		ret |= BLOCK_ERROR;
@@ -171,6 +195,7 @@
 			offset += sizeof(blk_t);
 		}
 	}
+	check_for_ro_violation_return(ctx, changed);
 	if (changed & BLOCK_CHANGED) {
 		ctx->errcode = ext2fs_write_ind_block(ctx->fs, *dind_block,
 						      ctx->dind_buf);
@@ -183,9 +208,10 @@
 		ret |= (*ctx->func)(ctx->fs, dind_block,
 				    BLOCK_COUNT_DIND, ref_block,
 				    ref_offset, ctx->priv_data);
+	check_for_ro_violation_return(ctx, ret);
 	return ret;
 }
-	
+
 static int block_iterate_tind(blk_t *tind_block, blk_t ref_block,
 			      int ref_offset, struct block_context *ctx)
 {
@@ -199,6 +225,7 @@
 		ret = (*ctx->func)(ctx->fs, tind_block,
 				   BLOCK_COUNT_TIND, ref_block,
 				   ref_offset, ctx->priv_data);
+	check_for_ro_violation_return(ctx, ret);
 	if (!*tind_block || (ret & BLOCK_ABORT)) {
 		ctx->bcount += limit*limit*limit;
 		return ret;
@@ -209,7 +236,7 @@
 		ret |= BLOCK_ERROR;
 		return ret;
 	}
-	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *tind_block, 
+	ctx->errcode = ext2fs_read_ind_block(ctx->fs, *tind_block,
 					     ctx->tind_buf);
 	if (ctx->errcode) {
 		ret |= BLOCK_ERROR;
@@ -247,6 +274,7 @@
 			offset += sizeof(blk_t);
 		}
 	}
+	check_for_ro_violation_return(ctx, changed);
 	if (changed & BLOCK_CHANGED) {
 		ctx->errcode = ext2fs_write_ind_block(ctx->fs, *tind_block,
 						      ctx->tind_buf);
@@ -259,10 +287,10 @@
 		ret |= (*ctx->func)(ctx->fs, tind_block,
 				    BLOCK_COUNT_TIND, ref_block,
 				    ref_offset, ctx->priv_data);
-	
+	check_for_ro_violation_return(ctx, ret);
 	return ret;
 }
-	
+
 errcode_t ext2fs_block_iterate2(ext2_filsys fs,
 				ext2_ino_t ino,
 				int	flags,
@@ -276,9 +304,7 @@
 				void *priv_data)
 {
 	int	i;
-	int	got_inode = 0;
-	int	ret = 0;
-	blk_t	blocks[EXT2_N_BLOCKS];	/* directory data blocks */
+	int	r, ret = 0;
 	struct ext2_inode inode;
 	errcode_t	retval;
 	struct block_context ctx;
@@ -286,23 +312,19 @@
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+	ctx.errcode = ext2fs_read_inode(fs, ino, &inode);
+	if (ctx.errcode)
+		return ctx.errcode;
+
 	/*
 	 * Check to see if we need to limit large files
 	 */
 	if (flags & BLOCK_FLAG_NO_LARGE) {
-		ctx.errcode = ext2fs_read_inode(fs, ino, &inode);
-		if (ctx.errcode)
-			return ctx.errcode;
-		got_inode = 1;
 		if (!LINUX_S_ISDIR(inode.i_mode) &&
 		    (inode.i_size_high != 0))
 			return EXT2_ET_FILE_TOO_BIG;
 	}
 
-	retval = ext2fs_get_blocks(fs, ino, blocks);
-	if (retval)
-		return retval;
-
 	limit = fs->blocksize >> 2;
 
 	ctx.fs = fs;
@@ -325,10 +347,6 @@
 	 */
 	if ((fs->super->s_creator_os == EXT2_OS_HURD) &&
 	    !(flags & BLOCK_FLAG_DATA_ONLY)) {
-		ctx.errcode = ext2fs_read_inode(fs, ino, &inode);
-		if (ctx.errcode)
-			goto abort_exit;
-		got_inode = 1;
 		if (inode.osd1.hurd1.h_i_translator) {
 			ret |= (*ctx.func)(fs,
 					   &inode.osd1.hurd1.h_i_translator,
@@ -336,36 +354,134 @@
 					   0, 0, priv_data);
 			if (ret & BLOCK_ABORT)
 				goto abort_exit;
+			check_for_ro_violation_goto(&ctx, ret, abort_exit);
 		}
 	}
-	
+
+	if (inode.i_flags & EXT4_EXTENTS_FL) {
+		ext2_extent_handle_t	handle;
+		struct ext2fs_extent	extent;
+		e2_blkcnt_t		blockcnt = 0;
+		blk_t			blk, new_blk;
+		int			op = EXT2_EXTENT_ROOT;
+		int			uninit;
+		unsigned int		j;
+
+		ctx.errcode = ext2fs_extent_open2(fs, ino, &inode, &handle);
+		if (ctx.errcode)
+			goto abort_exit;
+
+		while (1) {
+			ctx.errcode = ext2fs_extent_get(handle, op, &extent);
+			if (ctx.errcode) {
+				if (ctx.errcode != EXT2_ET_EXTENT_NO_NEXT)
+					break;
+				ctx.errcode = 0;
+				if (!(flags & BLOCK_FLAG_APPEND))
+					break;
+			next_block_set:
+				blk = 0;
+				r = (*ctx.func)(fs, &blk, blockcnt,
+						0, 0, priv_data);
+				ret |= r;
+				check_for_ro_violation_goto(&ctx, ret,
+							    extent_errout);
+				if (r & BLOCK_CHANGED) {
+					ctx.errcode =
+						ext2fs_extent_set_bmap(handle,
+						       (blk64_t) blockcnt++,
+						       (blk64_t) blk, 0);
+					if (ctx.errcode || (ret & BLOCK_ABORT))
+						break;
+					if (blk)
+						goto next_block_set;
+				}
+				break;
+			}
+
+			op = EXT2_EXTENT_NEXT;
+			blk = extent.e_pblk;
+			if (!(extent.e_flags & EXT2_EXTENT_FLAGS_LEAF)) {
+				if (ctx.flags & BLOCK_FLAG_DATA_ONLY)
+					continue;
+				if ((!(extent.e_flags &
+				       EXT2_EXTENT_FLAGS_SECOND_VISIT) &&
+				     !(ctx.flags & BLOCK_FLAG_DEPTH_TRAVERSE)) ||
+				    ((extent.e_flags &
+				      EXT2_EXTENT_FLAGS_SECOND_VISIT) &&
+				     (ctx.flags & BLOCK_FLAG_DEPTH_TRAVERSE))) {
+					ret |= (*ctx.func)(fs, &blk,
+							   -1, 0, 0, priv_data);
+					if (ret & BLOCK_CHANGED) {
+						extent.e_pblk = blk;
+						ctx.errcode =
+				ext2fs_extent_replace(handle, 0, &extent);
+						if (ctx.errcode)
+							break;
+					}
+				}
+				continue;
+			}
+			uninit = 0;
+			if (extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+				uninit = EXT2_EXTENT_SET_BMAP_UNINIT;
+			for (blockcnt = extent.e_lblk, j = 0;
+			     j < extent.e_len;
+			     blk++, blockcnt++, j++) {
+				new_blk = blk;
+				r = (*ctx.func)(fs, &new_blk, blockcnt,
+						0, 0, priv_data);
+				ret |= r;
+				check_for_ro_violation_goto(&ctx, ret,
+							    extent_errout);
+				if (r & BLOCK_CHANGED) {
+					ctx.errcode =
+						ext2fs_extent_set_bmap(handle,
+						       (blk64_t) blockcnt,
+						       (blk64_t) new_blk,
+						       uninit);
+					if (ctx.errcode)
+						goto extent_errout;
+				}
+				if (ret & BLOCK_ABORT)
+					break;
+			}
+		}
+
+	extent_errout:
+		ext2fs_extent_free(handle);
+		ret |= BLOCK_ERROR | BLOCK_ABORT;
+		goto errout;
+	}
+
 	/*
 	 * Iterate over normal data blocks
 	 */
 	for (i = 0; i < EXT2_NDIR_BLOCKS ; i++, ctx.bcount++) {
-		if (blocks[i] || (flags & BLOCK_FLAG_APPEND)) {
-			ret |= (*ctx.func)(fs, &blocks[i],
+		if (inode.i_block[i] || (flags & BLOCK_FLAG_APPEND)) {
+			ret |= (*ctx.func)(fs, &inode.i_block[i],
 					    ctx.bcount, 0, i, priv_data);
 			if (ret & BLOCK_ABORT)
 				goto abort_exit;
 		}
 	}
-	if (*(blocks + EXT2_IND_BLOCK) || (flags & BLOCK_FLAG_APPEND)) {
-		ret |= block_iterate_ind(blocks + EXT2_IND_BLOCK,
+	check_for_ro_violation_goto(&ctx, ret, abort_exit);
+	if (inode.i_block[EXT2_IND_BLOCK] || (flags & BLOCK_FLAG_APPEND)) {
+		ret |= block_iterate_ind(&inode.i_block[EXT2_IND_BLOCK],
 					 0, EXT2_IND_BLOCK, &ctx);
 		if (ret & BLOCK_ABORT)
 			goto abort_exit;
 	} else
 		ctx.bcount += limit;
-	if (*(blocks + EXT2_DIND_BLOCK) || (flags & BLOCK_FLAG_APPEND)) {
-		ret |= block_iterate_dind(blocks + EXT2_DIND_BLOCK,
+	if (inode.i_block[EXT2_DIND_BLOCK] || (flags & BLOCK_FLAG_APPEND)) {
+		ret |= block_iterate_dind(&inode.i_block[EXT2_DIND_BLOCK],
 					  0, EXT2_DIND_BLOCK, &ctx);
 		if (ret & BLOCK_ABORT)
 			goto abort_exit;
 	} else
 		ctx.bcount += limit * limit;
-	if (*(blocks + EXT2_TIND_BLOCK) || (flags & BLOCK_FLAG_APPEND)) {
-		ret |= block_iterate_tind(blocks + EXT2_TIND_BLOCK,
+	if (inode.i_block[EXT2_TIND_BLOCK] || (flags & BLOCK_FLAG_APPEND)) {
+		ret |= block_iterate_tind(&inode.i_block[EXT2_TIND_BLOCK],
 					  0, EXT2_TIND_BLOCK, &ctx);
 		if (ret & BLOCK_ABORT)
 			goto abort_exit;
@@ -373,18 +489,13 @@
 
 abort_exit:
 	if (ret & BLOCK_CHANGED) {
-		if (!got_inode) {
-			retval = ext2fs_read_inode(fs, ino, &inode);
-			if (retval)
-				return retval;
-		}
-		for (i=0; i < EXT2_N_BLOCKS; i++)
-			inode.i_block[i] = blocks[i];
 		retval = ext2fs_write_inode(fs, ino, &inode);
-		if (retval)
-			return retval;
+		if (retval) {
+			ret |= BLOCK_ERROR;
+			ctx.errcode = retval;
+		}
 	}
-
+errout:
 	if (!block_buf)
 		ext2fs_free_mem(&ctx.ind_buf);
 
@@ -427,7 +538,7 @@
 			       void *priv_data)
 {
 	struct xlate xl;
-	
+
 	xl.real_private = priv_data;
 	xl.func = func;
 
diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c
index 754fc49..933036b 100644
--- a/lib/ext2fs/bmap.c
+++ b/lib/ext2fs/bmap.c
@@ -14,6 +14,7 @@
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#include <errno.h>
 
 #include "ext2_fs.h"
 #include "ext2fs.h"
@@ -25,14 +26,14 @@
 #endif
 
 extern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
-			     struct ext2_inode *inode, 
+			     struct ext2_inode *inode,
 			     char *block_buf, int bmap_flags,
 			     blk_t block, blk_t *phys_blk);
 
 #define inode_bmap(inode, nr) ((inode)->i_block[(nr)])
 
-static _BMAP_INLINE_ errcode_t block_ind_bmap(ext2_filsys fs, int flags, 
-					      blk_t ind, char *block_buf, 
+static _BMAP_INLINE_ errcode_t block_ind_bmap(ext2_filsys fs, int flags,
+					      blk_t ind, char *block_buf,
 					      int *blocks_alloc,
 					      blk_t nr, blk_t *ret_blk)
 {
@@ -51,10 +52,8 @@
 
 	if (flags & BMAP_SET) {
 		b = *ret_blk;
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-		    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
-			b = ext2fs_swab32(b);
+#ifdef WORDS_BIGENDIAN
+		b = ext2fs_swab32(b);
 #endif
 		((blk_t *) block_buf)[nr] = b;
 		return io_channel_write_blk(fs->io, ind, 1, block_buf);
@@ -62,10 +61,8 @@
 
 	b = ((blk_t *) block_buf)[nr];
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
-		b = ext2fs_swab32(b);
+#ifdef WORDS_BIGENDIAN
+	b = ext2fs_swab32(b);
 #endif
 
 	if (!b && (flags & BMAP_ALLOC)) {
@@ -75,13 +72,11 @@
 		if (retval)
 			return retval;
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-		    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
-			((blk_t *) block_buf)[nr] = ext2fs_swab32(b);
-		else
+#ifdef WORDS_BIGENDIAN
+		((blk_t *) block_buf)[nr] = ext2fs_swab32(b);
+#else
+		((blk_t *) block_buf)[nr] = b;
 #endif
-			((blk_t *) block_buf)[nr] = b;
 
 		retval = io_channel_write_blk(fs->io, ind, 1, block_buf);
 		if (retval)
@@ -95,17 +90,17 @@
 }
 
 static _BMAP_INLINE_ errcode_t block_dind_bmap(ext2_filsys fs, int flags,
-					       blk_t dind, char *block_buf, 
+					       blk_t dind, char *block_buf,
 					       int *blocks_alloc,
 					       blk_t nr, blk_t *ret_blk)
 {
 	blk_t		b;
 	errcode_t	retval;
 	blk_t		addr_per_block;
-	
+
 	addr_per_block = (blk_t) fs->blocksize >> 2;
 
-	retval = block_ind_bmap(fs, flags & ~BMAP_SET, dind, block_buf, 
+	retval = block_ind_bmap(fs, flags & ~BMAP_SET, dind, block_buf,
 				blocks_alloc, nr / addr_per_block, &b);
 	if (retval)
 		return retval;
@@ -115,17 +110,17 @@
 }
 
 static _BMAP_INLINE_ errcode_t block_tind_bmap(ext2_filsys fs, int flags,
-					       blk_t tind, char *block_buf, 
+					       blk_t tind, char *block_buf,
 					       int *blocks_alloc,
 					       blk_t nr, blk_t *ret_blk)
 {
 	blk_t		b;
 	errcode_t	retval;
 	blk_t		addr_per_block;
-	
+
 	addr_per_block = (blk_t) fs->blocksize >> 2;
 
-	retval = block_dind_bmap(fs, flags & ~BMAP_SET, tind, block_buf, 
+	retval = block_dind_bmap(fs, flags & ~BMAP_SET, tind, block_buf,
 				 blocks_alloc, nr / addr_per_block, &b);
 	if (retval)
 		return retval;
@@ -134,13 +129,14 @@
 	return retval;
 }
 
-errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
-		      char *block_buf, int bmap_flags, blk_t block,
-		      blk_t *phys_blk)
+errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
+		       char *block_buf, int bmap_flags, blk64_t block,
+		       int *ret_flags, blk64_t *phys_blk)
 {
 	struct ext2_inode inode_buf;
+	ext2_extent_handle_t handle = 0;
 	blk_t addr_per_block;
-	blk_t	b;
+	blk_t	b, blk32;
 	char	*buf = 0;
 	errcode_t	retval = 0;
 	int		blocks_alloc = 0, inode_dirty = 0;
@@ -148,6 +144,9 @@
 	if (!(bmap_flags & BMAP_SET))
 		*phys_blk = 0;
 
+	if (ret_flags)
+		*ret_flags = 0;
+
 	/* Read inode structure if necessary */
 	if (!inode) {
 		retval = ext2fs_read_inode(fs, ino, &inode_buf);
@@ -157,6 +156,54 @@
 	}
 	addr_per_block = (blk_t) fs->blocksize >> 2;
 
+	if (inode->i_flags & EXT4_EXTENTS_FL) {
+		struct ext2fs_extent	extent;
+		unsigned int		offset;
+
+		retval = ext2fs_extent_open2(fs, ino, inode, &handle);
+		if (retval)
+			goto done;
+		if (bmap_flags & BMAP_SET) {
+			retval = ext2fs_extent_set_bmap(handle, block,
+							*phys_blk, 0);
+			goto done;
+		}
+		retval = ext2fs_extent_goto(handle, block);
+		if (retval) {
+			/* If the extent is not found, return phys_blk = 0 */
+			if (retval == EXT2_ET_EXTENT_NOT_FOUND)
+				goto got_block;
+			goto done;
+		}
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
+		if (retval)
+			goto done;
+		offset = block - extent.e_lblk;
+		if (block >= extent.e_lblk && (offset <= extent.e_len)) {
+			*phys_blk = extent.e_pblk + offset;
+			if (ret_flags && extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+				*ret_flags |= BMAP_RET_UNINIT;
+		}
+	got_block:
+		if ((*phys_blk == 0) && (bmap_flags & BMAP_ALLOC)) {
+			retval = ext2fs_alloc_block(fs, b, block_buf, &b);
+			if (retval)
+				goto done;
+			retval = ext2fs_extent_set_bmap(handle, block,
+							(blk64_t) b, 0);
+			if (retval)
+				goto done;
+			/* Update inode after setting extent */
+			retval = ext2fs_read_inode(fs, ino, inode);
+			if (retval)
+				return retval;
+			blocks_alloc++;
+			*phys_blk = b;
+		}
+		retval = 0;
+		goto done;
+	}
+
 	if (!block_buf) {
 		retval = ext2fs_get_array(2, fs->blocksize, &buf);
 		if (retval)
@@ -167,11 +214,6 @@
 	if (block < EXT2_NDIR_BLOCKS) {
 		if (bmap_flags & BMAP_SET) {
 			b = *phys_blk;
-#ifdef EXT2FS_ENABLE_SWAPFS
-			if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-			    (fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
-				b = ext2fs_swab32(b);
-#endif
 			inode_bmap(inode, block) = b;
 			inode_dirty++;
 			goto done;
@@ -179,7 +221,7 @@
 
 		*phys_blk = inode_bmap(inode, block);
 		b = block ? inode_bmap(inode, block-1) : 0;
-		
+
 		if ((*phys_blk == 0) && (bmap_flags & BMAP_ALLOC)) {
 			retval = ext2fs_alloc_block(fs, b, block_buf, &b);
 			if (retval)
@@ -190,9 +232,10 @@
 		}
 		goto done;
 	}
-	
+
 	/* Indirect block */
 	block -= EXT2_NDIR_BLOCKS;
+	blk32 = *phys_blk;
 	if (block < addr_per_block) {
 		b = inode_bmap(inode, EXT2_IND_BLOCK);
 		if (!b) {
@@ -209,11 +252,13 @@
 			inode_bmap(inode, EXT2_IND_BLOCK) = b;
 			blocks_alloc++;
 		}
-		retval = block_ind_bmap(fs, bmap_flags, b, block_buf, 
-					&blocks_alloc, block, phys_blk);
+		retval = block_ind_bmap(fs, bmap_flags, b, block_buf,
+					&blocks_alloc, block, &blk32);
+		if (retval == 0)
+			*phys_blk = blk32;
 		goto done;
 	}
-	
+
 	/* Doubly indirect block  */
 	block -= addr_per_block;
 	if (block < addr_per_block * addr_per_block) {
@@ -232,8 +277,10 @@
 			inode_bmap(inode, EXT2_DIND_BLOCK) = b;
 			blocks_alloc++;
 		}
-		retval = block_dind_bmap(fs, bmap_flags, b, block_buf, 
-					 &blocks_alloc, block, phys_blk);
+		retval = block_dind_bmap(fs, bmap_flags, b, block_buf,
+					 &blocks_alloc, block, &blk32);
+		if (retval == 0)
+			*phys_blk = blk32;
 		goto done;
 	}
 
@@ -254,17 +301,35 @@
 		inode_bmap(inode, EXT2_TIND_BLOCK) = b;
 		blocks_alloc++;
 	}
-	retval = block_tind_bmap(fs, bmap_flags, b, block_buf, 
-				 &blocks_alloc, block, phys_blk);
+	retval = block_tind_bmap(fs, bmap_flags, b, block_buf,
+				 &blocks_alloc, block, &blk32);
+	if (retval == 0)
+		*phys_blk = blk32;
 done:
 	if (buf)
 		ext2fs_free_mem(&buf);
+	if (handle)
+		ext2fs_extent_free(handle);
 	if ((retval == 0) && (blocks_alloc || inode_dirty)) {
-		inode->i_blocks += (blocks_alloc * fs->blocksize) / 512;
+		ext2fs_iblk_add_blocks(fs, inode, blocks_alloc);
 		retval = ext2fs_write_inode(fs, ino, inode);
 	}
 	return retval;
 }
 
+errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
+		      char *block_buf, int bmap_flags, blk_t block,
+		      blk_t *phys_blk)
+{
+	errcode_t ret;
+	blk64_t	ret_blk = *phys_blk;
 
-
+	ret = ext2fs_bmap2(fs, ino, inode, block_buf, bmap_flags, block,
+			    0, &ret_blk);
+	if (ret)
+		return ret;
+	if (ret_blk >= ((long long) 1 << 32))
+		return EOVERFLOW;
+	*phys_blk = ret_blk;
+	return 0;
+}
diff --git a/lib/ext2fs/bmove.c b/lib/ext2fs/bmove.c
index 7d4b21a..019db91 100644
--- a/lib/ext2fs/bmove.c
+++ b/lib/ext2fs/bmove.c
@@ -44,7 +44,7 @@
 	pb = (struct process_block_struct *) priv_data;
 	block = orig = *block_nr;
 	ret = 0;
-	
+
 	/*
 	 * Let's see if this is one which we need to relocate
 	 */
@@ -98,7 +98,7 @@
 	struct process_block_struct pb;
 	ext2_inode_scan	scan;
 	char		*block_buf;
-	
+
 	retval = ext2fs_open_inode_scan(fs, 0, &scan);
 	if (retval)
 		return retval;
@@ -107,7 +107,7 @@
 	pb.error = 0;
 	pb.alloc_map = alloc_map ? alloc_map : fs->block_map;
 	pb.flags = flags;
-	
+
 	retval = ext2fs_get_array(4, fs->blocksize, &block_buf);
 	if (retval)
 		return retval;
@@ -131,12 +131,12 @@
 	retval = ext2fs_get_next_inode(scan, &ino, &inode);
 	if (retval)
 		return retval;
-	
+
 	while (ino) {
 		if ((inode.i_links_count == 0) ||
 		    !ext2fs_inode_has_valid_blocks(&inode))
 			goto next;
-		
+
 		pb.ino = ino;
 		pb.inode = &inode;
 
diff --git a/lib/ext2fs/brel.h b/lib/ext2fs/brel.h
index be97243..a7f9776 100644
--- a/lib/ext2fs/brel.h
+++ b/lib/ext2fs/brel.h
@@ -1,6 +1,6 @@
 /*
  * brel.h
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -47,7 +47,7 @@
 	 * Initialize for iterating over the block relocation entries.
 	 */
 	errcode_t (*start_iter)(ext2_brel brel);
-	
+
 	/*
 	 * The iterator function for the inode relocation entries.
 	 * Returns an inode number of 0 when out of entries.
diff --git a/lib/ext2fs/brel_ma.c b/lib/ext2fs/brel_ma.c
index 3753e9f..1c4f218 100644
--- a/lib/ext2fs/brel_ma.c
+++ b/lib/ext2fs/brel_ma.c
@@ -1,6 +1,6 @@
 /*
  * brel_ma.c
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * TODO: rewrite to not use a direct array!!!  (Fortunately this
@@ -61,18 +61,18 @@
 	if (retval)
 		goto errout;
 	memset(brel, 0, sizeof(struct ext2_block_relocation_table));
-	
+
 	retval = ext2fs_get_mem(strlen(name)+1, &brel->name);
 	if (retval)
 		goto errout;
 	strcpy(brel->name, name);
-	
+
 	retval = ext2fs_get_mem(sizeof(struct brel_ma), &ma);
 	if (retval)
 		goto errout;
 	memset(ma, 0, sizeof(struct brel_ma));
 	brel->priv_data = ma;
-	
+
 	size = (size_t) (sizeof(struct ext2_block_relocate_entry) *
 			 (max_block+1));
 	retval = ext2fs_get_array(max_block+1,
@@ -92,7 +92,7 @@
 	brel->move = bma_move;
 	brel->delete = bma_delete;
 	brel->free = bma_free;
-	
+
 	*new_brel = brel;
 	return 0;
 
diff --git a/lib/ext2fs/check_desc.c b/lib/ext2fs/check_desc.c
index 146f9e5..299cb01 100644
--- a/lib/ext2fs/check_desc.c
+++ b/lib/ext2fs/check_desc.c
@@ -1,6 +1,6 @@
 /*
  * check_desc.c --- Check the group descriptors of an ext2 filesystem
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -31,38 +31,73 @@
  */
 errcode_t ext2fs_check_desc(ext2_filsys fs)
 {
+	ext2fs_block_bitmap bmap;
+	errcode_t retval;
 	dgrp_t i;
 	blk_t first_block = fs->super->s_first_data_block;
-	blk_t last_block;
+	blk_t last_block = fs->super->s_blocks_count-1;
+	blk_t blk, b;
+	int j;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+	retval = ext2fs_allocate_block_bitmap(fs, "check_desc map", &bmap);
+	if (retval)
+		return retval;
+
+	for (i = 0; i < fs->group_desc_count; i++)
+		ext2fs_reserve_super_and_bgd(fs, i, bmap);
+
 	for (i = 0; i < fs->group_desc_count; i++) {
-		first_block = ext2fs_group_first_block(fs, i);
-		last_block = ext2fs_group_last_block(fs, i);
+		if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+			first_block = ext2fs_group_first_block(fs, i);
+			last_block = ext2fs_group_last_block(fs, i);
+			if (i == (fs->group_desc_count - 1))
+				last_block = fs->super->s_blocks_count-1;
+		}
 
 		/*
-		 * Check to make sure block bitmap for group is
-		 * located within the group.
+		 * Check to make sure the block bitmap for group is sane
 		 */
-		if (fs->group_desc[i].bg_block_bitmap < first_block ||
-		    fs->group_desc[i].bg_block_bitmap > last_block)
-			return EXT2_ET_GDESC_BAD_BLOCK_MAP;
+		blk = fs->group_desc[i].bg_block_bitmap;
+		if (blk < first_block || blk > last_block ||
+		    ext2fs_test_block_bitmap(bmap, blk)) {
+			retval = EXT2_ET_GDESC_BAD_BLOCK_MAP;
+			goto errout;
+		}
+		ext2fs_mark_block_bitmap(bmap, blk);
+
 		/*
-		 * Check to make sure inode bitmap for group is
-		 * located within the group
+		 * Check to make sure the inode bitmap for group is sane
 		 */
-		if (fs->group_desc[i].bg_inode_bitmap < first_block ||
-		    fs->group_desc[i].bg_inode_bitmap > last_block)
-			return EXT2_ET_GDESC_BAD_INODE_MAP;
+		blk = fs->group_desc[i].bg_inode_bitmap;
+		if (blk < first_block || blk > last_block ||
+		    ext2fs_test_block_bitmap(bmap, blk)) {
+			retval = EXT2_ET_GDESC_BAD_INODE_MAP;
+			goto errout;
+		}
+		ext2fs_mark_block_bitmap(bmap, blk);
+
 		/*
-		 * Check to make sure inode table for group is located
-		 * within the group
+		 * Check to make sure the inode table for group is sane
 		 */
-		if (fs->group_desc[i].bg_inode_table < first_block ||
-		    ((fs->group_desc[i].bg_inode_table +
-		      fs->inode_blocks_per_group - 1) > last_block))
-			return EXT2_ET_GDESC_BAD_INODE_TABLE;
+		blk = fs->group_desc[i].bg_inode_table;
+		if (blk < first_block ||
+		    ((blk + fs->inode_blocks_per_group - 1) > last_block)) {
+			retval = EXT2_ET_GDESC_BAD_INODE_TABLE;
+			goto errout;
+		}
+		for (j = 0, b = blk; j < fs->inode_blocks_per_group;
+		     j++, b++) {
+			if (ext2fs_test_block_bitmap(bmap, b)) {
+				retval = EXT2_ET_GDESC_BAD_INODE_TABLE;
+				goto errout;
+			}
+			ext2fs_mark_block_bitmap(bmap, b);
+		}
 	}
-	return 0;
+errout:
+	ext2fs_free_block_bitmap(bmap);
+	return retval;
 }
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index 88c515a..ed7109e 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -1,6 +1,6 @@
 /*
  * closefs.c --- close an ext2 filesystem
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -45,7 +45,20 @@
 	return 0;
 }
 
-int ext2fs_super_and_bgd_loc(ext2_filsys fs, 
+/*
+ * This function returns the location of the superblock, block group
+ * descriptors for a given block group.  It currently returns the
+ * number of free blocks assuming that inode table and allocation
+ * bitmaps will be in the group.  This is not necessarily the case
+ * when the flex_bg feature is enabled, so callers should take care!
+ * It was only really intended for use by mke2fs, and even there it's
+ * not that useful.  In the future, when we redo this function for
+ * 64-bit block numbers, we should probably return the number of
+ * blocks used by the super block and group descriptors instead.
+ *
+ * See also the comment for ext2fs_reserve_super_and_bgd()
+ */
+int ext2fs_super_and_bgd_loc(ext2_filsys fs,
 			     dgrp_t group,
 			     blk_t *ret_super_blk,
 			     blk_t *ret_old_desc_blk,
@@ -54,16 +67,15 @@
 {
 	blk_t	group_block, super_blk = 0, old_desc_blk = 0, new_desc_blk = 0;
 	unsigned int meta_bg, meta_bg_size;
-	int	numblocks, has_super;
-	int	old_desc_blocks;
+	blk_t	numblocks, old_desc_blocks;
+	int	has_super;
 
-	group_block = fs->super->s_first_data_block +
-		(group * fs->super->s_blocks_per_group);
+	group_block = ext2fs_group_first_block(fs, group);
 
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
 		old_desc_blocks = fs->super->s_first_meta_bg;
 	else
-		old_desc_blocks = 
+		old_desc_blocks =
 			fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
 
 	if (group == fs->group_desc_count-1) {
@@ -81,7 +93,7 @@
 		super_blk = group_block;
 		numblocks--;
 	}
-	meta_bg_size = (fs->blocksize / sizeof (struct ext2_group_desc));
+	meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
 	meta_bg = group / meta_bg_size;
 
 	if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) ||
@@ -100,7 +112,7 @@
 			numblocks--;
 		}
 	}
-		
+
 	numblocks -= 2 + fs->inode_blocks_per_group;
 
 	if (ret_super_blk)
@@ -188,33 +200,35 @@
 				    struct ext2_super_block *super_shadow)
 {
 	dgrp_t	sgrp = group;
-	
+
 	if (sgrp > ((1 << 16) - 1))
 		sgrp = (1 << 16) - 1;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & EXT2_FLAG_SWAP_BYTES)
-		super_shadow->s_block_group_nr = ext2fs_swab16(sgrp);
-	else
+#ifdef WORDS_BIGENDIAN
+	super_shadow->s_block_group_nr = ext2fs_swab16(sgrp);
+#else
+	fs->super->s_block_group_nr = sgrp;
 #endif
-		fs->super->s_block_group_nr = sgrp;
 
-	return io_channel_write_blk(fs->io, group_block, -SUPERBLOCK_SIZE, 
+	return io_channel_write_blk(fs->io, group_block, -SUPERBLOCK_SIZE,
 				    super_shadow);
 }
 
 
 errcode_t ext2fs_flush(ext2_filsys fs)
 {
-	dgrp_t		i,j;
+	dgrp_t		i;
 	errcode_t	retval;
 	unsigned long	fs_state;
 	__u32		feature_incompat;
 	struct ext2_super_block *super_shadow = 0;
 	struct ext2_group_desc *group_shadow = 0;
+#ifdef WORDS_BIGENDIAN
 	struct ext2_group_desc *s, *t;
+	dgrp_t		j;
+#endif
 	char	*group_ptr;
 	int	old_desc_blocks;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	fs_state = fs->super->s_state;
@@ -222,34 +236,29 @@
 
 	fs->super->s_wtime = fs->now ? fs->now : time(NULL);
 	fs->super->s_block_group_nr = 0;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-		retval = EXT2_ET_NO_MEMORY;
-		retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &super_shadow);
-		if (retval)
-			goto errout;
-		retval = ext2fs_get_array(fs->blocksize, fs->desc_blocks,
-					&group_shadow);
-		if (retval)
-			goto errout;
-		memset(group_shadow, 0, (size_t) fs->blocksize *
-		       fs->desc_blocks);
+#ifdef WORDS_BIGENDIAN
+	retval = EXT2_ET_NO_MEMORY;
+	retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &super_shadow);
+	if (retval)
+		goto errout;
+	retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
+				  &group_shadow);
+	if (retval)
+		goto errout;
+	memset(group_shadow, 0, (size_t) fs->blocksize *
+	       fs->desc_blocks);
 
-		/* swap the group descriptors */
-		for (j=0, s=fs->group_desc, t=group_shadow;
-		     j < fs->group_desc_count; j++, t++, s++) {
-			*t = *s;
-			ext2fs_swap_group_desc(t);
-		}
-	} else {
-		super_shadow = fs->super;
-		group_shadow = fs->group_desc;
+	/* swap the group descriptors */
+	for (j=0, s=fs->group_desc, t=group_shadow;
+	     j < fs->group_desc_count; j++, t++, s++) {
+		*t = *s;
+		ext2fs_swap_group_desc(t);
 	}
 #else
 	super_shadow = fs->super;
 	group_shadow = fs->group_desc;
 #endif
-	
+
 	/*
 	 * Set the state of the FS to be non-valid.  (The state has
 	 * already been backed up earlier, and will be restored after
@@ -257,11 +266,9 @@
 	 */
 	fs->super->s_state &= ~EXT2_VALID_FS;
 	fs->super->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-		*super_shadow = *fs->super;
-		ext2fs_swap_super(super_shadow);
-	}
+#ifdef WORDS_BIGENDIAN
+	*super_shadow = *fs->super;
+	ext2fs_swap_super(super_shadow);
 #endif
 
 	/*
@@ -286,7 +293,7 @@
 		blk_t	super_blk, old_desc_blk, new_desc_blk;
 		int	meta_bg;
 
-		ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk, 
+		ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk,
 					 &new_desc_blk, &meta_bg);
 
 		if (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) &&i && super_blk) {
@@ -297,7 +304,7 @@
 		}
 		if (fs->flags & EXT2_FLAG_SUPER_ONLY)
 			continue;
-		if ((old_desc_blk) && 
+		if ((old_desc_blk) &&
 		    (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) || (i == 0))) {
 			retval = io_channel_write_blk(fs->io,
 			      old_desc_blk, old_desc_blocks, group_ptr);
@@ -336,11 +343,9 @@
 	fs->super->s_block_group_nr = 0;
 	fs->super->s_state = fs_state;
 	fs->super->s_feature_incompat = feature_incompat;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-		*super_shadow = *fs->super;
-		ext2fs_swap_super(super_shadow);
-	}
+#ifdef WORDS_BIGENDIAN
+	*super_shadow = *fs->super;
+	ext2fs_swap_super(super_shadow);
 #endif
 
 	retval = io_channel_flush(fs->io);
@@ -353,28 +358,42 @@
 	retval = io_channel_flush(fs->io);
 errout:
 	fs->super->s_state = fs_state;
-	if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-		if (super_shadow)
-			ext2fs_free_mem(&super_shadow);
-		if (group_shadow)
-			ext2fs_free_mem(&group_shadow);
-	}
+#ifdef WORDS_BIGENDIAN
+	if (super_shadow)
+		ext2fs_free_mem(&super_shadow);
+	if (group_shadow)
+		ext2fs_free_mem(&group_shadow);
+#endif
 	return retval;
 }
 
 errcode_t ext2fs_close(ext2_filsys fs)
 {
 	errcode_t	retval;
-	
+	int		meta_blks;
+	io_stats stats = 0;
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
-	if (fs->flags & EXT2_FLAG_DIRTY) {
-		retval = ext2fs_flush(fs);
+	if (fs->write_bitmaps) {
+		retval = fs->write_bitmaps(fs);
 		if (retval)
 			return retval;
 	}
-	if (fs->write_bitmaps) {
-		retval = fs->write_bitmaps(fs);
+	if (fs->super->s_kbytes_written &&
+	    fs->io->manager->get_stats)
+		fs->io->manager->get_stats(fs->io, &stats);
+	if (stats && stats->bytes_written && (fs->flags & EXT2_FLAG_RW)) {
+		fs->super->s_kbytes_written += stats->bytes_written >> 10;
+		meta_blks = fs->desc_blocks + 1;
+		if (!(fs->flags & EXT2_FLAG_SUPER_ONLY))
+			fs->super->s_kbytes_written += meta_blks /
+				(fs->blocksize / 1024);
+		if ((fs->flags & EXT2_FLAG_DIRTY) == 0)
+			fs->flags |= EXT2_FLAG_SUPER_ONLY | EXT2_FLAG_DIRTY;
+	}
+	if (fs->flags & EXT2_FLAG_DIRTY) {
+		retval = ext2fs_flush(fs);
 		if (retval)
 			return retval;
 	}
diff --git a/lib/ext2fs/cmp_bitmaps.c b/lib/ext2fs/cmp_bitmaps.c
deleted file mode 100644
index 51cc3d0..0000000
--- a/lib/ext2fs/cmp_bitmaps.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * cmp_bitmaps.c --- routines to compare inode and block bitmaps.
- *
- * Copyright (C) 1995 Theodore Ts'o.
- *
- * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Public
- * License.
- * %End-Header%
- */
-
-#include <stdio.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <time.h>
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ext2_fs.h"
-#include "ext2fs.h"
-
-errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1,
-				      ext2fs_block_bitmap bm2)
-{
-	blk_t	i;
-	
-	EXT2_CHECK_MAGIC(bm1, EXT2_ET_MAGIC_BLOCK_BITMAP);
-	EXT2_CHECK_MAGIC(bm2, EXT2_ET_MAGIC_BLOCK_BITMAP);
-
-	if ((bm1->start != bm2->start) ||
-	    (bm1->end != bm2->end) ||
-	    (memcmp(bm1->bitmap, bm2->bitmap,
-		    (size_t) (bm1->end - bm1->start)/8)))
-		return EXT2_ET_NEQ_BLOCK_BITMAP;
-
-	for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++)
-		if (ext2fs_fast_test_block_bitmap(bm1, i) !=
-		    ext2fs_fast_test_block_bitmap(bm2, i))
-			return EXT2_ET_NEQ_BLOCK_BITMAP;
-
-	return 0;
-}
-
-errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1,
-				      ext2fs_inode_bitmap bm2)
-{
-	ext2_ino_t	i;
-	
-	EXT2_CHECK_MAGIC(bm1, EXT2_ET_MAGIC_INODE_BITMAP);
-	EXT2_CHECK_MAGIC(bm2, EXT2_ET_MAGIC_INODE_BITMAP);
-
-	if ((bm1->start != bm2->start) ||
-	    (bm1->end != bm2->end) ||
-	    (memcmp(bm1->bitmap, bm2->bitmap,
-		    (size_t) (bm1->end - bm1->start)/8)))
-		return EXT2_ET_NEQ_INODE_BITMAP;
-
-	for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++)
-		if (ext2fs_fast_test_inode_bitmap(bm1, i) !=
-		    ext2fs_fast_test_inode_bitmap(bm2, i))
-			return EXT2_ET_NEQ_INODE_BITMAP;
-
-	return 0;
-}
-
diff --git a/lib/ext2fs/crc16.c b/lib/ext2fs/crc16.c
new file mode 100644
index 0000000..026f040
--- /dev/null
+++ b/lib/ext2fs/crc16.c
@@ -0,0 +1,73 @@
+/*
+ *      crc16.c
+ *
+ * This source code is licensed under the GNU General Public License,
+ * Version 2. See the file COPYING for more details.
+ */
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <ext2fs/ext2_types.h>
+
+#include "crc16.h"
+
+/** CRC table for the CRC-16. The poly is 0x8005 (x16 + x15 + x2 + 1) */
+static __u16 const crc16_table[256] = {
+	0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
+	0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
+	0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
+	0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
+	0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
+	0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
+	0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
+	0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
+	0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
+	0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
+	0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
+	0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
+	0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
+	0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
+	0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
+	0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
+	0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
+	0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
+	0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
+	0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
+	0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
+	0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
+	0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
+	0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
+	0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
+	0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
+	0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
+	0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
+	0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
+	0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
+	0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
+	0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
+};
+
+/**
+ * Compute the CRC-16 for the data buffer
+ *
+ * @param crc     previous CRC value
+ * @param buffer  data pointer
+ * @param len     number of bytes in the buffer
+ * @return        the updated CRC value
+ */
+crc16_t ext2fs_crc16(crc16_t crc, const void *buffer, unsigned int len)
+{
+	const unsigned char *cp = buffer;
+
+	while (len--)
+		/*
+		 * for an unknown reason, PPC treats __u16 as signed
+		 * and keeps doing sign extension on the value.
+		 * Instead, use only the low 16 bits of an unsigned
+		 * int for holding the CRC value to avoid this.
+		 */
+		crc = (((crc >> 8) & 0xffU) ^
+		       crc16_table[(crc ^ *cp++) & 0xffU]) & 0x0000ffffU;
+	return crc;
+}
diff --git a/lib/ext2fs/crc16.h b/lib/ext2fs/crc16.h
new file mode 100644
index 0000000..322e68d
--- /dev/null
+++ b/lib/ext2fs/crc16.h
@@ -0,0 +1,26 @@
+/*
+ *	crc16.h - CRC-16 routine
+ *
+ * Implements the standard CRC-16:
+ *   Width 16
+ *   Poly  0x8005 (x16 + x15 + x2 + 1)
+ *   Init  0
+ *
+ * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
+ *
+ * This source code is licensed under the GNU General Public License,
+ * Version 2. See the file COPYING for more details.
+ */
+
+#ifndef __CRC16_H
+#define __CRC16_H
+
+/* for an unknown reason, PPC treats __u16 as signed and keeps doing sign
+ * extension on the value.  Instead, use only the low 16 bits of an
+ * unsigned int for holding the CRC value to avoid this.
+ */
+typedef unsigned int crc16_t;
+
+extern crc16_t ext2fs_crc16(crc16_t crc, const void *buffer, unsigned int len);
+
+#endif /* __CRC16_H */
diff --git a/lib/ext2fs/csum.c b/lib/ext2fs/csum.c
new file mode 100644
index 0000000..da0aeda
--- /dev/null
+++ b/lib/ext2fs/csum.c
@@ -0,0 +1,256 @@
+/*
+ * csum.c --- checksumming of ext3 structures
+ *
+ * Copyright (C) 2006 Cluster File Systems, Inc.
+ * Copyright (C) 2006, 2007 by Andreas Dilger <adilger@clusterfs.com>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "ext2_fs.h"
+#include "ext2fs.h"
+#include "crc16.h"
+#include <assert.h>
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#ifdef DEBUG
+#define STATIC
+#else
+#define STATIC static
+#endif
+
+STATIC __u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group)
+{
+	__u16 crc = 0;
+	struct ext2_group_desc *desc;
+
+	desc = &fs->group_desc[group];
+
+	if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM) {
+		int offset = offsetof(struct ext2_group_desc, bg_checksum);
+
+#ifdef WORDS_BIGENDIAN
+		struct ext2_group_desc swabdesc = *desc;
+
+		/* Have to swab back to little-endian to do the checksum */
+		ext2fs_swap_group_desc(&swabdesc);
+		desc = &swabdesc;
+
+		group = ext2fs_swab32(group);
+#endif
+		crc = ext2fs_crc16(~0, fs->super->s_uuid,
+				   sizeof(fs->super->s_uuid));
+		crc = ext2fs_crc16(crc, &group, sizeof(group));
+		crc = ext2fs_crc16(crc, desc, offset);
+		offset += sizeof(desc->bg_checksum); /* skip checksum */
+		assert(offset == sizeof(*desc));
+		/* for checksum of struct ext4_group_desc do the rest...*/
+		if (offset < fs->super->s_desc_size) {
+			crc = ext2fs_crc16(crc, (char *)desc + offset,
+				    fs->super->s_desc_size - offset);
+		}
+	}
+
+	return crc;
+}
+
+int ext2fs_group_desc_csum_verify(ext2_filsys fs, dgrp_t group)
+{
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
+	    (fs->group_desc[group].bg_checksum !=
+	     ext2fs_group_desc_csum(fs, group)))
+		return 0;
+
+	return 1;
+}
+
+void ext2fs_group_desc_csum_set(ext2_filsys fs, dgrp_t group)
+{
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
+		fs->group_desc[group].bg_checksum =
+			ext2fs_group_desc_csum(fs, group);
+}
+
+static __u32 find_last_inode_ingrp(ext2fs_inode_bitmap bitmap,
+				   __u32 inodes_per_grp, dgrp_t grp_no)
+{
+	ext2_ino_t i, start_ino, end_ino;
+
+	start_ino = grp_no * inodes_per_grp + 1;
+	end_ino = start_ino + inodes_per_grp - 1;
+
+	for (i = end_ino; i >= start_ino; i--) {
+		if (ext2fs_fast_test_inode_bitmap(bitmap, i))
+			return i - start_ino + 1;
+	}
+	return inodes_per_grp;
+}
+
+/* update the bitmap flags, set the itable high watermark, and calculate
+ * checksums for the group descriptors */
+errcode_t ext2fs_set_gdt_csum(ext2_filsys fs)
+{
+	struct ext2_super_block *sb = fs->super;
+	struct ext2_group_desc *bg = fs->group_desc;
+	int dirty = 0;
+	dgrp_t i;
+
+	if (!fs->inode_map)
+		return EXT2_ET_NO_INODE_BITMAP;
+
+	if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
+		return 0;
+
+	for (i = 0; i < fs->group_desc_count; i++, bg++) {
+		int old_csum = bg->bg_checksum;
+		int old_unused = bg->bg_itable_unused;
+		int old_flags = bg->bg_flags;
+
+		if (bg->bg_free_inodes_count == sb->s_inodes_per_group) {
+			bg->bg_flags |= EXT2_BG_INODE_UNINIT;
+			bg->bg_itable_unused = sb->s_inodes_per_group;
+		} else {
+			bg->bg_flags &= ~EXT2_BG_INODE_UNINIT;
+			bg->bg_itable_unused = sb->s_inodes_per_group -
+				find_last_inode_ingrp(fs->inode_map,
+						      sb->s_inodes_per_group,i);
+		}
+
+		ext2fs_group_desc_csum_set(fs, i);
+		if (old_flags != bg->bg_flags)
+			dirty = 1;
+		if (old_unused != bg->bg_itable_unused)
+			dirty = 1;
+		if (old_csum != bg->bg_checksum)
+			dirty = 1;
+	}
+	if (dirty)
+		ext2fs_mark_super_dirty(fs);
+	return 0;
+}
+
+#ifdef DEBUG
+void print_csum(const char *msg, ext2_filsys fs, dgrp_t group)
+{
+	__u16 crc1, crc2, crc3;
+	dgrp_t swabgroup;
+	struct ext2_group_desc *desc = &fs->group_desc[group];
+	struct ext2_super_block *sb = fs->super;
+
+#ifdef WORDS_BIGENDIAN
+	struct ext2_group_desc swabdesc = fs->group_desc[group];
+
+	/* Have to swab back to little-endian to do the checksum */
+	ext2fs_swap_group_desc(&swabdesc);
+	desc = &swabdesc;
+
+	swabgroup = ext2fs_swab32(group);
+#else
+	swabgroup = group;
+#endif
+
+	crc1 = ext2fs_crc16(~0, sb->s_uuid, sizeof(fs->super->s_uuid));
+	crc2 = ext2fs_crc16(crc1, &swabgroup, sizeof(swabgroup));
+	crc3 = ext2fs_crc16(crc2, desc,
+			    offsetof(struct ext2_group_desc, bg_checksum));
+	printf("%s: UUID %016Lx%016Lx(%04x), grp %u(%04x): %04x=%04x\n",
+	       msg, *(long long *)&sb->s_uuid, *(long long *)&sb->s_uuid[8],
+	       crc1, group, crc2, crc3, ext2fs_group_desc_csum(fs, group));
+}
+
+unsigned char sb_uuid[16] = { 0x4f, 0x25, 0xe8, 0xcf, 0xe7, 0x97, 0x48, 0x23,
+			      0xbe, 0xfa, 0xa7, 0x88, 0x4b, 0xae, 0xec, 0xdb };
+
+int main(int argc, char **argv)
+{
+	struct ext2_super_block param;
+	errcode_t		retval;
+	ext2_filsys		fs;
+	int			i;
+	__u16 csum1, csum2, csum_known = 0xd3a4;
+
+	memset(&param, 0, sizeof(param));
+	param.s_blocks_count = 32768;
+
+	retval = ext2fs_initialize("test fs", 0, &param,
+				   test_io_manager, &fs);
+	if (retval) {
+		com_err("setup", retval,
+			"While initializing filesystem");
+		exit(1);
+	}
+	memcpy(fs->super->s_uuid, sb_uuid, 16);
+	fs->super->s_feature_ro_compat = EXT4_FEATURE_RO_COMPAT_GDT_CSUM;
+
+	for (i=0; i < fs->group_desc_count; i++) {
+		fs->group_desc[i].bg_block_bitmap = 124;
+		fs->group_desc[i].bg_inode_bitmap = 125;
+		fs->group_desc[i].bg_inode_table = 126;
+		fs->group_desc[i].bg_free_blocks_count = 31119;
+		fs->group_desc[i].bg_free_inodes_count = 15701;
+		fs->group_desc[i].bg_used_dirs_count = 2;
+		fs->group_desc[i].bg_flags = 0;
+	};
+
+	csum1 = ext2fs_group_desc_csum(fs, 0);
+	print_csum("csum0000", fs, 0);
+
+	if (csum1 != csum_known) {
+		printf("checksum for group 0 should be %04x\n", csum_known);
+		exit(1);
+	}
+	csum2 = ext2fs_group_desc_csum(fs, 1);
+	print_csum("csum0001", fs, 1);
+	if (csum1 == csum2) {
+		printf("checksums for different groups shouldn't match\n");
+		exit(1);
+	}
+	csum2 = ext2fs_group_desc_csum(fs, 2);
+	print_csum("csumffff", fs, 2);
+	if (csum1 == csum2) {
+		printf("checksums for different groups shouldn't match\n");
+		exit(1);
+	}
+	fs->group_desc[0].bg_checksum = csum1;
+	csum2 = ext2fs_group_desc_csum(fs, 0);
+	print_csum("csum_set", fs, 0);
+	if (csum1 != csum2) {
+		printf("checksums should not depend on checksum field\n");
+		exit(1);
+	}
+	if (!ext2fs_group_desc_csum_verify(fs, 0)) {
+		printf("checksums should verify against gd_checksum\n");
+		exit(1);
+	}
+	memset(fs->super->s_uuid, 0x30, sizeof(fs->super->s_uuid));
+	print_csum("new_uuid", fs, 0);
+	if (ext2fs_group_desc_csum_verify(fs, 0) != 0) {
+		printf("checksums for different filesystems shouldn't match\n");
+		exit(1);
+	}
+	csum1 = fs->group_desc[0].bg_checksum = ext2fs_group_desc_csum(fs, 0);
+	print_csum("csum_new", fs, 0);
+	fs->group_desc[0].bg_free_blocks_count = 1;
+	csum2 = ext2fs_group_desc_csum(fs, 0);
+	print_csum("csum_blk", fs, 0);
+	if (csum1 == csum2) {
+		printf("checksums for different data shouldn't match\n");
+		exit(1);
+	}
+
+	return 0;
+}
+#endif
diff --git a/lib/ext2fs/dblist.c b/lib/ext2fs/dblist.c
index 3bf63a0..4a80367 100644
--- a/lib/ext2fs/dblist.c
+++ b/lib/ext2fs/dblist.c
@@ -1,13 +1,13 @@
 /*
  * dblist.c -- directory block list functions
- * 
+ *
  * Copyright 1997 by Theodore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <stdio.h>
@@ -33,7 +33,7 @@
 	ext2_ino_t	num_dirs, max_dirs;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
-	
+
 	num_dirs = 0;
 	max_dirs = fs->super->s_inodes_per_group;
 	for (i = 0; i < fs->group_desc_count; i++) {
@@ -89,7 +89,7 @@
 		&dblist->list);
 	if (retval)
 		goto cleanup;
-	
+
 	if (list)
 		memcpy(dblist->list, list, len);
 	else
@@ -159,12 +159,12 @@
 	struct ext2_db_entry 	*new_entry;
 	errcode_t		retval;
 	unsigned long		old_size;
-	
+
 	EXT2_CHECK_MAGIC(dblist, EXT2_ET_MAGIC_DBLIST);
 
 	if (dblist->count >= dblist->size) {
 		old_size = dblist->size * sizeof(struct ext2_db_entry);
-		dblist->size += 100;
+		dblist->size += dblist->size > 200 ? dblist->size / 2 : 100;
 		retval = ext2fs_resize_mem(old_size, (size_t) dblist->size *
 					   sizeof(struct ext2_db_entry),
 					   &dblist->list);
@@ -190,7 +190,7 @@
 			       int blockcnt)
 {
 	dgrp_t			i;
-	
+
 	EXT2_CHECK_MAGIC(dblist, EXT2_ET_MAGIC_DBLIST);
 
 	for (i=0; i < dblist->count; i++) {
@@ -226,7 +226,7 @@
 {
 	ext2_ino_t	i;
 	int		ret;
-	
+
 	EXT2_CHECK_MAGIC(dblist, EXT2_ET_MAGIC_DBLIST);
 
 	if (!dblist->sorted)
@@ -248,7 +248,7 @@
 
 	if (db_a->blk != db_b->blk)
 		return (int) (db_a->blk - db_b->blk);
-	
+
 	if (db_a->ino != db_b->ino)
 		return (int) (db_a->ino - db_b->ino);
 
@@ -260,11 +260,9 @@
 	return (int) dblist->count;
 }
 
-errcode_t ext2fs_dblist_get_last(ext2_dblist dblist, 
+errcode_t ext2fs_dblist_get_last(ext2_dblist dblist,
 				 struct ext2_db_entry **entry)
 {
-	errcode_t		retval;
-
 	EXT2_CHECK_MAGIC(dblist, EXT2_ET_MAGIC_DBLIST);
 
 	if (dblist->count == 0)
@@ -276,7 +274,7 @@
 }
 
 errcode_t ext2fs_dblist_drop_last(ext2_dblist dblist)
-{	
+{
 	EXT2_CHECK_MAGIC(dblist, EXT2_ET_MAGIC_DBLIST);
 
 	if (dblist->count == 0)
diff --git a/lib/ext2fs/dblist_dir.c b/lib/ext2fs/dblist_dir.c
index 28a04c7..6f370cd 100644
--- a/lib/ext2fs/dblist_dir.c
+++ b/lib/ext2fs/dblist_dir.c
@@ -2,12 +2,12 @@
  * dblist_dir.c --- iterate by directory entry
  *
  * Copyright 1997 by Theodore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <stdio.h>
@@ -54,7 +54,7 @@
 	ctx.errcode = 0;
 
 	retval = ext2fs_dblist_iterate(dblist, db_dir_proc, &ctx);
-	
+
 	if (!block_buf)
 		ext2fs_free_mem(&ctx.buf);
 	if (retval)
@@ -71,7 +71,7 @@
 	ctx = (struct dir_context *) priv_data;
 	ctx->dir = db_info->ino;
 	ctx->errcode = 0;
-	
+
 	ret = ext2fs_process_dir_block(fs, &db_info->blk,
 				       db_info->blockcnt, 0, 0, priv_data);
 	if ((ret & BLOCK_ABORT) && !ctx->errcode)
diff --git a/lib/ext2fs/dir_iterate.c b/lib/ext2fs/dir_iterate.c
index 003c0a3..0087d58 100644
--- a/lib/ext2fs/dir_iterate.c
+++ b/lib/ext2fs/dir_iterate.c
@@ -1,6 +1,6 @@
 /*
  * dir_iterate.c --- ext2fs directory iteration operations
- * 
+ *
  * Copyright (C) 1993, 1994, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -21,6 +21,41 @@
 #include "ext2_fs.h"
 #include "ext2fsP.h"
 
+#define EXT4_MAX_REC_LEN		((1<<16)-1)
+
+errcode_t ext2fs_get_rec_len(ext2_filsys fs,
+			     struct ext2_dir_entry *dirent,
+			     unsigned int *rec_len)
+{
+	unsigned int len = dirent->rec_len;
+
+	if (len == EXT4_MAX_REC_LEN || len == 0)
+		*rec_len = fs->blocksize;
+	else 
+		*rec_len = (len & 65532) | ((len & 3) << 16);
+	return 0;
+}
+
+errcode_t ext2fs_set_rec_len(ext2_filsys fs,
+			     unsigned int len,
+			     struct ext2_dir_entry *dirent)
+{
+	if ((len > fs->blocksize) || (fs->blocksize > (1 << 18)) || (len & 3))
+		return EINVAL;
+	if (len < 65536) {
+		dirent->rec_len = len;
+		return 0;
+	}
+	if (len == fs->blocksize) {
+		if (fs->blocksize == 65536)
+			dirent->rec_len = EXT4_MAX_REC_LEN;
+		else 
+			dirent->rec_len = 0;
+	} else
+		dirent->rec_len = (len & 65532) | ((len >> 16) & 3);
+	return 0;
+}
+
 /*
  * This function checks to see whether or not a potential deleted
  * directory entry looks valid.  What we do is check the deleted entry
@@ -29,16 +64,23 @@
  * undeleted entry.  Returns 1 if the deleted entry looks valid, zero
  * if not valid.
  */
-static int ext2fs_validate_entry(char *buf, int offset, int final_offset)
+static int ext2fs_validate_entry(ext2_filsys fs, char *buf,
+				 unsigned int offset,
+				 unsigned int final_offset)
 {
 	struct ext2_dir_entry *dirent;
-	
-	while (offset < final_offset) {
+	unsigned int rec_len;
+#define DIRENT_MIN_LENGTH 12
+
+	while ((offset < final_offset) &&
+	       (offset <= fs->blocksize - DIRENT_MIN_LENGTH)) {
 		dirent = (struct ext2_dir_entry *)(buf + offset);
-		offset += dirent->rec_len;
-		if ((dirent->rec_len < 8) ||
-		    ((dirent->rec_len % 4) != 0) ||
-		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len))
+		if (ext2fs_get_rec_len(fs, dirent, &rec_len))
+			return 0;
+		offset += rec_len;
+		if ((rec_len < 8) ||
+		    ((rec_len % 4) != 0) ||
+		    ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len))
 			return 0;
 	}
 	return (offset == final_offset);
@@ -59,13 +101,13 @@
 {
 	struct		dir_context	ctx;
 	errcode_t	retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	retval = ext2fs_check_directory(fs, dir);
 	if (retval)
 		return retval;
-	
+
 	ctx.dir = dir;
 	ctx.flags = flags;
 	if (block_buf)
@@ -78,7 +120,7 @@
 	ctx.func = func;
 	ctx.priv_data = priv_data;
 	ctx.errcode = 0;
-	retval = ext2fs_block_iterate2(fs, dir, 0, 0,
+	retval = ext2fs_block_iterate2(fs, dir, BLOCK_FLAG_READ_ONLY, 0,
 				       ext2fs_process_dir_block, &ctx);
 	if (!block_buf)
 		ext2fs_free_mem(&ctx.buf);
@@ -106,7 +148,7 @@
 	return (*xl->func)(dirent, offset, blocksize, buf, xl->real_private);
 }
 
-extern errcode_t ext2fs_dir_iterate(ext2_filsys fs, 
+extern errcode_t ext2fs_dir_iterate(ext2_filsys fs,
 			      ext2_ino_t dir,
 			      int flags,
 			      char *block_buf,
@@ -118,7 +160,7 @@
 			      void *priv_data)
 {
 	struct xlate xl;
-	
+
 	xl.real_private = priv_data;
 	xl.func = func;
 
@@ -144,24 +186,27 @@
 	int		ret = 0;
 	int		changed = 0;
 	int		do_abort = 0;
-	int		entry, size;
+	unsigned int	rec_len, size;
+	int		entry;
 	struct ext2_dir_entry *dirent;
 
 	if (blockcnt < 0)
 		return 0;
 
 	entry = blockcnt ? DIRENT_OTHER_FILE : DIRENT_DOT_FILE;
-	
+
 	ctx->errcode = ext2fs_read_dir_block(fs, *blocknr, ctx->buf);
 	if (ctx->errcode)
 		return BLOCK_ABORT;
 
 	while (offset < fs->blocksize) {
 		dirent = (struct ext2_dir_entry *) (ctx->buf + offset);
-		if (((offset + dirent->rec_len) > fs->blocksize) ||
-		    (dirent->rec_len < 8) ||
-		    ((dirent->rec_len % 4) != 0) ||
-		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
+		if (ext2fs_get_rec_len(fs, dirent, &rec_len))
+			return BLOCK_ABORT;
+		if (((offset + rec_len) > fs->blocksize) ||
+		    (rec_len < 8) ||
+		    ((rec_len % 4) != 0) ||
+		    ((((unsigned) dirent->name_len & 0xFF)+8) > rec_len)) {
 			ctx->errcode = EXT2_ET_DIR_CORRUPTED;
 			return BLOCK_ABORT;
 		}
@@ -177,34 +222,37 @@
 				  ctx->priv_data);
 		if (entry < DIRENT_OTHER_FILE)
 			entry++;
-			
-		if (ret & DIRENT_CHANGED)
+
+		if (ret & DIRENT_CHANGED) {
+			if (ext2fs_get_rec_len(fs, dirent, &rec_len))
+				return BLOCK_ABORT;
 			changed++;
+		}
 		if (ret & DIRENT_ABORT) {
 			do_abort++;
 			break;
 		}
-next:		
+next:
  		if (next_real_entry == offset)
-			next_real_entry += dirent->rec_len;
- 
+			next_real_entry += rec_len;
+
  		if (ctx->flags & DIRENT_FLAG_INCLUDE_REMOVED) {
 			size = ((dirent->name_len & 0xFF) + 11) & ~3;
 
-			if (dirent->rec_len != size)  {
+			if (rec_len != size)  {
 				unsigned int final_offset;
 
-				final_offset = offset + dirent->rec_len;
+				final_offset = offset + rec_len;
 				offset += size;
 				while (offset < final_offset &&
-				       !ext2fs_validate_entry(ctx->buf,
+				       !ext2fs_validate_entry(fs, ctx->buf,
 							      offset,
 							      final_offset))
 					offset += 4;
 				continue;
 			}
 		}
-		offset += dirent->rec_len;
+		offset += rec_len;
 	}
 
 	if (changed) {
diff --git a/lib/ext2fs/dirblock.c b/lib/ext2fs/dirblock.c
index ebfc72c..6542a81 100644
--- a/lib/ext2fs/dirblock.c
+++ b/lib/ext2fs/dirblock.c
@@ -1,6 +1,6 @@
 /*
  * dirblock.c --- directory block routines.
- * 
+ *
  * Copyright (C) 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -25,38 +25,33 @@
 	errcode_t	retval;
 	char		*p, *end;
 	struct ext2_dir_entry *dirent;
-	unsigned int	name_len, rec_len, do_swap;
-	
+	unsigned int	name_len, rec_len;
+
 
  	retval = io_channel_read_blk(fs->io, block, 1, buf);
 	if (retval)
 		return retval;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	do_swap = (fs->flags & (EXT2_FLAG_SWAP_BYTES|
-				EXT2_FLAG_SWAP_BYTES_READ)) != 0;
-#endif
+
 	p = (char *) buf;
 	end = (char *) buf + fs->blocksize;
 	while (p < end-8) {
 		dirent = (struct ext2_dir_entry *) p;
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if (do_swap) {
-			dirent->inode = ext2fs_swab32(dirent->inode);
-			dirent->rec_len = ext2fs_swab16(dirent->rec_len);
-			dirent->name_len = ext2fs_swab16(dirent->name_len);
-		}
+#ifdef WORDS_BIGENDIAN
+		dirent->inode = ext2fs_swab32(dirent->inode);
+		dirent->rec_len = ext2fs_swab16(dirent->rec_len);
+		dirent->name_len = ext2fs_swab16(dirent->name_len);
 #endif
 		name_len = dirent->name_len;
 #ifdef WORDS_BIGENDIAN
 		if (flags & EXT2_DIRBLOCK_V2_STRUCT)
 			dirent->name_len = ext2fs_swab16(dirent->name_len);
 #endif
-		rec_len = dirent->rec_len;
+		if ((retval = ext2fs_get_rec_len(fs, dirent, &rec_len)) != 0)
+			return retval;
 		if ((rec_len < 8) || (rec_len % 4)) {
 			rec_len = 8;
 			retval = EXT2_ET_DIR_CORRUPTED;
-		}
-		if (((name_len & 0xFF) + 8) > dirent->rec_len)
+		} else if (((name_len & 0xFF) + 8) > rec_len)
 			retval = EXT2_ET_DIR_CORRUPTED;
 		p += rec_len;
 	}
@@ -73,22 +68,13 @@
 errcode_t ext2fs_write_dir_block2(ext2_filsys fs, blk_t block,
 				  void *inbuf, int flags EXT2FS_ATTR((unused)))
 {
-#ifdef EXT2FS_ENABLE_SWAPFS
-	int		do_swap = 0;
+#ifdef WORDS_BIGENDIAN
 	errcode_t	retval;
 	char		*p, *end;
 	char		*buf = 0;
+	unsigned int	rec_len;
 	struct ext2_dir_entry *dirent;
 
-	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
-		do_swap = 1;
-
-#ifndef WORDS_BIGENDIAN
-	if (!do_swap)
-		return io_channel_write_blk(fs->io, block, 1, (char *) inbuf);
-#endif
-
 	retval = ext2fs_get_mem(fs->blocksize, &buf);
 	if (retval)
 		return retval;
@@ -97,21 +83,20 @@
 	end = buf + fs->blocksize;
 	while (p < end) {
 		dirent = (struct ext2_dir_entry *) p;
-		if ((dirent->rec_len < 8) ||
-		    (dirent->rec_len % 4)) {
+		if ((retval = ext2fs_get_rec_len(fs, dirent, &rec_len)) != 0)
+			return retval;
+		if ((rec_len < 8) ||
+		    (rec_len % 4)) {
 			ext2fs_free_mem(&buf);
 			return (EXT2_ET_DIR_CORRUPTED);
 		}
-		p += dirent->rec_len;
-		if (do_swap) {
-			dirent->inode = ext2fs_swab32(dirent->inode);
-			dirent->rec_len = ext2fs_swab16(dirent->rec_len);
-			dirent->name_len = ext2fs_swab16(dirent->name_len);
-		}
-#ifdef WORDS_BIGENDIAN 
+		p += rec_len;
+		dirent->inode = ext2fs_swab32(dirent->inode);
+		dirent->rec_len = ext2fs_swab16(dirent->rec_len);
+		dirent->name_len = ext2fs_swab16(dirent->name_len);
+
 		if (flags & EXT2_DIRBLOCK_V2_STRUCT)
 			dirent->name_len = ext2fs_swab16(dirent->name_len);
-#endif
 	}
  	retval = io_channel_write_blk(fs->io, block, 1, buf);
 	ext2fs_free_mem(&buf);
diff --git a/lib/ext2fs/dirhash.c b/lib/ext2fs/dirhash.c
index 9fd2016..c42ccd9 100644
--- a/lib/ext2fs/dirhash.c
+++ b/lib/ext2fs/dirhash.c
@@ -2,7 +2,7 @@
  * dirhash.c -- Calculate the hash of a directory entry
  *
  * Copyright (c) 2001  Daniel Phillips
- * 
+ *
  * Copyright (c) 2002 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -25,7 +25,7 @@
  * (see Applied Cryptography, 2nd edition, p448).
  *
  * Jeremy Fitzhardinge <jeremy@zip.com.au> 1998
- * 
+ *
  * This code is made available under the terms of the GPL
  */
 #define DELTA 0x9E3779B9
@@ -37,10 +37,10 @@
 	__u32	a = in[0], b = in[1], c = in[2], d = in[3];
 	int	n = 16;
 
-	do {							
-		sum += DELTA;					
-		b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b);	
-		b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d);	
+	do {
+		sum += DELTA;
+		b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b);
+		b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d);
 	} while(--n);
 
 	buf[0] += b0;
@@ -130,7 +130,7 @@
 		else
 			c = (int) *scp++;
 		hash = hash1 + (hash0 ^ (c * 7152373));
-		
+
 		if (hash & 0x80000000) hash -= 0x7fffffff;
 		hash1 = hash0;
 		hash0 = hash;
@@ -177,11 +177,11 @@
  * Returns the hash of a filename.  If len is 0 and name is NULL, then
  * this function can be used to test whether or not a hash version is
  * supported.
- * 
+ *
  * The seed is an 4 longword (32 bits) "secret" which can be used to
  * uniquify a hash.  If the seed is all zero's, then some default seed
  * may be used.
- * 
+ *
  * A particular hash version specifies whether or not the seed is
  * represented, and whether or not the returned hash is 32 bits or 64
  * bits.  32 bit hashes will return 0 for the minor hash.
@@ -213,7 +213,7 @@
 		if (i < 4)
 			memcpy(buf, seed, sizeof(buf));
 	}
-		
+
 	switch (version) {
 	case EXT2_HASH_LEGACY_UNSIGNED:
 		unsigned_flag++;
diff --git a/lib/ext2fs/dosio.c b/lib/ext2fs/dosio.c
index d695b18..a7968cd 100644
--- a/lib/ext2fs/dosio.c
+++ b/lib/ext2fs/dosio.c
@@ -2,7 +2,7 @@
  * dosio.c -- Disk I/O module for the ext2fs/DOS library.
  *
  * Copyright (c) 1997 by Theodore Ts'o.
- * 
+ *
  * Copyright (c) 1997 Mark Habersack
  * This file may be distributed under the terms of the GNU Public License.
  *
@@ -179,7 +179,7 @@
   PARTITION      *part;
   PTABLE_ENTRY   *pent;
   PARTITION        **newparts;
-  
+
   if(!dev)
   {
     _dio_error = ERR_BADDEV;
@@ -278,8 +278,8 @@
   if(!HW_OK())
   {
     _dio_error = ERR_HARDWARE;
-    if (part)
-	    free(part);
+    free(part->dev);
+    free(part);
     return EFAULT;
   }
 
@@ -298,8 +298,8 @@
   if(!HW_OK())
   {
     _dio_error = ERR_HARDWARE;
-    if (part)
-	    free(part);
+    free(part->dev);
+    free(part);
     return EFAULT;
   }
 
@@ -310,8 +310,8 @@
   {
     _dio_error = part->pno == 0xFE ? ERR_EMPTYPART :
                  part->pno == 0xFD ? ERR_LINUXSWAP : ERR_NOTEXT2FS;
-    if (part)
-	    free(part);
+    free(part->dev);
+    free(part);
     return ENODEV;
   }
 
@@ -352,10 +352,8 @@
 
 static errcode_t dos_close(io_channel channel)
 {
-	if (channel->name)
-		free(channel->name);
-	if (channel)
-		free(channel);
+	free(channel->name);
+	free(channel);
 
 	return 0;
 }
diff --git a/lib/ext2fs/dupfs.c b/lib/ext2fs/dupfs.c
index 1cf314c..2f9bedc 100644
--- a/lib/ext2fs/dupfs.c
+++ b/lib/ext2fs/dupfs.c
@@ -1,6 +1,6 @@
 /*
  * dupfs.c --- duplicate a ext2 filesystem handle
- * 
+ *
  * Copyright (C) 1997, 1998, 2001, 2003, 2005 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -25,7 +25,7 @@
 	errcode_t	retval;
 
 	EXT2_CHECK_MAGIC(src, EXT2_ET_MAGIC_EXT2FS_FILSYS);
-	
+
 	retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs);
 	if (retval)
 		return retval;
@@ -91,6 +91,6 @@
 errout:
 	ext2fs_free(fs);
 	return retval;
-	
+
 }
 
diff --git a/lib/ext2fs/e2image.h b/lib/ext2fs/e2image.h
index e12b7d6..c05d43e 100644
--- a/lib/ext2fs/e2image.h
+++ b/lib/ext2fs/e2image.h
@@ -1,10 +1,10 @@
 /*
  * e2image.h --- header file describing the ext2 image format
- * 
+ *
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * Note: this uses the POSIX IO interfaces, unlike most of the other
- * functions in this library.  So sue me.  
+ * functions in this library.  So sue me.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
@@ -24,7 +24,7 @@
 	char	fs_uuid[16];	/* UUID of filesystem */
 	__u32	fs_blocksize;	/* Block size of the filesystem */
 	__u32	fs_reserved[8];
-	
+
 	__u32	image_device;	/* Device number of image file */
 	__u32	image_inode;	/* Inode number of image file */
 	__u32	image_time;	/* Time of image creation */
@@ -37,15 +37,15 @@
 	__u32	offset_reserved[8];
 };
 
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ext2fs/expanddir.c b/lib/ext2fs/expanddir.c
index 10a5149..934eaf1 100644
--- a/lib/ext2fs/expanddir.c
+++ b/lib/ext2fs/expanddir.c
@@ -1,6 +1,6 @@
 /*
  * expand.c --- expand an ext2fs directory
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999  Theodore Ts'o.
  *
  * %Begin-Header%
@@ -36,7 +36,7 @@
 	static blk_t	last_blk = 0;
 	char		*block;
 	errcode_t	retval;
-	
+
 	if (*blocknr) {
 		last_blk = *blocknr;
 		return 0;
@@ -62,7 +62,7 @@
 		}
 		memset(block, 0, fs->blocksize);
 		retval = io_channel_write_blk(fs->io, new_blk, 1, block);
-	}	
+	}
 	if (retval) {
 		es->err = retval;
 		return BLOCK_ABORT;
@@ -83,7 +83,7 @@
 	errcode_t	retval;
 	struct expand_dir_struct es;
 	struct ext2_inode	inode;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	if (!(fs->flags & EXT2_FLAG_RW))
@@ -95,11 +95,11 @@
 	retval = ext2fs_check_directory(fs, dir);
 	if (retval)
 		return retval;
-	
+
 	es.done = 0;
 	es.err = 0;
 	es.newblocks = 0;
-	
+
 	retval = ext2fs_block_iterate2(fs, dir, BLOCK_FLAG_APPEND,
 				       0, expand_dir_proc, &es);
 
@@ -114,9 +114,9 @@
 	retval = ext2fs_read_inode(fs, dir, &inode);
 	if (retval)
 		return retval;
-	
+
 	inode.i_size += fs->blocksize;
-	inode.i_blocks += (fs->blocksize / 512) * es.newblocks;
+	ext2fs_iblk_add_blocks(fs, &inode, es.newblocks);
 
 	retval = ext2fs_write_inode(fs, dir, &inode);
 	if (retval)
diff --git a/lib/ext2fs/ext2_err.c b/lib/ext2fs/ext2_err.c
index 9699536..9866a84 100644
--- a/lib/ext2fs/ext2_err.c
+++ b/lib/ext2fs/ext2_err.c
@@ -6,7 +6,7 @@
 #include <stdlib.h>
 
 static const char * const text[] = {
-		"EXT2FS Library version 1.40.8",
+		"EXT2FS Library version 1.41.11",
 		"Wrong magic number for ext2_filsys structure",
 		"Wrong magic number for badblocks_list structure",
 		"Wrong magic number for badblocks_iterate structure",
@@ -24,7 +24,7 @@
 		"Wrong magic number for ext2 file structure",
 		"Wrong magic number for Ext2 Image Header",
 		"Wrong magic number for inode io_channel structure",
-		"Wrong magic number --- RESERVED_9",
+		"Wrong magic number for ext4 extent handle",
 		"Bad magic number in super-block",
 		"Filesystem revision too high",
 		"Attempt to write to filesystem opened read-only",
@@ -113,6 +113,36 @@
 		"TDB: Record does not exist",
 		"TDB: Write not permitted",
 		"Ext2fs directory block list is empty",
+		"Attempt to modify a block mapping via a read-only block iterator",
+		"Wrong magic number for ext4 extent saved path",
+		"Wrong magic number --- RESERVED_10",
+		"Wrong magic number --- RESERVED_11",
+		"Wrong magic number --- RESERVED_12",
+		"Wrong magic number --- RESERVED_13",
+		"Wrong magic number --- RESERVED_14",
+		"Wrong magic number --- RESERVED_15",
+		"Wrong magic number --- RESERVED_16",
+		"Wrong magic number --- RESERVED_17",
+		"Wrong magic number --- RESERVED_18",
+		"Wrong magic number --- RESERVED_19",
+		"Corrupt extent header",
+		"Corrupt extent index",
+		"Corrupt extent",
+		"No free space in extent map",
+		"Inode does not use extents",
+		"No 'next' extent",
+		"No 'previous' extent",
+		"No 'up' extent",
+		"No 'down' extent",
+		"No current node",
+		"Ext2fs operation not supported",
+		"No room to insert extent in node",
+		"Splitting would result in empty node",
+		"Extent not found",
+		"Operation not supported for inodes containing extents",
+		"Extent length is invalid",
+		"I/O Channel does not support 64-bit block numbers",
+		"Can't check if filesystem is mounted due to missing mtab file",
     0
 };
 
@@ -127,7 +157,7 @@
 };
 extern struct et_list *_et_list;
 
-const struct error_table et_ext2_error_table = { text, 2133571328L, 107 };
+const struct error_table et_ext2_error_table = { text, 2133571328L, 137 };
 
 static struct et_list link = { 0, 0 };
 
diff --git a/lib/ext2fs/ext2_err.et.in b/lib/ext2fs/ext2_err.et.in
index 7451242..406f3ae 100644
--- a/lib/ext2fs/ext2_err.et.in
+++ b/lib/ext2fs/ext2_err.et.in
@@ -62,8 +62,8 @@
 ec	EXT2_ET_MAGIC_INODE_IO_CHANNEL,
 	"Wrong magic number for inode io_channel structure"
 
-ec	EXT2_ET_MAGIC_RESERVED_9,
-	"Wrong magic number --- RESERVED_9"
+ec	EXT2_ET_MAGIC_EXTENT_HANDLE,
+	"Wrong magic number for ext4 extent handle"
 
 ec	EXT2_ET_BAD_MAGIC,
 	"Bad magic number in super-block"
@@ -329,5 +329,94 @@
 ec	EXT2_ET_DBLIST_EMPTY,
 	"Ext2fs directory block list is empty"
 
-	end
+ec	EXT2_ET_RO_BLOCK_ITERATE,
+	"Attempt to modify a block mapping via a read-only block iterator"
 
+ec	EXT2_ET_MAGIC_EXTENT_PATH,
+	"Wrong magic number for ext4 extent saved path"
+
+ec	EXT2_ET_MAGIC_RESERVED_10,
+	"Wrong magic number --- RESERVED_10"
+
+ec	EXT2_ET_MAGIC_RESERVED_11,
+	"Wrong magic number --- RESERVED_11"
+
+ec	EXT2_ET_MAGIC_RESERVED_12,
+	"Wrong magic number --- RESERVED_12"
+
+ec	EXT2_ET_MAGIC_RESERVED_13,
+	"Wrong magic number --- RESERVED_13"
+
+ec	EXT2_ET_MAGIC_RESERVED_14,
+	"Wrong magic number --- RESERVED_14"
+
+ec	EXT2_ET_MAGIC_RESERVED_15,
+	"Wrong magic number --- RESERVED_15"
+
+ec	EXT2_ET_MAGIC_RESERVED_16,
+	"Wrong magic number --- RESERVED_16"
+
+ec	EXT2_ET_MAGIC_RESERVED_17,
+	"Wrong magic number --- RESERVED_17"
+
+ec	EXT2_ET_MAGIC_RESERVED_18,
+	"Wrong magic number --- RESERVED_18"
+
+ec	EXT2_ET_MAGIC_RESERVED_19,
+	"Wrong magic number --- RESERVED_19"
+
+ec	EXT2_ET_EXTENT_HEADER_BAD,
+	"Corrupt extent header"
+
+ec	EXT2_ET_EXTENT_INDEX_BAD,
+	"Corrupt extent index"
+
+ec	EXT2_ET_EXTENT_LEAF_BAD,
+	"Corrupt extent"
+
+ec	EXT2_ET_EXTENT_NO_SPACE,
+	"No free space in extent map"
+
+ec	EXT2_ET_INODE_NOT_EXTENT,
+	"Inode does not use extents"
+
+ec	EXT2_ET_EXTENT_NO_NEXT,
+	"No 'next' extent"
+
+ec	EXT2_ET_EXTENT_NO_PREV,
+	"No 'previous' extent"
+
+ec	EXT2_ET_EXTENT_NO_UP,
+	"No 'up' extent"
+
+ec	EXT2_ET_EXTENT_NO_DOWN,
+	"No 'down' extent"
+
+ec	EXT2_ET_NO_CURRENT_NODE,
+	"No current node"
+
+ec	EXT2_ET_OP_NOT_SUPPORTED,
+	"Ext2fs operation not supported"
+
+ec	EXT2_ET_CANT_INSERT_EXTENT,
+	"No room to insert extent in node"
+
+ec	EXT2_ET_CANT_SPLIT_EXTENT,
+	"Splitting would result in empty node"
+
+ec	EXT2_ET_EXTENT_NOT_FOUND,
+	"Extent not found"
+
+ec	EXT2_ET_EXTENT_NOT_SUPPORTED,
+	"Operation not supported for inodes containing extents"
+
+ec	EXT2_ET_EXTENT_INVALID_LENGTH,
+	"Extent length is invalid"
+
+ec	EXT2_ET_IO_CHANNEL_NO_SUPPORT_64,
+	"I/O Channel does not support 64-bit block numbers"
+
+ec	EXT2_NO_MTAB_FILE,
+	"Can't check if filesystem is mounted due to missing mtab file"
+
+	end
diff --git a/lib/ext2fs/ext2_err.h b/lib/ext2fs/ext2_err.h
index 7f0e753..7b2df09 100644
--- a/lib/ext2fs/ext2_err.h
+++ b/lib/ext2fs/ext2_err.h
@@ -23,7 +23,7 @@
 #define EXT2_ET_MAGIC_EXT2_FILE                  (2133571343L)
 #define EXT2_ET_MAGIC_E2IMAGE                    (2133571344L)
 #define EXT2_ET_MAGIC_INODE_IO_CHANNEL           (2133571345L)
-#define EXT2_ET_MAGIC_RESERVED_9                 (2133571346L)
+#define EXT2_ET_MAGIC_EXTENT_HANDLE              (2133571346L)
 #define EXT2_ET_BAD_MAGIC                        (2133571347L)
 #define EXT2_ET_REV_TOO_HIGH                     (2133571348L)
 #define EXT2_ET_RO_FILSYS                        (2133571349L)
@@ -112,6 +112,36 @@
 #define EXT2_ET_TDB_ERR_NOEXIST                  (2133571432L)
 #define EXT2_ET_TDB_ERR_RDONLY                   (2133571433L)
 #define EXT2_ET_DBLIST_EMPTY                     (2133571434L)
+#define EXT2_ET_RO_BLOCK_ITERATE                 (2133571435L)
+#define EXT2_ET_MAGIC_EXTENT_PATH                (2133571436L)
+#define EXT2_ET_MAGIC_RESERVED_10                (2133571437L)
+#define EXT2_ET_MAGIC_RESERVED_11                (2133571438L)
+#define EXT2_ET_MAGIC_RESERVED_12                (2133571439L)
+#define EXT2_ET_MAGIC_RESERVED_13                (2133571440L)
+#define EXT2_ET_MAGIC_RESERVED_14                (2133571441L)
+#define EXT2_ET_MAGIC_RESERVED_15                (2133571442L)
+#define EXT2_ET_MAGIC_RESERVED_16                (2133571443L)
+#define EXT2_ET_MAGIC_RESERVED_17                (2133571444L)
+#define EXT2_ET_MAGIC_RESERVED_18                (2133571445L)
+#define EXT2_ET_MAGIC_RESERVED_19                (2133571446L)
+#define EXT2_ET_EXTENT_HEADER_BAD                (2133571447L)
+#define EXT2_ET_EXTENT_INDEX_BAD                 (2133571448L)
+#define EXT2_ET_EXTENT_LEAF_BAD                  (2133571449L)
+#define EXT2_ET_EXTENT_NO_SPACE                  (2133571450L)
+#define EXT2_ET_INODE_NOT_EXTENT                 (2133571451L)
+#define EXT2_ET_EXTENT_NO_NEXT                   (2133571452L)
+#define EXT2_ET_EXTENT_NO_PREV                   (2133571453L)
+#define EXT2_ET_EXTENT_NO_UP                     (2133571454L)
+#define EXT2_ET_EXTENT_NO_DOWN                   (2133571455L)
+#define EXT2_ET_NO_CURRENT_NODE                  (2133571456L)
+#define EXT2_ET_OP_NOT_SUPPORTED                 (2133571457L)
+#define EXT2_ET_CANT_INSERT_EXTENT               (2133571458L)
+#define EXT2_ET_CANT_SPLIT_EXTENT                (2133571459L)
+#define EXT2_ET_EXTENT_NOT_FOUND                 (2133571460L)
+#define EXT2_ET_EXTENT_NOT_SUPPORTED             (2133571461L)
+#define EXT2_ET_EXTENT_INVALID_LENGTH            (2133571462L)
+#define EXT2_ET_IO_CHANNEL_NO_SUPPORT_64         (2133571463L)
+#define EXT2_NO_MTAB_FILE                        (2133571464L)
 extern const struct error_table et_ext2_error_table;
 extern void initialize_ext2_error_table(void);
 
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index dd5e495..b022d48 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -173,6 +173,7 @@
 
 #define EXT2_BG_INODE_UNINIT	0x0001 /* Inode table/bitmap not initialized */
 #define EXT2_BG_BLOCK_UNINIT	0x0002 /* Block bitmap not initialized */
+#define EXT2_BG_INODE_ZEROED	0x0004 /* On-disk itable initialized to zero */
 
 /*
  * Data structures used by the directory indexing feature
@@ -217,6 +218,13 @@
 /*
  * Macro-instructions used to manage group descriptors
  */
+#define EXT2_MIN_DESC_SIZE             32
+#define EXT2_MIN_DESC_SIZE_64BIT       64
+#define EXT2_MAX_DESC_SIZE             EXT2_MIN_BLOCK_SIZE
+#define EXT2_DESC_SIZE(s)                                                \
+       ((EXT2_SB(s)->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ? \
+	(s)->s_desc_size : EXT2_MIN_DESC_SIZE)
+
 #define EXT2_BLOCKS_PER_GROUP(s)	(EXT2_SB(s)->s_blocks_per_group)
 #define EXT2_INODES_PER_GROUP(s)	(EXT2_SB(s)->s_inodes_per_group)
 #define EXT2_INODES_PER_BLOCK(s)	(EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
@@ -227,7 +235,7 @@
 #define EXT2_DESC_PER_BLOCK(s)		(EXT2_SB(s)->s_desc_per_block)
 #define EXT2_DESC_PER_BLOCK_BITS(s)	(EXT2_SB(s)->s_desc_per_block_bits)
 #else
-#define EXT2_DESC_PER_BLOCK(s)		(EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
+#define EXT2_DESC_PER_BLOCK(s)		(EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
 #endif
 
 /*
@@ -263,11 +271,13 @@
 #define EXT2_NOTAIL_FL			0x00008000 /* file tail should not be merged */
 #define EXT2_DIRSYNC_FL 		0x00010000 /* Synchronous directory modifications */
 #define EXT2_TOPDIR_FL			0x00020000 /* Top of directory hierarchies*/
+#define EXT4_HUGE_FILE_FL               0x00040000 /* Set to each huge file */
 #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
+#define EXT4_EOFBLOCKS_FL		0x00400000 /* Blocks allocated beyond EOF */
 #define EXT2_RESERVED_FL		0x80000000 /* reserved for ext2 lib */
 
-#define EXT2_FL_USER_VISIBLE		0x000BDFFF /* User visible flags */
-#define EXT2_FL_USER_MODIFIABLE		0x000080FF /* User modifiable flags */
+#define EXT2_FL_USER_VISIBLE		0x004BDFFF /* User visible flags */
+#define EXT2_FL_USER_MODIFIABLE		0x004B80FF /* User modifiable flags */
 
 /*
  * ioctl commands
@@ -284,6 +294,16 @@
 	__u16 unused;		/* Number of reserved GDT blocks in group */
 };
 
+struct ext4_new_group_input {
+	__u32 group;		/* Group number for this data */
+	__u64 block_bitmap;	/* Absolute block number of block bitmap */
+	__u64 inode_bitmap;	/* Absolute block number of inode bitmap */
+	__u64 inode_table;	/* Absolute block number of inode table start */
+	__u32 blocks_count;	/* Total number of blocks in this group */
+	__u16 reserved_blocks;	/* Number of reserved blocks in this group */
+	__u16 unused;
+};
+
 #ifdef __GNU__			/* Needed for the Hurd */
 #define _IOT_ext2_new_group_input _IOT (_IOTS(__u32), 5, _IOTS(__u16), 2, 0, 0)
 #endif
@@ -296,6 +316,7 @@
 #define EXT2_IOC_SETVERSION_NEW		_IOW('f', 4, long)
 #define EXT2_IOC_GROUP_EXTEND		_IOW('f', 7, unsigned long)
 #define EXT2_IOC_GROUP_ADD		_IOW('f', 8,struct ext2_new_group_input)
+#define EXT4_IOC_GROUP_ADD		_IOW('f', 8,struct ext4_new_group_input)
 
 /*
  * Structure of an inode on the disk
@@ -319,9 +340,6 @@
 		struct {
 			__u32  h_i_translator;
 		} hurd1;
-		struct {
-			__u32  m_i_reserved1;
-		} masix1;
 	} osd1;				/* OS dependent 1 */
 	__u32	i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
 	__u32	i_generation;	/* File version (for NFS) */
@@ -331,7 +349,7 @@
 	union {
 		struct {
 			__u16	l_i_blocks_hi;
-			__u16	i_pad1;
+			__u16	l_i_file_acl_high;
 			__u16	l_i_uid_high;	/* these 2 fields    */
 			__u16	l_i_gid_high;	/* were reserved2[0] */
 			__u32	l_i_reserved2;
@@ -344,12 +362,6 @@
 			__u16	h_i_gid_high;
 			__u32	h_i_author;
 		} hurd2;
-		struct {
-			__u8	m_i_frag;	/* Fragment number */
-			__u8	m_i_fsize;	/* Fragment size */
-			__u16	m_pad1;
-			__u32	m_i_reserved2[2];
-		} masix2;
 	} osd2;				/* OS dependent 2 */
 };
 
@@ -375,9 +387,6 @@
 		struct {
 			__u32  h_i_translator;
 		} hurd1;
-		struct {
-			__u32  m_i_reserved1;
-		} masix1;
 	} osd1;				/* OS dependent 1 */
 	__u32	i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
 	__u32	i_generation;	/* File version (for NFS) */
@@ -387,7 +396,7 @@
 	union {
 		struct {
 			__u16	l_i_blocks_hi;
-			__u16	i_pad1;
+			__u16	l_i_file_acl_high;
 			__u16	l_i_uid_high;	/* these 2 fields    */
 			__u16	l_i_gid_high;	/* were reserved2[0] */
 			__u32	l_i_reserved2;
@@ -400,12 +409,6 @@
 			__u16	h_i_gid_high;
 			__u32	h_i_author;
 		} hurd2;
-		struct {
-			__u8	m_i_frag;	/* Fragment number */
-			__u8	m_i_fsize;	/* Fragment size */
-			__u16	m_pad1;
-			__u32	m_i_reserved2[2];
-		} masix2;
 	} osd2;				/* OS dependent 2 */
 	__u16	i_extra_isize;
 	__u16	i_pad1;
@@ -414,6 +417,7 @@
 	__u32	i_atime_extra;	/* extra Access time (nsec << 2 | epoch) */
 	__u32	i_crtime;	/* File creation time */
 	__u32	i_crtime_extra;	/* extra File creation time (nsec << 2 | epoch)*/
+	__u32	i_version_hi;	/* high 32 bits for 64-bit version */
 };
 
 #define i_size_high	i_dir_acl
@@ -437,37 +441,20 @@
 #define i_gid_high	osd2.hurd2.h_i_gid_high
 #define i_author	osd2.hurd2.h_i_author
 
-#else
-#if defined(__masix__)
-
-#define i_reserved1	osd1.masix1.m_i_reserved1
-#define i_frag		osd2.masix2.m_i_frag
-#define i_fsize		osd2.masix2.m_i_fsize
-#define i_reserved2	osd2.masix2.m_i_reserved2
-
-#endif  /* __masix__ */
 #endif  /* __GNU__ */
 #endif	/* defined(__KERNEL__) || defined(__linux__) */
 
-#if defined(__masix__)
-#define inode_uid(inode)	((inode).i_uid)
-#define inode_gid(inode)	((inode).i_gid)
-#define ext2fs_set_i_uid_high(inode,x) (x)
-#define ext2fs_set_i_gid_high(inode,x) (x)
-
-#else
 #define inode_uid(inode)	((inode).i_uid | (inode).osd2.linux2.l_i_uid_high << 16)
 #define inode_gid(inode)	((inode).i_gid | (inode).osd2.linux2.l_i_gid_high << 16)
 #define ext2fs_set_i_uid_high(inode,x) ((inode).osd2.linux2.l_i_uid_high = (x))
 #define ext2fs_set_i_gid_high(inode,x) ((inode).osd2.linux2.l_i_gid_high = (x))
-#endif
 
 /*
  * File system states
  */
 #define EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
 #define EXT2_ERROR_FS			0x0002	/* Errors detected */
-#define EXT4_ORPHAN_FS			0x0004	/* Orphans being recovered */
+#define EXT3_ORPHAN_FS			0x0004	/* Orphans being recovered */
 
 /*
  * Misc. filesystem flags
@@ -590,7 +577,11 @@
 	__u16   s_mmp_interval;         /* # seconds to wait in MMP checking */
 	__u64   s_mmp_block;            /* Block for multi-mount protection */
 	__u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
-	__u32   s_reserved[163];        /* Padding to the end of the block */
+	__u8	s_log_groups_per_flex;	/* FLEX_BG group size */
+	__u8    s_reserved_char_pad;
+	__u16	s_reserved_pad;		/* Padding to next 32bits */
+	__u64	s_kbytes_written;	/* nr of lifetime kilobytes written */
+	__u32   s_reserved[160];        /* Padding to the end of the block */
 };
 
 /*
@@ -598,7 +589,7 @@
  */
 #define EXT2_OS_LINUX		0
 #define EXT2_OS_HURD		1
-#define EXT2_OS_MASIX		2
+#define EXT2_OBSO_OS_MASIX	2
 #define EXT2_OS_FREEBSD		3
 #define EXT2_OS_LITES		4
 
@@ -653,12 +644,14 @@
 #define EXT3_FEATURE_INCOMPAT_EXTENTS		0x0040
 #define EXT4_FEATURE_INCOMPAT_64BIT		0x0080
 #define EXT4_FEATURE_INCOMPAT_MMP		0x0100
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG		0x0200
 
 
 #define EXT2_FEATURE_COMPAT_SUPP	0
 #define EXT2_FEATURE_INCOMPAT_SUPP	(EXT2_FEATURE_INCOMPAT_FILETYPE)
 #define EXT2_FEATURE_RO_COMPAT_SUPP	(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
 					 EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+					 EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
 					 EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
 
 /*
@@ -675,7 +668,7 @@
 #define EXT2_DEFM_XATTR_USER	0x0004
 #define EXT2_DEFM_ACL		0x0008
 #define EXT2_DEFM_UID16		0x0010
-#define EXT3_DEFM_JMODE		0x0060 
+#define EXT3_DEFM_JMODE		0x0060
 #define EXT3_DEFM_JMODE_DATA	0x0020
 #define EXT3_DEFM_JMODE_ORDERED	0x0040
 #define EXT3_DEFM_JMODE_WBACK	0x0060
diff --git a/lib/ext2fs/ext2_io.h b/lib/ext2fs/ext2_io.h
index eada278..2a579e6 100644
--- a/lib/ext2fs/ext2_io.h
+++ b/lib/ext2fs/ext2_io.h
@@ -1,6 +1,6 @@
 /*
  * io.h --- the I/O manager abstraction
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -26,6 +26,7 @@
 
 typedef struct struct_io_manager *io_manager;
 typedef struct struct_io_channel *io_channel;
+typedef struct struct_io_stats *io_stats;
 
 #define CHANNEL_FLAGS_WRITETHROUGH	0x01
 
@@ -50,11 +51,18 @@
 				       errcode_t error);
 	int		refcount;
 	int		flags;
-	int		reserved[14];
+	long		reserved[14];
 	void		*private_data;
 	void		*app_data;
 };
 
+struct struct_io_stats {
+	int			num_fields;
+	int			reserved;
+	unsigned long long	bytes_read;
+	unsigned long long	bytes_written;
+};
+
 struct struct_io_manager {
 	errcode_t magic;
 	const char *name;
@@ -68,9 +76,14 @@
 	errcode_t (*flush)(io_channel channel);
 	errcode_t (*write_byte)(io_channel channel, unsigned long offset,
 				int count, const void *data);
-	errcode_t (*set_option)(io_channel channel, const char *option, 
+	errcode_t (*set_option)(io_channel channel, const char *option,
 				const char *arg);
-	int		reserved[14];
+	errcode_t (*get_stats)(io_channel channel, io_stats *io_stats);
+	errcode_t (*read_blk64)(io_channel channel, unsigned long long block,
+					int count, void *data);
+	errcode_t (*write_blk64)(io_channel channel, unsigned long long block,
+					int count, const void *data);
+	long	reserved[16];
 };
 
 #define IO_FLAG_RW		0x0001
@@ -85,17 +98,28 @@
 #define io_channel_write_blk(c,b,n,d)	((c)->manager->write_blk((c),b,n,d))
 #define io_channel_flush(c) 		((c)->manager->flush((c)))
 #define io_channel_bumpcount(c)		((c)->refcount++)
-	
+
 /* io_manager.c */
-extern errcode_t io_channel_set_options(io_channel channel, 
+extern errcode_t io_channel_set_options(io_channel channel,
 					const char *options);
-extern errcode_t io_channel_write_byte(io_channel channel, 
+extern errcode_t io_channel_write_byte(io_channel channel,
 				       unsigned long offset,
 				       int count, const void *data);
+extern errcode_t io_channel_read_blk64(io_channel channel,
+				       unsigned long long block,
+				       int count, void *data);
+extern errcode_t io_channel_write_blk64(io_channel channel,
+					unsigned long long block,
+					int count, const void *data);
 
 /* unix_io.c */
 extern io_manager unix_io_manager;
 
+/* undo_io.c */
+extern io_manager undo_io_manager;
+extern errcode_t set_undo_io_backing_manager(io_manager manager);
+extern errcode_t set_undo_io_backup_file(char *file_name);
+
 /* test_io.c */
 extern io_manager test_io_manager, test_io_backing_manager;
 extern void (*test_io_cb_read_blk)
@@ -106,4 +130,4 @@
 	(int blksize, errcode_t err);
 
 #endif /* _EXT2FS_EXT2_IO_H */
-	
+
diff --git a/lib/ext2fs/ext2_types.h b/lib/ext2fs/ext2_types.h
index 6770b1b..36f0eed 100644
--- a/lib/ext2fs/ext2_types.h
+++ b/lib/ext2fs/ext2_types.h
@@ -63,7 +63,7 @@
 #if (4 == 4)
 typedef	unsigned int	__u32;
 #else
-#if (4 == 4)
+#if (8 == 4)
 typedef	unsigned long	__u32;
 #else
 #if (2 == 4)
@@ -81,7 +81,7 @@
 #if (4 == 4)
 typedef	int		__s32;
 #else
-#if (4 == 4)
+#if (8 == 4)
 typedef	long		__s32;
 #else
 #if (2 == 4)
@@ -99,7 +99,7 @@
 #if (4 == 8)
 typedef unsigned int	__u64;
 #else
-#if (4 == 8)
+#if (8 == 8)
 typedef unsigned long	__u64;
 #else
 #if (8 == 8)
@@ -115,7 +115,7 @@
 #if (4 == 8)
 typedef int		__s64;
 #else
-#if (4 == 8)
+#if (8 == 8)
 typedef long		__s64;
 #else
 #if (8 == 8)
@@ -139,3 +139,7 @@
 #undef __U64_TYPEDEF
 
 #endif /* _*_TYPES_H */
+
+/* These defines are needed for the public ext2fs.h header file */
+#define HAVE_SYS_TYPES_H 1
+#undef WORDS_BIGENDIAN
diff --git a/lib/ext2fs/ext2_types.h.in b/lib/ext2fs/ext2_types.h.in
index 899476b..aa7ca3a 100644
--- a/lib/ext2fs/ext2_types.h.in
+++ b/lib/ext2fs/ext2_types.h.in
@@ -132,3 +132,5 @@
 #undef __U64_TYPEDEF
 
 #endif /* _*_TYPES_H */
+
+@PUBLIC_CONFIG_HEADER@
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index d098961..234fbdd 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -1,6 +1,6 @@
 /*
  * ext2fs.h --- ext2fs
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -30,15 +30,6 @@
 #endif
 
 /*
- * Build in support for byte-swapping filesystems if we the feature
- * has been configured or if we're being built on a CPU architecture
- * with a non-native byte order.
- */
-#if defined(ENABLE_SWAPFS) || defined(WORDS_BIGENDIAN)
-#define EXT2FS_ENABLE_SWAPFS
-#endif
-
-/*
  * Where the master copy of the superblock is located, and how big
  * superblocks are supposed to be.  We define SUPERBLOCK_SIZE because
  * the size of the superblock structure is not necessarily trustworthy
@@ -74,6 +65,7 @@
 
 typedef __u32		ext2_ino_t;
 typedef __u32		blk_t;
+typedef __u64		blk64_t;
 typedef __u32		dgrp_t;
 typedef __u32		ext2_off_t;
 typedef __s64		e2_blkcnt_t;
@@ -83,10 +75,12 @@
 #include "com_err.h"
 #include "ext2_io.h"
 #include "ext2_err.h"
+#include "ext2_ext_attr.h"
 #else
 #include <et/com_err.h>
 #include <ext2fs/ext2_io.h>
 #include <ext2fs/ext2_err.h>
+#include <ext2fs/ext2_ext_attr.h>
 #endif
 
 /*
@@ -100,17 +94,6 @@
 
 typedef struct struct_ext2_filsys *ext2_filsys;
 
-struct ext2fs_struct_generic_bitmap {
-	errcode_t	magic;
-	ext2_filsys 	fs;
-	__u32		start, end;
-	__u32		real_end;
-	char	*	description;
-	char	*	bitmap;
-	errcode_t	base_error_code;
-	__u32		reserved[7];
-};
-
 #define EXT2FS_MARK_ERROR 	0
 #define EXT2FS_UNMARK_ERROR 	1
 #define EXT2FS_TEST_ERROR	2
@@ -246,6 +229,13 @@
 	 */
 	struct ext2_inode_cache		*icache;
 	io_channel			image_io;
+
+	/*
+	 * More callback functions
+	 */
+	errcode_t (*get_alloc_block)(ext2_filsys fs, blk64_t goal,
+				     blk64_t *ret);
+	void (*block_alloc_stats)(ext2_filsys fs, blk64_t blk, int inuse);
 };
 
 #if EXT2_FLAT_INCLUDES
@@ -269,7 +259,7 @@
  * This is used by ext2fs_expand_dir() to be able to add a new block
  * to an inode.  It can also be used for programs that want to be able
  * to deal with files that contain "holes".
- * 
+ *
  * BLOCK_FLAG_DEPTH_TRAVERSE indicates that the iterator function for
  * the indirect, doubly indirect, etc. blocks should be called after
  * all of the blocks containined in the indirect blocks are processed.
@@ -279,6 +269,9 @@
  * BLOCK_FLAG_DATA_ONLY indicates that the iterator function should be
  * called for data blocks only.
  *
+ * BLOCK_FLAG_READ_ONLY is a promise by the caller that it will not
+ * modify returned block number.
+ *
  * BLOCK_FLAG_NO_LARGE is for internal use only.  It informs
  * ext2fs_block_iterate2 that large files won't be accepted.
  */
@@ -286,6 +279,7 @@
 #define BLOCK_FLAG_HOLE		1
 #define BLOCK_FLAG_DEPTH_TRAVERSE	2
 #define BLOCK_FLAG_DATA_ONLY	4
+#define BLOCK_FLAG_READ_ONLY	8
 
 #define BLOCK_FLAG_NO_LARGE	0x1000
 
@@ -301,11 +295,80 @@
 /*
  * Flags for ext2fs_move_blocks
  */
-#define EXT2_BMOVE_GET_DBLIST	0x0001	
+#define EXT2_BMOVE_GET_DBLIST	0x0001
 #define EXT2_BMOVE_DEBUG	0x0002
 #endif
 
 /*
+ * Generic (non-filesystem layout specific) extents structure
+ */
+
+#define EXT2_EXTENT_FLAGS_LEAF		0x0001
+#define EXT2_EXTENT_FLAGS_UNINIT	0x0002
+#define EXT2_EXTENT_FLAGS_SECOND_VISIT	0x0004
+
+struct ext2fs_extent {
+	blk64_t	e_pblk;		/* first physical block */
+	blk64_t	e_lblk;		/* first logical block extent covers */
+	__u32	e_len;		/* number of blocks covered by extent */
+	__u32	e_flags;	/* extent flags */
+};
+
+typedef struct ext2_extent_handle *ext2_extent_handle_t;
+typedef struct ext2_extent_path *ext2_extent_path_t;
+
+/*
+ * Flags used by ext2fs_extent_get()
+ */
+#define EXT2_EXTENT_CURRENT	0x0000
+#define EXT2_EXTENT_MOVE_MASK	0x000F
+#define EXT2_EXTENT_ROOT	0x0001
+#define EXT2_EXTENT_LAST_LEAF	0x0002
+#define EXT2_EXTENT_FIRST_SIB	0x0003
+#define EXT2_EXTENT_LAST_SIB	0x0004
+#define EXT2_EXTENT_NEXT_SIB	0x0005
+#define EXT2_EXTENT_PREV_SIB	0x0006
+#define EXT2_EXTENT_NEXT_LEAF	0x0007
+#define EXT2_EXTENT_PREV_LEAF	0x0008
+#define EXT2_EXTENT_NEXT	0x0009
+#define EXT2_EXTENT_PREV	0x000A
+#define EXT2_EXTENT_UP		0x000B
+#define EXT2_EXTENT_DOWN	0x000C
+#define EXT2_EXTENT_DOWN_AND_LAST 0x000D
+
+/*
+ * Flags used by ext2fs_extent_insert()
+ */
+#define EXT2_EXTENT_INSERT_AFTER	0x0001 /* insert after handle loc'n */
+#define EXT2_EXTENT_INSERT_NOSPLIT	0x0002 /* insert may not cause split */
+
+/*
+ * Flags used by ext2fs_extent_delete()
+ */
+#define EXT2_EXTENT_DELETE_KEEP_EMPTY	0x001 /* keep node if last extnt gone */
+
+/*
+ * Flags used by ext2fs_extent_set_bmap()
+ */
+#define EXT2_EXTENT_SET_BMAP_UNINIT	0x0001
+
+/*
+ * Data structure returned by ext2fs_extent_get_info()
+ */
+struct ext2_extent_info {
+	int		curr_entry;
+	int		curr_level;
+	int		num_entries;
+	int		max_entries;
+	int		max_depth;
+	int		bytes_avail;
+	blk64_t		max_lblk;
+	blk64_t		max_pblk;
+	__u32		max_len;
+	__u32		max_uninit_len;
+};
+
+/*
  * Flags for directory block reading and writing functions
  */
 #define EXT2_DIRBLOCK_V2_STRUCT	0x0001
@@ -411,6 +474,11 @@
 #define BMAP_SET	0x0002
 
 /*
+ * Returned flags from ext2fs_bmap
+ */
+#define BMAP_RET_UNINIT	0x0001
+
+/*
  * Flags for imager.c functions
  */
 #define IMAGER_FLAG_INODEMAP	1
@@ -427,7 +495,7 @@
 /*
  * For ext2 compression support
  */
-#define EXT2FS_COMPRESSED_BLKADDR ((blk_t) 0xffffffff)
+#define EXT2FS_COMPRESSED_BLKADDR ((blk_t) -1)
 #define HOLE_BLKADDR(_b) ((_b) == 0 || (_b) == EXT2FS_COMPRESSED_BLKADDR)
 
 /*
@@ -438,7 +506,6 @@
 					 EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
 					 EXT2_FEATURE_COMPAT_RESIZE_INODE|\
 					 EXT2_FEATURE_COMPAT_DIR_INDEX|\
-					 EXT2_FEATURE_COMPAT_LAZY_BG|\
 					 EXT2_FEATURE_COMPAT_EXT_ATTR)
 
 /* This #ifdef is temporary until compression is fully supported */
@@ -453,25 +520,30 @@
 					 EXT2_FEATURE_INCOMPAT_COMPRESSION|\
 					 EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\
 					 EXT2_FEATURE_INCOMPAT_META_BG|\
-					 EXT3_FEATURE_INCOMPAT_RECOVER)
+					 EXT3_FEATURE_INCOMPAT_RECOVER|\
+					 EXT3_FEATURE_INCOMPAT_EXTENTS|\
+					 EXT4_FEATURE_INCOMPAT_FLEX_BG)
 #else
 #define EXT2_LIB_FEATURE_INCOMPAT_SUPP	(EXT2_FEATURE_INCOMPAT_FILETYPE|\
 					 EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\
 					 EXT2_FEATURE_INCOMPAT_META_BG|\
-					 EXT3_FEATURE_INCOMPAT_RECOVER)
+					 EXT3_FEATURE_INCOMPAT_RECOVER|\
+					 EXT3_FEATURE_INCOMPAT_EXTENTS|\
+					 EXT4_FEATURE_INCOMPAT_FLEX_BG)
 #endif
 #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP	(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
-					 EXT2_FEATURE_RO_COMPAT_LARGE_FILE)
+					 EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
+					 EXT2_FEATURE_RO_COMPAT_LARGE_FILE|\
+					 EXT4_FEATURE_RO_COMPAT_DIR_NLINK|\
+					 EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|\
+					 EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
 
 /*
  * These features are only allowed if EXT2_FLAG_SOFTSUPP_FEATURES is passed
  * to ext2fs_openfs()
  */
-#define EXT2_LIB_SOFTSUPP_INCOMPAT	(EXT3_FEATURE_INCOMPAT_EXTENTS)
-#define EXT2_LIB_SOFTSUPP_RO_COMPAT	(EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
-					 EXT4_FEATURE_RO_COMPAT_GDT_CSUM|\
-					 EXT4_FEATURE_RO_COMPAT_DIR_NLINK|\
-					 EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)
+#define EXT2_LIB_SOFTSUPP_INCOMPAT	(0)
+#define EXT2_LIB_SOFTSUPP_RO_COMPAT	(0)
 
 /*
  * function prototypes
@@ -488,11 +560,25 @@
 					blk_t *ret);
 extern errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal,
 				    char *block_buf, blk_t *ret);
+extern void ext2fs_set_alloc_block_callback(ext2_filsys fs,
+					    errcode_t (*func)(ext2_filsys fs,
+							      blk64_t goal,
+							      blk64_t *ret),
+					    errcode_t (**old)(ext2_filsys fs,
+							      blk64_t goal,
+							      blk64_t *ret));
 
 /* alloc_sb.c */
-extern int ext2fs_reserve_super_and_bgd(ext2_filsys fs, 
+extern int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
 					dgrp_t group,
 					ext2fs_block_bitmap bmap);
+extern void ext2fs_set_block_alloc_stats_callback(ext2_filsys fs,
+						  void (*func)(ext2_filsys fs,
+							       blk64_t blk,
+							       int inuse),
+						  void (**old)(ext2_filsys fs,
+							       blk64_t blk,
+							       int inuse));
 
 /* alloc_stats.c */
 void ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse);
@@ -552,15 +638,14 @@
 					ext2_badblocks_list bb_list);
 
 /* bitmaps.c */
+extern void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap);
+extern void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap);
+extern errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src,
+				    ext2fs_generic_bitmap *dest);
 extern errcode_t ext2fs_write_inode_bitmap(ext2_filsys fs);
 extern errcode_t ext2fs_write_block_bitmap (ext2_filsys fs);
 extern errcode_t ext2fs_read_inode_bitmap (ext2_filsys fs);
 extern errcode_t ext2fs_read_block_bitmap(ext2_filsys fs);
-extern errcode_t ext2fs_allocate_generic_bitmap(__u32 start,
-						__u32 end,
-						__u32 real_end,
-						const char *descr,
-						ext2fs_generic_bitmap *ret);
 extern errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
 					      const char *descr,
 					      ext2fs_block_bitmap *ret);
@@ -575,6 +660,27 @@
 extern void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap);
 extern errcode_t ext2fs_read_bitmaps(ext2_filsys fs);
 extern errcode_t ext2fs_write_bitmaps(ext2_filsys fs);
+extern errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end,
+					    ext2fs_inode_bitmap bmap);
+extern errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end,
+					    ext2fs_block_bitmap bmap);
+extern errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1,
+					     ext2fs_block_bitmap bm2);
+extern errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1,
+					     ext2fs_inode_bitmap bm2);
+extern errcode_t ext2fs_set_inode_bitmap_range(ext2fs_inode_bitmap bmap,
+					ext2_ino_t start, unsigned int num,
+					void *in);
+extern errcode_t ext2fs_get_inode_bitmap_range(ext2fs_inode_bitmap bmap,
+					ext2_ino_t start, unsigned int num,
+					void *out);
+extern errcode_t ext2fs_set_block_bitmap_range(ext2fs_block_bitmap bmap,
+					blk_t start, unsigned int num,
+					void *in);
+extern errcode_t ext2fs_get_block_bitmap_range(ext2fs_block_bitmap bmap,
+					blk_t start, unsigned int num,
+					void *out);
+
 
 /* block.c */
 extern errcode_t ext2fs_block_iterate(ext2_filsys fs,
@@ -600,10 +706,13 @@
 
 /* bmap.c */
 extern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
-			     struct ext2_inode *inode, 
+			     struct ext2_inode *inode,
 			     char *block_buf, int bmap_flags,
 			     blk_t block, blk_t *phys_blk);
-
+extern errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino,
+			      struct ext2_inode *inode,
+			      char *block_buf, int bmap_flags, blk64_t block,
+			      int *ret_flags, blk64_t *phys_blk);
 
 #if 0
 /* bmove.c */
@@ -620,7 +729,7 @@
 extern errcode_t ext2fs_close(ext2_filsys fs);
 extern errcode_t ext2fs_flush(ext2_filsys fs);
 extern int ext2fs_bg_has_super(ext2_filsys fs, int group_block);
-extern int ext2fs_super_and_bgd_loc(ext2_filsys fs, 
+extern int ext2fs_super_and_bgd_loc(ext2_filsys fs,
 				    dgrp_t group,
 				    blk_t *ret_super_blk,
 				    blk_t *ret_old_desc_blk,
@@ -628,11 +737,10 @@
 				    int *ret_meta_bg);
 extern void ext2fs_update_dynamic_rev(ext2_filsys fs);
 
-/* cmp_bitmaps.c */
-extern errcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1,
-					     ext2fs_block_bitmap bm2);
-extern errcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1,
-					     ext2fs_inode_bitmap bm2);
+/* csum.c */
+extern void ext2fs_group_desc_csum_set(ext2_filsys fs, dgrp_t group);
+extern int ext2fs_group_desc_csum_verify(ext2_filsys fs, dgrp_t group);
+extern errcode_t ext2fs_set_gdt_csum(ext2_filsys fs);
 
 /* dblist.c */
 
@@ -652,7 +760,7 @@
 extern errcode_t ext2fs_copy_dblist(ext2_dblist src,
 				    ext2_dblist *dest);
 extern int ext2fs_dblist_count(ext2_dblist dblist);
-extern errcode_t ext2fs_dblist_get_last(ext2_dblist dblist, 
+extern errcode_t ext2fs_dblist_get_last(ext2_dblist dblist,
 					struct ext2_db_entry **entry);
 extern errcode_t ext2fs_dblist_drop_last(ext2_dblist dblist);
 
@@ -688,7 +796,13 @@
 
 
 /* dir_iterate.c */
-extern errcode_t ext2fs_dir_iterate(ext2_filsys fs, 
+extern errcode_t ext2fs_get_rec_len(ext2_filsys fs,
+				    struct ext2_dir_entry *dirent,
+				    unsigned int *rec_len);
+extern errcode_t ext2fs_set_rec_len(ext2_filsys fs,
+				    unsigned int len,
+				    struct ext2_dir_entry *dirent);
+extern errcode_t ext2fs_dir_iterate(ext2_filsys fs,
 			      ext2_ino_t dir,
 			      int flags,
 			      char *block_buf,
@@ -698,7 +812,7 @@
 					  char	*buf,
 					  void	*priv_data),
 			      void *priv_data);
-extern errcode_t ext2fs_dir_iterate2(ext2_filsys fs, 
+extern errcode_t ext2fs_dir_iterate2(ext2_filsys fs,
 			      ext2_ino_t dir,
 			      int flags,
 			      char *block_buf,
@@ -718,6 +832,8 @@
 extern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir);
 
 /* ext_attr.c */
+extern __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry,
+					void *data);
 extern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf);
 extern errcode_t ext2fs_write_ext_attr(ext2_filsys fs, blk_t block,
 				       void *buf);
@@ -725,6 +841,29 @@
 					   char *block_buf,
 					   int adjust, __u32 *newcount);
 
+/* extent.c */
+extern errcode_t ext2fs_extent_header_verify(void *ptr, int size);
+extern errcode_t ext2fs_extent_open(ext2_filsys fs, ext2_ino_t ino,
+				    ext2_extent_handle_t *handle);
+extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino,
+					struct ext2_inode *inode,
+					ext2_extent_handle_t *ret_handle);
+extern void ext2fs_extent_free(ext2_extent_handle_t handle);
+extern errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
+				   int flags, struct ext2fs_extent *extent);
+extern errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle, int flags,
+				       struct ext2fs_extent *extent);
+extern errcode_t ext2fs_extent_insert(ext2_extent_handle_t handle, int flags,
+				      struct ext2fs_extent *extent);
+extern errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle,
+					blk64_t logical, blk64_t physical,
+					int flags);
+extern errcode_t ext2fs_extent_delete(ext2_extent_handle_t handle, int flags);
+extern errcode_t ext2fs_extent_get_info(ext2_extent_handle_t handle,
+					struct ext2_extent_info *info);
+extern errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
+				    blk64_t blk);
+
 /* fileio.c */
 extern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
 				   struct ext2_inode *inode,
@@ -754,20 +893,63 @@
 
 /* freefs.c */
 extern void ext2fs_free(ext2_filsys fs);
-extern void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap);
-extern void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap);
-extern void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap);
 extern void ext2fs_free_dblist(ext2_dblist dblist);
 extern void ext2fs_badblocks_list_free(ext2_badblocks_list bb);
 extern void ext2fs_u32_list_free(ext2_u32_list bb);
 
+/* gen_bitmap.c */
+extern void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap);
+extern errcode_t ext2fs_make_generic_bitmap(errcode_t magic, ext2_filsys fs,
+					    __u32 start, __u32 end,
+					    __u32 real_end,
+					    const char *descr, char *init_map,
+					    ext2fs_generic_bitmap *ret);
+extern errcode_t ext2fs_allocate_generic_bitmap(__u32 start,
+						__u32 end,
+						__u32 real_end,
+						const char *descr,
+						ext2fs_generic_bitmap *ret);
+extern errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap src,
+					    ext2fs_generic_bitmap *dest);
+extern void ext2fs_clear_generic_bitmap(ext2fs_generic_bitmap bitmap);
+extern errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap bitmap,
+						 errcode_t magic,
+						 errcode_t neq,
+						 ext2_ino_t end,
+						 ext2_ino_t *oend);
+extern void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap map);
+extern errcode_t ext2fs_resize_generic_bitmap(errcode_t magic,
+					      __u32 new_end,
+					      __u32 new_real_end,
+					      ext2fs_generic_bitmap bmap);
+extern errcode_t ext2fs_compare_generic_bitmap(errcode_t magic, errcode_t neq,
+					       ext2fs_generic_bitmap bm1,
+					       ext2fs_generic_bitmap bm2);
+extern errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+						 errcode_t magic,
+						 __u32 start, __u32 num,
+						 void *out);
+extern errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+						 errcode_t magic,
+						 __u32 start, __u32 num,
+						 void *in);
+
 /* getsize.c */
 extern errcode_t ext2fs_get_device_size(const char *file, int blocksize,
 					blk_t *retblocks);
+extern errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
+					blk64_t *retblocks);
 
 /* getsectsize.c */
 errcode_t ext2fs_get_device_sectsize(const char *file, int *sectsize);
 
+/* i_block.c */
+errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode *inode,
+				 blk64_t num_blocks);
+errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode *inode,
+				 blk64_t num_blocks);
+errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode *inode, blk64_t b);
+
 /* imager.c */
 extern errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags);
 extern errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd, int flags);
@@ -789,10 +971,10 @@
 extern void ext2fs_free_icount(ext2_icount_t icount);
 extern errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
 					  int flags, ext2_icount_t *ret);
-extern errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags, 
+extern errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags,
 				       unsigned int size,
 				       ext2_icount_t hint, ext2_icount_t *ret);
-extern errcode_t ext2fs_create_icount(ext2_filsys fs, int flags, 
+extern errcode_t ext2fs_create_icount(ext2_filsys fs, int flags,
 				      unsigned int size,
 				      ext2_icount_t *ret);
 extern errcode_t ext2fs_icount_fetch(ext2_icount_t icount, ext2_ino_t ino,
@@ -808,9 +990,9 @@
 
 /* inode.c */
 extern errcode_t ext2fs_flush_icache(ext2_filsys fs);
-extern errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, 
+extern errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan,
 					    ext2_ino_t *ino,
-					    struct ext2_inode *inode, 
+					    struct ext2_inode *inode,
 					    int bufsize);
 extern errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
 				  ext2_inode_scan *ret_scan);
@@ -829,12 +1011,12 @@
 extern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags,
 				   int clear_flags);
 extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
-					struct ext2_inode * inode, 
+					struct ext2_inode * inode,
 					int bufsize);
 extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino,
 			    struct ext2_inode * inode);
 extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
-					 struct ext2_inode * inode, 
+					 struct ext2_inode * inode,
 					 int bufsize);
 extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
 			    struct ext2_inode * inode);
@@ -845,12 +1027,12 @@
 
 /* inode_io.c */
 extern io_manager inode_io_manager;
-extern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, 
+extern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino,
 					char **name);
 extern errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino,
 					 struct ext2_inode *inode,
 					 char **name);
-	
+
 /* ismounted.c */
 extern errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags);
 extern errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
@@ -878,6 +1060,8 @@
 			      const char *name);
 
 /* mkjournal.c */
+extern errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
+				    blk_t *ret_blk, int *ret_count);
 extern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
 						  __u32 size, int flags,
 						  char  **ret_jsb);
@@ -891,11 +1075,11 @@
 extern errcode_t ext2fs_open(const char *name, int flags, int superblock,
 			     unsigned int block_size, io_manager manager,
 			     ext2_filsys *ret_fs);
-extern errcode_t ext2fs_open2(const char *name, const char *io_options, 
-			      int flags, int superblock, 
+extern errcode_t ext2fs_open2(const char *name, const char *io_options,
+			      int flags, int superblock,
 			      unsigned int block_size, io_manager manager,
 			      ext2_filsys *ret_fs);
-extern blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, 
+extern blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block,
 					 dgrp_t i);
 errcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io);
 errcode_t ext2fs_set_data_io(ext2_filsys fs, io_channel new_io);
@@ -916,14 +1100,14 @@
 				      ext2_badblocks_list *bb_list);
 
 /* read_bb_file.c */
-extern errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, 
+extern errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
 				      ext2_badblocks_list *bb_list,
 				      void *priv_data,
 				      void (*invalid)(ext2_filsys fs,
 						      blk_t blk,
 						      char *badstr,
 						      void *priv_data));
-extern errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f, 
+extern errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f,
 				     ext2_badblocks_list *bb_list,
 				     void (*invalid)(ext2_filsys fs,
 						     blk_t blk));
@@ -931,20 +1115,13 @@
 /* res_gdt.c */
 extern errcode_t ext2fs_create_resize_inode(ext2_filsys fs);
 
-/* rs_bitmap.c */
-extern errcode_t ext2fs_resize_generic_bitmap(__u32 new_end,
-					      __u32 new_real_end,
-					      ext2fs_generic_bitmap bmap);
-extern errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end,
-					    ext2fs_inode_bitmap bmap);
-extern errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end,
-					    ext2fs_block_bitmap bmap);
-extern errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src,
-				    ext2fs_generic_bitmap *dest);
-
 /* swapfs.c */
-extern void ext2fs_swap_ext_attr(char *to, char *from, int bufsize, 
+extern void ext2fs_swap_ext_attr(char *to, char *from, int bufsize,
 				 int has_header);
+extern void ext2fs_swap_ext_attr_header(struct ext2_ext_attr_header *to_header,
+					struct ext2_ext_attr_header *from_hdr);
+extern void ext2fs_swap_ext_attr_entry(struct ext2_ext_attr_entry *to_entry,
+				       struct ext2_ext_attr_entry *from_entry);
 extern void ext2fs_swap_super(struct ext2_super_block * super);
 extern void ext2fs_swap_group_desc(struct ext2_group_desc *gdp);
 extern void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
@@ -1044,7 +1221,7 @@
 	memcpy(ptr, &p, sizeof(p));
 	return 0;
 }
-	
+
 /*
  *  Resize memory
  */
diff --git a/lib/ext2fs/ext2fs.pc.in b/lib/ext2fs/ext2fs.pc.in
index 0a5cd86..8db8663 100644
--- a/lib/ext2fs/ext2fs.pc.in
+++ b/lib/ext2fs/ext2fs.pc.in
@@ -6,6 +6,6 @@
 Name: ext2fs
 Description: Ext2fs library
 Version: @E2FSPROGS_VERSION@
-Requires: com_err
-Cflags: -I${includedir} 
+Requires.private: com_err
+Cflags: -I${includedir}/ext2fs
 Libs: -L${libdir} -lext2fs
diff --git a/lib/ext2fs/ext2fsP.h b/lib/ext2fs/ext2fsP.h
index eea32d6..c666faa 100644
--- a/lib/ext2fs/ext2fsP.h
+++ b/lib/ext2fs/ext2fsP.h
@@ -1,6 +1,6 @@
 /*
  * ext2fsP.h --- private header file for ext2 library
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/lib/ext2fs/ext3_extents.h b/lib/ext2fs/ext3_extents.h
index c4178c9..3b373c7 100644
--- a/lib/ext2fs/ext3_extents.h
+++ b/lib/ext2fs/ext3_extents.h
@@ -20,44 +20,6 @@
 #define _LINUX_EXT3_EXTENTS
 
 /*
- * with AGRESSIVE_TEST defined capacity of index/leaf blocks
- * become very little, so index split, in-depth growing and
- * other hard changes happens much more often
- * this is for debug purposes only
- */
-#define AGRESSIVE_TEST_
-
-/*
- * if CHECK_BINSEARCH defined, then results of binary search
- * will be checked by linear search
- */
-#define CHECK_BINSEARCH_
-
-/*
- * if EXT_DEBUG is defined you can use 'extdebug' mount option
- * to get lots of info what's going on
- */
-//#define EXT_DEBUG
-#ifdef EXT_DEBUG
-#define ext_debug(tree,fmt,a...) 			\
-do {							\
-	if (test_opt((tree)->inode->i_sb, EXTDEBUG))	\
-		printk(fmt, ##a);			\
-} while (0);
-#else
-#define ext_debug(tree,fmt,a...)
-#endif
-
-/*
- * if EXT_STATS is defined then stats numbers are collected
- * these number will be displayed at umount time
- */
-#define EXT_STATS_
-
-
-#define EXT3_ALLOC_NEEDED	3	/* block bitmap + group desc. + sb */
-
-/*
  * ext3_inode has i_block array (total 60 bytes)
  * first 4 bytes are used to store:
  *  - tree depth (0 mean there is no tree yet. all extents in the inode)
@@ -115,17 +77,24 @@
 };
 
 /*
- * structure for external API
+ * EXT_INIT_MAX_LEN is the maximum number of blocks we can have in an
+ * initialized extent. This is 2^15 and not (2^16 - 1), since we use the
+ * MSB of ee_len field in the extent datastructure to signify if this
+ * particular extent is an initialized extent or an uninitialized (i.e.
+ * preallocated).
+ * EXT_UNINIT_MAX_LEN is the maximum number of blocks we can have in an
+ * uninitialized extent.
+ * If ee_len is <= 0x8000, it is an initialized extent. Otherwise, it is an
+ * uninitialized one. In other words, if MSB of ee_len is set, it is an
+ * uninitialized extent with only one special scenario when ee_len = 0x8000.
+ * In this case we can not have an uninitialized extent of zero length and
+ * thus we make it as a special case of initialized extent with 0x8000 length.
+ * This way we get better extent-to-group alignment for initialized extents.
+ * Hence, the maximum number of blocks we can have in an *initialized*
+ * extent is 2^15 (32768) and in an *uninitialized* extent is 2^15-1 (32767).
  */
-
-#define EXT_CONTINUE	0
-#define EXT_BREAK	1
-#define EXT_REPEAT	2
-
-
-#define EXT_MAX_BLOCK	0xffffffff
-#define EXT_CACHE_MARK	0xffff
-
+#define EXT_INIT_MAX_LEN	(1UL << 15)
+#define EXT_UNINIT_MAX_LEN	(EXT_INIT_MAX_LEN - 1)
 
 #define EXT_FIRST_EXTENT(__hdr__) \
 	((struct ext3_extent *) (((char *) (__hdr__)) +		\
@@ -144,95 +113,5 @@
 #define EXT_MAX_INDEX(__hdr__) \
 	(EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
 
-#define EXT_ROOT_HDR(tree) \
-	((struct ext3_extent_header *) (tree)->root)
-#define EXT_BLOCK_HDR(bh) \
-	((struct ext3_extent_header *) (bh)->b_data)
-#define EXT_DEPTH(_t_)	\
-	(((struct ext3_extent_header *)((_t_)->root))->eh_depth)
-#define EXT_GENERATION(_t_)	\
-	(((struct ext3_extent_header *)((_t_)->root))->eh_generation)
-
-
-#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
-
-
-/*
- * this structure is used to gather extents from the tree via ioctl
- */
-struct ext3_extent_buf {
-	unsigned long start;
-	int buflen;
-	void *buffer;
-	void *cur;
-	int err;
-};
-
-/*
- * this structure is used to collect stats info about the tree
- */
-struct ext3_extent_tree_stats {
-	int depth;
-	int extents_num;
-	int leaf_num;
-};
-
-#ifdef __KERNEL__
-/*
- * ext3_extents_tree is used to pass initial information
- * to top-level extents API
- */
-struct ext3_extents_helpers;
-struct ext3_extents_tree {
-	struct inode *inode;	/* inode which tree belongs to */
-	void *root;		/* ptr to data top of tree resides at */
-	void *buffer;		/* will be passed as arg to ^^ routines	*/
-	int buffer_len;
-	void *private;
-	struct ext3_extent *cex;/* last found extent */
-	struct ext3_extents_helpers *ops;
-};
-
-struct ext3_extents_helpers {
-	int (*get_write_access)(handle_t *h, void *buffer);
-	int (*mark_buffer_dirty)(handle_t *h, void *buffer);
-	int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
-	int (*remove_extent_credits)(struct ext3_extents_tree *,
-					struct ext3_extent *, unsigned long,
-					unsigned long);
-	int (*remove_extent)(struct ext3_extents_tree *,
-				struct ext3_extent *, unsigned long,
-				unsigned long);
-	int (*new_block)(handle_t *, struct ext3_extents_tree *,
-				struct ext3_ext_path *, struct ext3_extent *,
-				int *);
-};
-
-/*
- * to be called by ext3_ext_walk_space()
- * negative retcode - error
- * positive retcode - signal for ext3_ext_walk_space(), see below
- * callback must return valid extent (passed or newly created)
- */
-typedef int (*ext_prepare_callback)(struct ext3_extents_tree *,
-					struct ext3_ext_path *,
-					struct ext3_extent *, int);
-void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
-extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
-extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
-extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
-extern int ext3_ext_walk_space(struct ext3_extents_tree *, unsigned long, unsigned long, ext_prepare_callback);
-extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
-extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
-
-static inline void
-ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
-{
-	if (tree->cex)
-		tree->cex->ee_len = 0;
-}
-#endif /* __KERNEL__ */
-
-
 #endif /* _LINUX_EXT3_EXTENTS */
 
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index 08211c3..9f5e10f 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -1,6 +1,6 @@
 /*
  * ext_attr.c --- extended attribute blocks
- * 
+ *
  * Copyright (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
  *
  * Copyright (C) 2002 Theodore Ts'o.
@@ -23,6 +23,43 @@
 
 #include "ext2fs.h"
 
+#define NAME_HASH_SHIFT 5
+#define VALUE_HASH_SHIFT 16
+
+/*
+ * ext2_xattr_hash_entry()
+ *
+ * Compute the hash of an extended attribute.
+ */
+__u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry, void *data)
+{
+	__u32 hash = 0;
+	char *name = ((char *) entry) + sizeof(struct ext2_ext_attr_entry);
+	int n;
+
+	for (n = 0; n < entry->e_name_len; n++) {
+		hash = (hash << NAME_HASH_SHIFT) ^
+		       (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
+		       *name++;
+	}
+
+	/* The hash needs to be calculated on the data in little-endian. */
+	if (entry->e_value_block == 0 && entry->e_value_size != 0) {
+		__u32 *value = (__u32 *)data;
+		for (n = (entry->e_value_size + EXT2_EXT_ATTR_ROUND) >>
+			 EXT2_EXT_ATTR_PAD_BITS; n; n--) {
+			hash = (hash << VALUE_HASH_SHIFT) ^
+			       (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
+			       ext2fs_le32_to_cpu(*value++);
+		}
+	}
+
+	return hash;
+}
+
+#undef NAME_HASH_SHIFT
+#undef VALUE_HASH_SHIFT
+
 errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf)
 {
 	errcode_t	retval;
@@ -30,10 +67,8 @@
  	retval = io_channel_read_blk(fs->io, block, 1, buf);
 	if (retval)
 		return retval;
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->flags & (EXT2_FLAG_SWAP_BYTES|
-			  EXT2_FLAG_SWAP_BYTES_READ)) != 0)
-		ext2fs_swap_ext_attr(buf, buf, fs->blocksize, 1);
+#ifdef WORDS_BIGENDIAN
+	ext2fs_swap_ext_attr(buf, buf, fs->blocksize, 1);
 #endif
 	return 0;
 }
@@ -44,17 +79,15 @@
 	char		*write_buf;
 	char		*buf = NULL;
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)) {
-		retval = ext2fs_get_mem(fs->blocksize, &buf);
-		if (retval)
-			return retval;
-		write_buf = buf;
-		ext2fs_swap_ext_attr(buf, inbuf, fs->blocksize, 1);
-	} else
+#ifdef WORDS_BIGENDIAN
+	retval = ext2fs_get_mem(fs->blocksize, &buf);
+	if (retval)
+		return retval;
+	write_buf = buf;
+	ext2fs_swap_ext_attr(buf, inbuf, fs->blocksize, 1);
+#else
+	write_buf = (char *) inbuf;
 #endif
-		write_buf = (char *) inbuf;
  	retval = io_channel_write_blk(fs->io, block, 1, write_buf);
 	if (buf)
 		ext2fs_free_mem(&buf);
diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c
new file mode 100644
index 0000000..1505447
--- /dev/null
+++ b/lib/ext2fs/extent.c
@@ -0,0 +1,2008 @@
+/*
+ * extent.c --- routines to implement extents support
+ *
+ * Copyright (C) 2007 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "ext2_fs.h"
+#include "ext2fsP.h"
+#include "e2image.h"
+
+/*
+ * Definitions to be dropped in lib/ext2fs/ext2fs.h
+ */
+
+/*
+ * Private definitions
+ */
+
+struct extent_path {
+	char		*buf;
+	int		entries;
+	int		max_entries;
+	int		left;
+	int		visit_num;
+	int		flags;
+	blk64_t		end_blk;
+	void		*curr;
+};
+
+
+struct ext2_extent_handle {
+	errcode_t		magic;
+	ext2_filsys		fs;
+	ext2_ino_t 		ino;
+	struct ext2_inode	*inode;
+	int			type;
+	int			level;
+	int			max_depth;
+	struct extent_path	*path;
+};
+
+struct ext2_extent_path {
+	errcode_t		magic;
+	int			leaf_height;
+	blk64_t			lblk;
+};
+
+/*
+ *  Useful Debugging stuff
+ */
+
+#ifdef DEBUG
+static void dbg_show_header(struct ext3_extent_header *eh)
+{
+	printf("header: magic=%x entries=%u max=%u depth=%u generation=%u\n",
+			ext2fs_le16_to_cpu(eh->eh_magic),
+			ext2fs_le16_to_cpu(eh->eh_entries),
+			ext2fs_le16_to_cpu(eh->eh_max),
+			ext2fs_le16_to_cpu(eh->eh_depth),
+			ext2fs_le32_to_cpu(eh->eh_generation));
+}
+
+static void dbg_show_index(struct ext3_extent_idx *ix)
+{
+	printf("index: block=%u leaf=%u leaf_hi=%u unused=%u\n",
+			ext2fs_le32_to_cpu(ix->ei_block),
+			ext2fs_le32_to_cpu(ix->ei_leaf),
+			ext2fs_le16_to_cpu(ix->ei_leaf_hi),
+			ext2fs_le16_to_cpu(ix->ei_unused));
+}
+
+static void dbg_show_extent(struct ext3_extent *ex)
+{
+	printf("extent: block=%u-%u len=%u start=%u start_hi=%u\n",
+			ext2fs_le32_to_cpu(ex->ee_block),
+			ext2fs_le32_to_cpu(ex->ee_block) +
+			ext2fs_le16_to_cpu(ex->ee_len) - 1,
+			ext2fs_le16_to_cpu(ex->ee_len),
+			ext2fs_le32_to_cpu(ex->ee_start),
+			ext2fs_le16_to_cpu(ex->ee_start_hi));
+}
+
+static void dbg_print_extent(char *desc, struct ext2fs_extent *extent)
+{
+	if (desc)
+		printf("%s: ", desc);
+	printf("extent: lblk %llu--%llu, len %u, pblk %llu, flags: ",
+	       extent->e_lblk, extent->e_lblk + extent->e_len - 1,
+	       extent->e_len, extent->e_pblk);
+	if (extent->e_flags & EXT2_EXTENT_FLAGS_LEAF)
+		fputs("LEAF ", stdout);
+	if (extent->e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+		fputs("UNINIT ", stdout);
+	if (extent->e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)
+		fputs("2ND_VISIT ", stdout);
+	if (!extent->e_flags)
+		fputs("(none)", stdout);
+	fputc('\n', stdout);
+
+}
+
+#else
+#define dbg_show_header(eh) do { } while (0)
+#define dbg_show_index(ix) do { } while (0)
+#define dbg_show_extent(ex) do { } while (0)
+#define dbg_print_extent(desc, ex) do { } while (0)
+#endif
+
+/*
+ * Verify the extent header as being sane
+ */
+errcode_t ext2fs_extent_header_verify(void *ptr, int size)
+{
+	int eh_max, entry_size;
+	struct ext3_extent_header *eh = ptr;
+
+	dbg_show_header(eh);
+	if (ext2fs_le16_to_cpu(eh->eh_magic) != EXT3_EXT_MAGIC)
+		return EXT2_ET_EXTENT_HEADER_BAD;
+	if (ext2fs_le16_to_cpu(eh->eh_entries) > ext2fs_le16_to_cpu(eh->eh_max))
+		return EXT2_ET_EXTENT_HEADER_BAD;
+	if (eh->eh_depth == 0)
+		entry_size = sizeof(struct ext3_extent);
+	else
+		entry_size = sizeof(struct ext3_extent_idx);
+
+	eh_max = (size - sizeof(*eh)) / entry_size;
+	/* Allow two extent-sized items at the end of the block, for
+	 * ext4_extent_tail with checksum in the future. */
+	if ((ext2fs_le16_to_cpu(eh->eh_max) > eh_max) ||
+	    (ext2fs_le16_to_cpu(eh->eh_max) < (eh_max - 2)))
+		return EXT2_ET_EXTENT_HEADER_BAD;
+
+	return 0;
+}
+
+
+/*
+ * Begin functions to handle an inode's extent information
+ */
+extern void ext2fs_extent_free(ext2_extent_handle_t handle)
+{
+	int			i;
+
+	if (!handle)
+		return;
+
+	if (handle->inode)
+		ext2fs_free_mem(&handle->inode);
+	if (handle->path) {
+		for (i=1; i <= handle->max_depth; i++) {
+			if (handle->path[i].buf)
+				ext2fs_free_mem(&handle->path[i].buf);
+		}
+		ext2fs_free_mem(&handle->path);
+	}
+	ext2fs_free_mem(&handle);
+}
+
+extern errcode_t ext2fs_extent_open(ext2_filsys fs, ext2_ino_t ino,
+				    ext2_extent_handle_t *ret_handle)
+{
+	return ext2fs_extent_open2(fs, ino, NULL, ret_handle);
+}
+
+extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino,
+				    struct ext2_inode *inode,
+				    ext2_extent_handle_t *ret_handle)
+{
+	struct ext2_extent_handle	*handle;
+	errcode_t			retval;
+	int				i;
+	struct ext3_extent_header	*eh;
+
+	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+	if (!inode)
+		if ((ino == 0) || (ino > fs->super->s_inodes_count))
+			return EXT2_ET_BAD_INODE_NUM;
+
+	retval = ext2fs_get_mem(sizeof(struct ext2_extent_handle), &handle);
+	if (retval)
+		return retval;
+	memset(handle, 0, sizeof(struct ext2_extent_handle));
+
+	retval = ext2fs_get_mem(sizeof(struct ext2_inode), &handle->inode);
+	if (retval)
+		goto errout;
+
+	handle->ino = ino;
+	handle->fs = fs;
+
+	if (inode) {
+		memcpy(handle->inode, inode, sizeof(struct ext2_inode));
+	}
+	else {
+		retval = ext2fs_read_inode(fs, ino, handle->inode);
+		if (retval)
+			goto errout;
+	}
+
+	eh = (struct ext3_extent_header *) &handle->inode->i_block[0];
+
+	for (i=0; i < EXT2_N_BLOCKS; i++)
+		if (handle->inode->i_block[i])
+			break;
+	if (i >= EXT2_N_BLOCKS) {
+		eh->eh_magic = ext2fs_cpu_to_le16(EXT3_EXT_MAGIC);
+		eh->eh_depth = 0;
+		eh->eh_entries = 0;
+		i = (sizeof(handle->inode->i_block) - sizeof(*eh)) /
+			sizeof(struct ext3_extent);
+		eh->eh_max = ext2fs_cpu_to_le16(i);
+		handle->inode->i_flags |= EXT4_EXTENTS_FL;
+	}
+
+	if (!(handle->inode->i_flags & EXT4_EXTENTS_FL)) {
+		retval = EXT2_ET_INODE_NOT_EXTENT;
+		goto errout;
+	}
+
+	retval = ext2fs_extent_header_verify(eh, sizeof(handle->inode->i_block));
+	if (retval)
+		goto errout;
+
+	handle->max_depth = ext2fs_le16_to_cpu(eh->eh_depth);
+	handle->type = ext2fs_le16_to_cpu(eh->eh_magic);
+
+	retval = ext2fs_get_mem(((handle->max_depth+1) *
+				 sizeof(struct extent_path)),
+				&handle->path);
+	memset(handle->path, 0,
+	       (handle->max_depth+1) * sizeof(struct extent_path));
+	handle->path[0].buf = (char *) handle->inode->i_block;
+
+	handle->path[0].left = handle->path[0].entries =
+		ext2fs_le16_to_cpu(eh->eh_entries);
+	handle->path[0].max_entries = ext2fs_le16_to_cpu(eh->eh_max);
+	handle->path[0].curr = 0;
+	handle->path[0].end_blk =
+		((((__u64) handle->inode->i_size_high << 32) +
+		  handle->inode->i_size + (fs->blocksize - 1))
+		 >> EXT2_BLOCK_SIZE_BITS(fs->super));
+	handle->path[0].visit_num = 1;
+	handle->level = 0;
+	handle->magic = EXT2_ET_MAGIC_EXTENT_HANDLE;
+
+	*ret_handle = handle;
+	return 0;
+
+errout:
+	ext2fs_extent_free(handle);
+	return retval;
+}
+
+/*
+ * This function is responsible for (optionally) moving through the
+ * extent tree and then returning the current extent
+ */
+errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
+			    int flags, struct ext2fs_extent *extent)
+{
+	struct extent_path	*path, *newpath;
+	struct ext3_extent_header	*eh;
+	struct ext3_extent_idx		*ix = 0;
+	struct ext3_extent		*ex;
+	errcode_t			retval;
+	blk_t				blk;
+	blk64_t				end_blk;
+	int				orig_op, op;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	orig_op = op = flags & EXT2_EXTENT_MOVE_MASK;
+
+retry:
+	path = handle->path + handle->level;
+	if ((orig_op == EXT2_EXTENT_NEXT) ||
+	    (orig_op == EXT2_EXTENT_NEXT_LEAF)) {
+		if (handle->level < handle->max_depth) {
+			/* interior node */
+			if (path->visit_num == 0) {
+				path->visit_num++;
+				op = EXT2_EXTENT_DOWN;
+			} else if (path->left > 0)
+				op = EXT2_EXTENT_NEXT_SIB;
+			else if (handle->level > 0)
+				op = EXT2_EXTENT_UP;
+			else
+				return EXT2_ET_EXTENT_NO_NEXT;
+		} else {
+			/* leaf node */
+			if (path->left > 0)
+				op = EXT2_EXTENT_NEXT_SIB;
+			else if (handle->level > 0)
+				op = EXT2_EXTENT_UP;
+			else
+				return EXT2_ET_EXTENT_NO_NEXT;
+		}
+		if (op != EXT2_EXTENT_NEXT_SIB) {
+#ifdef DEBUG_GET_EXTENT
+			printf("<<<< OP = %s\n",
+			       (op == EXT2_EXTENT_DOWN) ? "down" :
+			       ((op == EXT2_EXTENT_UP) ? "up" : "unknown"));
+#endif
+		}
+	}
+
+	if ((orig_op == EXT2_EXTENT_PREV) ||
+	    (orig_op == EXT2_EXTENT_PREV_LEAF)) {
+		if (handle->level < handle->max_depth) {
+			/* interior node */
+			if (path->visit_num > 0 ) {
+				/* path->visit_num = 0; */
+				op = EXT2_EXTENT_DOWN_AND_LAST;
+			} else if (path->left < path->entries-1)
+				op = EXT2_EXTENT_PREV_SIB;
+			else if (handle->level > 0)
+				op = EXT2_EXTENT_UP;
+			else
+				return EXT2_ET_EXTENT_NO_PREV;
+		} else {
+			/* leaf node */
+			if (path->left < path->entries-1)
+				op = EXT2_EXTENT_PREV_SIB;
+			else if (handle->level > 0)
+				op = EXT2_EXTENT_UP;
+			else
+				return EXT2_ET_EXTENT_NO_PREV;
+		}
+		if (op != EXT2_EXTENT_PREV_SIB) {
+#ifdef DEBUG_GET_EXTENT
+			printf("<<<< OP = %s\n",
+			       (op == EXT2_EXTENT_DOWN_AND_LAST) ? "down/last" :
+			       ((op == EXT2_EXTENT_UP) ? "up" : "unknown"));
+#endif
+		}
+	}
+
+	if (orig_op == EXT2_EXTENT_LAST_LEAF) {
+		if ((handle->level < handle->max_depth) &&
+		    (path->left == 0))
+			op = EXT2_EXTENT_DOWN;
+		else
+			op = EXT2_EXTENT_LAST_SIB;
+#ifdef DEBUG_GET_EXTENT
+		printf("<<<< OP = %s\n",
+			   (op == EXT2_EXTENT_DOWN) ? "down" : "last_sib");
+#endif
+	}
+
+	switch (op) {
+	case EXT2_EXTENT_CURRENT:
+		ix = path->curr;
+		break;
+	case EXT2_EXTENT_ROOT:
+		handle->level = 0;
+		path = handle->path + handle->level;
+	case EXT2_EXTENT_FIRST_SIB:
+		path->left = path->entries;
+		path->curr = 0;
+	case EXT2_EXTENT_NEXT_SIB:
+		if (path->left <= 0)
+			return EXT2_ET_EXTENT_NO_NEXT;
+		if (path->curr) {
+			ix = path->curr;
+			ix++;
+		} else {
+			eh = (struct ext3_extent_header *) path->buf;
+			ix = EXT_FIRST_INDEX(eh);
+		}
+		path->left--;
+		path->curr = ix;
+		path->visit_num = 0;
+		break;
+	case EXT2_EXTENT_PREV_SIB:
+		if (!path->curr ||
+		    path->left+1 >= path->entries)
+			return EXT2_ET_EXTENT_NO_PREV;
+		ix = path->curr;
+		ix--;
+		path->curr = ix;
+		path->left++;
+		if (handle->level < handle->max_depth)
+			path->visit_num = 1;
+		break;
+	case EXT2_EXTENT_LAST_SIB:
+		eh = (struct ext3_extent_header *) path->buf;
+		path->curr = EXT_LAST_EXTENT(eh);
+		ix = path->curr;
+		path->left = 0;
+		path->visit_num = 0;
+		break;
+	case EXT2_EXTENT_UP:
+		if (handle->level <= 0)
+			return EXT2_ET_EXTENT_NO_UP;
+		handle->level--;
+		path--;
+		ix = path->curr;
+		if ((orig_op == EXT2_EXTENT_PREV) ||
+		    (orig_op == EXT2_EXTENT_PREV_LEAF))
+			path->visit_num = 0;
+		break;
+	case EXT2_EXTENT_DOWN:
+	case EXT2_EXTENT_DOWN_AND_LAST:
+		if (!path->curr ||(handle->level >= handle->max_depth))
+			return EXT2_ET_EXTENT_NO_DOWN;
+
+		ix = path->curr;
+		newpath = path + 1;
+		if (!newpath->buf) {
+			retval = ext2fs_get_mem(handle->fs->blocksize,
+						&newpath->buf);
+			if (retval)
+				return retval;
+		}
+		blk = ext2fs_le32_to_cpu(ix->ei_leaf) +
+			((__u64) ext2fs_le16_to_cpu(ix->ei_leaf_hi) << 32);
+		if ((handle->fs->flags & EXT2_FLAG_IMAGE_FILE) &&
+		    (handle->fs->io != handle->fs->image_io))
+			memset(newpath->buf, 0, handle->fs->blocksize);
+		else {
+			retval = io_channel_read_blk(handle->fs->io,
+						     blk, 1, newpath->buf);
+			if (retval)
+				return retval;
+		}
+		handle->level++;
+
+		eh = (struct ext3_extent_header *) newpath->buf;
+
+		retval = ext2fs_extent_header_verify(eh, handle->fs->blocksize);
+		if (retval) {
+			handle->level--;
+			return retval;
+		}
+
+		newpath->left = newpath->entries =
+			ext2fs_le16_to_cpu(eh->eh_entries);
+		newpath->max_entries = ext2fs_le16_to_cpu(eh->eh_max);
+
+		if (path->left > 0) {
+			ix++;
+			newpath->end_blk = ext2fs_le32_to_cpu(ix->ei_block);
+		} else
+			newpath->end_blk = path->end_blk;
+
+		path = newpath;
+		if (op == EXT2_EXTENT_DOWN) {
+			ix = EXT_FIRST_INDEX((struct ext3_extent_header *) eh);
+			path->curr = ix;
+			path->left = path->entries - 1;
+			path->visit_num = 0;
+		} else {
+			ix = EXT_LAST_INDEX((struct ext3_extent_header *) eh);
+			path->curr = ix;
+			path->left = 0;
+			if (handle->level < handle->max_depth)
+				path->visit_num = 1;
+		}
+#ifdef DEBUG_GET_EXTENT
+		printf("Down to level %d/%d, end_blk=%llu\n",
+			   handle->level, handle->max_depth,
+			   path->end_blk);
+#endif
+		break;
+	default:
+		return EXT2_ET_OP_NOT_SUPPORTED;
+	}
+
+	if (!ix)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	extent->e_flags = 0;
+#ifdef DEBUG_GET_EXTENT
+	printf("(Left %d)\n", path->left);
+#endif
+
+	if (handle->level == handle->max_depth) {
+		ex = (struct ext3_extent *) ix;
+
+		extent->e_pblk = ext2fs_le32_to_cpu(ex->ee_start) +
+			((__u64) ext2fs_le16_to_cpu(ex->ee_start_hi) << 32);
+		extent->e_lblk = ext2fs_le32_to_cpu(ex->ee_block);
+		extent->e_len = ext2fs_le16_to_cpu(ex->ee_len);
+		extent->e_flags |= EXT2_EXTENT_FLAGS_LEAF;
+		if (extent->e_len > EXT_INIT_MAX_LEN) {
+			extent->e_len -= EXT_INIT_MAX_LEN;
+			extent->e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+		}
+	} else {
+		extent->e_pblk = ext2fs_le32_to_cpu(ix->ei_leaf) +
+			((__u64) ext2fs_le16_to_cpu(ix->ei_leaf_hi) << 32);
+		extent->e_lblk = ext2fs_le32_to_cpu(ix->ei_block);
+		if (path->left > 0) {
+			ix++;
+			end_blk = ext2fs_le32_to_cpu(ix->ei_block);
+		} else
+			end_blk = path->end_blk;
+
+		extent->e_len = end_blk - extent->e_lblk;
+	}
+	if (path->visit_num)
+		extent->e_flags |= EXT2_EXTENT_FLAGS_SECOND_VISIT;
+
+	if (((orig_op == EXT2_EXTENT_NEXT_LEAF) ||
+	     (orig_op == EXT2_EXTENT_PREV_LEAF)) &&
+	    (handle->level != handle->max_depth))
+		goto retry;
+
+	if ((orig_op == EXT2_EXTENT_LAST_LEAF) &&
+	    ((handle->level != handle->max_depth) ||
+	     (path->left != 0)))
+		goto retry;
+
+	return 0;
+}
+
+static errcode_t update_path(ext2_extent_handle_t handle)
+{
+	blk64_t				blk;
+	errcode_t			retval;
+	struct ext3_extent_idx		*ix;
+
+	if (handle->level == 0) {
+		retval = ext2fs_write_inode(handle->fs, handle->ino,
+					    handle->inode);
+	} else {
+		ix = handle->path[handle->level - 1].curr;
+		blk = ext2fs_le32_to_cpu(ix->ei_leaf) +
+			((__u64) ext2fs_le16_to_cpu(ix->ei_leaf_hi) << 32);
+
+		retval = io_channel_write_blk(handle->fs->io,
+				      blk, 1, handle->path[handle->level].buf);
+	}
+	return retval;
+}
+
+#if 0
+errcode_t ext2fs_extent_save_path(ext2_extent_handle_t handle,
+				  ext2_extent_path_t *ret_path)
+{
+	ext2_extent_path_t	save_path;
+	struct ext2fs_extent	extent;
+	struct ext2_extent_info	info;
+	errcode_t		retval;
+
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
+	if (retval)
+		return retval;
+
+	retval = ext2fs_extent_get_info(handle, &info);
+	if (retval)
+		return retval;
+
+	retval = ext2fs_get_mem(sizeof(struct ext2_extent_path), &save_path);
+	if (retval)
+		return retval;
+	memset(save_path, 0, sizeof(struct ext2_extent_path));
+
+	save_path->magic = EXT2_ET_MAGIC_EXTENT_PATH;
+	save_path->leaf_height = info.max_depth - info.curr_level - 1;
+	save_path->lblk = extent.e_lblk;
+
+	*ret_path = save_path;
+	return 0;
+}
+
+errcode_t ext2fs_extent_free_path(ext2_extent_path_t path)
+{
+	EXT2_CHECK_MAGIC(path, EXT2_ET_MAGIC_EXTENT_PATH);
+
+	ext2fs_free_mem(&path);
+	return 0;
+}
+#endif
+
+/*
+ * Go to the node at leaf_level which contains logical block blk.
+ *
+ * leaf_level is height from the leaf node level, i.e.
+ * leaf_level 0 is at leaf node, leaf_level 1 is 1 above etc.
+ *
+ * If "blk" has no mapping (hole) then handle is left at last
+ * extent before blk.
+ */
+static errcode_t extent_goto(ext2_extent_handle_t handle,
+			     int leaf_level, blk64_t blk)
+{
+	struct ext2fs_extent	extent;
+	errcode_t		retval;
+
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_ROOT, &extent);
+	if (retval) {
+		if (retval == EXT2_ET_EXTENT_NO_NEXT)
+			retval = EXT2_ET_EXTENT_NOT_FOUND;
+		return retval;
+	}
+
+	if (leaf_level > handle->max_depth) {
+#ifdef DEBUG
+		printf("leaf level %d greater than tree depth %d\n",
+			leaf_level, handle->max_depth);
+#endif
+		return EXT2_ET_OP_NOT_SUPPORTED;
+	}
+
+#ifdef DEBUG
+	printf("goto extent ino %u, level %d, %llu\n", handle->ino,
+	       leaf_level, blk);
+#endif
+
+#ifdef DEBUG_GOTO_EXTENTS
+	dbg_print_extent("root", &extent);
+#endif
+	while (1) {
+		if (handle->max_depth - handle->level == leaf_level) {
+			/* block is in this &extent */
+			if ((blk >= extent.e_lblk) &&
+			    (blk < extent.e_lblk + extent.e_len))
+				return 0;
+			if (blk < extent.e_lblk) {
+				retval = ext2fs_extent_get(handle,
+							   EXT2_EXTENT_PREV_SIB,
+							   &extent);
+				return EXT2_ET_EXTENT_NOT_FOUND;
+			}
+			retval = ext2fs_extent_get(handle,
+						   EXT2_EXTENT_NEXT_SIB,
+						   &extent);
+			if (retval == EXT2_ET_EXTENT_NO_NEXT)
+				return EXT2_ET_EXTENT_NOT_FOUND;
+			if (retval)
+				return retval;
+			continue;
+		}
+
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT_SIB,
+					   &extent);
+		if (retval == EXT2_ET_EXTENT_NO_NEXT)
+			goto go_down;
+		if (retval)
+			return retval;
+
+#ifdef DEBUG_GOTO_EXTENTS
+		dbg_print_extent("next", &extent);
+#endif
+		if (blk == extent.e_lblk)
+			goto go_down;
+		if (blk > extent.e_lblk)
+			continue;
+
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_PREV_SIB,
+					   &extent);
+		if (retval)
+			return retval;
+
+#ifdef DEBUG_GOTO_EXTENTS
+		dbg_print_extent("prev", &extent);
+#endif
+
+	go_down:
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_DOWN,
+					   &extent);
+		if (retval)
+			return retval;
+
+#ifdef DEBUG_GOTO_EXTENTS
+		dbg_print_extent("down", &extent);
+#endif
+	}
+}
+
+errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
+			     blk64_t blk)
+{
+	return extent_goto(handle, 0, blk);
+}
+
+/*
+ * Traverse back up to root fixing parents of current node as needed.
+ *
+ * If we changed start of first entry in a node, fix parent index start
+ * and so on.
+ *
+ * Safe to call for any position in node; if not at the first entry,
+ * will  simply return.
+ */
+static errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle)
+{
+	int				retval = 0;
+	blk64_t				start;
+	struct extent_path		*path;
+	struct ext2fs_extent		extent;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	path = handle->path + handle->level;
+	if (!path->curr)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
+	if (retval)
+		goto done;
+
+	/* modified node's start block */
+	start = extent.e_lblk;
+
+	/* traverse up until index not first, or startblk matches, or top */
+	while (handle->level > 0 &&
+	       (path->left == path->entries - 1)) {
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_UP, &extent);
+		if (retval)
+			goto done;
+		if (extent.e_lblk == start)
+			break;
+		path = handle->path + handle->level;
+		extent.e_len += (extent.e_lblk - start);
+		extent.e_lblk = start;
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+		update_path(handle);
+	}
+
+	/* put handle back to where we started */
+	retval = ext2fs_extent_goto(handle, start);
+done:
+	return retval;
+}
+
+errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle,
+				int flags EXT2FS_ATTR((unused)),
+				struct ext2fs_extent *extent)
+{
+	struct extent_path		*path;
+	struct ext3_extent_idx		*ix;
+	struct ext3_extent		*ex;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	path = handle->path + handle->level;
+	if (!path->curr)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+#ifdef DEBUG
+	printf("extent replace: %u ", handle->ino);
+	dbg_print_extent(0, extent);
+#endif
+
+	if (handle->level == handle->max_depth) {
+		ex = path->curr;
+
+		ex->ee_block = ext2fs_cpu_to_le32(extent->e_lblk);
+		ex->ee_start = ext2fs_cpu_to_le32(extent->e_pblk & 0xFFFFFFFF);
+		ex->ee_start_hi = ext2fs_cpu_to_le16(extent->e_pblk >> 32);
+		if (extent->e_flags & EXT2_EXTENT_FLAGS_UNINIT) {
+			if (extent->e_len > EXT_UNINIT_MAX_LEN)
+				return EXT2_ET_EXTENT_INVALID_LENGTH;
+			ex->ee_len = ext2fs_cpu_to_le16(extent->e_len +
+							EXT_INIT_MAX_LEN);
+		} else {
+			if (extent->e_len > EXT_INIT_MAX_LEN)
+				return EXT2_ET_EXTENT_INVALID_LENGTH;
+			ex->ee_len = ext2fs_cpu_to_le16(extent->e_len);
+		}
+	} else {
+		ix = path->curr;
+
+		ix->ei_leaf = ext2fs_cpu_to_le32(extent->e_pblk & 0xFFFFFFFF);
+		ix->ei_leaf_hi = ext2fs_cpu_to_le16(extent->e_pblk >> 32);
+		ix->ei_block = ext2fs_cpu_to_le32(extent->e_lblk);
+		ix->ei_unused = 0;
+	}
+	update_path(handle);
+	return 0;
+}
+
+/*
+ * allocate a new block, move half the current node to it, and update parent
+ *
+ * handle will be left pointing at original record.
+ */
+static errcode_t extent_node_split(ext2_extent_handle_t handle)
+{
+	errcode_t			retval = 0;
+	blk_t				new_node_pblk;
+	blk64_t				new_node_start;
+	blk64_t				orig_lblk;
+	blk64_t				goal_blk = 0;
+	int				orig_height;
+	char				*block_buf = NULL;
+	struct ext2fs_extent		extent;
+	struct extent_path		*path, *newpath = 0;
+	struct ext3_extent_header	*eh, *neweh;
+	int				tocopy;
+	int				new_root = 0;
+	struct ext2_extent_info		info;
+
+	/* basic sanity */
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+#ifdef DEBUG
+	printf("splitting node at level %d\n", handle->level);
+#endif
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
+	if (retval)
+		goto done;
+
+	retval = ext2fs_extent_get_info(handle, &info);
+	if (retval)
+		goto done;
+
+	/* save the position we were originally splitting... */
+	orig_height = info.max_depth - info.curr_level;
+	orig_lblk = extent.e_lblk;
+
+	/* Is there room in the parent for a new entry? */
+	if (handle->level &&
+			(handle->path[handle->level - 1].entries >=
+			 handle->path[handle->level - 1].max_entries)) {
+
+#ifdef DEBUG
+		printf("parent level %d full; splitting it too\n",
+							handle->level - 1);
+#endif
+		/* split the parent */
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_UP, &extent);
+		if (retval)
+			goto done;
+		goal_blk = extent.e_pblk;
+
+		retval = extent_node_split(handle);
+		if (retval)
+			goto done;
+
+		/* get handle back to our original split position */
+		retval = extent_goto(handle, orig_height, orig_lblk);
+		if (retval)
+			goto done;
+	}
+
+	/* At this point, parent should have room for this split */
+	path = handle->path + handle->level;
+	if (!path->curr)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	/* extent header of the current node we'll split */
+	eh = (struct ext3_extent_header *)path->buf;
+
+	/* splitting root level means moving them all out */
+	if (handle->level == 0) {
+		new_root = 1;
+		tocopy = ext2fs_le16_to_cpu(eh->eh_entries);
+		retval = ext2fs_get_mem(((handle->max_depth+2) *
+					 sizeof(struct extent_path)),
+					&newpath);
+		if (retval)
+			goto done;
+		memset(newpath, 0,
+		       ((handle->max_depth+2) * sizeof(struct extent_path)));
+	} else {
+		tocopy = ext2fs_le16_to_cpu(eh->eh_entries) / 2;
+	}
+
+#ifdef DEBUG
+	printf("will copy out %d of %d entries at level %d\n",
+				tocopy, ext2fs_le16_to_cpu(eh->eh_entries),
+				handle->level);
+#endif
+
+	if (!tocopy) {
+#ifdef DEBUG
+		printf("Nothing to copy to new block!\n");
+#endif
+		retval = EXT2_ET_CANT_SPLIT_EXTENT;
+		goto done;
+	}
+
+	/* first we need a new block, or can do nothing. */
+	block_buf = malloc(handle->fs->blocksize);
+	if (!block_buf) {
+		retval = ENOMEM;
+		goto done;
+	}
+
+	if (!goal_blk) {
+		dgrp_t	group = ext2fs_group_of_ino(handle->fs, handle->ino);
+		__u8	log_flex = handle->fs->super->s_log_groups_per_flex;
+
+		if (log_flex)
+			group = group & ~((1 << (log_flex)) - 1);
+		goal_blk = (group * handle->fs->super->s_blocks_per_group) +
+			handle->fs->super->s_first_data_block;
+	}
+	retval = ext2fs_alloc_block(handle->fs, (blk_t) goal_blk, block_buf,
+				    &new_node_pblk);
+	if (retval)
+		goto done;
+
+#ifdef DEBUG
+	printf("will copy to new node at block %lu\n",
+	       (unsigned long) new_node_pblk);
+#endif
+
+	/* Copy data into new block buffer */
+	/* First the header for the new block... */
+	neweh = (struct ext3_extent_header *) block_buf;
+	memcpy(neweh, eh, sizeof(struct ext3_extent_header));
+	neweh->eh_entries = ext2fs_cpu_to_le16(tocopy);
+	neweh->eh_max = ext2fs_cpu_to_le16((handle->fs->blocksize -
+			 sizeof(struct ext3_extent_header)) /
+				sizeof(struct ext3_extent));
+
+	/* then the entries for the new block... */
+	memcpy(EXT_FIRST_INDEX(neweh),
+		EXT_FIRST_INDEX(eh) +
+			(ext2fs_le16_to_cpu(eh->eh_entries) - tocopy),
+		sizeof(struct ext3_extent_idx) * tocopy);
+
+	new_node_start = ext2fs_le32_to_cpu(EXT_FIRST_INDEX(neweh)->ei_block);
+
+	/* ...and write the new node block out to disk. */
+	retval = io_channel_write_blk(handle->fs->io, new_node_pblk, 1, block_buf);
+
+	if (retval)
+		goto done;
+
+	/* OK! we've created the new node; now adjust the tree */
+
+	/* current path now has fewer active entries, we copied some out */
+	if (handle->level == 0) {
+		memcpy(newpath, path,
+		       sizeof(struct extent_path) * (handle->max_depth+1));
+		handle->path = newpath;
+		newpath = path;
+		path = handle->path;
+		path->entries = 1;
+		path->left = path->max_entries - 1;
+		handle->max_depth++;
+		eh->eh_depth = ext2fs_cpu_to_le16(handle->max_depth);
+	} else {
+		path->entries -= tocopy;
+		path->left -= tocopy;
+	}
+
+	eh->eh_entries = ext2fs_cpu_to_le16(path->entries);
+	/* this writes out the node, incl. the modified header */
+	retval = update_path(handle);
+	if (retval)
+		goto done;
+
+	/* now go up and insert/replace index for new node we created */
+	if (new_root) {
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_FIRST_SIB, &extent);
+		if (retval)
+			goto done;
+
+		extent.e_lblk = new_node_start;
+		extent.e_pblk = new_node_pblk;
+		extent.e_len = handle->path[0].end_blk - extent.e_lblk;
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+	} else {
+		__u32 new_node_length;
+
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_UP, &extent);
+		/* will insert after this one; it's length is shorter now */
+		new_node_length = new_node_start - extent.e_lblk;
+		extent.e_len -= new_node_length;
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+
+		/* now set up the new extent and insert it */
+		extent.e_lblk = new_node_start;
+		extent.e_pblk = new_node_pblk;
+		extent.e_len = new_node_length;
+		retval = ext2fs_extent_insert(handle, EXT2_EXTENT_INSERT_AFTER, &extent);
+		if (retval)
+			goto done;
+	}
+
+	/* get handle back to our original position */
+	retval = extent_goto(handle, orig_height, orig_lblk);
+	if (retval)
+		goto done;
+
+	/* new node hooked in, so update inode block count (do this here?) */
+	handle->inode->i_blocks += handle->fs->blocksize / 512;
+	retval = ext2fs_write_inode(handle->fs, handle->ino,
+				    handle->inode);
+	if (retval)
+		goto done;
+
+done:
+	if (newpath)
+		ext2fs_free_mem(&newpath);
+	free(block_buf);
+
+	return retval;
+}
+
+errcode_t ext2fs_extent_insert(ext2_extent_handle_t handle, int flags,
+				      struct ext2fs_extent *extent)
+{
+	struct extent_path		*path;
+	struct ext3_extent_idx		*ix;
+	struct ext3_extent_header	*eh;
+	errcode_t			retval;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+#ifdef DEBUG
+	printf("extent insert: %u ", handle->ino);
+	dbg_print_extent(0, extent);
+#endif
+
+	path = handle->path + handle->level;
+
+	if (path->entries >= path->max_entries) {
+		if (flags & EXT2_EXTENT_INSERT_NOSPLIT) {
+			return EXT2_ET_CANT_INSERT_EXTENT;
+		} else {
+#ifdef DEBUG
+			printf("node full (level %d) - splitting\n",
+				   handle->level);
+#endif
+			retval = extent_node_split(handle);
+			if (retval)
+				return retval;
+			path = handle->path + handle->level;
+		}
+	}
+
+	eh = (struct ext3_extent_header *) path->buf;
+	if (path->curr) {
+		ix = path->curr;
+		if (flags & EXT2_EXTENT_INSERT_AFTER) {
+			ix++;
+			path->left--;
+		}
+	} else
+		ix = EXT_FIRST_INDEX(eh);
+
+	path->curr = ix;
+
+	if (path->left >= 0)
+		memmove(ix + 1, ix,
+			(path->left+1) * sizeof(struct ext3_extent_idx));
+	path->left++;
+	path->entries++;
+
+	eh = (struct ext3_extent_header *) path->buf;
+	eh->eh_entries = ext2fs_cpu_to_le16(path->entries);
+
+	retval = ext2fs_extent_replace(handle, 0, extent);
+	if (retval)
+		goto errout;
+
+	retval = update_path(handle);
+	if (retval)
+		goto errout;
+
+	return 0;
+
+errout:
+	ext2fs_extent_delete(handle, 0);
+	return retval;
+}
+
+/*
+ * Sets the physical block for a logical file block in the extent tree.
+ *
+ * May: map unmapped, unmap mapped, or remap mapped blocks.
+ *
+ * Mapping an unmapped block adds a single-block extent.
+ *
+ * Unmapping first or last block modifies extent in-place
+ *  - But may need to fix parent's starts too in first-block case
+ *
+ * Mapping any unmapped block requires adding a (single-block) extent
+ * and inserting into proper point in tree.
+ *
+ * Modifying (unmapping or remapping) a block in the middle
+ * of an extent requires splitting the extent.
+ *  - Remapping case requires new single-block extent.
+ *
+ * Remapping first or last block adds an extent.
+ *
+ * We really need extent adding to be smart about merging.
+ */
+
+errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle,
+				 blk64_t logical, blk64_t physical, int flags)
+{
+	errcode_t		ec, retval = 0;
+	int			mapped = 1; /* logical is mapped? */
+	int			orig_height;
+	int			extent_uninit = 0;
+	int			prev_uninit = 0;
+	int			next_uninit = 0;
+	int			new_uninit = 0;
+	int			max_len = EXT_INIT_MAX_LEN;
+	int			has_prev, has_next;
+	blk64_t			orig_lblk;
+	struct extent_path	*path;
+	struct ext2fs_extent	extent, next_extent, prev_extent;
+	struct ext2fs_extent	newextent;
+	struct ext2_extent_info	info;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+#ifdef DEBUG
+	printf("set_bmap ino %u log %lld phys %lld flags %d\n",
+	       handle->ino, logical, physical, flags);
+#endif
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	path = handle->path + handle->level;
+
+	if (flags & EXT2_EXTENT_SET_BMAP_UNINIT) {
+		new_uninit = 1;
+		max_len = EXT_UNINIT_MAX_LEN;
+	}
+
+	/* if (re)mapping, set up new extent to insert */
+	if (physical) {
+		newextent.e_len = 1;
+		newextent.e_pblk = physical;
+		newextent.e_lblk = logical;
+		newextent.e_flags = EXT2_EXTENT_FLAGS_LEAF;
+		if (new_uninit)
+			newextent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+	}
+
+	/* special case if the extent tree is completely empty */
+	if ((handle->max_depth == 0) && (path->entries == 0)) {
+		retval = ext2fs_extent_insert(handle, 0, &newextent);
+		return retval;
+	}
+
+	/* save our original location in the extent tree */
+	if ((retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT,
+					&extent))) {
+		if (retval != EXT2_ET_NO_CURRENT_NODE)
+			return retval;
+		memset(&extent, 0, sizeof(extent));
+	}
+	if ((retval = ext2fs_extent_get_info(handle, &info)))
+		return retval;
+	orig_height = info.max_depth - info.curr_level;
+	orig_lblk = extent.e_lblk;
+
+	/* go to the logical spot we want to (re/un)map */
+	retval = ext2fs_extent_goto(handle, logical);
+	if (retval) {
+		if (retval == EXT2_ET_EXTENT_NOT_FOUND) {
+			retval = 0;
+			mapped = 0;
+			if (!physical) {
+#ifdef DEBUG
+				printf("block %llu already unmapped\n",
+					logical);
+#endif
+				goto done;
+			}
+		} else
+			goto done;
+	}
+
+	/*
+	 * This may be the extent *before* the requested logical,
+	 * if it's currently unmapped.
+	 *
+	 * Get the previous and next leaf extents, if they are present.
+	 */
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
+	if (retval)
+		goto done;
+	if (extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+		extent_uninit = 1;
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_NEXT_LEAF, &next_extent);
+	if (retval) {
+		has_next = 0;
+		if (retval != EXT2_ET_EXTENT_NO_NEXT)
+			goto done;
+	} else {
+		dbg_print_extent("set_bmap: next_extent",
+				 &next_extent);
+		has_next = 1;
+		if (next_extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+			next_uninit = 1;
+	}
+	retval = ext2fs_extent_goto(handle, logical);
+	if (retval && retval != EXT2_ET_EXTENT_NOT_FOUND)
+		goto done;
+	retval = ext2fs_extent_get(handle, EXT2_EXTENT_PREV_LEAF, &prev_extent);
+	if (retval) {
+		has_prev = 0;
+		if (retval != EXT2_ET_EXTENT_NO_PREV)
+			goto done;
+	} else {
+		has_prev = 1;
+		dbg_print_extent("set_bmap: prev_extent",
+				 &prev_extent);
+		if (prev_extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+			prev_uninit = 1;
+	}
+	retval = ext2fs_extent_goto(handle, logical);
+	if (retval && retval != EXT2_ET_EXTENT_NOT_FOUND)
+		goto done;
+
+	/* check if already pointing to the requested physical */
+	if (mapped && (new_uninit == extent_uninit) &&
+	    (extent.e_pblk + (logical - extent.e_lblk) == physical)) {
+#ifdef DEBUG
+		printf("physical block (at %llu) unchanged\n", logical);
+#endif
+		goto done;
+	}
+
+	if (!mapped) {
+#ifdef DEBUG
+		printf("mapping unmapped logical block %llu\n", logical);
+#endif
+		if ((logical == extent.e_lblk + extent.e_len) &&
+		    (physical == extent.e_pblk + extent.e_len) &&
+		    (new_uninit == extent_uninit) &&
+		    ((int) extent.e_len < max_len-1)) {
+			extent.e_len++;
+			retval = ext2fs_extent_replace(handle, 0, &extent);
+		} else if ((logical == extent.e_lblk - 1) &&
+			   (physical == extent.e_pblk - 1) &&
+			   (new_uninit == extent_uninit) &&
+			   ((int) extent.e_len < max_len - 1)) {
+			extent.e_len++;
+			extent.e_lblk--;
+			extent.e_pblk--;
+			retval = ext2fs_extent_replace(handle, 0, &extent);
+		} else if (has_next &&
+			   (logical == next_extent.e_lblk - 1) &&
+			   (physical == next_extent.e_pblk - 1) &&
+			   (new_uninit == next_uninit) &&
+			   ((int) next_extent.e_len < max_len - 1)) {
+			retval = ext2fs_extent_get(handle,
+						   EXT2_EXTENT_NEXT_LEAF,
+						   &next_extent);
+			if (retval)
+				goto done;
+			next_extent.e_len++;
+			next_extent.e_lblk--;
+			next_extent.e_pblk--;
+			retval = ext2fs_extent_replace(handle, 0, &next_extent);
+		} else if (logical < extent.e_lblk)
+			retval = ext2fs_extent_insert(handle, 0, &newextent);
+		else
+			retval = ext2fs_extent_insert(handle,
+				      EXT2_EXTENT_INSERT_AFTER, &newextent);
+		if (retval)
+			goto done;
+		retval = ext2fs_extent_fix_parents(handle);
+		if (retval)
+			goto done;
+	} else if ((logical == extent.e_lblk) && (extent.e_len == 1))  {
+#ifdef DEBUG
+		printf("(re/un)mapping only block in extent\n");
+#endif
+		if (physical) {
+			retval = ext2fs_extent_replace(handle, 0, &newextent);
+		} else {
+			retval = ext2fs_extent_delete(handle, 0);
+			if (retval)
+				goto done;
+			ec = ext2fs_extent_fix_parents(handle);
+			if (ec != EXT2_ET_NO_CURRENT_NODE)
+				retval = ec;
+		}
+
+		if (retval)
+			goto done;
+	} else if (logical == extent.e_lblk + extent.e_len - 1)  {
+#ifdef DEBUG
+		printf("(re/un)mapping last block in extent\n");
+#endif
+		if (physical) {
+			if (has_next &&
+			    (logical == (next_extent.e_lblk - 1)) &&
+			    (physical == (next_extent.e_pblk - 1)) &&
+			    (new_uninit == next_uninit) &&
+			    ((int) next_extent.e_len < max_len - 1)) {
+				retval = ext2fs_extent_get(handle,
+					EXT2_EXTENT_NEXT_LEAF, &next_extent);
+				if (retval)
+					goto done;
+				next_extent.e_len++;
+				next_extent.e_lblk--;
+				next_extent.e_pblk--;
+				retval = ext2fs_extent_replace(handle, 0,
+							       &next_extent);
+				if (retval)
+					goto done;
+			} else
+				retval = ext2fs_extent_insert(handle,
+				      EXT2_EXTENT_INSERT_AFTER, &newextent);
+			if (retval)
+				goto done;
+			/* Now pointing at inserted extent; move back to prev */
+			retval = ext2fs_extent_get(handle,
+						   EXT2_EXTENT_PREV_LEAF,
+						   &extent);
+			if (retval)
+				goto done;
+		}
+		extent.e_len--;
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+	} else if (logical == extent.e_lblk) {
+#ifdef DEBUG
+		printf("(re/un)mapping first block in extent\n");
+#endif
+		if (physical) {
+			if (has_prev &&
+			    (logical == (prev_extent.e_lblk +
+					 prev_extent.e_len)) &&
+			    (physical == (prev_extent.e_pblk +
+					  prev_extent.e_len)) &&
+			    (new_uninit == prev_uninit) &&
+			    ((int) prev_extent.e_len < max_len-1)) {
+				retval = ext2fs_extent_get(handle, 
+					EXT2_EXTENT_PREV_LEAF, &prev_extent);
+				if (retval)
+					goto done;
+				prev_extent.e_len++;
+				retval = ext2fs_extent_replace(handle, 0,
+							       &prev_extent);
+			} else
+				retval = ext2fs_extent_insert(handle,
+							      0, &newextent);
+			if (retval)
+				goto done;
+			retval = ext2fs_extent_get(handle,
+						   EXT2_EXTENT_NEXT_LEAF,
+						   &extent);
+			if (retval)
+				goto done;
+		}
+		extent.e_pblk++;
+		extent.e_lblk++;
+		extent.e_len--;
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+	} else {
+		__u32	orig_length;
+
+#ifdef DEBUG
+		printf("(re/un)mapping in middle of extent\n");
+#endif
+		/* need to split this extent; later */
+
+		orig_length = extent.e_len;
+
+		/* shorten pre-split extent */
+		extent.e_len = (logical - extent.e_lblk);
+		retval = ext2fs_extent_replace(handle, 0, &extent);
+		if (retval)
+			goto done;
+		/* insert our new extent, if any */
+		if (physical) {
+			/* insert new extent after current */
+			retval = ext2fs_extent_insert(handle,
+					EXT2_EXTENT_INSERT_AFTER, &newextent);
+			if (retval)
+				goto done;
+		}
+		/* add post-split extent */
+		extent.e_pblk += extent.e_len + 1;
+		extent.e_lblk += extent.e_len + 1;
+		extent.e_len = orig_length - extent.e_len - 1;
+		retval = ext2fs_extent_insert(handle,
+				EXT2_EXTENT_INSERT_AFTER, &extent);
+		if (retval)
+			goto done;
+	}
+
+done:
+	/* get handle back to its position */
+	if (orig_height > handle->max_depth)
+		orig_height = handle->max_depth; /* In case we shortened the tree */
+	extent_goto(handle, orig_height, orig_lblk);
+	return retval;
+}
+
+errcode_t ext2fs_extent_delete(ext2_extent_handle_t handle, int flags)
+{
+	struct extent_path		*path;
+	char 				*cp;
+	struct ext3_extent_header	*eh;
+	errcode_t			retval = 0;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	if (!(handle->fs->flags & EXT2_FLAG_RW))
+		return EXT2_ET_RO_FILSYS;
+
+	if (!handle->path)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+#ifdef DEBUG
+	{
+		struct ext2fs_extent	extent;
+
+		retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT,
+					   &extent);
+		if (retval == 0) {
+			printf("extent delete %u ", handle->ino);
+			dbg_print_extent(0, &extent);
+		}
+	}
+#endif
+
+	path = handle->path + handle->level;
+	if (!path->curr)
+		return EXT2_ET_NO_CURRENT_NODE;
+
+	cp = path->curr;
+
+	if (path->left) {
+		memmove(cp, cp + sizeof(struct ext3_extent_idx),
+			path->left * sizeof(struct ext3_extent_idx));
+		path->left--;
+	} else {
+		struct ext3_extent_idx	*ix = path->curr;
+		ix--;
+		path->curr = ix;
+	}
+	if (--path->entries == 0)
+		path->curr = 0;
+
+	/* if non-root node has no entries left, remove it & parent ptr to it */
+	if (path->entries == 0 && handle->level) {
+		if (!(flags & EXT2_EXTENT_DELETE_KEEP_EMPTY)) {
+			struct ext2fs_extent	extent;
+
+			retval = ext2fs_extent_get(handle, EXT2_EXTENT_UP,
+								&extent);
+			if (retval)
+				return retval;
+
+			retval = ext2fs_extent_delete(handle, flags);
+			handle->inode->i_blocks -= handle->fs->blocksize / 512;
+			retval = ext2fs_write_inode(handle->fs, handle->ino,
+						    handle->inode);
+			ext2fs_block_alloc_stats(handle->fs, extent.e_pblk, -1);
+		}
+	} else {
+		eh = (struct ext3_extent_header *) path->buf;
+		eh->eh_entries = ext2fs_cpu_to_le16(path->entries);
+		if ((path->entries == 0) && (handle->level == 0))
+			eh->eh_depth = handle->max_depth = 0;
+		retval = update_path(handle);
+	}
+	return retval;
+}
+
+errcode_t ext2fs_extent_get_info(ext2_extent_handle_t handle,
+				 struct ext2_extent_info *info)
+{
+	struct extent_path		*path;
+
+	EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
+
+	memset(info, 0, sizeof(struct ext2_extent_info));
+
+	path = handle->path + handle->level;
+	if (path) {
+		if (path->curr)
+			info->curr_entry = ((char *) path->curr - path->buf) /
+				sizeof(struct ext3_extent_idx);
+		else
+			info->curr_entry = 0;
+		info->num_entries = path->entries;
+		info->max_entries = path->max_entries;
+		info->bytes_avail = (path->max_entries - path->entries) *
+			sizeof(struct ext3_extent);
+	}
+
+	info->curr_level = handle->level;
+	info->max_depth = handle->max_depth;
+	info->max_lblk = ((__u64) 1 << 32) - 1;
+	info->max_pblk = ((__u64) 1 << 48) - 1;
+	info->max_len = (1UL << 15);
+	info->max_uninit_len = (1UL << 15) - 1;
+
+	return 0;
+}
+
+#ifdef DEBUG
+
+#include "ss/ss.h"
+
+#include "debugfs.h"
+
+/*
+ * Hook in new commands into debugfs
+ */
+const char *debug_prog_name = "tst_extents";
+extern ss_request_table extent_cmds;
+ss_request_table *extra_cmds = &extent_cmds;
+
+ext2_ino_t	current_ino = 0;
+ext2_extent_handle_t current_handle;
+
+int common_extent_args_process(int argc, char *argv[], int min_argc,
+			       int max_argc, const char *cmd,
+			       const char *usage, int flags)
+{
+	if (common_args_process(argc, argv, min_argc, max_argc, cmd,
+				usage, flags))
+		return 1;
+
+	if (!current_handle) {
+		com_err(cmd, 0, "Extent handle not open");
+		return 1;
+	}
+	return 0;
+}
+
+void do_inode(int argc, char *argv[])
+{
+	ext2_ino_t	inode;
+	int		i;
+	struct ext3_extent_header *eh;
+	errcode_t retval;
+
+	if (check_fs_open(argv[0]))
+		return;
+
+	if (argc == 1) {
+		if (current_ino)
+			printf("Current inode is %d\n", current_ino);
+		else
+			printf("No current inode\n");
+		return;
+	}
+
+	if (common_inode_args_process(argc, argv, &inode, 0)) {
+		return;
+	}
+
+	current_ino = 0;
+
+	retval = ext2fs_extent_open(current_fs, inode, &current_handle);
+	if (retval) {
+		com_err(argv[1], retval, "while opening extent handle");
+		return;
+	}
+
+	current_ino = inode;
+
+	printf("Loaded inode %d\n", current_ino);
+
+	return;
+}
+
+void generic_goto_node(char *cmd_name, int op)
+{
+	struct ext2fs_extent	extent;
+	errcode_t		retval;
+
+	if (check_fs_open(cmd_name))
+		return;
+
+	if (!current_handle) {
+		com_err(cmd_name, 0, "Extent handle not open");
+		return;
+	}
+
+	retval = ext2fs_extent_get(current_handle, op, &extent);
+	if (retval) {
+		com_err(cmd_name, retval, 0);
+		return;
+	}
+	dbg_print_extent(0, &extent);
+}
+
+void do_current_node(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_CURRENT);
+}
+
+void do_root_node(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_ROOT);
+}
+
+void do_last_leaf(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_LAST_LEAF);
+}
+
+void do_first_sib(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_FIRST_SIB);
+}
+
+void do_last_sib(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_LAST_SIB);
+}
+
+void do_next_sib(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_NEXT_SIB);
+}
+
+void do_prev_sib(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_PREV_SIB);
+}
+
+void do_next_leaf(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_NEXT_LEAF);
+}
+
+void do_prev_leaf(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_PREV_LEAF);
+}
+
+void do_next(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_NEXT);
+}
+
+void do_prev(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_PREV);
+}
+
+void do_up(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_UP);
+}
+
+void do_down(int argc, char *argv[])
+{
+	generic_goto_node(argv[0], EXT2_EXTENT_DOWN);
+}
+
+void do_delete_node(int argc, char *argv[])
+{
+	errcode_t	retval;
+	int		err;
+
+	if (common_extent_args_process(argc, argv, 1, 1, "delete_node",
+				       "", CHECK_FS_RW | CHECK_FS_BITMAPS))
+		return;
+
+	retval = ext2fs_extent_delete(current_handle, 0);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+	if (current_handle->path && current_handle->path[0].curr)
+		do_current_node(argc, argv);
+}
+
+void do_replace_node(int argc, char *argv[])
+{
+	const char	*usage = "[--uninit] <lblk> <len> <pblk>";
+	errcode_t	retval;
+	struct ext2fs_extent extent;
+	int err;
+
+	if (common_extent_args_process(argc, argv, 3, 5, "replace_node",
+				       usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+		return;
+
+	extent.e_flags = 0;
+
+	if (!strcmp(argv[1], "--uninit")) {
+		argc--;
+		argv++;
+		extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+	}
+
+	if (argc != 4) {
+		fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
+		return;
+	}
+
+	extent.e_lblk = parse_ulong(argv[1], argv[0], "logical block", &err);
+	if (err)
+		return;
+
+	extent.e_len = parse_ulong(argv[2], argv[0], "logical block", &err);
+	if (err)
+		return;
+
+	extent.e_pblk = parse_ulong(argv[3], argv[0], "logical block", &err);
+	if (err)
+		return;
+
+	retval = ext2fs_extent_replace(current_handle, 0, &extent);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+	do_current_node(argc, argv);
+}
+
+void do_split_node(int argc, char *argv[])
+{
+	errcode_t	retval;
+	struct ext2fs_extent extent;
+	int err;
+
+	if (common_extent_args_process(argc, argv, 1, 1, "split_node",
+				       "", CHECK_FS_RW | CHECK_FS_BITMAPS))
+		return;
+
+	retval = extent_node_split(current_handle);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+	do_current_node(argc, argv);
+}
+
+void do_insert_node(int argc, char *argv[])
+{
+	const char	*usage = "[--after] [--uninit] <lblk> <len> <pblk>";
+	errcode_t	retval;
+	struct ext2fs_extent extent;
+	char *cmd;
+	int err;
+	int flags = 0;
+
+	if (common_extent_args_process(argc, argv, 3, 6, "insert_node",
+				       usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+		return;
+
+	cmd = argv[0];
+
+	extent.e_flags = 0;
+
+	while (argc > 2) {
+		if (!strcmp(argv[1], "--after")) {
+			argc--;
+			argv++;
+			flags |= EXT2_EXTENT_INSERT_AFTER;
+			continue;
+		}
+		if (!strcmp(argv[1], "--uninit")) {
+			argc--;
+			argv++;
+			extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+			continue;
+		}
+		break;
+	}
+
+	if (argc != 4) {
+		fprintf(stderr, "usage: %s %s\n", cmd, usage);
+		return;
+	}
+
+	extent.e_lblk = parse_ulong(argv[1], cmd,
+				    "logical block", &err);
+	if (err)
+		return;
+
+	extent.e_len = parse_ulong(argv[2], cmd,
+				    "length", &err);
+	if (err)
+		return;
+
+	extent.e_pblk = parse_ulong(argv[3], cmd,
+				    "pysical block", &err);
+	if (err)
+		return;
+
+	retval = ext2fs_extent_insert(current_handle, flags, &extent);
+	if (retval) {
+		com_err(cmd, retval, 0);
+		return;
+	}
+	do_current_node(argc, argv);
+}
+
+void do_set_bmap(int argc, char **argv)
+{
+	const char	*usage = "[--uninit] <lblk> <pblk>";
+	errcode_t	retval;
+	blk_t		logical;
+	blk_t		physical;
+	char		*cmd = argv[0];
+	int		flags = 0;
+	int		err;
+
+	if (common_extent_args_process(argc, argv, 3, 5, "set_bmap",
+				       usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+		return;
+
+	if (argc > 2 && !strcmp(argv[1], "--uninit")) {
+		argc--;
+		argv++;
+		flags |= EXT2_EXTENT_SET_BMAP_UNINIT;
+	}
+
+	if (argc != 3) {
+		fprintf(stderr, "Usage: %s %s\n", cmd, usage);
+		return;
+	}
+
+	logical = parse_ulong(argv[1], cmd,
+				    "logical block", &err);
+	if (err)
+		return;
+
+	physical = parse_ulong(argv[2], cmd,
+				    "physical block", &err);
+	if (err)
+		return;
+
+	retval = ext2fs_extent_set_bmap(current_handle, logical,
+					(blk64_t) physical, flags);
+	if (retval) {
+		com_err(cmd, retval, 0);
+		return;
+	}
+	if (current_handle->path && current_handle->path[0].curr)
+		do_current_node(argc, argv);
+}
+
+void do_print_all(int argc, char **argv)
+{
+	const char	*usage = "[--leaf-only|--reverse|--reverse-leaf]";
+	struct ext2fs_extent	extent;
+	errcode_t		retval;
+	errcode_t		end_err = EXT2_ET_EXTENT_NO_NEXT;
+	int			op = EXT2_EXTENT_NEXT;
+	int			first_op = EXT2_EXTENT_ROOT;
+
+
+	if (common_extent_args_process(argc, argv, 1, 2, "print_all",
+				       usage, 0))
+		return;
+
+	if (argc == 2) {
+		if (!strcmp(argv[1], "--leaf-only"))
+			op = EXT2_EXTENT_NEXT_LEAF;
+		else if (!strcmp(argv[1], "--reverse")) {
+			op = EXT2_EXTENT_PREV;
+			first_op = EXT2_EXTENT_LAST_LEAF;
+			end_err = EXT2_ET_EXTENT_NO_PREV;
+		} else if (!strcmp(argv[1], "--reverse-leaf")) {
+			op = EXT2_EXTENT_PREV_LEAF;
+			first_op = EXT2_EXTENT_LAST_LEAF;
+			end_err = EXT2_ET_EXTENT_NO_PREV;
+		} else {
+			fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
+			return;
+		}
+	}
+
+	retval = ext2fs_extent_get(current_handle, first_op, &extent);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+	dbg_print_extent(0, &extent);
+
+	while (1) {
+		retval = ext2fs_extent_get(current_handle, op, &extent);
+		if (retval == end_err)
+			break;
+
+		if (retval) {
+			com_err(argv[0], retval, 0);
+			return;
+		}
+		dbg_print_extent(0, &extent);
+	}
+}
+
+void do_info(int argc, char **argv)
+{
+	struct ext2fs_extent	extent;
+	struct ext2_extent_info	info;
+	errcode_t		retval;
+
+	if (common_extent_args_process(argc, argv, 1, 1, "info", "", 0))
+		return;
+
+	retval = ext2fs_extent_get_info(current_handle, &info);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+
+	retval = ext2fs_extent_get(current_handle,
+				   EXT2_EXTENT_CURRENT, &extent);
+	if (retval) {
+		com_err(argv[0], retval, 0);
+		return;
+	}
+
+	dbg_print_extent(0, &extent);
+
+	printf("Current handle location: %d/%d (max: %d, bytes %d), level %d/%d\n",
+	       info.curr_entry, info.num_entries, info.max_entries,
+	       info.bytes_avail, info.curr_level, info.max_depth);
+	printf("\tmax lblk: %llu, max pblk: %llu\n", info.max_lblk,
+	       info.max_pblk);
+	printf("\tmax_len: %u, max_uninit_len: %u\n", info.max_len,
+	       info.max_uninit_len);
+}
+
+void do_goto_block(int argc, char **argv)
+{
+	struct ext2fs_extent	extent;
+	errcode_t		retval;
+	int			op = EXT2_EXTENT_NEXT_LEAF;
+	blk_t			blk;
+	int			level = 0;
+
+	if (common_extent_args_process(argc, argv, 2, 3, "goto_block",
+				       "block [level]", 0))
+		return;
+
+	if (strtoblk(argv[0], argv[1], &blk))
+		return;
+
+	if (argc == 3)
+		if (strtoblk(argv[0], argv[2], &level))
+			return;
+
+	retval = extent_goto(current_handle, level, (blk64_t) blk);
+
+	if (retval) {
+		com_err(argv[0], retval,
+			"while trying to go to block %u, level %d",
+			blk, level);
+		return;
+	}
+
+	generic_goto_node(argv[0], EXT2_EXTENT_CURRENT);
+}
+#endif
+
diff --git a/lib/ext2fs/extent_dbg.ct b/lib/ext2fs/extent_dbg.ct
new file mode 100644
index 0000000..d0571f4
--- /dev/null
+++ b/lib/ext2fs/extent_dbg.ct
@@ -0,0 +1,74 @@
+#
+# Copyright (C) 1993 Theodore Ts'o.  This file may be redistributed
+# under the terms of the GNU Public License.
+#
+command_table extent_cmds;
+
+request do_inode, "Open an inode",
+	inode;
+
+request do_current_node, "Current extent node",
+	current_node, current;
+
+request do_root_node, "Goto root extent",
+	root_node, root;
+
+request do_last_leaf, "Goto last leaf",
+	last_leaf;
+
+request do_first_sib, "Goto first sibling",
+	first_sibling, first_sib;
+
+request do_last_sib, "Goto last sibling",
+	last_sibling, last_sib;
+
+request do_next_sib, "Goto next sibling",
+	next_sibling, next_sib, ns;
+
+request do_prev_sib, "Goto previous sibling",
+	prev_sibling, prev_sib, ps;
+
+request do_next_leaf, "Goto next leaf",
+	next_leaf, nl;
+
+request do_prev_leaf, "Goto previous leaf",
+	prev_leaf, pl;
+
+request do_next, "Goto next node",
+	next, n;
+
+request do_prev, "Goto previous node",
+	previous, prev, p;
+
+request do_up, "Up node",
+	up_node, up, u;
+
+request do_down, "Down node",
+	down_node, down, d;
+
+request do_delete_node, "Delete node",
+	delete_node, delete;
+
+request do_insert_node, "Insert node",
+	insert_node, insert;
+
+request do_split_node, "Split node",
+	split_node, split;
+
+request do_set_bmap, "Set block mapping",
+	set_bmap;
+
+request do_replace_node, "Insert node",
+	replace_node, replace;
+
+request do_print_all, "Iterate over all nodes and print them",
+	print_all, all;
+
+request do_goto_block, "Goto extent containing specified block",
+	goto_block, goto;
+
+request do_info, "Print extent info",
+	info;
+
+end;
+
diff --git a/lib/ext2fs/fiemap.h b/lib/ext2fs/fiemap.h
new file mode 100644
index 0000000..934e22d
--- /dev/null
+++ b/lib/ext2fs/fiemap.h
@@ -0,0 +1,66 @@
+/*
+ * FS_IOC_FIEMAP ioctl infrastructure.
+ *
+ * Some portions copyright (C) 2007 Cluster File Systems, Inc
+ *
+ * Authors: Mark Fasheh <mfasheh@suse.com>
+ *          Kalpak Shah <kalpak.shah@sun.com>
+ *          Andreas Dilger <adilger@sun.com>
+ */
+
+#ifndef _LINUX_FIEMAP_H
+#define _LINUX_FIEMAP_H
+
+#include <linux/types.h>
+
+struct fiemap_extent {
+	__u64 fe_logical;  /* logical offset in bytes for the start of
+			    * the extent from the beginning of the file */
+	__u64 fe_physical; /* physical offset in bytes for the start
+			    * of the extent from the beginning of the disk */
+	__u64 fe_length;   /* length in bytes for this extent */
+	__u64 fe_reserved64[2];
+	__u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+	__u32 fe_reserved[3];
+};
+
+struct fiemap {
+	__u64 fm_start;		/* logical offset (inclusive) at
+				 * which to start mapping (in) */
+	__u64 fm_length;	/* logical length of mapping which
+				 * userspace wants (in) */
+	__u32 fm_flags;		/* FIEMAP_FLAG_* flags for request (in/out) */
+	__u32 fm_mapped_extents;/* number of extents that were mapped (out) */
+	__u32 fm_extent_count;  /* size of fm_extents array (in) */
+	__u32 fm_reserved;
+	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+};
+
+#define FIEMAP_MAX_OFFSET	(~0ULL)
+
+#define FIEMAP_FLAG_SYNC	0x00000001 /* sync file data before map */
+#define FIEMAP_FLAG_XATTR	0x00000002 /* map extended attribute tree */
+
+#define FIEMAP_FLAGS_COMPAT	(FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
+
+#define FIEMAP_EXTENT_LAST		0x00000001 /* Last extent in file. */
+#define FIEMAP_EXTENT_UNKNOWN		0x00000002 /* Data location unknown. */
+#define FIEMAP_EXTENT_DELALLOC		0x00000004 /* Location still pending.
+						    * Sets EXTENT_UNKNOWN. */
+#define FIEMAP_EXTENT_ENCODED		0x00000008 /* Data can not be read
+						    * while fs is unmounted */
+#define FIEMAP_EXTENT_DATA_ENCRYPTED	0x00000080 /* Data is encrypted by fs.
+						    * Sets EXTENT_NO_BYPASS. */
+#define FIEMAP_EXTENT_NOT_ALIGNED	0x00000100 /* Extent offsets may not be
+						    * block aligned. */
+#define FIEMAP_EXTENT_DATA_INLINE	0x00000200 /* Data mixed with metadata.
+						    * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_DATA_TAIL		0x00000400 /* Multiple files in block.
+						    * Sets EXTENT_NOT_ALIGNED.*/
+#define FIEMAP_EXTENT_UNWRITTEN		0x00000800 /* Space allocated, but
+						    * no data (i.e. zero). */
+#define FIEMAP_EXTENT_MERGED		0x00001000 /* File does not natively
+						    * support extents. Result
+						    * merged for efficiency. */
+
+#endif /* _LINUX_FIEMAP_H */
diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c
index 8bf99fb..70325a8 100644
--- a/lib/ext2fs/fileio.c
+++ b/lib/ext2fs/fileio.c
@@ -1,6 +1,6 @@
 /*
  * fileio.c --- Simple file I/O routines
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -50,7 +50,7 @@
 	retval = ext2fs_get_mem(sizeof(struct ext2_file), &file);
 	if (retval)
 		return retval;
-	
+
 	memset(file, 0, sizeof(struct ext2_file));
 	file->magic = EXT2_ET_MAGIC_EXT2_FILE;
 	file->fs = fs;
@@ -64,14 +64,14 @@
 		if (retval)
 			goto fail;
 	}
-	
+
 	retval = ext2fs_get_array(3, fs->blocksize, &file->buf);
 	if (retval)
 		goto fail;
 
 	*ret = file;
 	return 0;
-	
+
 fail:
 	if (file->buf)
 		ext2fs_free_mem(&file->buf);
@@ -103,7 +103,7 @@
 {
 	errcode_t	retval;
 	ext2_filsys fs;
-	
+
 	EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE);
 	fs = file->fs;
 
@@ -176,7 +176,7 @@
 		if (!dontfill) {
 			if (file->physblock) {
 				retval = io_channel_read_blk(fs->io,
-							     file->physblock, 
+							     file->physblock,
 							     1, file->buf);
 				if (retval)
 					return retval;
@@ -187,16 +187,16 @@
 	}
 	return 0;
 }
-	
+
 
 errcode_t ext2fs_file_close(ext2_file_t file)
 {
 	errcode_t	retval;
-	
+
 	EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE);
 
 	retval = ext2fs_file_flush(file);
-	
+
 	if (file->buf)
 		ext2fs_free_mem(&file->buf);
 	ext2fs_free_mem(&file);
@@ -232,14 +232,14 @@
 		left = EXT2_I_SIZE(&file->inode) - file->pos ;
 		if (c > left)
 			c = left;
-	
+
 		memcpy(ptr, file->buf+start, c);
 		file->pos += c;
 		ptr += c;
 		count += c;
 		wanted -= c;
 	}
-	
+
 fail:
 	if (got)
 		*got = count;
@@ -265,7 +265,7 @@
 		retval = sync_buffer_position(file);
 		if (retval)
 			goto fail;
-		
+
 		start = file->pos % fs->blocksize;
 		c = fs->blocksize - start;
 		if (c > nbytes)
@@ -286,7 +286,7 @@
 		count += c;
 		nbytes -= c;
 	}
-	
+
 fail:
 	if (written)
 		*written = count;
@@ -318,7 +318,7 @@
 {
 	__u64		loffset, ret_loffset;
 	errcode_t	retval;
-	
+
 	loffset = offset;
 	retval = ext2fs_file_llseek(file, loffset, whence, &ret_loffset);
 	if (ret_pos)
@@ -354,14 +354,14 @@
 
 /*
  * This function sets the size of the file, truncating it if necessary
- * 
+ *
  * XXX still need to call truncate
  */
 errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size)
 {
 	errcode_t	retval;
 	EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE);
-	
+
 	file->inode.i_size = size;
 	file->inode.i_size_high = 0;
 	if (file->ino) {
@@ -370,7 +370,7 @@
 			return retval;
 	}
 
-	/* 
+	/*
 	 * XXX truncate inode if necessary
 	 */
 
diff --git a/lib/ext2fs/finddev.c b/lib/ext2fs/finddev.c
index 2e9d70a..56b76df 100644
--- a/lib/ext2fs/finddev.c
+++ b/lib/ext2fs/finddev.c
@@ -1,7 +1,7 @@
 /*
  * finddev.c -- this routine attempts to find a particular device in
  * 	/dev
- * 
+ *
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -134,7 +134,7 @@
 	add_to_dirlist("/devices", &list);
 	add_to_dirlist("/devfs", &list);
 	add_to_dirlist("/dev", &list);
-	
+
 	while (list) {
 		current = list;
 		list = list->next;
@@ -160,7 +160,7 @@
 	return ret_path;
 }
 
-	
+
 #ifdef DEBUG
 int main(int argc, char** argv)
 {
@@ -204,5 +204,5 @@
 	}
 	return 0;
 }
-	
+
 #endif
diff --git a/lib/ext2fs/flushb.c b/lib/ext2fs/flushb.c
index 1882795..f0630ea 100644
--- a/lib/ext2fs/flushb.c
+++ b/lib/ext2fs/flushb.c
@@ -1,7 +1,7 @@
 /*
  * flushb.c --- Hides system-dependent information for both syncing a
  * 	device to disk and to flush any buffers from disk cache.
- * 
+ *
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -29,7 +29,7 @@
 #include "ext2fs.h"
 
 /*
- * For Linux, define BLKFLSBUF and FDFLUSH if necessary, since 
+ * For Linux, define BLKFLSBUF and FDFLUSH if necessary, since
  * not all portable header file does so for us.  This really should be
  * fixed in the glibc header files.  (Recent glibcs appear to define
  * BLKFLSBUF in sys/mount.h, but FDFLUSH still doesn't seem to be
diff --git a/lib/ext2fs/freefs.c b/lib/ext2fs/freefs.c
index 029ffaa..2a1c915 100644
--- a/lib/ext2fs/freefs.c
+++ b/lib/ext2fs/freefs.c
@@ -1,6 +1,6 @@
 /*
  * freefs.c --- free an ext2 filesystem
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -52,47 +52,12 @@
 
 	if (fs->icache)
 		ext2fs_free_inode_cache(fs->icache);
-	
+
 	fs->magic = 0;
 
 	ext2fs_free_mem(&fs);
 }
 
-void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap)
-{
-	if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_GENERIC_BITMAP))
-		return;
-
-	bitmap->magic = 0;
-	if (bitmap->description) {
-		ext2fs_free_mem(&bitmap->description);
-		bitmap->description = 0;
-	}
-	if (bitmap->bitmap) {
-		ext2fs_free_mem(&bitmap->bitmap);
-		bitmap->bitmap = 0;
-	}
-	ext2fs_free_mem(&bitmap);
-}
-
-void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap)
-{
-	if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
-		return;
-
-	bitmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP;
-	ext2fs_free_generic_bitmap(bitmap);
-}
-
-void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap)
-{
-	if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
-		return;
-
-	bitmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP;
-	ext2fs_free_generic_bitmap(bitmap);
-}
-
 /*
  * Free the inode cache structure
  */
diff --git a/lib/ext2fs/gen_bitmap.c b/lib/ext2fs/gen_bitmap.c
index 700affa..54a39dc 100644
--- a/lib/ext2fs/gen_bitmap.c
+++ b/lib/ext2fs/gen_bitmap.c
@@ -1,6 +1,6 @@
 /*
- * gen_bitmap.c --- Generic bitmap routines that used to be inlined.
- * 
+ * gen_bitmap.c --- Generic (32-bit) bitmap routines
+ *
  * Copyright (C) 2001 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -27,6 +27,146 @@
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
+struct ext2fs_struct_generic_bitmap {
+	errcode_t	magic;
+	ext2_filsys 	fs;
+	__u32		start, end;
+	__u32		real_end;
+	char	*	description;
+	char	*	bitmap;
+	errcode_t	base_error_code;
+	__u32		reserved[7];
+};
+
+/*
+ * Used by previously inlined function, so we have to export this and
+ * not change the function signature
+ */
+void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
+			    int code, unsigned long arg)
+{
+#ifndef OMIT_COM_ERR
+	if (bitmap->description)
+		com_err(0, bitmap->base_error_code+code,
+			"#%lu for %s", arg, bitmap->description);
+	else
+		com_err(0, bitmap->base_error_code + code, "#%lu", arg);
+#endif
+}
+
+static errcode_t check_magic(ext2fs_generic_bitmap bitmap)
+{
+	if (!bitmap || !((bitmap->magic == EXT2_ET_MAGIC_GENERIC_BITMAP) ||
+			 (bitmap->magic == EXT2_ET_MAGIC_INODE_BITMAP) ||
+			 (bitmap->magic == EXT2_ET_MAGIC_BLOCK_BITMAP)))
+		return EXT2_ET_MAGIC_GENERIC_BITMAP;
+	return 0;
+}
+
+errcode_t ext2fs_make_generic_bitmap(errcode_t magic, ext2_filsys fs,
+				     __u32 start, __u32 end, __u32 real_end,
+				     const char *descr, char *init_map,
+				     ext2fs_generic_bitmap *ret)
+{
+	ext2fs_generic_bitmap	bitmap;
+	errcode_t		retval;
+	size_t			size;
+
+	retval = ext2fs_get_mem(sizeof(struct ext2fs_struct_generic_bitmap),
+				&bitmap);
+	if (retval)
+		return retval;
+
+	bitmap->magic = magic;
+	bitmap->fs = fs;
+	bitmap->start = start;
+	bitmap->end = end;
+	bitmap->real_end = real_end;
+	switch (magic) {
+	case EXT2_ET_MAGIC_INODE_BITMAP:
+		bitmap->base_error_code = EXT2_ET_BAD_INODE_MARK;
+		break;
+	case EXT2_ET_MAGIC_BLOCK_BITMAP:
+		bitmap->base_error_code = EXT2_ET_BAD_BLOCK_MARK;
+		break;
+	default:
+		bitmap->base_error_code = EXT2_ET_BAD_GENERIC_MARK;
+	}
+	if (descr) {
+		retval = ext2fs_get_mem(strlen(descr)+1, &bitmap->description);
+		if (retval) {
+			ext2fs_free_mem(&bitmap);
+			return retval;
+		}
+		strcpy(bitmap->description, descr);
+	} else
+		bitmap->description = 0;
+
+	size = (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1);
+	/* Round up to allow for the BT x86 instruction */
+	size = (size + 7) & ~3;
+	retval = ext2fs_get_mem(size, &bitmap->bitmap);
+	if (retval) {
+		ext2fs_free_mem(&bitmap->description);
+		ext2fs_free_mem(&bitmap);
+		return retval;
+	}
+
+	if (init_map)
+		memcpy(bitmap->bitmap, init_map, size);
+	else
+		memset(bitmap->bitmap, 0, size);
+	*ret = bitmap;
+	return 0;
+}
+
+errcode_t ext2fs_allocate_generic_bitmap(__u32 start,
+					 __u32 end,
+					 __u32 real_end,
+					 const char *descr,
+					 ext2fs_generic_bitmap *ret)
+{
+	return ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_GENERIC_BITMAP, 0,
+					  start, end, real_end, descr, 0, ret);
+}
+
+errcode_t ext2fs_copy_generic_bitmap(ext2fs_generic_bitmap src,
+				     ext2fs_generic_bitmap *dest)
+{
+	return (ext2fs_make_generic_bitmap(src->magic, src->fs,
+					   src->start, src->end,
+					   src->real_end,
+					   src->description, src->bitmap,
+					   dest));
+}
+
+void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap)
+{
+	if (check_magic(bitmap))
+		return;
+
+	bitmap->magic = 0;
+	if (bitmap->description) {
+		ext2fs_free_mem(&bitmap->description);
+		bitmap->description = 0;
+	}
+	if (bitmap->bitmap) {
+		ext2fs_free_mem(&bitmap->bitmap);
+		bitmap->bitmap = 0;
+	}
+	ext2fs_free_mem(&bitmap);
+}
+
+int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
+					blk_t bitno)
+{
+	if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
+		ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, bitno);
+		return 0;
+	}
+	return ext2fs_test_bit(bitno - bitmap->start, bitmap->bitmap);
+}
+
 int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
 					 __u32 bitno)
 {
@@ -46,3 +186,295 @@
 	}
 	return ext2fs_clear_bit(bitno - bitmap->start, bitmap->bitmap);
 }
+
+__u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap)
+{
+	return bitmap->start;
+}
+
+__u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap)
+{
+	return bitmap->end;
+}
+
+void ext2fs_clear_generic_bitmap(ext2fs_generic_bitmap bitmap)
+{
+	if (check_magic(bitmap))
+		return;
+
+	memset(bitmap->bitmap, 0,
+	       (size_t) (((bitmap->real_end - bitmap->start) / 8) + 1));
+}
+
+errcode_t ext2fs_fudge_generic_bitmap_end(ext2fs_inode_bitmap bitmap,
+					  errcode_t magic, errcode_t neq,
+					  ext2_ino_t end, ext2_ino_t *oend)
+{
+	EXT2_CHECK_MAGIC(bitmap, magic);
+
+	if (end > bitmap->real_end)
+		return neq;
+	if (oend)
+		*oend = bitmap->end;
+	bitmap->end = end;
+	return 0;
+}
+
+errcode_t ext2fs_resize_generic_bitmap(errcode_t magic,
+				       __u32 new_end, __u32 new_real_end,
+				       ext2fs_generic_bitmap bmap)
+{
+	errcode_t	retval;
+	size_t		size, new_size;
+	__u32		bitno;
+
+	if (!bmap || (bmap->magic != magic))
+		return magic;
+
+	/*
+	 * If we're expanding the bitmap, make sure all of the new
+	 * parts of the bitmap are zero.
+	 */
+	if (new_end > bmap->end) {
+		bitno = bmap->real_end;
+		if (bitno > new_end)
+			bitno = new_end;
+		for (; bitno > bmap->end; bitno--)
+			ext2fs_clear_bit(bitno - bmap->start, bmap->bitmap);
+	}
+	if (new_real_end == bmap->real_end) {
+		bmap->end = new_end;
+		return 0;
+	}
+
+	size = ((bmap->real_end - bmap->start) / 8) + 1;
+	new_size = ((new_real_end - bmap->start) / 8) + 1;
+
+	if (size != new_size) {
+		retval = ext2fs_resize_mem(size, new_size, &bmap->bitmap);
+		if (retval)
+			return retval;
+	}
+	if (new_size > size)
+		memset(bmap->bitmap + size, 0, new_size - size);
+
+	bmap->end = new_end;
+	bmap->real_end = new_real_end;
+	return 0;
+}
+
+errcode_t ext2fs_compare_generic_bitmap(errcode_t magic, errcode_t neq,
+					ext2fs_generic_bitmap bm1,
+					ext2fs_generic_bitmap bm2)
+{
+	blk_t	i;
+
+	if (!bm1 || bm1->magic != magic)
+		return magic;
+	if (!bm2 || bm2->magic != magic)
+		return magic;
+
+	if ((bm1->start != bm2->start) ||
+	    (bm1->end != bm2->end) ||
+	    (memcmp(bm1->bitmap, bm2->bitmap,
+		    (size_t) (bm1->end - bm1->start)/8)))
+		return neq;
+
+	for (i = bm1->end - ((bm1->end - bm1->start) % 8); i <= bm1->end; i++)
+		if (ext2fs_fast_test_block_bitmap(bm1, i) !=
+		    ext2fs_fast_test_block_bitmap(bm2, i))
+			return neq;
+
+	return 0;
+}
+
+void ext2fs_set_generic_bitmap_padding(ext2fs_generic_bitmap map)
+{
+	__u32	i, j;
+
+	/* Protect loop from wrap-around if map->real_end is maxed */
+	for (i=map->end+1, j = i - map->start;
+	     i <= map->real_end && i > map->end;
+	     i++, j++)
+		ext2fs_set_bit(j, map->bitmap);
+}
+
+errcode_t ext2fs_get_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+					  errcode_t magic,
+					  __u32 start, __u32 num,
+					  void *out)
+{
+	if (!bmap || (bmap->magic != magic))
+		return magic;
+
+	if ((start < bmap->start) || (start+num-1 > bmap->real_end))
+		return EXT2_ET_INVALID_ARGUMENT;
+
+	memcpy(out, bmap->bitmap + (start >> 3), (num+7) >> 3);
+	return 0;
+}
+
+errcode_t ext2fs_set_generic_bitmap_range(ext2fs_generic_bitmap bmap,
+					  errcode_t magic,
+					  __u32 start, __u32 num,
+					  void *in)
+{
+	if (!bmap || (bmap->magic != magic))
+		return magic;
+
+	if ((start < bmap->start) || (start+num-1 > bmap->real_end))
+		return EXT2_ET_INVALID_ARGUMENT;
+
+	memcpy(bmap->bitmap + (start >> 3), in, (num+7) >> 3);
+	return 0;
+}
+
+/*
+ * Compare @mem to zero buffer by 256 bytes.
+ * Return 1 if @mem is zeroed memory, otherwise return 0.
+ */
+static int mem_is_zero(const char *mem, size_t len)
+{
+	static const char zero_buf[256];
+
+	while (len >= sizeof(zero_buf)) {
+		if (memcmp(mem, zero_buf, sizeof(zero_buf)))
+			return 0;
+		len -= sizeof(zero_buf);
+		mem += sizeof(zero_buf);
+	}
+	/* Deal with leftover bytes. */
+	if (len)
+		return !memcmp(mem, zero_buf, len);
+	return 1;
+}
+
+/*
+ * Return true if all of the bits in a specified range are clear
+ */
+static int ext2fs_test_clear_generic_bitmap_range(ext2fs_generic_bitmap bitmap,
+						  unsigned int start,
+						  unsigned int len)
+{
+	size_t start_byte, len_byte = len >> 3;
+	unsigned int start_bit, len_bit = len % 8;
+	int first_bit = 0;
+	int last_bit  = 0;
+	int mark_count = 0;
+	int mark_bit = 0;
+	int i;
+	const char *ADDR = bitmap->bitmap;
+
+	start -= bitmap->start;
+	start_byte = start >> 3;
+	start_bit = start % 8;
+
+	if (start_bit != 0) {
+		/*
+		 * The compared start block number or start inode number
+		 * is not the first bit in a byte.
+		 */
+		mark_count = 8 - start_bit;
+		if (len < 8 - start_bit) {
+			mark_count = (int)len;
+			mark_bit = len + start_bit - 1;
+		} else
+			mark_bit = 7;
+
+		for (i = mark_count; i > 0; i--, mark_bit--)
+			first_bit |= 1 << mark_bit;
+
+		/*
+		 * Compare blocks or inodes in the first byte.
+		 * If there is any marked bit, this function returns 0.
+		 */
+		if (first_bit & ADDR[start_byte])
+			return 0;
+		else if (len <= 8 - start_bit)
+			return 1;
+
+		start_byte++;
+		len_bit = (len - mark_count) % 8;
+		len_byte = (len - mark_count) >> 3;
+	}
+
+	/*
+	 * The compared start block number or start inode number is
+	 * the first bit in a byte.
+	 */
+	if (len_bit != 0) {
+		/*
+		 * The compared end block number or end inode number is
+		 * not the last bit in a byte.
+		 */
+		for (mark_bit = len_bit - 1; mark_bit >= 0; mark_bit--)
+			last_bit |= 1 << mark_bit;
+
+		/*
+		 * Compare blocks or inodes in the last byte.
+		 * If there is any marked bit, this function returns 0.
+		 */
+		if (last_bit & ADDR[start_byte + len_byte])
+			return 0;
+		else if (len_byte == 0)
+			return 1;
+	}
+
+	/* Check whether all bytes are 0 */
+	return mem_is_zero(ADDR + start_byte, len_byte);
+}
+
+int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
+				   blk_t block, int num)
+{
+	EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP);
+	if ((block < bitmap->start) || (block+num-1 > bitmap->real_end)) {
+		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
+				   block, bitmap->description);
+		return 0;
+	}
+	return ext2fs_test_clear_generic_bitmap_range((ext2fs_generic_bitmap)
+						      bitmap, block, num);
+}
+
+int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
+				   ino_t inode, int num)
+{
+	EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP);
+	if ((inode < bitmap->start) || (inode+num-1 > bitmap->real_end)) {
+		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST,
+				   inode, bitmap->description);
+		return 0;
+	}
+	return ext2fs_test_clear_generic_bitmap_range((ext2fs_generic_bitmap)
+						      bitmap, inode, num);
+}
+
+void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
+				    blk_t block, int num)
+{
+	int	i;
+
+	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
+		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
+				   bitmap->description);
+		return;
+	}
+	for (i=0; i < num; i++)
+		ext2fs_fast_set_bit(block + i - bitmap->start, bitmap->bitmap);
+}
+
+void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
+					       blk_t block, int num)
+{
+	int	i;
+
+	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
+		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
+				   bitmap->description);
+		return;
+	}
+	for (i=0; i < num; i++)
+		ext2fs_fast_clear_bit(block + i - bitmap->start,
+				      bitmap->bitmap);
+}
diff --git a/lib/ext2fs/get_pathname.c b/lib/ext2fs/get_pathname.c
index 23f593f..c46b3a0 100644
--- a/lib/ext2fs/get_pathname.c
+++ b/lib/ext2fs/get_pathname.c
@@ -1,6 +1,6 @@
 /*
  * get_pathname.c --- do directry/inode -> name translation
- * 
+ *
  * Copyright (C) 1993, 1994, 1995 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -15,7 +15,7 @@
  * 	directory inode, and <ino> is the inode number itself.  If
  * 	<ino> is zero, then ext2fs_get_pathname will return pathname
  * 	of the the directory <dir>.
- * 
+ *
  */
 
 #include <stdio.h>
@@ -65,8 +65,8 @@
 	return 0;
 }
 
-static errcode_t ext2fs_get_pathname_int(ext2_filsys fs, ext2_ino_t dir, 
-					 ext2_ino_t ino, int maxdepth, 
+static errcode_t ext2fs_get_pathname_int(ext2_filsys fs, ext2_ino_t dir,
+					 ext2_ino_t ino, int maxdepth,
 					 char *buf, char **name)
 {
 	struct get_pathname_struct gp;
@@ -93,7 +93,7 @@
 	gp.parent = 0;
 	gp.name = 0;
 	gp.errcode = 0;
-	
+
 	retval = ext2fs_dir_iterate(fs, dir, 0, buf, get_pathname_proc, &gp);
 	if (retval)
 		goto cleanup;
@@ -110,15 +110,15 @@
 		*name = parent_name;
 		return 0;
 	}
-	
-	if (gp.name) 
+
+	if (gp.name)
 		retval = ext2fs_get_mem(strlen(parent_name)+strlen(gp.name)+2,
 					&ret);
 	else
 		retval = ext2fs_get_mem(strlen(parent_name)+5, &ret);
 	if (retval)
 		goto cleanup;
-	
+
 	ret[0] = 0;
 	if (parent_name[1])
 		strcat(ret, parent_name);
@@ -130,7 +130,7 @@
 	*name = ret;
 	ext2fs_free_mem(&parent_name);
 	retval = 0;
-	
+
 cleanup:
 	if (gp.name)
 		ext2fs_free_mem(&gp.name);
@@ -153,5 +153,5 @@
 	retval = ext2fs_get_pathname_int(fs, dir, ino, 32, buf, name);
 	ext2fs_free_mem(&buf);
 	return retval;
-	
+
 }
diff --git a/lib/ext2fs/getsectsize.c b/lib/ext2fs/getsectsize.c
index e749d39..ae9139d 100644
--- a/lib/ext2fs/getsectsize.c
+++ b/lib/ext2fs/getsectsize.c
@@ -1,6 +1,6 @@
 /*
  * getsectsize.c --- get the sector size of a device.
- * 
+ *
  * Copyright (C) 1995, 1995 Theodore Ts'o.
  * Copyright (C) 2003 VMware, Inc.
  *
diff --git a/lib/ext2fs/getsize.c b/lib/ext2fs/getsize.c
index 7f6ef71..23c8f12 100644
--- a/lib/ext2fs/getsize.c
+++ b/lib/ext2fs/getsize.c
@@ -1,11 +1,11 @@
 /*
  * getsize.c --- get the size of a partition.
- * 
+ *
  * Copyright (C) 1995, 1995 Theodore Ts'o.
  * Copyright (C) 2003 VMware, Inc.
  *
  * Windows version of ext2fs_get_device_size by Chris Li, VMware.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -82,10 +82,10 @@
 	DWORD filesize;
 #endif /* HAVE_GET_FILE_SIZE_EX */
 
-	dev = CreateFile(file, GENERIC_READ, 
+	dev = CreateFile(file, GENERIC_READ,
 			 FILE_SHARE_READ | FILE_SHARE_WRITE ,
-                	 NULL,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  NULL); 
- 
+                	 NULL,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  NULL);
+
 	if (dev == INVALID_HANDLE_VALUE)
 		return EBADF;
 	if (DeviceIoControl(dev, IOCTL_DISK_GET_PARTITION_INFO,
@@ -94,7 +94,7 @@
 			    &retbytes, NULL)) {
 
 		*retblocks = pi.PartitionLength.QuadPart / blocksize;
-	
+
 	} else if (DeviceIoControl(dev, IOCTL_DISK_GET_DRIVE_GEOMETRY,
 				&gi, sizeof(DISK_GEOMETRY),
 				&gi, sizeof(DISK_GEOMETRY),
@@ -138,8 +138,8 @@
 /*
  * Returns the number of blocks in a partition
  */
-errcode_t ext2fs_get_device_size(const char *file, int blocksize,
-				 blk_t *retblocks)
+errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
+				 blk64_t *retblocks)
 {
 	int	fd, rc = 0;
 	int valid_blkgetsize64 = 1;
@@ -169,11 +169,6 @@
 
 #ifdef DKIOCGETBLOCKCOUNT	/* For Apple Darwin */
 	if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) {
-		if ((sizeof(*retblocks) < sizeof(unsigned long long))
-		    && ((size64 / (blocksize / 512)) > 0xFFFFFFFF)) {
-			rc = EFBIG;
-			goto out;
-		}
 		*retblocks = size64 / (blocksize / 512);
 		goto out;
 	}
@@ -188,11 +183,6 @@
 #endif
 	if (valid_blkgetsize64 &&
 	    ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
-		if ((sizeof(*retblocks) < sizeof(unsigned long long)) &&
-		    ((size64 / blocksize) > 0xFFFFFFFF)) {
-			rc = EFBIG;
-			goto out;
-		}
 		*retblocks = size64 / blocksize;
 		goto out;
 	}
@@ -253,11 +243,6 @@
 		if (fstat(fd, &st) == 0)
 #endif
 			if (S_ISREG(st.st_mode)) {
-				if ((sizeof(*retblocks) < sizeof(unsigned long long)) &&
-				    ((st.st_size / blocksize) > 0xFFFFFFFF)) {
-					rc = EFBIG;
-					goto out;
-				}
 				*retblocks = st.st_size / blocksize;
 				goto out;
 			}
@@ -282,17 +267,27 @@
 	}
 	valid_offset (fd, 0);
 	size64 = low + 1;
-	if ((sizeof(*retblocks) < sizeof(unsigned long long))
-	    && ((size64 / blocksize) > 0xFFFFFFFF)) {
-		rc = EFBIG;
-		goto out;
-	}
 	*retblocks = size64 / blocksize;
 out:
 	close(fd);
 	return rc;
 }
 
+errcode_t ext2fs_get_device_size(const char *file, int blocksize,
+				 blk_t *retblocks)
+{
+	errcode_t retval;
+	blk64_t	blocks;
+
+	retval = ext2fs_get_device_size2(file, blocksize, &blocks);
+	if (retval)
+		return retval;
+	if (blocks >= (1ULL << 32))
+		return EFBIG;
+	*retblocks = (blk_t) blocks;
+	return 0;
+}
+
 #endif /* WIN32 */
 
 #ifdef DEBUG
@@ -300,7 +295,7 @@
 {
 	blk_t	blocks;
 	int	retval;
-	
+
 	if (argc < 2) {
 		fprintf(stderr, "Usage: %s device\n", argv[0]);
 		exit(1);
diff --git a/lib/ext2fs/i_block.c b/lib/ext2fs/i_block.c
new file mode 100644
index 0000000..6e1b136
--- /dev/null
+++ b/lib/ext2fs/i_block.c
@@ -0,0 +1,88 @@
+/*
+ * i_block.c --- Manage the i_block field for i_blocks
+ *
+ * Copyright (C) 2008 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include <stdio.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <time.h>
+#include <string.h>
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <errno.h>
+
+#include "ext2_fs.h"
+#include "ext2fs.h"
+
+errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode *inode,
+				 blk64_t num_blocks)
+{
+	unsigned long long b = inode->i_blocks;
+
+	if (!(fs->super->s_feature_ro_compat &
+	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
+	    !(inode->i_flags & EXT4_HUGE_FILE_FL))
+	    num_blocks *= fs->blocksize / 512;
+
+	b += num_blocks;
+
+	if (fs->super->s_feature_ro_compat &
+	    EXT4_FEATURE_RO_COMPAT_HUGE_FILE) {
+		b += ((long long) inode->osd2.linux2.l_i_blocks_hi) << 32;
+		inode->osd2.linux2.l_i_blocks_hi = b >> 32;
+	} else if (b > 0xFFFFFFFF)
+		return EOVERFLOW;
+	inode->i_blocks = b & 0xFFFFFFFF;
+	return 0;
+}
+
+errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode *inode,
+				 blk64_t num_blocks)
+{
+	unsigned long long b = inode->i_blocks;
+
+	if (!(fs->super->s_feature_ro_compat &
+	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
+	    !(inode->i_flags & EXT4_HUGE_FILE_FL))
+	    num_blocks *= fs->blocksize / 512;
+
+	if (num_blocks > b)
+		return EOVERFLOW;
+
+	b -= num_blocks;
+
+	if (fs->super->s_feature_ro_compat &
+	    EXT4_FEATURE_RO_COMPAT_HUGE_FILE) {
+		b += ((long long) inode->osd2.linux2.l_i_blocks_hi) << 32;
+		inode->osd2.linux2.l_i_blocks_hi = b >> 32;
+	}
+	inode->i_blocks = b & 0xFFFFFFFF;
+	return 0;
+}
+
+errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode *inode, blk64_t b)
+{
+	if (!(fs->super->s_feature_ro_compat &
+	      EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
+	    !(inode->i_flags & EXT4_HUGE_FILE_FL))
+		b *= fs->blocksize / 512;
+
+	inode->i_blocks = b & 0xFFFFFFFF;
+	if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
+		inode->osd2.linux2.l_i_blocks_hi = b >> 32;
+	else if (b >> 32)
+		return EOVERFLOW;
+	return 0;
+}
diff --git a/lib/ext2fs/icount.c b/lib/ext2fs/icount.c
index 2905676..bec0f5f 100644
--- a/lib/ext2fs/icount.c
+++ b/lib/ext2fs/icount.c
@@ -43,7 +43,7 @@
 
 struct ext2_icount_el {
 	ext2_ino_t	ino;
-	__u16	count;
+	__u32		count;
 };
 
 struct ext2_icount {
@@ -60,6 +60,15 @@
 	TDB_CONTEXT		*tdb;
 };
 
+/*
+ * We now use a 32-bit counter field because it doesn't cost us
+ * anything extra for the in-memory data structure, due to alignment
+ * padding.  But there's no point changing the interface if most of
+ * the time we only care if the number is bigger than 65,000 or not.
+ * So use the following translation function to return a 16-bit count.
+ */
+#define icount_16_xlate(x) (((x) > 65500) ? 65500 : (x))
+
 void ext2fs_free_icount(ext2_icount_t icount)
 {
 	if (!icount)
@@ -398,7 +407,7 @@
 }
 
 static errcode_t set_inode_count(ext2_icount_t icount, ext2_ino_t ino,
-				 __u16 count)
+				 __u32 count)
 {
 	struct ext2_icount_el 	*el;
 	TDB_DATA key, data;
@@ -407,7 +416,7 @@
 		key.dptr = (unsigned char *) &ino;
 		key.dsize = sizeof(ext2_ino_t);
 		data.dptr = (unsigned char *) &count;
-		data.dsize = sizeof(__u16);
+		data.dsize = sizeof(__u32);
 		if (count) {
 			if (tdb_store(icount->tdb, key, data, TDB_REPLACE))
 				return tdb_error(icount->tdb) +
@@ -429,7 +438,7 @@
 }
 
 static errcode_t get_inode_count(ext2_icount_t icount, ext2_ino_t ino,
-				 __u16 *count)
+				 __u32 *count)
 {
 	struct ext2_icount_el 	*el;
 	TDB_DATA key, data;
@@ -444,7 +453,7 @@
 			return tdb_error(icount->tdb) + EXT2_ET_TDB_SUCCESS;
 		}
 
-		*count = *((__u16 *) data.dptr);
+		*count = *((__u32 *) data.dptr);
 		free(data.dptr);
 		return 0;
 	}
@@ -483,6 +492,7 @@
 
 errcode_t ext2fs_icount_fetch(ext2_icount_t icount, ext2_ino_t ino, __u16 *ret)
 {
+	__u32	val;
 	EXT2_CHECK_MAGIC(icount, EXT2_ET_MAGIC_ICOUNT);
 
 	if (!ino || (ino > icount->num_inodes))
@@ -497,14 +507,15 @@
 		*ret = 0;
 		return 0;
 	}
-	get_inode_count(icount, ino, ret);
+	get_inode_count(icount, ino, &val);
+	*ret = icount_16_xlate(val);
 	return 0;
 }
 
 errcode_t ext2fs_icount_increment(ext2_icount_t icount, ext2_ino_t ino,
 				  __u16 *ret)
 {
-	__u16			curr_value;
+	__u32			curr_value;
 
 	EXT2_CHECK_MAGIC(icount, EXT2_ET_MAGIC_ICOUNT);
 
@@ -554,14 +565,14 @@
 	if (icount->multiple)
 		ext2fs_mark_inode_bitmap(icount->multiple, ino);
 	if (ret)
-		*ret = curr_value;
+		*ret = icount_16_xlate(curr_value);
 	return 0;
 }
 
 errcode_t ext2fs_icount_decrement(ext2_icount_t icount, ext2_ino_t ino,
 				  __u16 *ret)
 {
-	__u16			curr_value;
+	__u32			curr_value;
 
 	if (!ino || (ino > icount->num_inodes))
 		return EXT2_ET_INVALID_ARGUMENT;
@@ -597,7 +608,7 @@
 		ext2fs_unmark_inode_bitmap(icount->multiple, ino);
 
 	if (ret)
-		*ret = curr_value;
+		*ret = icount_16_xlate(curr_value);
 	return 0;
 }
 
diff --git a/lib/ext2fs/imager.c b/lib/ext2fs/imager.c
index ac8309c..0154333 100644
--- a/lib/ext2fs/imager.c
+++ b/lib/ext2fs/imager.c
@@ -5,7 +5,7 @@
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * Note: this uses the POSIX IO interfaces, unlike most of the other
- * functions in this library.  So sue me.  
+ * functions in this library.  So sue me.
  *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
@@ -69,7 +69,7 @@
 	buf = malloc(fs->blocksize * BUF_BLOCKS);
 	if (!buf)
 		return ENOMEM;
-	
+
 	for (group = 0; group < fs->group_desc_count; group++) {
 		blk = fs->group_desc[(unsigned)group].bg_inode_table;
 		if (!blk) {
@@ -131,7 +131,7 @@
 /*
  * Read in the inode table and stuff it into place
  */
-errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd, 
+errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
 				  int flags EXT2FS_ATTR((unused)))
 {
 	unsigned int	group, c, left;
@@ -143,7 +143,7 @@
 	buf = malloc(fs->blocksize * BUF_BLOCKS);
 	if (!buf)
 		return ENOMEM;
-	
+
 	for (group = 0; group < fs->group_desc_count; group++) {
 		blk = fs->group_desc[(unsigned)group].bg_inode_table;
 		if (!blk) {
@@ -167,7 +167,7 @@
 			retval = io_channel_write_blk(fs->io, blk, c, buf);
 			if (retval)
 				goto errout;
-			
+
 			blk += c;
 			left -= c;
 		}
@@ -182,7 +182,7 @@
 /*
  * Write out superblock and group descriptors
  */
-errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd, 
+errcode_t ext2fs_image_super_write(ext2_filsys fs, int fd,
 				   int flags EXT2FS_ATTR((unused)))
 {
 	char		*buf, *cp;
@@ -221,7 +221,7 @@
 		retval = EXT2_ET_SHORT_WRITE;
 		goto errout;
 	}
-	
+
 	retval = 0;
 
 errout:
@@ -232,7 +232,7 @@
 /*
  * Read the superblock and group descriptors and overwrite them.
  */
-errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd, 
+errcode_t ext2fs_image_super_read(ext2_filsys fs, int fd,
 				  int flags EXT2FS_ATTR((unused)))
 {
 	char		*buf;
@@ -277,11 +277,12 @@
  */
 errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
 {
-	char		*ptr;
-	int		c, size;
-	char		zero_buf[1024];
-	ssize_t		actual;
-	errcode_t	retval;
+	ext2fs_generic_bitmap	bmap;
+	errcode_t		err, retval;
+	ssize_t			actual;
+	__u32			itr, cnt, size;
+	int			c, total_size;
+	char			buf[1024];
 
 	if (flags & IMAGER_FLAG_INODEMAP) {
 		if (!fs->inode_map) {
@@ -289,7 +290,10 @@
 			if (retval)
 				return retval;
 		}
-		ptr = fs->inode_map->bitmap;
+		bmap = fs->inode_map;
+		err = EXT2_ET_MAGIC_INODE_BITMAP;
+		itr = 1;
+		cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
 		size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
 	} else {
 		if (!fs->block_map) {
@@ -297,43 +301,51 @@
 			if (retval)
 				return retval;
 		}
-		ptr = fs->block_map->bitmap;
+		bmap = fs->block_map;
+		err = EXT2_ET_MAGIC_BLOCK_BITMAP;
+		itr = fs->super->s_first_data_block;
+		cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
 		size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
 	}
-	size = size * fs->group_desc_count;
+	total_size = size * fs->group_desc_count;
 
-	actual = write(fd, ptr, size);
-	if (actual == -1) {
-		retval = errno;
-		goto errout;
+	while (cnt > 0) {
+		size = sizeof(buf);
+		if (size > (cnt >> 3))
+			size = (cnt >> 3);
+
+		retval = ext2fs_get_generic_bitmap_range(bmap,
+				 err, itr, size << 3, buf);
+		if (retval)
+			return retval;
+
+		actual = write(fd, buf, size);
+		if (actual == -1)
+			return errno;
+		if (actual != (int) size)
+			return EXT2_ET_SHORT_READ;
+
+		itr += size << 3;
+		cnt -= size << 3;
 	}
-	if (actual != size) {
-		retval = EXT2_ET_SHORT_WRITE;
-		goto errout;
-	}
-	size = size % fs->blocksize;
-	memset(zero_buf, 0, sizeof(zero_buf));
+
+	size = total_size % fs->blocksize;
+	memset(buf, 0, sizeof(buf));
 	if (size) {
 		size = fs->blocksize - size;
 		while (size) {
 			c = size;
-			if (c > (int) sizeof(zero_buf))
-				c = sizeof(zero_buf);
-			actual = write(fd, zero_buf, c);
-			if (actual == -1) {
-				retval = errno;
-				goto errout;
-			}
-			if (actual != c) {
-				retval = EXT2_ET_SHORT_WRITE;
-				goto errout;
-			}
+			if (c > (int) sizeof(buf))
+				c = sizeof(buf);
+			actual = write(fd, buf, c);
+			if (actual == -1)
+				return errno;
+			if (actual != c)
+				return EXT2_ET_SHORT_WRITE;
 			size -= c;
 		}
 	}
-	retval = 0;
-errout:
-	return (retval);
+	return 0;
 }
 
 
@@ -342,10 +354,12 @@
  */
 errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
 {
-	char		*ptr, *buf = 0;
-	int		size;
-	ssize_t		actual;
-	errcode_t	retval;
+	ext2fs_generic_bitmap	bmap;
+	errcode_t		err, retval;
+	__u32			itr, cnt;
+	char			buf[1024];
+	unsigned int		size;
+	ssize_t			actual;
 
 	if (flags & IMAGER_FLAG_INODEMAP) {
 		if (!fs->inode_map) {
@@ -353,7 +367,10 @@
 			if (retval)
 				return retval;
 		}
-		ptr = fs->inode_map->bitmap;
+		bmap = fs->inode_map;
+		err = EXT2_ET_MAGIC_INODE_BITMAP;
+		itr = 1;
+		cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
 		size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
 	} else {
 		if (!fs->block_map) {
@@ -361,29 +378,31 @@
 			if (retval)
 				return retval;
 		}
-		ptr = fs->block_map->bitmap;
+		bmap = fs->block_map;
+		err = EXT2_ET_MAGIC_BLOCK_BITMAP;
+		itr = fs->super->s_first_data_block;
+		cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
 		size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
 	}
-	size = size * fs->group_desc_count;
 
-	buf = malloc(size);
-	if (!buf)
-		return ENOMEM;
+	while (cnt > 0) {
+		size = sizeof(buf);
+		if (size > (cnt >> 3))
+			size = (cnt >> 3);
 
-	actual = read(fd, buf, size);
-	if (actual == -1) {
-		retval = errno;
-		goto errout;
+		actual = read(fd, buf, size);
+		if (actual == -1)
+			return errno;
+		if (actual != (int) size)
+			return EXT2_ET_SHORT_READ;
+
+		retval = ext2fs_set_generic_bitmap_range(bmap,
+				 err, itr, size << 3, buf);
+		if (retval)
+			return retval;
+
+		itr += size << 3;
+		cnt -= size << 3;
 	}
-	if (actual != size) {
-		retval = EXT2_ET_SHORT_WRITE;
-		goto errout;
-	}
-	memcpy(ptr, buf, size);
-	
-	retval = 0;
-errout:
-	if (buf)
-		free(buf);
-	return (retval);
+	return 0;
 }
diff --git a/lib/ext2fs/ind_block.c b/lib/ext2fs/ind_block.c
index 3519048..09c0432 100644
--- a/lib/ext2fs/ind_block.c
+++ b/lib/ext2fs/ind_block.c
@@ -1,7 +1,7 @@
 /*
  * ind_block.c --- indirect block I/O routines
- * 
- * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
+ *
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
  * 	2001, 2002, 2003, 2004, 2005 by  Theodore Ts'o.
  *
  * %Begin-Header%
@@ -22,9 +22,11 @@
 errcode_t ext2fs_read_ind_block(ext2_filsys fs, blk_t blk, void *buf)
 {
 	errcode_t	retval;
+#ifdef WORDS_BIGENDIAN
 	blk_t		*block_nr;
 	int		i;
 	int		limit = fs->blocksize >> 2;
+#endif
 
 	if ((fs->flags & EXT2_FLAG_IMAGE_FILE) &&
 	    (fs->io != fs->image_io))
@@ -34,31 +36,29 @@
 		if (retval)
 			return retval;
 	}
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_READ)) {
-		block_nr = (blk_t *) buf;
-		for (i = 0; i < limit; i++, block_nr++)
-			*block_nr = ext2fs_swab32(*block_nr);
-	}
+#ifdef WORDS_BIGENDIAN
+	block_nr = (blk_t *) buf;
+	for (i = 0; i < limit; i++, block_nr++)
+		*block_nr = ext2fs_swab32(*block_nr);
 #endif
 	return 0;
 }
 
 errcode_t ext2fs_write_ind_block(ext2_filsys fs, blk_t blk, void *buf)
 {
+#ifdef WORDS_BIGENDIAN
 	blk_t		*block_nr;
 	int		i;
 	int		limit = fs->blocksize >> 2;
+#endif
 
 	if (fs->flags & EXT2_FLAG_IMAGE_FILE)
 		return 0;
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_WRITE)) {
-		block_nr = (blk_t *) buf;
-		for (i = 0; i < limit; i++, block_nr++)
-			*block_nr = ext2fs_swab32(*block_nr);
-	}
+#ifdef WORDS_BIGENDIAN
+	block_nr = (blk_t *) buf;
+	for (i = 0; i < limit; i++, block_nr++)
+		*block_nr = ext2fs_swab32(*block_nr);
 #endif
 	return io_channel_write_blk(fs->io, blk, 1, buf);
 }
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index 7d06860..21fc293 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -1,9 +1,9 @@
 /*
  * initialize.c --- initialize a filesystem handle given superblock
  * 	parameters.  Used by mke2fs when initializing a filesystem.
- * 
+ *
  * Copyright (C) 1994, 1995, 1996 Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -44,13 +44,13 @@
 #endif /* defined(__FreeBSD__) && defined(EXT2_OS_FREEBSD) */
 #endif /* defined(__GNU__)     && defined(EXT2_OS_HURD) */
 #endif /* defined(__linux__)   && defined(EXT2_OS_LINUX) */
-	
+
 /*
  * Note we override the kernel include file's idea of what the default
  * check interval (never) should be.  It's a good idea to check at
  * least *occasionally*, specially since servers will never rarely get
  * to reboot, since Linux is so robust these days.  :-)
- * 
+ *
  * 180 days (six months) seems like a good value.
  */
 #ifdef EXT2_DFL_CHECKINTERVAL
@@ -67,7 +67,7 @@
 {
 	struct ext2_super_block *sb = fs->super;
 	unsigned long bpg = sb->s_blocks_per_group;
-	unsigned int gdpb = fs->blocksize / sizeof(struct ext2_group_desc);
+	unsigned int gdpb = EXT2_DESC_PER_BLOCK(sb);
 	unsigned long max_blocks = 0xffffffff;
 	unsigned long rsv_groups;
 	unsigned int rsv_gdb;
@@ -103,17 +103,18 @@
 	dgrp_t		i;
 	blk_t		numblocks;
 	int		rsv_gdt;
+	int		csum_flag;
 	int		io_flags;
-	char		*buf;
+	char		*buf = 0;
 	char		c;
 
 	if (!param || !param->s_blocks_count)
 		return EXT2_ET_INVALID_ARGUMENT;
-	
+
 	retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs);
 	if (retval)
 		return retval;
-	
+
 	memset(fs, 0, sizeof(struct struct_ext2_filsys));
 	fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS;
 	fs->flags = flags | EXT2_FLAG_RW;
@@ -158,6 +159,7 @@
 	set_field(s_first_meta_bg, 0);
 	set_field(s_raid_stride, 0);		/* default stride size: 0 */
 	set_field(s_raid_stripe_width, 0);	/* default stripe width: 0 */
+	set_field(s_log_groups_per_flex, 0);
 	set_field(s_flags, 0);
 	if (super->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) {
 		retval = EXT2_ET_UNSUPP_FEATURE;
@@ -172,6 +174,15 @@
 	if (super->s_rev_level >= EXT2_DYNAMIC_REV) {
 		set_field(s_first_ino, EXT2_GOOD_OLD_FIRST_INO);
 		set_field(s_inode_size, EXT2_GOOD_OLD_INODE_SIZE);
+		if (super->s_inode_size >= sizeof(struct ext2_inode_large)) {
+			int extra_isize = sizeof(struct ext2_inode_large) -
+				EXT2_GOOD_OLD_INODE_SIZE;
+			set_field(s_min_extra_isize, extra_isize);
+			set_field(s_want_extra_isize, extra_isize);
+		}
+	} else {
+		super->s_first_ino = EXT2_GOOD_OLD_FIRST_INO;
+		super->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
 	}
 
 	set_field(s_checkinterval, EXT2_DFL_CHECKINTERVAL);
@@ -188,7 +199,7 @@
 	if (super->s_blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(super))
 		super->s_blocks_per_group = EXT2_MAX_BLOCKS_PER_GROUP(super);
 	super->s_frags_per_group = super->s_blocks_per_group * frags_per_block;
-	
+
 	super->s_blocks_count = param->s_blocks_count;
 	super->s_r_blocks_count = param->s_r_blocks_count;
 	if (super->s_r_blocks_count >= param->s_blocks_count) {
@@ -227,7 +238,7 @@
 	 */
 	if (super->s_inodes_count < EXT2_FIRST_INODE(super)+1)
 		super->s_inodes_count = EXT2_FIRST_INODE(super)+1;
-	
+
 	/*
 	 * There should be at least as many inodes as the user
 	 * requested.  Figure out how many inodes per group that
@@ -243,8 +254,10 @@
 			super->s_frags_per_group = super->s_blocks_per_group *
 				frags_per_block;
 			goto retry;
-		} else
-			return EXT2_ET_TOO_MANY_INODES;
+		} else {
+			retval = EXT2_ET_TOO_MANY_INODES;
+			goto cleanup;
+		}
 	}
 
 	if (ipg > (unsigned) EXT2_MAX_INODES_PER_GROUP(super))
@@ -310,8 +323,10 @@
 			  fs->desc_blocks + super->s_reserved_gdt_blocks);
 
 	/* This can only happen if the user requested too many inodes */
-	if (overhead > super->s_blocks_per_group)
-		return EXT2_ET_TOO_MANY_INODES;
+	if (overhead > super->s_blocks_per_group) {
+		retval = EXT2_ET_TOO_MANY_INODES;
+		goto cleanup;
+	}
 
 	/*
 	 * See if the last group is big enough to support the
@@ -325,8 +340,10 @@
 		overhead += 1 + fs->desc_blocks + super->s_reserved_gdt_blocks;
 	rem = ((super->s_blocks_count - super->s_first_data_block) %
 	       super->s_blocks_per_group);
-	if ((fs->group_desc_count == 1) && rem && (rem < overhead))
-		return EXT2_ET_TOOSMALL;
+	if ((fs->group_desc_count == 1) && rem && (rem < overhead)) {
+		retval = EXT2_ET_TOOSMALL;
+		goto cleanup;
+	}
 	if (rem && (rem < overhead+50)) {
 		super->s_blocks_count -= rem;
 		goto retry;
@@ -341,13 +358,15 @@
 	retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf);
 	if (retval)
 		goto cleanup;
-	
-	sprintf(buf, "block bitmap for %s", fs->device_name);
+
+	strcpy(buf, "block bitmap for ");
+	strcat(buf, fs->device_name);
 	retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map);
 	if (retval)
 		goto cleanup;
-	
-	sprintf(buf, "inode bitmap for %s", fs->device_name);
+
+	strcpy(buf, "inode bitmap for ");
+	strcat(buf, fs->device_name);
 	retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map);
 	if (retval)
 		goto cleanup;
@@ -367,18 +386,41 @@
 	 * Note that although the block bitmap, inode bitmap, and
 	 * inode table have not been allocated (and in fact won't be
 	 * by this routine), they are accounted for nevertheless.
+	 *
+	 * If FLEX_BG meta-data grouping is used, only account for the
+	 * superblock and group descriptors (the inode tables and
+	 * bitmaps will be accounted for when allocated).
 	 */
 	super->s_free_blocks_count = 0;
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 	for (i = 0; i < fs->group_desc_count; i++) {
+		/*
+		 * Don't set the BLOCK_UNINIT group for the last group
+		 * because the block bitmap needs to be padded.
+		 */
+		if (csum_flag) {
+			if (i != fs->group_desc_count - 1)
+				fs->group_desc[i].bg_flags |=
+					EXT2_BG_BLOCK_UNINIT;
+			fs->group_desc[i].bg_flags |= EXT2_BG_INODE_UNINIT;
+			numblocks = super->s_inodes_per_group;
+			if (i == 0)
+				numblocks -= super->s_first_ino;
+			fs->group_desc[i].bg_itable_unused = numblocks;
+		}
 		numblocks = ext2fs_reserve_super_and_bgd(fs, i, fs->block_map);
+		if (fs->super->s_log_groups_per_flex)
+			numblocks += 2 + fs->inode_blocks_per_group;
 
 		super->s_free_blocks_count += numblocks;
 		fs->group_desc[i].bg_free_blocks_count = numblocks;
 		fs->group_desc[i].bg_free_inodes_count =
 			fs->super->s_inodes_per_group;
 		fs->group_desc[i].bg_used_dirs_count = 0;
+		ext2fs_group_desc_csum_set(fs, i);
 	}
-	
+
 	c = (char) 255;
 	if (((int) c) == -1) {
 		super->s_flags |= EXT2_FLAGS_SIGNED_HASH;
@@ -389,12 +431,13 @@
 	ext2fs_mark_super_dirty(fs);
 	ext2fs_mark_bb_dirty(fs);
 	ext2fs_mark_ib_dirty(fs);
-	
+
 	io_channel_set_blksize(fs->io, fs->blocksize);
 
 	*ret_fs = fs;
 	return 0;
 cleanup:
+	free(buf);
 	ext2fs_free(fs);
 	return retval;
 }
diff --git a/lib/ext2fs/inline.c b/lib/ext2fs/inline.c
index 5833b1d..13e2f83 100644
--- a/lib/ext2fs/inline.c
+++ b/lib/ext2fs/inline.c
@@ -2,7 +2,7 @@
  * inline.c --- Includes the inlined functions defined in the header
  * 	files as standalone functions, in case the application program
  * 	is compiled with inlining turned off.
- * 
+ *
  * Copyright (C) 1993, 1994 Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
index 7a0cf4e..f9cc43c 100644
--- a/lib/ext2fs/inode.c
+++ b/lib/ext2fs/inode.c
@@ -1,6 +1,6 @@
 /*
  * inode.c --- utility routines to read and write inodes
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -17,6 +17,7 @@
 #if HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#include <time.h>
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -59,7 +60,7 @@
 errcode_t ext2fs_flush_icache(ext2_filsys fs)
 {
 	int	i;
-	
+
 	if (!fs->icache)
 		return 0;
 
@@ -73,7 +74,7 @@
 static errcode_t create_icache(ext2_filsys fs)
 {
 	errcode_t	retval;
-	
+
 	if (fs->icache)
 		return 0;
 	retval = ext2fs_get_mem(sizeof(struct ext2_inode_cache), &fs->icache);
@@ -146,6 +147,15 @@
 		group_desc[scan->current_group].bg_inode_table;
 	scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super);
 	scan->blocks_left = scan->fs->inode_blocks_per_group;
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+		scan->inodes_left -=
+			fs->group_desc[scan->current_group].bg_itable_unused;
+		scan->blocks_left =
+			(scan->inodes_left +
+			 (fs->blocksize / scan->inode_size - 1)) *
+			scan->inode_size / fs->blocksize;
+	}
 	retval = ext2fs_get_array(scan->inode_buffer_blocks,
 					  fs->blocksize,
 				&scan->inode_buffer);
@@ -164,8 +174,8 @@
 	}
 	if (scan->fs->badblocks && scan->fs->badblocks->num)
 		scan->scan_flags |= EXT2_SF_CHK_BADBLOCKS;
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, 
-				    EXT2_FEATURE_COMPAT_LAZY_BG))
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
 		scan->scan_flags |= EXT2_SF_DO_LAZY;
 	*ret_scan = scan;
 	return 0;
@@ -175,7 +185,7 @@
 {
 	if (!scan || (scan->magic != EXT2_ET_MAGIC_INODE_SCAN))
 		return;
-	
+
 	ext2fs_free_mem(&scan->inode_buffer);
 	scan->inode_buffer = NULL;
 	ext2fs_free_mem(&scan->temp_buffer);
@@ -193,7 +203,7 @@
 {
 	if (!scan || (scan->magic != EXT2_ET_MAGIC_INODE_SCAN))
 		return;
-	
+
 	scan->done_group = done_group;
 	scan->done_group_data = done_group_data;
 }
@@ -218,18 +228,29 @@
  */
 static errcode_t get_next_blockgroup(ext2_inode_scan scan)
 {
+	ext2_filsys fs = scan->fs;
+
 	scan->current_group++;
 	scan->groups_left--;
-			
-	scan->current_block = scan->fs->
-		group_desc[scan->current_group].bg_inode_table;
+
+	scan->current_block =fs->group_desc[scan->current_group].bg_inode_table;
 
 	scan->current_inode = scan->current_group *
-		EXT2_INODES_PER_GROUP(scan->fs->super);
+		EXT2_INODES_PER_GROUP(fs->super);
 
 	scan->bytes_left = 0;
-	scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super);
-	scan->blocks_left = scan->fs->inode_blocks_per_group;
+	scan->inodes_left = EXT2_INODES_PER_GROUP(fs->super);
+	scan->blocks_left = fs->inode_blocks_per_group;
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+		scan->inodes_left -=
+			fs->group_desc[scan->current_group].bg_itable_unused;
+		scan->blocks_left =
+			(scan->inodes_left +
+			 (fs->blocksize / scan->inode_size - 1)) *
+			scan->inode_size / fs->blocksize;
+	}
+
 	return 0;
 }
 
@@ -338,7 +359,7 @@
 		if (retval)
 			return retval;
 	}
-		
+
 	if ((scan->scan_flags & EXT2_SF_BAD_INODE_BLK) ||
 	    (scan->current_block == 0)) {
 		memset(scan->inode_buffer, 0,
@@ -370,7 +391,7 @@
 static inline int is_empty_scan(ext2_inode_scan scan)
 {
 	int	i;
-	
+
 	if (scan->bytes_left == 0)
 		return 0;
 
@@ -386,7 +407,7 @@
 {
 	errcode_t	retval;
 	int		extra_bytes = 0;
-	
+
 	EXT2_CHECK_MAGIC(scan, EXT2_ET_MAGIC_INODE_SCAN);
 
 	/*
@@ -410,20 +431,22 @@
 			return retval;
 	}
 	/*
-	 * These checks are done outside the above if statement so 
+	 * These checks are done outside the above if statement so
 	 * they can be done for block group #0.
 	 */
 	if ((scan->scan_flags & EXT2_SF_DO_LAZY) &&
 	    (scan->fs->group_desc[scan->current_group].bg_flags &
 	     EXT2_BG_INODE_UNINIT))
 		goto force_new_group;
+	if (scan->inodes_left == 0)
+		goto force_new_group;
 	if (scan->current_block == 0) {
 		if (scan->scan_flags & EXT2_SF_SKIP_MISSING_ITABLE) {
 			goto force_new_group;
 		} else
 			return EXT2_ET_MISSING_INODE_TABLE;
 	}
-	
+
 
 	/*
 	 * Have we run out of space in the inode buffer?  If so, we
@@ -453,32 +476,28 @@
 		scan->ptr += scan->inode_size - extra_bytes;
 		scan->bytes_left -= scan->inode_size - extra_bytes;
 
-#ifdef EXT2FS_ENABLE_SWAPFS
+#ifdef WORDS_BIGENDIAN
 		memset(inode, 0, bufsize);
-		if ((scan->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-		    (scan->fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
-			ext2fs_swap_inode_full(scan->fs, 
-				(struct ext2_inode_large *) inode,
-				(struct ext2_inode_large *) scan->temp_buffer, 
-				0, bufsize);
-		else
+		ext2fs_swap_inode_full(scan->fs,
+			       (struct ext2_inode_large *) inode,
+			       (struct ext2_inode_large *) scan->temp_buffer,
+			       0, bufsize);
+#else
+		*inode = *((struct ext2_inode *) scan->temp_buffer);
 #endif
-			*inode = *((struct ext2_inode *) scan->temp_buffer);
 		if (scan->scan_flags & EXT2_SF_BAD_EXTRA_BYTES)
 			retval = EXT2_ET_BAD_BLOCK_IN_INODE_TABLE;
 		scan->scan_flags &= ~EXT2_SF_BAD_EXTRA_BYTES;
 	} else {
-#ifdef EXT2FS_ENABLE_SWAPFS
+#ifdef WORDS_BIGENDIAN
 		memset(inode, 0, bufsize);
-		if ((scan->fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-		    (scan->fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
-			ext2fs_swap_inode_full(scan->fs, 
+		ext2fs_swap_inode_full(scan->fs,
 				(struct ext2_inode_large *) inode,
 				(struct ext2_inode_large *) scan->ptr,
 				0, bufsize);
-		else
+#else
+		memcpy(inode, scan->ptr, bufsize);
 #endif
-			memcpy(inode, scan->ptr, bufsize);
 		scan->ptr += scan->inode_size;
 		scan->bytes_left -= scan->inode_size;
 		if (scan->scan_flags & EXT2_SF_BAD_INODE_BLK)
@@ -518,6 +537,8 @@
 		if (retval != EXT2_ET_CALLBACK_NOTHANDLED)
 			return retval;
 	}
+	if ((ino == 0) || (ino > fs->super->s_inodes_count))
+		return EXT2_ET_BAD_INODE_NUM;
 	/* Create inode cache if not present */
 	if (!fs->icache) {
 		retval = create_icache(fs);
@@ -526,7 +547,7 @@
 	}
 	/* Check to see if it's in the inode cache */
 	if (bufsize == sizeof(struct ext2_inode)) {
-		/* only old good inode can be retrieve from the cache */
+		/* only old good inode can be retrieved from the cache */
 		for (i=0; i < fs->icache->cache_size; i++) {
 			if (fs->icache->cache[i].ino == ino) {
 				*inode = fs->icache->cache[i].inode;
@@ -534,8 +555,6 @@
 			}
 		}
 	}
-	if ((ino == 0) || (ino > fs->super->s_inodes_count))
-		return EXT2_ET_BAD_INODE_NUM;
 	if (fs->flags & EXT2_FLAG_IMAGE_FILE) {
 		inodes_per_block = fs->blocksize / EXT2_INODE_SIZE(fs->super);
 		block_nr = fs->image_header->offset_inode / fs->blocksize;
@@ -545,12 +564,14 @@
 		io = fs->image_io;
 	} else {
 		group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
+		if (group > fs->group_desc_count)
+			return EXT2_ET_BAD_INODE_NUM;
 		offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
 			EXT2_INODE_SIZE(fs->super);
 		block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super);
 		if (!fs->group_desc[(unsigned)group].bg_inode_table)
 			return EXT2_ET_MISSING_INODE_TABLE;
-		block_nr = fs->group_desc[(unsigned)group].bg_inode_table + 
+		block_nr = fs->group_desc[(unsigned)group].bg_inode_table +
 			block;
 		io = fs->io;
 	}
@@ -583,12 +604,10 @@
 		block_nr++;
 	}
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES_READ))
-		ext2fs_swap_inode_full(fs, (struct ext2_inode_large *) inode, 
-				       (struct ext2_inode_large *) inode, 
-				       0, bufsize);
+#ifdef WORDS_BIGENDIAN
+	ext2fs_swap_inode_full(fs, (struct ext2_inode_large *) inode,
+			       (struct ext2_inode_large *) inode,
+			       0, bufsize);
 #endif
 
 	/* Update the inode cache */
@@ -596,7 +615,7 @@
 		fs->icache->cache_size;
 	fs->icache->cache[fs->icache->cache_last].ino = ino;
 	fs->icache->cache[fs->icache->cache_last].inode = *inode;
-	
+
 	return 0;
 }
 
@@ -638,7 +657,7 @@
 		if (retval)
 			return retval;
 	}
-		
+
 	if (!(fs->flags & EXT2_FLAG_RW))
 		return EXT2_ET_RO_FILSYS;
 
@@ -657,16 +676,14 @@
 		w_inode = &temp_inode;
 	memset(w_inode, 0, length);
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
-		ext2fs_swap_inode_full(fs, w_inode, 
-				       (struct ext2_inode_large *) inode, 
-				       1, bufsize);
-	else
+#ifdef WORDS_BIGENDIAN
+	ext2fs_swap_inode_full(fs, w_inode,
+			       (struct ext2_inode_large *) inode,
+			       1, bufsize);
+#else
+	memcpy(w_inode, inode, bufsize);
 #endif
-		memcpy(w_inode, inode, bufsize);
-	
+
 	group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
 	offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
 		EXT2_INODE_SIZE(fs->super);
@@ -698,11 +715,11 @@
 			fs->icache->buffer_blk = block_nr;
 		}
 
-	
-		memcpy((char *) fs->icache->buffer + (unsigned) offset, 
+
+		memcpy((char *) fs->icache->buffer + (unsigned) offset,
 		       ptr, clen);
 
-		retval = io_channel_write_blk(fs->io, block_nr, 1, 
+		retval = io_channel_write_blk(fs->io, block_nr, 1,
 					      fs->icache->buffer);
 		if (retval)
 			goto errout;
@@ -712,7 +729,7 @@
 		length -= clen;
 		block_nr++;
 	}
-		
+
 	fs->flags |= EXT2_FLAG_CHANGED;
 errout:
 	if (w_inode && w_inode != &temp_inode)
@@ -727,7 +744,7 @@
 				       sizeof(struct ext2_inode));
 }
 
-/* 
+/*
  * This function should be called when writing a new inode.  It makes
  * sure that extra part of large inodes is initialized properly.
  */
@@ -738,6 +755,14 @@
 	int 			size = EXT2_INODE_SIZE(fs->super);
 	struct ext2_inode_large	*large_inode;
 	errcode_t		retval;
+	__u32 			t = fs->now ? fs->now : time(NULL);
+
+	if (!inode->i_ctime)
+		inode->i_ctime = t;
+	if (!inode->i_mtime)
+		inode->i_mtime = t;
+	if (!inode->i_atime)
+		inode->i_atime = t;
 
 	if (size == sizeof(struct ext2_inode))
 		return ext2fs_write_inode_full(fs, ino, inode,
@@ -751,21 +776,23 @@
 	*buf = *inode;
 
 	large_inode = (struct ext2_inode_large *) buf;
-	large_inode->i_extra_isize = sizeof(struct ext2_inode_large) - 
+	large_inode->i_extra_isize = sizeof(struct ext2_inode_large) -
 		EXT2_GOOD_OLD_INODE_SIZE;
+	if (!large_inode->i_crtime)
+		large_inode->i_crtime = t;
 
 	retval = ext2fs_write_inode_full(fs, ino, buf, size);
 	free(buf);
 	return retval;
 }
 
- 
+
 errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks)
 {
 	struct ext2_inode	inode;
 	int			i;
 	errcode_t		retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	if (ino > fs->super->s_inodes_count)
@@ -787,7 +814,7 @@
 {
 	struct	ext2_inode	inode;
 	errcode_t		retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	if (ino > fs->super->s_inodes_count)
diff --git a/lib/ext2fs/inode_io.c b/lib/ext2fs/inode_io.c
index b5c08b9..4d29a9f 100644
--- a/lib/ext2fs/inode_io.c
+++ b/lib/ext2fs/inode_io.c
@@ -56,6 +56,10 @@
 static errcode_t inode_flush(io_channel channel);
 static errcode_t inode_write_byte(io_channel channel, unsigned long offset,
 				int size, const void *data);
+static errcode_t inode_read_blk64(io_channel channel,
+				unsigned long long block, int count, void *data);
+static errcode_t inode_write_blk64(io_channel channel,
+				unsigned long long block, int count, const void *data);
 
 static struct struct_io_manager struct_inode_manager = {
 	EXT2_ET_MAGIC_IO_MANAGER,
@@ -66,7 +70,11 @@
 	inode_read_blk,
 	inode_write_blk,
 	inode_flush,
-	inode_write_byte
+	inode_write_byte,
+	NULL,
+	NULL,
+	inode_read_blk64,
+	inode_write_blk64
 };
 
 io_manager inode_io_manager = &struct_inode_manager;
@@ -150,7 +158,7 @@
 				   &data->file);
 	if (retval)
 		goto cleanup;
-		
+
 	*channel = io;
 	return 0;
 
@@ -176,7 +184,7 @@
 		return 0;
 
 	retval = ext2fs_file_close(data->file);
-	
+
 	ext2fs_free_mem(&channel->private_data);
 	if (channel->name)
 		ext2fs_free_mem(&channel->name);
@@ -197,8 +205,8 @@
 }
 
 
-static errcode_t inode_read_blk(io_channel channel, unsigned long block,
-			       int count, void *buf)
+static errcode_t inode_read_blk64(io_channel channel,
+				unsigned long long block, int count, void *buf)
 {
 	struct inode_private_data *data;
 	errcode_t	retval;
@@ -217,8 +225,14 @@
 	return ext2fs_file_read(data->file, buf, count, 0);
 }
 
-static errcode_t inode_write_blk(io_channel channel, unsigned long block,
-				int count, const void *buf)
+static errcode_t inode_read_blk(io_channel channel, unsigned long block,
+			       int count, void *buf)
+{
+	return inode_read_blk64(channel, block, count, buf);
+}
+
+static errcode_t inode_write_blk64(io_channel channel,
+				unsigned long long block, int count, const void *buf)
 {
 	struct inode_private_data *data;
 	errcode_t	retval;
@@ -237,6 +251,12 @@
 	return ext2fs_file_write(data->file, buf, count, 0);
 }
 
+static errcode_t inode_write_blk(io_channel channel, unsigned long block,
+				int count, const void *buf)
+{
+	return inode_write_blk64(channel, block, count, buf);
+}
+
 static errcode_t inode_write_byte(io_channel channel, unsigned long offset,
 				 int size, const void *buf)
 {
@@ -255,12 +275,12 @@
 }
 
 /*
- * Flush data buffers to disk.  
+ * Flush data buffers to disk.
  */
 static errcode_t inode_flush(io_channel channel)
 {
 	struct inode_private_data *data;
-	
+
 	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
 	data = (struct inode_private_data *) channel->private_data;
 	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL);
diff --git a/lib/ext2fs/io_manager.c b/lib/ext2fs/io_manager.c
index e50d7e4..6d0e234 100644
--- a/lib/ext2fs/io_manager.c
+++ b/lib/ext2fs/io_manager.c
@@ -61,9 +61,41 @@
 {
 	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
 
-	if (channel->manager->write_byte) 
-		return channel->manager->write_byte(channel, offset, 
+	if (channel->manager->write_byte)
+		return channel->manager->write_byte(channel, offset,
 						    count, data);
 
 	return EXT2_ET_UNIMPLEMENTED;
 }
+
+errcode_t io_channel_read_blk64(io_channel channel, unsigned long long block,
+				 int count, void *data)
+{
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+
+	if (channel->manager->read_blk64)
+		return (channel->manager->read_blk64)(channel, block,
+						      count, data);
+
+	if ((block >> 32) != 0)
+		return EXT2_ET_IO_CHANNEL_NO_SUPPORT_64;
+
+	return (channel->manager->read_blk)(channel, (unsigned long) block,
+					     count, data);
+}
+
+errcode_t io_channel_write_blk64(io_channel channel, unsigned long long block,
+				 int count, const void *data)
+{
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+
+	if (channel->manager->write_blk64)
+		return (channel->manager->write_blk64)(channel, block,
+						       count, data);
+
+	if ((block >> 32) != 0)
+		return EXT2_ET_IO_CHANNEL_NO_SUPPORT_64;
+
+	return (channel->manager->write_blk)(channel, (unsigned long) block,
+					     count, data);
+}
diff --git a/lib/ext2fs/irel.h b/lib/ext2fs/irel.h
index 9b943ce..45e031b 100644
--- a/lib/ext2fs/irel.h
+++ b/lib/ext2fs/irel.h
@@ -1,6 +1,6 @@
 /*
  * irel.h
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/lib/ext2fs/irel_ma.c b/lib/ext2fs/irel_ma.c
index c6fa828..f565939 100644
--- a/lib/ext2fs/irel_ma.c
+++ b/lib/ext2fs/irel_ma.c
@@ -1,6 +1,6 @@
 /*
  * irel_ma.c
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -77,18 +77,18 @@
 	if (retval)
 		goto errout;
 	memset(irel, 0, sizeof(struct ext2_inode_relocation_table));
-	
+
 	retval = ext2fs_get_mem(strlen(name)+1, &irel->name);
 	if (retval)
 		goto errout;
 	strcpy(irel->name, name);
-	
+
 	retval = ext2fs_get_mem(sizeof(struct irel_ma), &ma);
 	if (retval)
 		goto errout;
 	memset(ma, 0, sizeof(struct irel_ma));
 	irel->priv_data = ma;
-	
+
 	size = (size_t) (sizeof(ext2_ino_t) * (max_inode+1));
 	retval = ext2fs_get_array(max_inode+1, sizeof(ext2_ino_t),
 		&ma->orig_map);
@@ -127,7 +127,7 @@
 	irel->move = ima_move;
 	irel->delete = ima_delete;
 	irel->free = ima_free;
-	
+
 	*new_irel = irel;
 	return 0;
 
@@ -156,7 +156,7 @@
 		ent->orig = old;
 	else
 		ent->orig = ma->entries[(unsigned) old].orig;
-	
+
 	/*
 	 * If max_refs has changed, reallocate the refs array
 	 */
@@ -245,12 +245,12 @@
 
 	ref_ent = ma->ref_entries + (unsigned) ino;
 	ent = ma->entries + (unsigned) ino;
-	
+
 	/*
 	 * If the inode reference array doesn't exist, create it.
 	 */
 	if (ref_ent->refs == 0) {
-		size = (size_t) ((sizeof(struct ext2_inode_reference) * 
+		size = (size_t) ((sizeof(struct ext2_inode_reference) *
 				  ent->max_refs));
 		retval = ext2fs_get_array(ent->max_refs,
 			sizeof(struct ext2_inode_reference), &ref_ent->refs);
@@ -288,7 +288,7 @@
 	struct inode_reference_entry *ref_ent;
 
 	ma = irel->priv_data;
-	
+
 	ref_ent = ma->ref_entries + ma->ref_current;
 
 	if ((ref_ent->refs == NULL) ||
@@ -311,12 +311,12 @@
 		return EXT2_ET_INVALID_ARGUMENT;
 	if (ma->entries[(unsigned) old].new == 0)
 		return ENOENT;
-	
+
 	ma->entries[(unsigned) new] = ma->entries[(unsigned) old];
 	if (ma->ref_entries[(unsigned) new].refs)
 		ext2fs_free_mem(&ma->ref_entries[(unsigned) new].refs);
 	ma->ref_entries[(unsigned) new] = ma->ref_entries[(unsigned) old];
-	
+
 	ma->entries[(unsigned) old].new = 0;
 	ma->ref_entries[(unsigned) old].num = 0;
 	ma->ref_entries[(unsigned) old].refs = 0;
@@ -334,12 +334,12 @@
 		return EXT2_ET_INVALID_ARGUMENT;
 	if (ma->entries[(unsigned) old].new == 0)
 		return ENOENT;
-	
+
 	ma->entries[old].new = 0;
 	if (ma->ref_entries[(unsigned) old].refs)
 		ext2fs_free_mem(&ma->ref_entries[(unsigned) old].refs);
 	ma->orig_map[ma->entries[(unsigned) old].orig] = 0;
-	
+
 	ma->ref_entries[(unsigned) old].num = 0;
 	ma->ref_entries[(unsigned) old].refs = 0;
 	return 0;
diff --git a/lib/ext2fs/ismounted.c b/lib/ext2fs/ismounted.c
index 684e91e..d28b6ad 100644
--- a/lib/ext2fs/ismounted.c
+++ b/lib/ext2fs/ismounted.c
@@ -1,6 +1,6 @@
 /*
  * ismounted.c --- Check to see if the filesystem was mounted
- * 
+ *
  * Copyright (C) 1995,1996,1997,1998,1999,2000 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -38,9 +38,9 @@
 /*
  * Helper function which checks a file in /etc/mtab format to see if a
  * filesystem is mounted.  Returns an error if the file doesn't exist
- * or can't be opened.  
+ * or can't be opened.
  */
-static errcode_t check_mntent_file(const char *mtab_file, const char *file, 
+static errcode_t check_mntent_file(const char *mtab_file, const char *file,
 				   int *mount_flags, char *mtpt, int mtlen)
 {
 	struct mntent 	*mnt;
@@ -53,7 +53,7 @@
 
 	*mount_flags = 0;
 	if ((f = setmntent (mtab_file, "r")) == NULL)
-		return errno;
+		return (errno == ENOENT ? EXT2_NO_MTAB_FILE : errno);
 	if (stat(file, &st_buf) == 0) {
 		if (S_ISBLK(st_buf.st_mode)) {
 #ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */
@@ -65,6 +65,8 @@
 		}
 	}
 	while ((mnt = getmntent (f)) != NULL) {
+		if (mnt->mnt_fsname[0] != '/')
+			continue;
 		if (strcmp(file, mnt->mnt_fsname) == 0)
 			break;
 		if (stat(mnt->mnt_fsname, &st_buf) == 0) {
@@ -103,7 +105,7 @@
 	}
 #ifndef __GNU__ /* The GNU hurd is deficient; what else is new? */
 	/* Validate the entry in case /etc/mtab is out of date */
-	/* 
+	/*
 	 * We need to be paranoid, because some broken distributions
 	 * (read: Slackware) don't initialize /etc/mtab before checking
 	 * all of the non-root filesystems on the disk.
@@ -128,7 +130,7 @@
 	}
 #endif /* __GNU__ */
 	*mount_flags = EXT2_MF_MOUNTED;
-	
+
 #ifdef MNTOPT_RO
 	/* Check to see if the ro option is set */
 	if (hasmntopt(mnt, MNTOPT_RO))
@@ -145,7 +147,7 @@
 	 */
 	if (!strcmp(mnt->mnt_dir, "/")) {
 is_root:
-#define TEST_FILE "/.ismount-test-file"		
+#define TEST_FILE "/.ismount-test-file"
 		*mount_flags |= EXT2_MF_ISROOT;
 		fd = open(TEST_FILE, O_RDWR|O_CREAT, 0600);
 		if (fd < 0) {
@@ -184,7 +186,7 @@
 #endif /* MOUNTED */
 	retval = check_mntent_file(MOUNTED, file, mount_flags, mtpt, mtlen);
 	return retval;
-#else 
+#else
 	*mount_flags = 0;
 	return 0;
 #endif /* defined(MOUNTED) || defined(_PATH_MOUNTED) */
@@ -209,7 +211,7 @@
         s1 = file;
         if (strncmp(_PATH_DEV, s1, len) == 0)
                 s1 += len;
- 
+
 	*mount_flags = 0;
         while (--n >= 0) {
                 s2 = mp->f_mntfromname;
@@ -251,10 +253,16 @@
 	if (!(f = fopen("/proc/swaps", "r")))
 		return 0;
 	/* Skip the first line */
-	fgets(buf, sizeof(buf), f);
-	while (!feof(f)) {
-		if (!fgets(buf, sizeof(buf), f))
-			break;
+	if (!fgets(buf, sizeof(buf), f))
+		goto leave;
+	if (*buf && strncmp(buf, "Filename\t", 9))
+		/* Linux <=2.6.19 contained a bug in the /proc/swaps
+		 * code where the header would not be displayed
+		 */
+		goto valid_first_line;
+
+	while (fgets(buf, sizeof(buf), f)) {
+valid_first_line:
 		if ((cp = strchr(buf, ' ')) != NULL)
 			*cp = 0;
 		if ((cp = strchr(buf, '\t')) != NULL)
@@ -272,6 +280,8 @@
 		}
 #endif 	/* __GNU__ */
 	}
+
+leave:
 	fclose(f);
 	return ret;
 }
@@ -301,7 +311,7 @@
 	} else {
 #ifdef HAVE_MNTENT_H
 		retval = check_mntent(device, mount_flags, mtpt, mtlen);
-#else 
+#else
 #ifdef HAVE_GETMNTINFO
 		retval = check_getmntinfo(device, mount_flags, mtpt, mtlen);
 #else
@@ -333,7 +343,7 @@
 /*
  * ext2fs_check_if_mounted() sets the mount_flags EXT2_MF_MOUNTED,
  * EXT2_MF_READONLY, and EXT2_MF_ROOT
- * 
+ *
  */
 errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags)
 {
@@ -345,12 +355,13 @@
 {
 	int	retval, mount_flags;
 	char	mntpt[80];
-	
+
 	if (argc < 2) {
 		fprintf(stderr, "Usage: %s device\n", argv[0]);
 		exit(1);
 	}
 
+	add_error_table(&et_ext2_error_table);
 	mntpt[0] = 0;
 	retval = ext2fs_check_mount_point(argv[1], &mount_flags,
 					  mntpt, sizeof(mntpt));
diff --git a/lib/ext2fs/jfs_compat.h b/lib/ext2fs/jfs_compat.h
index 30ad1ef..7b8aafd 100644
--- a/lib/ext2fs/jfs_compat.h
+++ b/lib/ext2fs/jfs_compat.h
@@ -45,6 +45,7 @@
 	tid_t			j_transaction_sequence;
 	__u8			j_uuid[16];
 	struct jbd_revoke_table_s *j_revoke;
+	tid_t			j_failed_commit;
 };
 
 #define J_ASSERT(assert)						\
diff --git a/lib/ext2fs/jfs_dat.h b/lib/ext2fs/jfs_dat.h
index d6ad9c4..62778c6 100644
--- a/lib/ext2fs/jfs_dat.h
+++ b/lib/ext2fs/jfs_dat.h
@@ -9,7 +9,7 @@
  * On-disk structures
  */
 
-/* 
+/*
  * Descriptor block types:
  */
 
@@ -28,8 +28,8 @@
 } journal_header_t;
 
 
-/* 
- * The block tag: used to describe a single buffer in the journal 
+/*
+ * The block tag: used to describe a single buffer in the journal
  */
 typedef struct journal_block_tag_s
 {
@@ -55,10 +55,10 @@
 	__u32		s_blocksize;	/* journal device blocksize */
 	__u32		s_maxlen;	/* total blocks in journal file */
 	__u32		s_first;	/* first block of log information */
-	
+
 	/* Dynamic information describing the current state of the log */
 	__u32		s_sequence;	/* first commit ID expected in log */
 	__u32		s_start;	/* blocknr of start of log */
-	
+
 } journal_superblock_t;
 
diff --git a/lib/ext2fs/kernel-jbd.h b/lib/ext2fs/kernel-jbd.h
index 2a099d8..331b0e4 100644
--- a/lib/ext2fs/kernel-jbd.h
+++ b/lib/ext2fs/kernel-jbd.h
@@ -1,6 +1,6 @@
 /*
  * linux/include/linux/jbd.h
- * 
+ *
  * Written by Stephen C. Tweedie <sct@redhat.com>
  *
  * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved
@@ -59,7 +59,7 @@
 #define jbd_debug(f, a...)	/**/
 #else
 #define jbd_debug(f, ...)	/**/
-#endif	
+#endif
 #endif
 #else
 #define jbd_debug(x)		/* AIX doesn't do STDC */
@@ -88,7 +88,7 @@
  * On-disk structures
  */
 
-/* 
+/*
  * Descriptor block types:
  */
 
@@ -108,19 +108,47 @@
 	__u32		h_sequence;
 } journal_header_t;
 
+/*
+ * Checksum types.
+ */
+#define JBD2_CRC32_CHKSUM   1
+#define JBD2_MD5_CHKSUM     2
+#define JBD2_SHA1_CHKSUM    3
 
-/* 
- * The block tag: used to describe a single buffer in the journal 
+#define JBD2_CRC32_CHKSUM_SIZE 4
+
+#define JBD2_CHECKSUM_BYTES (32 / sizeof(__u32))
+/*
+ * Commit block header for storing transactional checksums:
+ */
+struct commit_header {
+	__u32		h_magic;
+	__u32		h_blocktype;
+	__u32		h_sequence;
+	unsigned char	h_chksum_type;
+	unsigned char	h_chksum_size;
+	unsigned char	h_padding[2];
+	__u32		h_chksum[JBD2_CHECKSUM_BYTES];
+	__u64		h_commit_sec;
+	__u32		h_commit_nsec;
+};
+
+/*
+ * The block tag: used to describe a single buffer in the journal
  */
 typedef struct journal_block_tag_s
 {
 	__u32		t_blocknr;	/* The on-disk block number */
 	__u32		t_flags;	/* See below */
+	__u32		t_blocknr_high; /* most-significant high 32bits. */
 } journal_block_tag_t;
 
-/* 
+#define JBD_TAG_SIZE64 (sizeof(journal_block_tag_t))
+#define JBD_TAG_SIZE32 (8)
+
+/*
  * The revoke descriptor: used on disk to describe a series of blocks to
- * be revoked from the log 
+ * be revoked from the log
  */
 typedef struct journal_revoke_header_s
 {
@@ -149,7 +177,7 @@
 	__u32	s_blocksize;		/* journal device blocksize */
 	__u32	s_maxlen;		/* total blocks in journal file */
 	__u32	s_first;		/* first block of log information */
-	
+
 /* 0x0018 */
 	/* Dynamic information describing the current state of the log */
 	__u32	s_sequence;		/* first commit ID expected in log */
@@ -169,9 +197,9 @@
 
 /* 0x0040 */
 	__u32	s_nr_users;		/* Nr of filesystems sharing log */
-	
+
 	__u32	s_dynsuper;		/* Blocknr of dynamic superblock copy*/
-	
+
 /* 0x0048 */
 	__u32	s_max_transaction;	/* Limit of journal blocks per trans.*/
 	__u32	s_max_trans_data;	/* Limit of data blocks per trans. */
@@ -194,12 +222,19 @@
 	((j)->j_format_version >= 2 &&					\
 	 ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask))))
 
+#define JFS_FEATURE_COMPAT_CHECKSUM	0x00000001
+
 #define JFS_FEATURE_INCOMPAT_REVOKE	0x00000001
 
+#define JFS_FEATURE_INCOMPAT_REVOKE		0x00000001
+#define JFS_FEATURE_INCOMPAT_64BIT		0x00000002
+#define JFS_FEATURE_INCOMPAT_ASYNC_COMMIT	0x00000004
+
 /* Features known to this kernel version: */
 #define JFS_KNOWN_COMPAT_FEATURES	0
 #define JFS_KNOWN_ROCOMPAT_FEATURES	0
-#define JFS_KNOWN_INCOMPAT_FEATURES	JFS_FEATURE_INCOMPAT_REVOKE
+#define JFS_KNOWN_INCOMPAT_FEATURES	(JFS_FEATURE_INCOMPAT_REVOKE|\
+					 JFS_FEATURE_INCOMPAT_ASYNC_COMMIT)
 
 #ifdef __KERNEL__
 
@@ -276,7 +311,7 @@
  * the transaction, so that at all times we know how many buffers the
  * outstanding updates on a transaction might possibly touch. */
 
-struct handle_s 
+struct handle_s
 {
 	/* Which compound transaction is this update a part of? */
 	transaction_t	      * h_transaction;
@@ -314,14 +349,14 @@
  * flushed to home for finished transactions.
  */
 
-struct transaction_s 
+struct transaction_s
 {
 	/* Pointer to the journal for this transaction. */
 	journal_t *		t_journal;
-	
+
 	/* Sequence number for this transaction */
 	tid_t			t_tid;
-	
+
 	/* Transaction's current state */
 	enum {
 		T_RUNNING,
@@ -329,74 +364,74 @@
 		T_RUNDOWN,
 		T_FLUSH,
 		T_COMMIT,
-		T_FINISHED 
+		T_FINISHED
 	}			t_state;
 
 	/* Where in the log does this transaction's commit start? */
 	unsigned long		t_log_start;
-	
+
 	/* Doubly-linked circular list of all inodes owned by this
            transaction */	/* AKPM: unused */
 	struct inode *		t_ilist;
-	
+
 	/* Number of buffers on the t_buffers list */
 	int			t_nr_buffers;
-	
+
 	/* Doubly-linked circular list of all buffers reserved but not
            yet modified by this transaction */
 	struct journal_head *	t_reserved_list;
-	
+
 	/* Doubly-linked circular list of all metadata buffers owned by this
            transaction */
 	struct journal_head *	t_buffers;
-	
+
 	/*
 	 * Doubly-linked circular list of all data buffers still to be
 	 * flushed before this transaction can be committed.
 	 * Protected by journal_datalist_lock.
 	 */
 	struct journal_head *	t_sync_datalist;
-	
+
 	/*
 	 * Doubly-linked circular list of all writepage data buffers
 	 * still to be written before this transaction can be committed.
 	 * Protected by journal_datalist_lock.
 	 */
 	struct journal_head *	t_async_datalist;
-	
+
 	/* Doubly-linked circular list of all forget buffers (superceded
            buffers which we can un-checkpoint once this transaction
            commits) */
 	struct journal_head *	t_forget;
-	
+
 	/*
 	 * Doubly-linked circular list of all buffers still to be
 	 * flushed before this transaction can be checkpointed.
 	 */
 	/* Protected by journal_datalist_lock */
 	struct journal_head *	t_checkpoint_list;
-	
+
 	/* Doubly-linked circular list of temporary buffers currently
            undergoing IO in the log */
 	struct journal_head *	t_iobuf_list;
-	
+
 	/* Doubly-linked circular list of metadata buffers being
            shadowed by log IO.  The IO buffers on the iobuf list and the
            shadow buffers on this list match each other one for one at
            all times. */
 	struct journal_head *	t_shadow_list;
-	
+
 	/* Doubly-linked circular list of control buffers being written
            to the log. */
 	struct journal_head *	t_log_list;
-	
+
 	/* Number of outstanding updates running on this transaction */
 	int			t_updates;
 
 	/* Number of buffers reserved for use by all handles in this
 	 * transaction handle but not yet modified. */
 	int			t_outstanding_credits;
-	
+
 	/*
 	 * Forward and backward links for the circular list of all
 	 * transactions awaiting checkpoint.
@@ -415,7 +450,7 @@
 
 /* The journal_t maintains all of the journaling state information for a
  * single filesystem.  It is linked to from the fs superblock structure.
- * 
+ *
  * We use the journal_t to keep track of all outstanding transaction
  * activity on the filesystem, and to manage the state of the log
  * writing process. */
@@ -428,7 +463,7 @@
 	/* Is there an outstanding uncleared error on the journal (from
 	 * a prior abort)? */
 	int			j_errno;
-	
+
 	/* The superblock buffer */
 	struct buffer_head *	j_sb_buffer;
 	journal_superblock_t *	j_superblock;
@@ -438,16 +473,16 @@
 
 	/* Number of processes waiting to create a barrier lock */
 	int			j_barrier_count;
-	
+
 	/* The barrier lock itself */
 	struct semaphore	j_barrier;
-	
+
 	/* Transactions: The current running transaction... */
 	transaction_t *		j_running_transaction;
-	
+
 	/* ... the transaction we are pushing to disk ... */
 	transaction_t *		j_committing_transaction;
-	
+
 	/* ... and a linked circular list of all transactions waiting
 	 * for checkpointing. */
 	/* Protected by journal_datalist_lock */
@@ -456,19 +491,19 @@
 	/* Wait queue for waiting for a locked transaction to start
            committing, or for a barrier lock to be released */
 	wait_queue_head_t	j_wait_transaction_locked;
-	
+
 	/* Wait queue for waiting for checkpointing to complete */
 	wait_queue_head_t	j_wait_logspace;
-	
+
 	/* Wait queue for waiting for commit to complete */
 	wait_queue_head_t	j_wait_done_commit;
-	
+
 	/* Wait queue to trigger checkpointing */
 	wait_queue_head_t	j_wait_checkpoint;
-	
+
 	/* Wait queue to trigger commit */
 	wait_queue_head_t	j_wait_commit;
-	
+
 	/* Wait queue to wait for updates to complete */
 	wait_queue_head_t	j_wait_updates;
 
@@ -477,10 +512,10 @@
 
 	/* The main journal lock, used by lock_journal() */
 	struct semaphore	j_sem;
-		
+
 	/* Journal head: identifies the first unused block in the journal. */
 	unsigned long		j_head;
-	
+
 	/* Journal tail: identifies the oldest still-used block in the
 	 * journal. */
 	unsigned long		j_tail;
@@ -548,10 +583,13 @@
 	/* The revoke table: maintains the list of revoked blocks in the
            current transaction. */
 	struct jbd_revoke_table_s *j_revoke;
+
+	/* Failed journal commit ID */
+	unsigned int		j_failed_commit;
 };
 
-/* 
- * Journal flag definitions 
+/*
+ * Journal flag definitions
  */
 #define JFS_UNMOUNT	0x001	/* Journal thread is being destroyed */
 #define JFS_ABORT	0x002	/* Journaling has been aborted for errors. */
@@ -559,7 +597,7 @@
 #define JFS_FLUSHED	0x008	/* The journal superblock has been flushed */
 #define JFS_LOADED	0x010	/* The journal superblock has been loaded */
 
-/* 
+/*
  * Function declarations for the journaling transaction and buffer
  * management
  */
@@ -589,7 +627,7 @@
 extern void __journal_insert_checkpoint(struct journal_head *,transaction_t *);
 
 /* Buffer IO */
-extern int 
+extern int
 journal_write_metadata_buffer(transaction_t	  *transaction,
 			      struct journal_head  *jh_in,
 			      struct journal_head **jh_out,
@@ -603,7 +641,7 @@
  *
  * We need to lock the journal during transaction state changes so that
  * nobody ever tries to take a handle on the running transaction while
- * we are in the middle of moving it to the commit phase.  
+ * we are in the middle of moving it to the commit phase.
  *
  * Note that the locking is completely interrupt unsafe.  We never touch
  * journal structures from interrupts.
@@ -637,7 +675,7 @@
 /* The journaling code user interface:
  *
  * Create and destroy handles
- * Register buffer modifications against the current transaction. 
+ * Register buffer modifications against the current transaction.
  */
 
 extern handle_t *journal_start(journal_t *, int nblocks);
@@ -665,11 +703,11 @@
 				int start, int len, int bsize);
 extern journal_t * journal_init_inode (struct inode *);
 extern int	   journal_update_format (journal_t *);
-extern int	   journal_check_used_features 
+extern int	   journal_check_used_features
 		   (journal_t *, unsigned long, unsigned long, unsigned long);
-extern int	   journal_check_available_features 
+extern int	   journal_check_available_features
 		   (journal_t *, unsigned long, unsigned long, unsigned long);
-extern int	   journal_set_features 
+extern int	   journal_set_features
 		   (journal_t *, unsigned long, unsigned long, unsigned long);
 extern int	   journal_create     (journal_t *);
 extern int	   journal_load       (journal_t *journal);
@@ -747,7 +785,7 @@
  * bit, when set, indicates that we have had a fatal error somewhere,
  * either inside the journaling layer or indicated to us by the client
  * (eg. ext3), and that we and should not commit any further
- * transactions.  
+ * transactions.
  */
 
 static inline int is_journal_aborted(journal_t *journal)
@@ -829,7 +867,7 @@
 #define BJ_LogCtl	7	/* Buffer contains log descriptors */
 #define BJ_Reserved	8	/* Buffer is reserved for access by journal */
 #define BJ_Types	9
- 
+
 extern int jbd_blocks_per_page(struct inode *inode);
 
 #ifdef __KERNEL__
diff --git a/lib/ext2fs/kernel-list.h b/lib/ext2fs/kernel-list.h
index 24e6ab4..e07d06b 100644
--- a/lib/ext2fs/kernel-list.h
+++ b/lib/ext2fs/kernel-list.h
@@ -29,7 +29,7 @@
 #endif
 
 /*
- * Insert a new entry between two known consecutive entries. 
+ * Insert a new entry between two known consecutive entries.
  *
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
diff --git a/lib/ext2fs/link.c b/lib/ext2fs/link.c
index 5e0f4f3..7f2cfbc 100644
--- a/lib/ext2fs/link.c
+++ b/lib/ext2fs/link.c
@@ -1,6 +1,6 @@
 /*
  * link.c --- create links in a ext2fs directory
- * 
+ *
  * Copyright (C) 1993, 1994 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -19,13 +19,16 @@
 #include "ext2fs.h"
 
 struct link_struct  {
+	ext2_filsys	fs;
 	const char	*name;
 	int		namelen;
 	ext2_ino_t	inode;
 	int		flags;
 	int		done;
+	unsigned int	blocksize;
+	errcode_t	err;
 	struct ext2_super_block *sb;
-};	
+};
 
 static int link_proc(struct ext2_dir_entry *dirent,
 		     int	offset,
@@ -35,20 +38,27 @@
 {
 	struct link_struct *ls = (struct link_struct *) priv_data;
 	struct ext2_dir_entry *next;
-	int rec_len, min_rec_len;
+	unsigned int rec_len, min_rec_len, curr_rec_len;
 	int ret = 0;
 
 	rec_len = EXT2_DIR_REC_LEN(ls->namelen);
 
+	ls->err = ext2fs_get_rec_len(ls->fs, dirent, &curr_rec_len);
+	if (ls->err)
+		return DIRENT_ABORT;
+
 	/*
 	 * See if the following directory entry (if any) is unused;
 	 * if so, absorb it into this one.
 	 */
-	next = (struct ext2_dir_entry *) (buf + offset + dirent->rec_len);
-	if ((offset + dirent->rec_len < blocksize - 8) &&
+	next = (struct ext2_dir_entry *) (buf + offset + curr_rec_len);
+	if ((offset + curr_rec_len < blocksize - 8) &&
 	    (next->inode == 0) &&
-	    (offset + dirent->rec_len + next->rec_len <= blocksize)) {
-		dirent->rec_len += next->rec_len;
+	    (offset + curr_rec_len + next->rec_len <= blocksize)) {
+		curr_rec_len += next->rec_len;
+		ls->err = ext2fs_set_rec_len(ls->fs, curr_rec_len, dirent);
+		if (ls->err)
+			return DIRENT_ABORT;
 		ret = DIRENT_CHANGED;
 	}
 
@@ -59,15 +69,19 @@
 	 */
 	if (dirent->inode) {
 		min_rec_len = EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
-		if (dirent->rec_len < (min_rec_len + rec_len))
+		if (curr_rec_len < (min_rec_len + rec_len))
 			return ret;
-		rec_len = dirent->rec_len - min_rec_len;
-		dirent->rec_len = min_rec_len;
+		rec_len = curr_rec_len - min_rec_len;
+		ls->err = ext2fs_set_rec_len(ls->fs, min_rec_len, dirent);
+		if (ls->err)
+			return DIRENT_ABORT;
 		next = (struct ext2_dir_entry *) (buf + offset +
 						  dirent->rec_len);
 		next->inode = 0;
 		next->name_len = 0;
-		next->rec_len = rec_len;
+		ls->err = ext2fs_set_rec_len(ls->fs, rec_len, next);
+		if (ls->err)
+			return DIRENT_ABORT;
 		return DIRENT_CHANGED;
 	}
 
@@ -75,7 +89,7 @@
 	 * If we get this far, then the directory entry is not used.
 	 * See if we can fit the request entry in.  If so, do it.
 	 */
-	if (dirent->rec_len < rec_len)
+	if (curr_rec_len < rec_len)
 		return ret;
 	dirent->inode = ls->inode;
 	dirent->name_len = ls->namelen;
@@ -94,7 +108,7 @@
 #ifdef __TURBOC__
  #pragma argsused
 #endif
-errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name, 
+errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
 		      ext2_ino_t ino, int flags)
 {
 	errcode_t		retval;
@@ -106,17 +120,22 @@
 	if (!(fs->flags & EXT2_FLAG_RW))
 		return EXT2_ET_RO_FILSYS;
 
+	ls.fs = fs;
 	ls.name = name;
 	ls.namelen = name ? strlen(name) : 0;
 	ls.inode = ino;
 	ls.flags = flags;
 	ls.done = 0;
 	ls.sb = fs->super;
+	ls.blocksize = fs->blocksize;
+	ls.err = 0;
 
 	retval = ext2fs_dir_iterate(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY,
 				    0, link_proc, &ls);
 	if (retval)
 		return retval;
+	if (ls.err)
+		return ls.err;
 
 	if (!ls.done)
 		return EXT2_ET_DIR_NO_SPACE;
diff --git a/lib/ext2fs/llseek.c b/lib/ext2fs/llseek.c
index 5a5e560..073cf91 100644
--- a/lib/ext2fs/llseek.c
+++ b/lib/ext2fs/llseek.c
@@ -74,7 +74,7 @@
 
 #ifndef __i386__
 	retval = _llseek(fd, ((unsigned long long) offset) >> 32,
-#else			  
+#else
 	retval = syscall(__NR__llseek, fd, (unsigned long long) (offset >> 32),
 #endif
 			  ((unsigned long long) offset) & 0xffffffff,
@@ -100,7 +100,7 @@
 		errno = EINVAL;
 		return -1;
 	}
-	
+
 	result = my_llseek (fd, offset, origin);
 	if (result == -1 && errno == ENOSYS) {
 		/*
diff --git a/lib/ext2fs/lookup.c b/lib/ext2fs/lookup.c
index 1745f33..9cb97f1 100644
--- a/lib/ext2fs/lookup.c
+++ b/lib/ext2fs/lookup.c
@@ -1,6 +1,6 @@
 /*
  * lookup.c --- ext2fs directory lookup operations
- * 
+ *
  * Copyright (C) 1993, 1994, 1994, 1995 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -23,7 +23,7 @@
 	int		len;
 	ext2_ino_t	*inode;
 	int		found;
-};	
+};
 
 #ifdef __TURBOC__
  #pragma argsused
diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c
index 45e6820..88bc6fa 100644
--- a/lib/ext2fs/mkdir.c
+++ b/lib/ext2fs/mkdir.c
@@ -1,6 +1,6 @@
 /*
  * mkdir.c --- make a directory in the filesystem
- * 
+ *
  * Copyright (C) 1994, 1995 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -82,10 +82,9 @@
 	memset(&inode, 0, sizeof(struct ext2_inode));
 	inode.i_mode = LINUX_S_IFDIR | (0777 & ~fs->umask);
 	inode.i_uid = inode.i_gid = 0;
-	inode.i_blocks = fs->blocksize / 512;
+	ext2fs_iblk_set(fs, &inode, 1);
 	inode.i_block[0] = blk;
 	inode.i_links_count = 2;
-	inode.i_ctime = inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(NULL);
 	inode.i_size = fs->blocksize;
 
 	/*
@@ -94,7 +93,7 @@
 	retval = ext2fs_write_dir_block(fs, blk, block);
 	if (retval)
 		goto cleanup;
-	retval = ext2fs_write_new_inode(fs, ino, &inode); 
+	retval = ext2fs_write_new_inode(fs, ino, &inode);
 	if (retval)
 		goto cleanup;
 
@@ -125,7 +124,7 @@
 		if (retval)
 			goto cleanup;
 	}
-	
+
 	/*
 	 * Update accounting....
 	 */
diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c
index 61d10a6..2cf9e41 100644
--- a/lib/ext2fs/mkjournal.c
+++ b/lib/ext2fs/mkjournal.c
@@ -2,7 +2,7 @@
  * mkjournal.c --- make a journal for a filesystem
  *
  * Copyright (C) 2000 Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -135,11 +135,72 @@
 }
 
 /*
+ * Convenience function which zeros out _num_ blocks starting at
+ * _blk_.  In case of an error, the details of the error is returned
+ * via _ret_blk_ and _ret_count_ if they are non-NULL pointers.
+ * Returns 0 on success, and an error code on an error.
+ *
+ * As a special case, if the first argument is NULL, then it will
+ * attempt to free the static zeroizing buffer.  (This is to keep
+ * programs that check for memory leaks happy.)
+ */
+#define STRIDE_LENGTH 8
+errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
+			     blk_t *ret_blk, int *ret_count)
+{
+	int		j, count;
+	static char	*buf;
+	errcode_t	retval;
+
+	/* If fs is null, clean up the static buffer and return */
+	if (!fs) {
+		if (buf) {
+			free(buf);
+			buf = 0;
+		}
+		return 0;
+	}
+	/* Allocate the zeroizing buffer if necessary */
+	if (!buf) {
+		buf = malloc(fs->blocksize * STRIDE_LENGTH);
+		if (!buf)
+			return ENOMEM;
+		memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
+	}
+	/* OK, do the write loop */
+	j=0;
+	while (j < num) {
+		if (blk % STRIDE_LENGTH) {
+			count = STRIDE_LENGTH - (blk % STRIDE_LENGTH);
+			if (count > (num - j))
+				count = num - j;
+		} else {
+			count = num - j;
+			if (count > STRIDE_LENGTH)
+				count = STRIDE_LENGTH;
+		}
+		retval = io_channel_write_blk(fs->io, blk, count, buf);
+		if (retval) {
+			if (ret_count)
+				*ret_count = count;
+			if (ret_blk)
+				*ret_blk = blk;
+			return retval;
+		}
+		j += count; blk += count;
+	}
+	return 0;
+}
+
+/*
  * Helper function for creating the journal using direct I/O routines
  */
 struct mkjournal_struct {
 	int		num_blocks;
 	int		newblocks;
+	blk_t		goal;
+	blk_t		blk_to_zero;
+	int		zero_count;
 	char		*buf;
 	errcode_t	err;
 };
@@ -153,23 +214,42 @@
 {
 	struct mkjournal_struct *es = (struct mkjournal_struct *) priv_data;
 	blk_t	new_blk;
-	static blk_t	last_blk = 0;
 	errcode_t	retval;
-	
+
 	if (*blocknr) {
-		last_blk = *blocknr;
+		es->goal = *blocknr;
 		return 0;
 	}
-	retval = ext2fs_new_block(fs, last_blk, 0, &new_blk);
+	retval = ext2fs_new_block(fs, es->goal, 0, &new_blk);
 	if (retval) {
 		es->err = retval;
 		return BLOCK_ABORT;
 	}
-	if (blockcnt > 0)
+	if (blockcnt >= 0)
 		es->num_blocks--;
 
 	es->newblocks++;
-	retval = io_channel_write_blk(fs->io, new_blk, 1, es->buf);
+	retval = 0;
+	if (blockcnt <= 0)
+		retval = io_channel_write_blk(fs->io, new_blk, 1, es->buf);
+	else {
+		if (es->zero_count) {
+			if ((es->blk_to_zero + es->zero_count == new_blk) &&
+			    (es->zero_count < 1024))
+				es->zero_count++;
+			else {
+				retval = ext2fs_zero_blocks(fs,
+							    es->blk_to_zero,
+							    es->zero_count,
+							    0, 0);
+				es->zero_count = 0;
+			}
+		}
+		if (es->zero_count == 0) {
+			es->blk_to_zero = new_blk;
+			es->zero_count = 1;
+		}
+	}
 
 	if (blockcnt == 0)
 		memset(es->buf, 0, fs->blocksize);
@@ -178,15 +258,14 @@
 		es->err = retval;
 		return BLOCK_ABORT;
 	}
-	*blocknr = new_blk;
-	last_blk = new_blk;
+	*blocknr = es->goal = new_blk;
 	ext2fs_block_alloc_stats(fs, new_blk, +1);
 
 	if (es->num_blocks == 0)
 		return (BLOCK_CHANGED | BLOCK_ABORT);
 	else
 		return BLOCK_CHANGED;
-	
+
 }
 
 /*
@@ -196,13 +275,14 @@
 				     blk_t size, int flags)
 {
 	char			*buf;
+	dgrp_t			group, start, end, i, log_flex;
 	errcode_t		retval;
 	struct ext2_inode	inode;
 	struct mkjournal_struct	es;
 
 	if ((retval = ext2fs_create_journal_superblock(fs, size, flags, &buf)))
 		return retval;
-	
+
 	if ((retval = ext2fs_read_bitmaps(fs)))
 		return retval;
 
@@ -216,6 +296,41 @@
 	es.newblocks = 0;
 	es.buf = buf;
 	es.err = 0;
+	es.zero_count = 0;
+
+	if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) {
+		inode.i_flags |= EXT4_EXTENTS_FL;
+		if ((retval = ext2fs_write_inode(fs, journal_ino, &inode)))
+			return retval;
+	}
+
+	/*
+	 * Set the initial goal block to be roughly at the middle of
+	 * the filesystem.  Pick a group that has the largest number
+	 * of free blocks.
+	 */
+	group = ext2fs_group_of_blk(fs, (fs->super->s_blocks_count -
+					 fs->super->s_first_data_block) / 2);
+	log_flex = 1 << fs->super->s_log_groups_per_flex;
+	if (fs->super->s_log_groups_per_flex && (group > log_flex)) {
+		group = group & ~(log_flex - 1);
+		while ((group < fs->group_desc_count) &&
+		       fs->group_desc[group].bg_free_blocks_count == 0)
+			group++;
+		if (group == fs->group_desc_count)
+			group = 0;
+		start = group;
+	} else
+		start = (group > 0) ? group-1 : group;
+	end = ((group+1) < fs->group_desc_count) ? group+1 : group;
+	group = start;
+	for (i=start+1; i <= end; i++)
+		if (fs->group_desc[i].bg_free_blocks_count >
+		    fs->group_desc[group].bg_free_blocks_count)
+			group = i;
+
+	es.goal = (fs->super->s_blocks_per_group * group) +
+		fs->super->s_first_data_block;
 
 	retval = ext2fs_block_iterate2(fs, journal_ino, BLOCK_FLAG_APPEND,
 				       0, mkjournal_proc, &es);
@@ -223,17 +338,23 @@
 		retval = es.err;
 		goto errout;
 	}
+	if (es.zero_count) {
+		retval = ext2fs_zero_blocks(fs, es.blk_to_zero,
+					    es.zero_count, 0, 0);
+		if (retval)
+			goto errout;
+	}
 
 	if ((retval = ext2fs_read_inode(fs, journal_ino, &inode)))
 		goto errout;
 
  	inode.i_size += fs->blocksize * size;
-	inode.i_blocks += (fs->blocksize / 512) * es.newblocks;
+	ext2fs_iblk_add_blocks(fs, &inode, es.newblocks);
 	inode.i_mtime = inode.i_ctime = fs->now ? fs->now : time(0);
 	inode.i_links_count = 1;
 	inode.i_mode = LINUX_S_IFREG | 0600;
 
-	if ((retval = ext2fs_write_inode(fs, journal_ino, &inode)))
+	if ((retval = ext2fs_write_new_inode(fs, journal_ino, &inode)))
 		goto errout;
 	retval = 0;
 
@@ -282,7 +403,7 @@
 	/* Make sure the device exists and is a block device */
 	if (stat(journal_dev->device_name, &st) < 0)
 		return errno;
-	
+
 	if (!S_ISBLK(st.st_mode))
 		return EXT2_ET_JOURNAL_NOT_BLOCK; /* Must be a block device */
 
@@ -317,7 +438,7 @@
 	/* Writeback the journal superblock */
 	if ((retval = io_channel_write_blk(journal_dev->io, start, -1024, buf)))
 		return retval;
-	
+
 	fs->super->s_journal_inum = 0;
 	fs->super->s_journal_dev = st.st_rdev;
 	memcpy(fs->super->s_journal_uuid, jsb->s_uuid,
@@ -349,7 +470,7 @@
 		strcat(jfile, "/.journal");
 
 		/*
-		 * If .../.journal already exists, make sure any 
+		 * If .../.journal already exists, make sure any
 		 * immutable or append-only flags are cleared.
 		 */
 #if defined(HAVE_CHFLAGS) && defined(UF_NODUMP)
@@ -371,23 +492,35 @@
 
 		if ((retval = write_journal_file(fs, jfile, size, flags)))
 			goto errout;
-		
+
 		/* Get inode number of the journal file */
-		if (fstat(fd, &st) < 0)
+		if (fstat(fd, &st) < 0) {
+			retval = errno;
 			goto errout;
+		}
 
 #if defined(HAVE_CHFLAGS) && defined(UF_NODUMP)
 		retval = fchflags (fd, UF_NODUMP|UF_IMMUTABLE);
 #else
 #if HAVE_EXT2_IOCTLS
-		f = EXT2_NODUMP_FL | EXT2_IMMUTABLE_FL;
+		if (ioctl(fd, EXT2_IOC_GETFLAGS, &f) < 0) {
+			retval = errno;
+			goto errout;
+		}
+		f |= EXT2_NODUMP_FL | EXT2_IMMUTABLE_FL;
 		retval = ioctl(fd, EXT2_IOC_SETFLAGS, &f);
 #endif
 #endif
-		if (retval)
+		if (retval) {
+			retval = errno;
 			goto errout;
-		
-		close(fd);
+		}
+
+		if (close(fd) < 0) {
+			retval = errno;
+			fd = -1;
+			goto errout;
+		}
 		journal_ino = st.st_ino;
 	} else {
 		if ((mount_flags & EXT2_MF_BUSY) &&
@@ -400,7 +533,7 @@
 						  size, flags)))
 			return retval;
 	}
-	
+
 	fs->super->s_journal_inum = journal_ino;
 	fs->super->s_journal_dev = 0;
 	memset(fs->super->s_journal_uuid, 0,
@@ -427,7 +560,7 @@
 		exit(1);
 	}
 	device_name = argv[1];
-	
+
 	retval = ext2fs_open (device_name, EXT2_FLAG_RW, 0, 0,
 			      unix_io_manager, &fs);
 	if (retval) {
@@ -447,6 +580,6 @@
 	}
 	ext2fs_close(fs);
 	exit(0);
-	
+
 }
 #endif
diff --git a/lib/ext2fs/namei.c b/lib/ext2fs/namei.c
index c380939..2b28a54 100644
--- a/lib/ext2fs/namei.c
+++ b/lib/ext2fs/namei.c
@@ -1,6 +1,6 @@
 /*
  * namei.c --- ext2fs directory lookup operations
- * 
+ *
  * Copyright (C) 1993, 1994, 1994, 1995 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -36,7 +36,7 @@
 #ifdef NAMEI_DEBUG
 	printf("follow_link: root=%lu, dir=%lu, inode=%lu, lc=%d\n",
 	       root, dir, inode, link_count);
-	
+
 #endif
 	retval = ext2fs_read_inode (fs, inode, &ei);
 	if (retval) return retval;
@@ -152,13 +152,13 @@
 {
 	char *buf;
 	errcode_t retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	retval = ext2fs_get_mem(fs->blocksize, &buf);
 	if (retval)
 		return retval;
-	
+
 	retval = open_namei(fs, root, cwd, name, strlen(name), 0, 0,
 			    buf, inode);
 
@@ -171,13 +171,13 @@
 {
 	char *buf;
 	errcode_t retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	retval = ext2fs_get_mem(fs->blocksize, &buf);
 	if (retval)
 		return retval;
-	
+
 	retval = open_namei(fs, root, cwd, name, strlen(name), 1, 0,
 			    buf, inode);
 
@@ -190,7 +190,7 @@
 {
 	char *buf;
 	errcode_t retval;
-	
+
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	retval = ext2fs_get_mem(fs->blocksize, &buf);
diff --git a/lib/ext2fs/native.c b/lib/ext2fs/native.c
index 85d0989..738c34b 100644
--- a/lib/ext2fs/native.c
+++ b/lib/ext2fs/native.c
@@ -1,8 +1,8 @@
 /*
  * native.c --- returns the ext2_flag for a native byte order
- * 
+ *
  * Copyright (C) 1996 Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -23,5 +23,5 @@
 #endif
 }
 
-	
-	
+
+
diff --git a/lib/ext2fs/newdir.c b/lib/ext2fs/newdir.c
index 3904d91..7f4266a 100644
--- a/lib/ext2fs/newdir.c
+++ b/lib/ext2fs/newdir.c
@@ -1,6 +1,6 @@
 /*
  * newdir.c --- create a new directory block
- * 
+ *
  * Copyright (C) 1994, 1995 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -41,7 +41,10 @@
 		return retval;
 	memset(buf, 0, fs->blocksize);
 	dir = (struct ext2_dir_entry *) buf;
-	dir->rec_len = fs->blocksize;
+
+	retval = ext2fs_set_rec_len(fs, fs->blocksize, dir);
+	if (retval)
+		return retval;
 
 	if (dir_ino) {
 		if (fs->super->s_feature_incompat &
@@ -53,19 +56,21 @@
 		dir->inode = dir_ino;
 		dir->name_len = 1 | filetype;
 		dir->name[0] = '.';
-		rec_len = dir->rec_len - EXT2_DIR_REC_LEN(1);
+		rec_len = fs->blocksize - EXT2_DIR_REC_LEN(1);
 		dir->rec_len = EXT2_DIR_REC_LEN(1);
 
 		/*
 		 * Set up entry for '..'
 		 */
 		dir = (struct ext2_dir_entry *) (buf + dir->rec_len);
-		dir->rec_len = rec_len;
+		retval = ext2fs_set_rec_len(fs, rec_len, dir);
+		if (retval)
+			return retval;
 		dir->inode = parent_ino;
 		dir->name_len = 2 | filetype;
 		dir->name[0] = '.';
 		dir->name[1] = '.';
-		
+
 	}
 	*block = buf;
 	return 0;
diff --git a/lib/ext2fs/nt_io.c b/lib/ext2fs/nt_io.c
index c39127c..efd2a09 100644
--- a/lib/ext2fs/nt_io.c
+++ b/lib/ext2fs/nt_io.c
@@ -1191,11 +1191,7 @@
 
 			if (NULL != io)
 			{
-				if(NULL != io->name)
-				{
-					free(io->name);
-				}
-
+				free(io->name);
 				free(io);
 			}
 
@@ -1207,11 +1203,7 @@
 					_CloseDisk(NtData->Handle);
 				}
 
-				if(NULL != NtData->Buffer)
-				{
-					free(NtData->Buffer);
-				}
-
+				free(NtData->Buffer);
 				free(NtData);
 			}
 		}
@@ -1245,12 +1237,7 @@
 		return 0;
 	}
 
-	if(NULL != channel->name)
-	{
-		free(channel->name);
-	}
-
-
+	free(channel->name);
 	free(channel);
 
 	if (NULL != NtData)
@@ -1262,11 +1249,7 @@
 			_CloseDisk(NtData->Handle);
 		}
 
-		if(NULL != NtData->Buffer)
-		{
-			free(NtData->Buffer);
-		}
-
+		free(NtData->Buffer);
 		free(NtData);
 	}
 
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index d705b1c..1ca63db 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -1,8 +1,8 @@
 /*
  * openfs.c --- open an ext2 filesystem
- * 
+ *
  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -39,11 +39,10 @@
 	    (i < fs->super->s_first_meta_bg))
 		return (group_block + i + 1);
 
-	bg = (fs->blocksize / sizeof (struct ext2_group_desc)) * i;
+	bg = EXT2_DESC_PER_BLOCK(fs->super) * i;
 	if (ext2fs_bg_has_super(fs, bg))
 		has_super = 1;
-	ret_blk = (fs->super->s_first_data_block + has_super + 
-		   (bg * fs->super->s_blocks_per_group));
+	ret_blk = ext2fs_group_first_block(fs, bg) + has_super;
 	/*
 	 * If group_block is not the normal value, we're trying to use
 	 * the backup group descriptors and superblock --- so use the
@@ -60,10 +59,10 @@
 }
 
 errcode_t ext2fs_open(const char *name, int flags, int superblock,
-		      unsigned int block_size, io_manager manager, 
+		      unsigned int block_size, io_manager manager,
 		      ext2_filsys *ret_fs)
 {
-	return ext2fs_open2(name, 0, flags, superblock, block_size, 
+	return ext2fs_open2(name, 0, flags, superblock, block_size,
 			    manager, ret_fs);
 }
 
@@ -72,7 +71,7 @@
  * 	Superblock and block_size can be zero to use the default size.
  *
  * Valid flags for ext2fs_open()
- * 
+ *
  * 	EXT2_FLAG_RW	- Open the filesystem for read/write.
  * 	EXT2_FLAG_FORCE - Open the filesystem even if some of the
  *				features aren't supported.
@@ -80,24 +79,27 @@
  */
 errcode_t ext2fs_open2(const char *name, const char *io_options,
 		       int flags, int superblock,
-		       unsigned int block_size, io_manager manager, 
+		       unsigned int block_size, io_manager manager,
 		       ext2_filsys *ret_fs)
 {
 	ext2_filsys	fs;
 	errcode_t	retval;
-	unsigned long	i;
+	unsigned long	i, first_meta_bg;
 	__u32		features;
-	int		j, groups_per_block, blocks_per_group, io_flags;
+	int		groups_per_block, blocks_per_group, io_flags;
 	blk_t		group_block, blk;
 	char		*dest, *cp;
+#ifdef WORDS_BIGENDIAN
 	struct ext2_group_desc *gdp;
-	
+	int		j;
+#endif
+
 	EXT2_CHECK_MAGIC(manager, EXT2_ET_MAGIC_IO_MANAGER);
 
 	retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs);
 	if (retval)
 		return retval;
-	
+
 	memset(fs, 0, sizeof(struct struct_ext2_filsys));
 	fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS;
 	fs->flags = flags;
@@ -113,7 +115,7 @@
 		*cp++ = 0;
 		io_options = cp;
 	}
-		
+
 	io_flags = 0;
 	if (flags & EXT2_FLAG_RW)
 		io_flags |= IO_FLAG_RW;
@@ -122,7 +124,7 @@
 	retval = manager->open(fs->device_name, io_flags, &fs->io);
 	if (retval)
 		goto cleanup;
-	if (io_options && 
+	if (io_options &&
 	    (retval = io_channel_set_options(fs->io, io_options)))
 		goto cleanup;
 	fs->image_io = fs->io;
@@ -178,15 +180,16 @@
 	if (fs->orig_super)
 		memcpy(fs->orig_super, fs->super, SUPERBLOCK_SIZE);
 
-#ifdef EXT2FS_ENABLE_SWAPFS
-	if ((fs->super->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC)) ||
-	    (fs->flags & EXT2_FLAG_SWAP_BYTES)) {
-		fs->flags |= EXT2_FLAG_SWAP_BYTES;
-
-		ext2fs_swap_super(fs->super);
+#ifdef WORDS_BIGENDIAN
+	fs->flags |= EXT2_FLAG_SWAP_BYTES;
+	ext2fs_swap_super(fs->super);
+#else
+	if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
+		retval = EXT2_ET_UNIMPLEMENTED;
+		goto cleanup;
 	}
 #endif
-	
+
 	if (fs->super->s_magic != EXT2_SUPER_MAGIC) {
 		retval = EXT2_ET_BAD_MAGIC;
 		goto cleanup;
@@ -228,18 +231,19 @@
 			goto cleanup;
 		}
 	}
-	
-	fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
-	if (fs->blocksize == 0) {
+
+	if ((fs->super->s_log_block_size + EXT2_MIN_BLOCK_LOG_SIZE) >
+	    EXT2_MAX_BLOCK_LOG_SIZE) {
 		retval = EXT2_ET_CORRUPT_SUPERBLOCK;
 		goto cleanup;
 	}
+	fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
 	if (EXT2_INODE_SIZE(fs->super) < EXT2_GOOD_OLD_INODE_SIZE) {
 		retval = EXT2_ET_CORRUPT_SUPERBLOCK;
 		goto cleanup;
 	}
 	fs->fragsize = EXT2_FRAG_SIZE(fs->super);
-	fs->inode_blocks_per_group = ((fs->super->s_inodes_per_group *
+	fs->inode_blocks_per_group = ((EXT2_INODES_PER_GROUP(fs->super) *
 				       EXT2_INODE_SIZE(fs->super) +
 				       EXT2_BLOCK_SIZE(fs->super) - 1) /
 				      EXT2_BLOCK_SIZE(fs->super));
@@ -264,20 +268,32 @@
 		*ret_fs = fs;
 		return 0;
 	}
-	
+
+	if (EXT2_INODES_PER_GROUP(fs->super) == 0) {
+		retval = EXT2_ET_CORRUPT_SUPERBLOCK;
+		goto cleanup;
+	}
+
 	/*
 	 * Read group descriptors
 	 */
 	blocks_per_group = EXT2_BLOCKS_PER_GROUP(fs->super);
 	if (blocks_per_group == 0 ||
 	    blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(fs->super) ||
-	    fs->inode_blocks_per_group > EXT2_MAX_INODES_PER_GROUP(fs->super)) {
+	    fs->inode_blocks_per_group > EXT2_MAX_INODES_PER_GROUP(fs->super) ||
+           EXT2_DESC_PER_BLOCK(fs->super) == 0 ||
+           fs->super->s_first_data_block >= fs->super->s_blocks_count) {
 		retval = EXT2_ET_CORRUPT_SUPERBLOCK;
 		goto cleanup;
 	}
 	fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count -
 					       fs->super->s_first_data_block,
 					       blocks_per_group);
+       if (fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) !=
+           fs->super->s_inodes_count) {
+               retval = EXT2_ET_CORRUPT_SUPERBLOCK;
+		goto cleanup;
+       }
 	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count,
 					  EXT2_DESC_PER_BLOCK(fs->super));
 	retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
@@ -287,24 +303,54 @@
 	if (!group_block)
 		group_block = fs->super->s_first_data_block;
 	dest = (char *) fs->group_desc;
-	groups_per_block = fs->blocksize / sizeof(struct ext2_group_desc);
-	for (i=0 ; i < fs->desc_blocks; i++) {
+	groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
+	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
+		first_meta_bg = fs->super->s_first_meta_bg;
+	else
+		first_meta_bg = fs->desc_blocks;
+	if (first_meta_bg) {
+		retval = io_channel_read_blk(fs->io, group_block+1,
+					     first_meta_bg, dest);
+		if (retval)
+			goto cleanup;
+#ifdef WORDS_BIGENDIAN
+		gdp = (struct ext2_group_desc *) dest;
+		for (j=0; j < groups_per_block*first_meta_bg; j++)
+			ext2fs_swap_group_desc(gdp++);
+#endif
+		dest += fs->blocksize*first_meta_bg;
+	}
+	for (i=first_meta_bg ; i < fs->desc_blocks; i++) {
 		blk = ext2fs_descriptor_block_loc(fs, group_block, i);
 		retval = io_channel_read_blk(fs->io, blk, 1, dest);
 		if (retval)
 			goto cleanup;
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
-			gdp = (struct ext2_group_desc *) dest;
-			for (j=0; j < groups_per_block; j++)
-				ext2fs_swap_group_desc(gdp++);
-		}
+#ifdef WORDS_BIGENDIAN
+		gdp = (struct ext2_group_desc *) dest;
+		for (j=0; j < groups_per_block; j++)
+			ext2fs_swap_group_desc(gdp++);
 #endif
 		dest += fs->blocksize;
 	}
 
 	fs->stride = fs->super->s_raid_stride;
 
+	/*
+	 * If recovery is from backup superblock, Clear _UNININT flags &
+	 * reset bg_itable_unused to zero
+	 */
+	if (superblock > 1 && EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+		struct ext2_group_desc *gd;
+		for (i = 0, gd = fs->group_desc; i < fs->group_desc_count;
+		     i++, gd++) {
+			gd->bg_flags &= ~EXT2_BG_BLOCK_UNINIT;
+			gd->bg_flags &= ~EXT2_BG_INODE_UNINIT;
+			gd->bg_itable_unused = 0;
+		}
+		ext2fs_mark_super_dirty(fs);
+	}
+
 	fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
 	*ret_fs = fs;
 	return 0;
@@ -318,7 +364,7 @@
 
 /*
  * Set/get the filesystem data I/O channel.
- * 
+ *
  * These functions are only valid if EXT2_FLAG_IMAGE_FILE is true.
  */
 errcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io)
@@ -344,7 +390,7 @@
 	if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0)
 		return EXT2_ET_NOT_IMAGE_FILE;
 	fs->io = fs->image_io = new_io;
-	fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_RW | 
+	fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_RW |
 		EXT2_FLAG_BB_DIRTY | EXT2_FLAG_IB_DIRTY;
 	fs->flags &= ~EXT2_FLAG_IMAGE_FILE;
 	return 0;
diff --git a/lib/ext2fs/read_bb.c b/lib/ext2fs/read_bb.c
index c717adc..112d07f 100644
--- a/lib/ext2fs/read_bb.c
+++ b/lib/ext2fs/read_bb.c
@@ -38,16 +38,16 @@
  #pragma argsused
 #endif
 static int mark_bad_block(ext2_filsys fs, blk_t *block_nr,
-			  e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), 
+			  e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
 			  blk_t ref_block EXT2FS_ATTR((unused)),
-			  int ref_offset EXT2FS_ATTR((unused)), 
+			  int ref_offset EXT2FS_ATTR((unused)),
 			  void *priv_data)
 {
 	struct read_bb_record *rb = (struct read_bb_record *) priv_data;
-	
+
 	if (blockcnt < 0)
 		return 0;
-	
+
 	if ((*block_nr < fs->super->s_first_data_block) ||
 	    (*block_nr >= fs->super->s_blocks_count))
 		return 0;	/* Ignore illegal blocks */
@@ -74,10 +74,15 @@
 		retval = ext2fs_read_inode(fs, EXT2_BAD_INO, &inode);
 		if (retval)
 			return retval;
-		if (inode.i_blocks < 500)
-			numblocks = (inode.i_blocks /
-				     (fs->blocksize / 512)) + 20;
-		else
+		numblocks = inode.i_blocks;
+		if (!((fs->super->s_feature_ro_compat &
+		       EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
+		      (inode.i_flags & EXT4_HUGE_FILE_FL)))
+			numblocks = numblocks / (fs->blocksize / 512);
+		numblocks += 20;
+		if (numblocks < 50)
+			numblocks = 50;
+		if (numblocks > 50000)
 			numblocks = 500;
 		retval = ext2fs_badblocks_list_create(bb_list, numblocks);
 		if (retval)
@@ -86,8 +91,8 @@
 
 	rb.bb_list = *bb_list;
 	rb.err = 0;
-	retval = ext2fs_block_iterate2(fs, EXT2_BAD_INO, 0, 0,
-				      mark_bad_block, &rb);
+	retval = ext2fs_block_iterate2(fs, EXT2_BAD_INO, BLOCK_FLAG_READ_ONLY,
+				       0, mark_bad_block, &rb);
 	if (retval)
 		return retval;
 
diff --git a/lib/ext2fs/read_bb_file.c b/lib/ext2fs/read_bb_file.c
index 2ac71f4..60dec42 100644
--- a/lib/ext2fs/read_bb_file.c
+++ b/lib/ext2fs/read_bb_file.c
@@ -29,7 +29,7 @@
 /*
  * Reads a list of bad blocks from  a FILE *
  */
-errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, 
+errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
 			       ext2_badblocks_list *bb_list,
 			       void *priv_data,
 			       void (*invalid)(ext2_filsys fs,
@@ -76,7 +76,7 @@
 };
 
 static void call_compat_invalid(ext2_filsys fs, blk_t blk,
-				char *badstr EXT2FS_ATTR((unused)), 
+				char *badstr EXT2FS_ATTR((unused)),
 				void *priv_data)
 {
 	struct compat_struct *st;
@@ -90,7 +90,7 @@
 /*
  * Reads a list of bad blocks from  a FILE *
  */
-errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f, 
+errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f,
 			      ext2_badblocks_list *bb_list,
 			      void (*invalid)(ext2_filsys fs, blk_t blk))
 {
diff --git a/lib/ext2fs/res_gdt.c b/lib/ext2fs/res_gdt.c
index fa72fc9..62b5988 100644
--- a/lib/ext2fs/res_gdt.c
+++ b/lib/ext2fs/res_gdt.c
@@ -64,7 +64,6 @@
 	struct ext2_super_block	*sb;
 	struct ext2_inode	inode;
 	__u32			*dindir_buf, *gdt_buf;
-	int			rsv_add;
 	unsigned long long	apb, inode_size;
 	blk_t			dindir_blk, rsv_off, gdt_off, gdt_blk;
 	int			dindir_dirty = 0, inode_dirty = 0;
@@ -84,7 +83,6 @@
 
 	/* Maximum possible file size (we donly use the dindirect blocks) */
 	apb = EXT2_ADDR_PER_BLOCK(sb);
-	rsv_add = fs->blocksize / 512;
 	if ((dindir_blk = inode.i_block[EXT2_DIND_BLOCK])) {
 #ifdef RES_GDT_DEBUG
 		printf("reading GDT dindir %u\n", dindir_blk);
@@ -93,8 +91,9 @@
 		if (retval)
 			goto out_inode;
 	} else {
-		blk_t goal = 3 + sb->s_reserved_gdt_blocks +
-			fs->desc_blocks + fs->inode_blocks_per_group;
+		blk_t goal = sb->s_first_data_block + fs->desc_blocks +
+			sb->s_reserved_gdt_blocks + 2 +
+			fs->inode_blocks_per_group;
 
 		retval = ext2fs_alloc_block(fs, goal, 0, &dindir_blk);
 		if (retval)
@@ -102,7 +101,7 @@
 		inode.i_mode = LINUX_S_IFREG | 0600;
 		inode.i_links_count = 1;
 		inode.i_block[EXT2_DIND_BLOCK] = dindir_blk;
-		inode.i_blocks = rsv_add;
+		ext2fs_iblk_set(fs, &inode, 1);
 		memset(dindir_buf, 0, fs->blocksize);
 #ifdef RES_GDT_DEBUG
 		printf("allocated GDT dindir %u\n", dindir_blk);
@@ -143,7 +142,7 @@
 			gdt_dirty = dindir_dirty = inode_dirty = 1;
 			memset(gdt_buf, 0, fs->blocksize);
 			dindir_buf[gdt_off] = gdt_blk;
-			inode.i_blocks += rsv_add;
+			ext2fs_iblk_add_blocks(fs, &inode, 1);
 #ifdef RES_GDT_DEBUG
 			printf("added primary GDT block %u at %u[%u]\n",
 			       gdt_blk, dindir_blk, gdt_off);
@@ -174,7 +173,7 @@
 				       expect, grp, gdt_blk, last);
 #endif
 				gdt_buf[last] = expect;
-				inode.i_blocks += rsv_add;
+				ext2fs_iblk_add_blocks(fs, &inode, 1);
 				gdt_dirty = inode_dirty = 1;
 			} else if (gdt_buf[last] != expect) {
 #ifdef RES_GDT_DEBUG
@@ -209,7 +208,7 @@
 #endif
 	if (inode_dirty) {
 		inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(0);
-		retval2 = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
+		retval2 = ext2fs_write_new_inode(fs, EXT2_RESIZE_INO, &inode);
 		if (!retval)
 			retval = retval2;
 	}
diff --git a/lib/ext2fs/rs_bitmap.c b/lib/ext2fs/rs_bitmap.c
deleted file mode 100644
index 46653f0..0000000
--- a/lib/ext2fs/rs_bitmap.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * rs_bitmap.c --- routine for changing the size of a bitmap
- *
- * Copyright (C) 1996, 1997 Theodore Ts'o.
- *
- * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Public
- * License.
- * %End-Header%
- */
-
-#include <stdio.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <time.h>
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ext2_fs.h"
-#include "ext2fs.h"
-
-errcode_t ext2fs_resize_generic_bitmap(__u32 new_end, __u32 new_real_end,
-				       ext2fs_generic_bitmap bmap)
-{
-	errcode_t	retval;
-	size_t		size, new_size;
-	__u32		bitno;
-
-	if (!bmap)
-		return EXT2_ET_INVALID_ARGUMENT;
-
-	EXT2_CHECK_MAGIC(bmap, EXT2_ET_MAGIC_GENERIC_BITMAP);
-
-	/*
-	 * If we're expanding the bitmap, make sure all of the new
-	 * parts of the bitmap are zero.
-	 */
-	if (new_end > bmap->end) {
-		bitno = bmap->real_end;
-		if (bitno > new_end)
-			bitno = new_end;
-		for (; bitno > bmap->end; bitno--)
-			ext2fs_clear_bit(bitno - bmap->start, bmap->bitmap);
-	}
-	if (new_real_end == bmap->real_end) {
-		bmap->end = new_end;
-		return 0;
-	}
-	
-	size = ((bmap->real_end - bmap->start) / 8) + 1;
-	new_size = ((new_real_end - bmap->start) / 8) + 1;
-
-	if (size != new_size) {
-		retval = ext2fs_resize_mem(size, new_size, &bmap->bitmap);
-		if (retval)
-			return retval;
-	}
-	if (new_size > size)
-		memset(bmap->bitmap + size, 0, new_size - size);
-
-	bmap->end = new_end;
-	bmap->real_end = new_real_end;
-	return 0;
-}
-
-errcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end,
-				     ext2fs_inode_bitmap bmap)
-{
-	errcode_t	retval;
-	
-	if (!bmap)
-		return EXT2_ET_INVALID_ARGUMENT;
-
-	EXT2_CHECK_MAGIC(bmap, EXT2_ET_MAGIC_INODE_BITMAP);
-
-	bmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP;
-	retval = ext2fs_resize_generic_bitmap(new_end, new_real_end,
-					      bmap);
-	bmap->magic = EXT2_ET_MAGIC_INODE_BITMAP;
-	return retval;
-}
-
-errcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end,
-				     ext2fs_block_bitmap bmap)
-{
-	errcode_t	retval;
-	
-	if (!bmap)
-		return EXT2_ET_INVALID_ARGUMENT;
-
-	EXT2_CHECK_MAGIC(bmap, EXT2_ET_MAGIC_BLOCK_BITMAP);
-
-	bmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP;
-	retval = ext2fs_resize_generic_bitmap(new_end, new_real_end,
-					      bmap);
-	bmap->magic = EXT2_ET_MAGIC_BLOCK_BITMAP;
-	return retval;
-}
-
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
index cb470b8..56fcfd6 100644
--- a/lib/ext2fs/rw_bitmaps.c
+++ b/lib/ext2fs/rw_bitmaps.c
@@ -27,30 +27,6 @@
 #include "ext2fs.h"
 #include "e2image.h"
 
-#if defined(__powerpc__) && defined(EXT2FS_ENABLE_SWAPFS)
-/*
- * On the PowerPC, the big-endian variant of the ext2 filesystem
- * has its bitmaps stored as 32-bit words with bit 0 as the LSB
- * of each word.  Thus a bitmap with only bit 0 set would be, as
- * a string of bytes, 00 00 00 01 00 ...
- * To cope with this, we byte-reverse each word of a bitmap if
- * we have a big-endian filesystem, that is, if we are *not*
- * byte-swapping other word-sized numbers.
- */
-#define EXT2_BIG_ENDIAN_BITMAPS
-#endif
-
-#ifdef EXT2_BIG_ENDIAN_BITMAPS
-static void ext2fs_swap_bitmap(ext2_filsys fs, char *bitmap, int nbytes)
-{
-	__u32 *p = (__u32 *) bitmap;
-	int n;
-		
-	for (n = nbytes / sizeof(__u32); n > 0; --n, ++p)
-		*p = ext2fs_swab32(*p);
-}
-#endif
-
 static errcode_t write_bitmaps(ext2_filsys fs, int do_inode, int do_block)
 {
 	dgrp_t 		i;
@@ -58,22 +34,23 @@
 	int		block_nbytes, inode_nbytes;
 	unsigned int	nbits;
 	errcode_t	retval;
-	char 		*block_bitmap, *inode_bitmap;
 	char 		*block_buf, *inode_buf;
-	int		lazy_flag = 0;
+	int		csum_flag = 0;
 	blk_t		blk;
+	blk_t		blk_itr = fs->super->s_first_data_block;
+	ext2_ino_t	ino_itr = 1;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	if (!(fs->flags & EXT2_FLAG_RW))
 		return EXT2_ET_RO_FILSYS;
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, 
-				    EXT2_FEATURE_COMPAT_LAZY_BG))
-		lazy_flag = 1;
+
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
+		csum_flag = 1;
+
 	inode_nbytes = block_nbytes = 0;
-	block_bitmap = inode_bitmap = 0;
 	if (do_block) {
-		block_bitmap = fs->block_map->bitmap;
 		block_nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
 		retval = ext2fs_get_mem(fs->blocksize, &block_buf);
 		if (retval)
@@ -81,8 +58,7 @@
 		memset(block_buf, 0xff, fs->blocksize);
 	}
 	if (do_inode) {
-		inode_bitmap = fs->inode_map->bitmap;
-		inode_nbytes = (size_t) 
+		inode_nbytes = (size_t)
 			((EXT2_INODES_PER_GROUP(fs->super)+7) / 8);
 		retval = ext2fs_get_mem(fs->blocksize, &inode_buf);
 		if (retval)
@@ -91,14 +67,18 @@
 	}
 
 	for (i = 0; i < fs->group_desc_count; i++) {
-		if (!block_bitmap || !do_block)
+		if (!do_block)
 			goto skip_block_bitmap;
 
-		if (lazy_flag && fs->group_desc[i].bg_flags &
-		    EXT2_BG_BLOCK_UNINIT) 
+		if (csum_flag && fs->group_desc[i].bg_flags &
+		    EXT2_BG_BLOCK_UNINIT)
 			goto skip_this_block_bitmap;
- 
-		memcpy(block_buf, block_bitmap, block_nbytes);
+
+		retval = ext2fs_get_block_bitmap_range(fs->block_map,
+				blk_itr, block_nbytes << 3, block_buf);
+		if (retval)
+			return retval;
+
 		if (i == fs->group_desc_count - 1) {
 			/* Force bitmap padding for the last group */
 			nbits = ((fs->super->s_blocks_count
@@ -110,44 +90,36 @@
 		}
 		blk = fs->group_desc[i].bg_block_bitmap;
 		if (blk) {
-#ifdef EXT2_BIG_ENDIAN_BITMAPS
-			if (!((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-			      (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)))
-				ext2fs_swap_bitmap(fs, block_buf, 
-						   block_nbytes);
-#endif
 			retval = io_channel_write_blk(fs->io, blk, 1,
 						      block_buf);
 			if (retval)
 				return EXT2_ET_BLOCK_BITMAP_WRITE;
 		}
 	skip_this_block_bitmap:
-		block_bitmap += block_nbytes;
+		blk_itr += block_nbytes << 3;
 	skip_block_bitmap:
 
-		if (!inode_bitmap || !do_inode)
+		if (!do_inode)
 			continue;
 
-		if (lazy_flag && fs->group_desc[i].bg_flags &
-		    EXT2_BG_INODE_UNINIT) 
+		if (csum_flag && fs->group_desc[i].bg_flags &
+		    EXT2_BG_INODE_UNINIT)
 			goto skip_this_inode_bitmap;
- 
-		memcpy(inode_buf, inode_bitmap, inode_nbytes);
+
+		retval = ext2fs_get_inode_bitmap_range(fs->inode_map,
+				ino_itr, inode_nbytes << 3, inode_buf);
+		if (retval)
+			return retval;
+
 		blk = fs->group_desc[i].bg_inode_bitmap;
 		if (blk) {
-#ifdef EXT2_BIG_ENDIAN_BITMAPS
-			if (!((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-			      (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE)))
-				ext2fs_swap_bitmap(fs, inode_buf, 
-						   inode_nbytes);
-#endif
 			retval = io_channel_write_blk(fs->io, blk, 1,
 						      inode_buf);
 			if (retval)
 				return EXT2_ET_INODE_BITMAP_WRITE;
 		}
 	skip_this_inode_bitmap:
-		inode_bitmap += inode_nbytes;
+		ino_itr += inode_nbytes << 3;
 
 	}
 	if (do_block) {
@@ -167,18 +139,24 @@
 	char *block_bitmap = 0, *inode_bitmap = 0;
 	char *buf;
 	errcode_t retval;
-	int block_nbytes = (int) EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
-	int inode_nbytes = (int) EXT2_INODES_PER_GROUP(fs->super) / 8;
-	int lazy_flag = 0;
+	int block_nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+	int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
+	int csum_flag = 0;
+	int do_image = fs->flags & EXT2_FLAG_IMAGE_FILE;
+	unsigned int	cnt;
 	blk_t	blk;
+	blk_t	blk_itr = fs->super->s_first_data_block;
+	blk_t   blk_cnt;
+	ext2_ino_t ino_itr = 1;
+	ext2_ino_t ino_cnt;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
 	fs->write_bitmaps = ext2fs_write_bitmaps;
 
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, 
-				    EXT2_FEATURE_COMPAT_LAZY_BG))
-		lazy_flag = 1;
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
+		csum_flag = 1;
 
 	retval = ext2fs_get_mem(strlen(fs->device_name) + 80, &buf);
 	if (retval)
@@ -186,50 +164,81 @@
 	if (do_block) {
 		if (fs->block_map)
 			ext2fs_free_block_bitmap(fs->block_map);
-		sprintf(buf, "block bitmap for %s", fs->device_name);
+		strcpy(buf, "block bitmap for ");
+		strcat(buf, fs->device_name);
 		retval = ext2fs_allocate_block_bitmap(fs, buf, &fs->block_map);
 		if (retval)
 			goto cleanup;
-		block_bitmap = fs->block_map->bitmap;
-	}
+		retval = ext2fs_get_mem(do_image ? fs->blocksize :
+					(unsigned) block_nbytes, &block_bitmap);
+		if (retval)
+			goto cleanup;
+	} else
+		block_nbytes = 0;
 	if (do_inode) {
 		if (fs->inode_map)
 			ext2fs_free_inode_bitmap(fs->inode_map);
-		sprintf(buf, "inode bitmap for %s", fs->device_name);
+		strcpy(buf, "inode bitmap for ");
+		strcat(buf, fs->device_name);
 		retval = ext2fs_allocate_inode_bitmap(fs, buf, &fs->inode_map);
 		if (retval)
 			goto cleanup;
-		inode_bitmap = fs->inode_map->bitmap;
-	}
+		retval = ext2fs_get_mem(do_image ? fs->blocksize :
+					(unsigned) inode_nbytes, &inode_bitmap);
+		if (retval)
+			goto cleanup;
+	} else
+		inode_nbytes = 0;
 	ext2fs_free_mem(&buf);
 
 	if (fs->flags & EXT2_FLAG_IMAGE_FILE) {
-		if (inode_bitmap) {
-			blk = (fs->image_header->offset_inodemap /
-			       fs->blocksize);
-			retval = io_channel_read_blk(fs->image_io, blk,
-			     -(inode_nbytes * fs->group_desc_count),
-			     inode_bitmap);
+		blk = (fs->image_header->offset_inodemap / fs->blocksize);
+		ino_cnt = fs->super->s_inodes_count;
+		while (inode_nbytes > 0) {
+			retval = io_channel_read_blk(fs->image_io, blk++,
+						     1, inode_bitmap);
 			if (retval)
 				goto cleanup;
-		}
-		if (block_bitmap) {
-			blk = (fs->image_header->offset_blockmap /
-			       fs->blocksize);
-			retval = io_channel_read_blk(fs->image_io, blk, 
-			     -(block_nbytes * fs->group_desc_count),
-			     block_bitmap);
+			cnt = fs->blocksize << 3;
+			if (cnt > ino_cnt)
+				cnt = ino_cnt;
+			retval = ext2fs_set_inode_bitmap_range(fs->inode_map,
+					       ino_itr, cnt, inode_bitmap);
 			if (retval)
 				goto cleanup;
+			ino_itr += fs->blocksize << 3;
+			ino_cnt -= fs->blocksize << 3;
+			inode_nbytes -= fs->blocksize;
 		}
-		return 0;
+		blk = (fs->image_header->offset_blockmap /
+		       fs->blocksize);
+		blk_cnt = EXT2_BLOCKS_PER_GROUP(fs->super) *
+			fs->group_desc_count;
+		while (block_nbytes > 0) {
+			retval = io_channel_read_blk(fs->image_io, blk++,
+						     1, block_bitmap);
+			if (retval)
+				goto cleanup;
+			cnt = fs->blocksize << 3;
+			if (cnt > blk_cnt)
+				cnt = blk_cnt;
+			retval = ext2fs_set_block_bitmap_range(fs->block_map,
+				       blk_itr, cnt, block_bitmap);
+			if (retval)
+				goto cleanup;
+			blk_itr += fs->blocksize << 3;
+			blk_cnt -= fs->blocksize << 3;
+			block_nbytes -= fs->blocksize;
+		}
+		goto success_cleanup;
 	}
 
 	for (i = 0; i < fs->group_desc_count; i++) {
 		if (block_bitmap) {
 			blk = fs->group_desc[i].bg_block_bitmap;
-			if (lazy_flag && fs->group_desc[i].bg_flags &
-			    EXT2_BG_BLOCK_UNINIT)
+			if (csum_flag && fs->group_desc[i].bg_flags &
+			    EXT2_BG_BLOCK_UNINIT &&
+			    ext2fs_group_desc_csum_verify(fs, i))
 				blk = 0;
 			if (blk) {
 				retval = io_channel_read_blk(fs->io, blk,
@@ -238,19 +247,20 @@
 					retval = EXT2_ET_BLOCK_BITMAP_READ;
 					goto cleanup;
 				}
-#ifdef EXT2_BIG_ENDIAN_BITMAPS
-				if (!((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-				      (fs->flags & EXT2_FLAG_SWAP_BYTES_READ)))
-					ext2fs_swap_bitmap(fs, block_bitmap, block_nbytes);
-#endif
 			} else
-				memset(block_bitmap, 0xff, block_nbytes);
-			block_bitmap += block_nbytes;
+				memset(block_bitmap, 0, block_nbytes);
+			cnt = block_nbytes << 3;
+			retval = ext2fs_set_block_bitmap_range(fs->block_map,
+					       blk_itr, cnt, block_bitmap);
+			if (retval)
+				goto cleanup;
+			blk_itr += block_nbytes << 3;
 		}
 		if (inode_bitmap) {
 			blk = fs->group_desc[i].bg_inode_bitmap;
-			if (lazy_flag && fs->group_desc[i].bg_flags &
-			    EXT2_BG_INODE_UNINIT)
+			if (csum_flag && fs->group_desc[i].bg_flags &
+			    EXT2_BG_INODE_UNINIT &&
+			    ext2fs_group_desc_csum_verify(fs, i))
 				blk = 0;
 			if (blk) {
 				retval = io_channel_read_blk(fs->io, blk,
@@ -259,18 +269,23 @@
 					retval = EXT2_ET_INODE_BITMAP_READ;
 					goto cleanup;
 				}
-#ifdef EXT2_BIG_ENDIAN_BITMAPS
-				if (!((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
-				      (fs->flags & EXT2_FLAG_SWAP_BYTES_READ)))
-					ext2fs_swap_bitmap(fs, inode_bitmap, inode_nbytes);
-#endif
 			} else
-				memset(inode_bitmap, 0xff, inode_nbytes);
-			inode_bitmap += inode_nbytes;
+				memset(inode_bitmap, 0, inode_nbytes);
+			cnt = inode_nbytes << 3;
+			retval = ext2fs_set_inode_bitmap_range(fs->inode_map,
+					       ino_itr, cnt, inode_bitmap);
+			if (retval)
+				goto cleanup;
+			ino_itr += inode_nbytes << 3;
 		}
 	}
+success_cleanup:
+	if (inode_bitmap)
+		ext2fs_free_mem(&inode_bitmap);
+	if (block_bitmap)
+		ext2fs_free_mem(&block_bitmap);
 	return 0;
-	
+
 cleanup:
 	if (do_block) {
 		ext2fs_free_mem(&fs->block_map);
@@ -280,6 +295,10 @@
 		ext2fs_free_mem(&fs->inode_map);
 		fs->inode_map = 0;
 	}
+	if (inode_bitmap)
+		ext2fs_free_mem(&inode_bitmap);
+	if (block_bitmap)
+		ext2fs_free_mem(&block_bitmap);
 	if (buf)
 		ext2fs_free_mem(&buf);
 	return retval;
diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c
index 6576c59..9964919 100644
--- a/lib/ext2fs/swapfs.c
+++ b/lib/ext2fs/swapfs.c
@@ -1,6 +1,6 @@
 /*
  * swapfs.c --- swap ext2 filesystem data structures
- * 
+ *
  * Copyright (C) 1995, 1996, 2002 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -20,7 +20,7 @@
 #include "ext2fs.h"
 #include <ext2fs/ext2_ext_attr.h>
 
-#ifdef EXT2FS_ENABLE_SWAPFS
+#ifdef WORDS_BIGENDIAN
 void ext2fs_swap_super(struct ext2_super_block * sb)
 {
   	int i;
@@ -70,11 +70,22 @@
 	sb->s_min_extra_isize = ext2fs_swab16(sb->s_min_extra_isize);
 	sb->s_want_extra_isize = ext2fs_swab16(sb->s_want_extra_isize);
 	sb->s_flags = ext2fs_swab32(sb->s_flags);
+	sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written);
 	for (i=0; i < 4; i++)
 		sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
+
+	/* if journal backup is for a valid extent-based journal... */
+	if (!ext2fs_extent_header_verify(sb->s_jnl_blocks,
+					 sizeof(sb->s_jnl_blocks))) {
+		/* ... swap only the journal i_size */
+		sb->s_jnl_blocks[16] = ext2fs_swab32(sb->s_jnl_blocks[16]);
+		/* and the extent data is not swapped on read */
+		return;
+	}
+
+	/* direct/indirect journal: swap it all */
 	for (i=0; i < 17; i++)
 		sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]);
-
 }
 
 void ext2fs_swap_group_desc(struct ext2_group_desc *gdp)
@@ -90,6 +101,29 @@
 	gdp->bg_checksum = ext2fs_swab16(gdp->bg_checksum);
 }
 
+void ext2fs_swap_ext_attr_header(struct ext2_ext_attr_header *to_header,
+				 struct ext2_ext_attr_header *from_header)
+{
+	int n;
+
+	to_header->h_magic    = ext2fs_swab32(from_header->h_magic);
+	to_header->h_blocks   = ext2fs_swab32(from_header->h_blocks);
+	to_header->h_refcount = ext2fs_swab32(from_header->h_refcount);
+	to_header->h_hash     = ext2fs_swab32(from_header->h_hash);
+	for (n = 0; n < 4; n++)
+		to_header->h_reserved[n] =
+			ext2fs_swab32(from_header->h_reserved[n]);
+}
+
+void ext2fs_swap_ext_attr_entry(struct ext2_ext_attr_entry *to_entry,
+				struct ext2_ext_attr_entry *from_entry)
+{
+	to_entry->e_value_offs  = ext2fs_swab16(from_entry->e_value_offs);
+	to_entry->e_value_block = ext2fs_swab32(from_entry->e_value_block);
+	to_entry->e_value_size  = ext2fs_swab32(from_entry->e_value_size);
+	to_entry->e_hash	= ext2fs_swab32(from_entry->e_hash);
+}
+
 void ext2fs_swap_ext_attr(char *to, char *from, int bufsize, int has_header)
 {
 	struct ext2_ext_attr_header *from_header =
@@ -98,32 +132,22 @@
 		(struct ext2_ext_attr_header *)to;
 	struct ext2_ext_attr_entry *from_entry, *to_entry;
 	char *from_end = (char *)from_header + bufsize;
-	int n;
 
 	if (to_header != from_header)
 		memcpy(to_header, from_header, bufsize);
 
-	from_entry = (struct ext2_ext_attr_entry *)from_header;
-	to_entry   = (struct ext2_ext_attr_entry *)to_header;
-
 	if (has_header) {
-		to_header->h_magic    = ext2fs_swab32(from_header->h_magic);
-		to_header->h_blocks   = ext2fs_swab32(from_header->h_blocks);
-		to_header->h_refcount = ext2fs_swab32(from_header->h_refcount);
-		for (n=0; n<4; n++)
-			to_header->h_reserved[n] =
-				ext2fs_swab32(from_header->h_reserved[n]);
+		ext2fs_swap_ext_attr_header(to_header, from_header);
+
 		from_entry = (struct ext2_ext_attr_entry *)(from_header+1);
 		to_entry   = (struct ext2_ext_attr_entry *)(to_header+1);
+	} else {
+		from_entry = (struct ext2_ext_attr_entry *)from_header;
+		to_entry   = (struct ext2_ext_attr_entry *)to_header;
 	}
 
 	while ((char *)from_entry < from_end && *(__u32 *)from_entry) {
-		to_entry->e_value_offs  =	
-			ext2fs_swab16(from_entry->e_value_offs);
-		to_entry->e_value_block =	
-			ext2fs_swab32(from_entry->e_value_block);
-		to_entry->e_value_size  =	
-			ext2fs_swab32(from_entry->e_value_size);
+		ext2fs_swap_ext_attr_entry(to_entry, from_entry);
 		from_entry = EXT2_EXT_ATTR_NEXT(from_entry);
 		to_entry   = EXT2_EXT_ATTR_NEXT(to_entry);
 	}
@@ -133,7 +157,8 @@
 			    struct ext2_inode_large *f, int hostorder,
 			    int bufsize)
 {
-	unsigned i, has_data_blocks, extra_isize;
+	unsigned i, has_data_blocks, extra_isize, attr_magic;
+	int has_extents = 0;
 	int islnk = 0;
 	__u32 *eaf, *eat;
 
@@ -152,15 +177,20 @@
 	t->i_links_count = ext2fs_swab16(f->i_links_count);
 	t->i_file_acl = ext2fs_swab32(f->i_file_acl);
 	if (hostorder)
-		has_data_blocks = ext2fs_inode_data_blocks(fs, 
+		has_data_blocks = ext2fs_inode_data_blocks(fs,
 					   (struct ext2_inode *) f);
 	t->i_blocks = ext2fs_swab32(f->i_blocks);
 	if (!hostorder)
-		has_data_blocks = ext2fs_inode_data_blocks(fs, 
+		has_data_blocks = ext2fs_inode_data_blocks(fs,
 					   (struct ext2_inode *) t);
+	if (hostorder && (f->i_flags & EXT4_EXTENTS_FL))
+		has_extents = 1;
 	t->i_flags = ext2fs_swab32(f->i_flags);
+	if (!hostorder && (t->i_flags & EXT4_EXTENTS_FL))
+		has_extents = 1;
 	t->i_dir_acl = ext2fs_swab32(f->i_dir_acl);
-	if (!islnk || has_data_blocks ) {
+	/* extent data are swapped on access, not here */
+	if (!has_extents && (!islnk || has_data_blocks)) {
 		for (i = 0; i < EXT2_N_BLOCKS; i++)
 			t->i_block[i] = ext2fs_swab32(f->i_block[i]);
 	} else if (t != f) {
@@ -174,9 +204,10 @@
 	case EXT2_OS_LINUX:
 		t->osd1.linux1.l_i_version =
 			ext2fs_swab32(f->osd1.linux1.l_i_version);
-		t->osd2.linux2.l_i_blocks_hi = 
+		t->osd2.linux2.l_i_blocks_hi =
 			ext2fs_swab16(f->osd2.linux2.l_i_blocks_hi);
-		t->osd2.linux2.i_pad1 = ext2fs_swab16(f->osd2.linux2.i_pad1);
+		t->osd2.linux2.l_i_file_acl_high =
+			ext2fs_swab16(f->osd2.linux2.l_i_file_acl_high);
 		t->osd2.linux2.l_i_uid_high =
 		  ext2fs_swab16 (f->osd2.linux2.l_i_uid_high);
 		t->osd2.linux2.l_i_gid_high =
@@ -198,16 +229,7 @@
 		t->osd2.hurd2.h_i_author =
 		  ext2fs_swab32 (f->osd2.hurd2.h_i_author);
 		break;
-	case EXT2_OS_MASIX:
-		t->osd1.masix1.m_i_reserved1 =
-			ext2fs_swab32(f->osd1.masix1.m_i_reserved1);
-		t->osd2.masix2.m_i_frag = f->osd2.masix2.m_i_frag;
-		t->osd2.masix2.m_i_fsize = f->osd2.masix2.m_i_fsize;
-		t->osd2.masix2.m_pad1 = ext2fs_swab16(f->osd2.masix2.m_pad1);
-		t->osd2.masix2.m_i_reserved2[0] =
-			ext2fs_swab32(f->osd2.masix2.m_i_reserved2[0]);
-		t->osd2.masix2.m_i_reserved2[1] =
-			ext2fs_swab32(f->osd2.masix2.m_i_reserved2[1]);
+	default:
 		break;
 	}
 
@@ -232,7 +254,11 @@
 	eaf = (__u32 *) (((char *) f) + sizeof(struct ext2_inode) +
 					extra_isize);
 
-	if (ext2fs_swab32(*eaf) != EXT2_EXT_ATTR_MAGIC)
+	attr_magic = *eaf;
+	if (!hostorder)
+		attr_magic = ext2fs_swab32(attr_magic);
+
+	if (attr_magic != EXT2_EXT_ATTR_MAGIC)
 		return; /* it seems no magic here */
 
 	eat = (__u32 *) (((char *) t) + sizeof(struct ext2_inode) +
diff --git a/lib/ext2fs/tdb.c b/lib/ext2fs/tdb.c
index c868958..0c82a24 100644
--- a/lib/ext2fs/tdb.c
+++ b/lib/ext2fs/tdb.c
@@ -3,17 +3,17 @@
 Rev: 23590
 Last Changed Date: 2007-06-22 13:36:10 -0400 (Fri, 22 Jun 2007)
 */
- /* 
+ /*
    trivial database library - standalone version
 
    Copyright (C) Andrew Tridgell              1999-2005
    Copyright (C) Jeremy Allison               2000-2006
    Copyright (C) Paul `Rusty' Russell         2000
-   
+
      ** NOTE! The following LGPL license applies to the tdb
      ** library. This does NOT imply that all of Samba is released
      ** under the LGPL
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
@@ -36,7 +36,7 @@
 #define HAVE_UTIME_H
 #define HAVE_UTIME
 #endif
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 600
 
 #include <unistd.h>
 #include <stdio.h>
@@ -327,11 +327,11 @@
    this functions locks/unlocks 1 byte at the specified offset.
 
    On error, errno is also set so that errors are passed back properly
-   through tdb_open(). 
+   through tdb_open().
 
    note that a len of zero means lock to end of file
 */
-int tdb_brlock(struct tdb_context *tdb, tdb_off_t offset, 
+int tdb_brlock(struct tdb_context *tdb, tdb_off_t offset,
 	       int rw_type, int lck_type, int probe, size_t len)
 {
 	struct flock fl;
@@ -363,7 +363,7 @@
 		if (!probe && lck_type != F_SETLK) {
 			/* Ensure error code is set for log fun to examine. */
 			tdb->ecode = TDB_ERR_LOCK;
-			TDB_LOG((tdb, TDB_DEBUG_TRACE,"tdb_brlock failed (fd=%d) at offset %d rw_type=%d lck_type=%d len=%d\n", 
+			TDB_LOG((tdb, TDB_DEBUG_TRACE,"tdb_brlock failed (fd=%d) at offset %d rw_type=%d lck_type=%d len=%d\n",
 				 tdb->fd, offset, rw_type, lck_type, (int)len));
 		}
 		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
@@ -376,7 +376,7 @@
   upgrade a read lock to a write lock. This needs to be handled in a
   special way as some OSes (such as solaris) have too conservative
   deadlock detection and claim a deadlock when progress can be
-  made. For those OSes we may loop for a while.  
+  made. For those OSes we may loop for a while.
 */
 int tdb_brlock_upgrade(struct tdb_context *tdb, tdb_off_t offset, size_t len)
 {
@@ -409,7 +409,7 @@
 	ltype &= ~TDB_MARK_LOCK;
 
 	/* a global lock allows us to avoid per chain locks */
-	if (tdb->global_lock.count && 
+	if (tdb->global_lock.count &&
 	    (ltype == tdb->global_lock.ltype || ltype == F_RDLCK)) {
 		return 0;
 	}
@@ -419,7 +419,7 @@
 	}
 
 	if (list < -1 || list >= (int)tdb->header.hash_size) {
-		TDB_LOG((tdb, TDB_DEBUG_ERROR,"tdb_lock: invalid list %d for ltype=%d\n", 
+		TDB_LOG((tdb, TDB_DEBUG_ERROR,"tdb_lock: invalid list %d for ltype=%d\n",
 			   list, ltype));
 		return -1;
 	}
@@ -504,7 +504,7 @@
 	ltype &= ~TDB_MARK_LOCK;
 
 	/* a global lock allows us to avoid per chain locks */
-	if (tdb->global_lock.count && 
+	if (tdb->global_lock.count &&
 	    (ltype == tdb->global_lock.ltype || ltype == F_RDLCK)) {
 		return 0;
 	}
@@ -574,7 +574,7 @@
 	}
 
 	if (ret)
-		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlock: An error occurred unlocking!\n")); 
+		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlock: An error occurred unlocking!\n"));
 	return ret;
 }
 
@@ -586,7 +586,7 @@
 	if (tdb->have_transaction_lock || tdb->global_lock.count) {
 		return 0;
 	}
-	if (tdb->methods->tdb_brlock(tdb, TRANSACTION_LOCK, ltype, 
+	if (tdb->methods->tdb_brlock(tdb, TRANSACTION_LOCK, ltype,
 				     F_SETLKW, 0, 1) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_transaction_lock: failed to get transaction lock\n"));
 		tdb->ecode = TDB_ERR_LOCK;
@@ -635,7 +635,7 @@
 		/* a global lock of a different type exists */
 		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
 	}
-	
+
 	if (tdb->num_locks != 0) {
 		/* can't combine global and chain locks */
 		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
@@ -680,7 +680,7 @@
 	}
 
 	if (!mark_lock &&
-	    tdb->methods->tdb_brlock(tdb, FREELIST_TOP, F_UNLCK, F_SETLKW, 
+	    tdb->methods->tdb_brlock(tdb, FREELIST_TOP, F_UNLCK, F_SETLKW,
 				     0, 4*tdb->header.hash_size)) {
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlockall failed (%s)\n", strerror(errno)));
 		return -1;
@@ -831,7 +831,7 @@
 
 /* check for an out of bounds access - if it is out of bounds then
    see if the database has been expanded by someone else and expand
-   if necessary 
+   if necessary
    note that "len" is the minimum length needed for the db
 */
 static int tdb_oob(struct tdb_context *tdb, tdb_off_t len, int probe)
@@ -872,7 +872,7 @@
 }
 
 /* write a lump of data at a specified offset */
-static int tdb_write(struct tdb_context *tdb, tdb_off_t off, 
+static int tdb_write(struct tdb_context *tdb, tdb_off_t off,
 		     const void *buf, tdb_len_t len)
 {
 	if (len == 0) {
@@ -910,7 +910,7 @@
 
 
 /* read a lump of data at a specified offset, maybe convert */
-static int tdb_read(struct tdb_context *tdb, tdb_off_t off, void *buf, 
+static int tdb_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 		    tdb_len_t len, int cv)
 {
 	if (tdb->methods->tdb_oob(tdb, off + len, 0) != 0) {
@@ -942,7 +942,7 @@
 /*
   do an unlocked scan of the hash table heads to find the next non-zero head. The value
   will then be confirmed with the lock held
-*/		
+*/
 static void tdb_next_hash_chain(struct tdb_context *tdb, u32 *chain)
 {
 	u32 h = *chain;
@@ -987,8 +987,8 @@
 
 #ifdef HAVE_MMAP
 	if (!(tdb->flags & TDB_NOMMAP)) {
-		tdb->map_ptr = mmap(NULL, tdb->map_size, 
-				    PROT_READ|(tdb->read_only? 0:PROT_WRITE), 
+		tdb->map_ptr = mmap(NULL, tdb->map_size,
+				    PROT_READ|(tdb->read_only? 0:PROT_WRITE),
 				    MAP_SHARED|MAP_FILE, tdb->fd, 0);
 
 		/*
@@ -997,7 +997,7 @@
 
 		if (tdb->map_ptr == MAP_FAILED) {
 			tdb->map_ptr = NULL;
-			TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_mmap failed for size %d (%s)\n", 
+			TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_mmap failed for size %d (%s)\n",
 				 tdb->map_size, strerror(errno)));
 		}
 	} else {
@@ -1022,7 +1022,7 @@
 	if (ftruncate(tdb->fd, size+addition) == -1) {
 		char b = 0;
 		if (pwrite(tdb->fd,  &b, 1, (size+addition) - 1) != 1) {
-			TDB_LOG((tdb, TDB_DEBUG_FATAL, "expand_file to %d failed (%s)\n", 
+			TDB_LOG((tdb, TDB_DEBUG_FATAL, "expand_file to %d failed (%s)\n",
 				 size+addition, strerror(errno)));
 			return -1;
 		}
@@ -1036,7 +1036,7 @@
 		int n = addition>sizeof(buf)?sizeof(buf):addition;
 		int ret = pwrite(tdb->fd, buf, n, size);
 		if (ret != n) {
-			TDB_LOG((tdb, TDB_DEBUG_FATAL, "expand_file write of %d failed (%s)\n", 
+			TDB_LOG((tdb, TDB_DEBUG_FATAL, "expand_file write of %d failed (%s)\n",
 				   n, strerror(errno)));
 			return -1;
 		}
@@ -1262,7 +1262,7 @@
   - allow for nested calls to tdb_transaction_start(), re-using the
     existing transaction record. If the inner transaction is cancelled
     then a subsequent commit will fail
- 
+
   - keep a mirrored copy of the tdb hash chain heads to allow for the
     fast hash heads scan on traverse, updating the mirrored copy in
     the transaction version of tdb_write
@@ -1334,7 +1334,7 @@
   read while in a transaction. We need to check first if the data is in our list
   of transaction elements, then if not do a real read
 */
-static int transaction_read(struct tdb_context *tdb, tdb_off_t off, void *buf, 
+static int transaction_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 			    tdb_len_t len, int cv)
 {
 	struct tdb_transaction_el *el;
@@ -1373,7 +1373,7 @@
 		len -= partial;
 		off += partial;
 		buf = (void *)(partial + (char *)buf);
-		
+
 		if (len != 0 && transaction_read(tdb, off, buf, len, cv) != 0) {
 			goto fail;
 		}
@@ -1395,7 +1395,7 @@
 /*
   write while in a transaction
 */
-static int transaction_write(struct tdb_context *tdb, tdb_off_t off, 
+static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 			     const void *buf, tdb_len_t len)
 {
 	struct tdb_transaction_el *el, *best_el=NULL;
@@ -1403,7 +1403,7 @@
 	if (len == 0) {
 		return 0;
 	}
-	
+
 	/* if the write is to a hash head, then update the transaction
 	   hash heads */
 	if (len == sizeof(tdb_off_t) && off >= FREELIST_TOP &&
@@ -1447,7 +1447,7 @@
 		len -= partial;
 		off += partial;
 		buf = (const void *)(partial + (const char *)buf);
-		
+
 		if (len != 0 && transaction_write(tdb, off, buf, len) != 0) {
 			goto fail;
 		}
@@ -1456,7 +1456,7 @@
 	}
 
 	/* see if we can append the new entry to an existing entry */
-	if (best_el && best_el->offset + best_el->length == off && 
+	if (best_el && best_el->offset + best_el->length == off &&
 	    (off+len < tdb->transaction->old_map_size ||
 	     off > tdb->transaction->old_map_size)) {
 		unsigned char *data = best_el->data;
@@ -1482,7 +1482,7 @@
 	el = (struct tdb_transaction_el *)malloc(sizeof(*el));
 	if (el == NULL) {
 		tdb->ecode = TDB_ERR_OOM;
-		tdb->transaction->transaction_error = 1;		
+		tdb->transaction->transaction_error = 1;
 		return -1;
 	}
 	el->next = NULL;
@@ -1493,7 +1493,7 @@
 	if (el->data == NULL) {
 		free(el);
 		tdb->ecode = TDB_ERR_OOM;
-		tdb->transaction->transaction_error = 1;		
+		tdb->transaction->transaction_error = 1;
 		return -1;
 	}
 	if (buf) {
@@ -1545,7 +1545,7 @@
 /*
   transaction version of tdb_expand().
 */
-static int transaction_expand_file(struct tdb_context *tdb, tdb_off_t size, 
+static int transaction_expand_file(struct tdb_context *tdb, tdb_off_t size,
 				   tdb_off_t addition)
 {
 	/* add a write to the transaction elements, so subsequent
@@ -1560,7 +1560,7 @@
 /*
   brlock during a transaction - ignore them
 */
-static int transaction_brlock(struct tdb_context *tdb, tdb_off_t offset, 
+static int transaction_brlock(struct tdb_context *tdb, tdb_off_t offset,
 			      int rw_type, int lck_type, int probe, size_t len)
 {
 	return 0;
@@ -1592,7 +1592,7 @@
 	/* cope with nested tdb_transaction_start() calls */
 	if (tdb->transaction != NULL) {
 		tdb->transaction->nesting++;
-		TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_transaction_start: nesting %d\n", 
+		TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_transaction_start: nesting %d\n",
 			 tdb->transaction->nesting));
 		return 0;
 	}
@@ -1629,7 +1629,7 @@
 		SAFE_FREE(tdb->transaction);
 		return -1;
 	}
-	
+
 	/* get a read lock from the freelist to the end of file. This
 	   is upgraded to a write lock during the commit */
 	if (tdb_brlock(tdb, FREELIST_TOP, F_RDLCK, F_SETLKW, 0, 0) == -1) {
@@ -1665,7 +1665,7 @@
 
 	/* by calling this transaction write here, we ensure that we don't grow the
 	   transaction linked list due to hash table updates */
-	if (transaction_write(tdb, FREELIST_TOP, tdb->transaction->hash_heads, 
+	if (transaction_write(tdb, FREELIST_TOP, tdb->transaction->hash_heads,
 			      TDB_HASHTABLE_SIZE(tdb)) != 0) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_start: failed to prime hash table\n"));
 		tdb->ecode = TDB_ERR_IO;
@@ -1674,7 +1674,7 @@
 	}
 
 	return 0;
-	
+
 fail:
 	tdb_brlock(tdb, FREELIST_TOP, F_UNLCK, F_SETLKW, 0, 0);
 	tdb_transaction_unlock(tdb);
@@ -1688,7 +1688,7 @@
   cancel the current transaction
 */
 int tdb_transaction_cancel(struct tdb_context *tdb)
-{	
+{
 	if (tdb->transaction == NULL) {
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_transaction_cancel: no transaction\n"));
 		return -1;
@@ -1698,7 +1698,7 @@
 		tdb->transaction->transaction_error = 1;
 		tdb->transaction->nesting--;
 		return 0;
-	}		
+	}
 
 	tdb->map_size = tdb->transaction->old_map_size;
 
@@ -1735,7 +1735,7 @@
 	tdb_transaction_unlock(tdb);
 	SAFE_FREE(tdb->transaction->hash_heads);
 	SAFE_FREE(tdb->transaction);
-	
+
 	return 0;
 }
 
@@ -1743,7 +1743,7 @@
   sync to disk
 */
 static int transaction_sync(struct tdb_context *tdb, tdb_off_t offset, tdb_len_t length)
-{	
+{
 	if (fsync(tdb->fd) != 0) {
 		tdb->ecode = TDB_ERR_IO;
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction: fsync failed\n"));
@@ -1752,7 +1752,7 @@
 #ifdef MS_SYNC
 	if (tdb->map_ptr) {
 		tdb_off_t moffset = offset & ~(tdb->page_size-1);
-		if (msync(moffset + (char *)tdb->map_ptr, 
+		if (msync(moffset + (char *)tdb->map_ptr,
 			  length + (offset - moffset), MS_SYNC) != 0) {
 			tdb->ecode = TDB_ERR_IO;
 			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction: msync failed - %s\n",
@@ -1788,7 +1788,7 @@
   allocate the recovery area, or use an existing recovery area if it is
   large enough
 */
-static int tdb_recovery_allocate(struct tdb_context *tdb, 
+static int tdb_recovery_allocate(struct tdb_context *tdb,
 				 tdb_len_t *recovery_size,
 				 tdb_off_t *recovery_offset,
 				 tdb_len_t *recovery_max_size)
@@ -1804,7 +1804,7 @@
 
 	rec.rec_len = 0;
 
-	if (recovery_head != 0 && 
+	if (recovery_head != 0 &&
 	    methods->tdb_read(tdb, recovery_head, &rec, sizeof(rec), DOCONV()) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_recovery_allocate: failed to read recovery record\n"));
 		return -1;
@@ -1839,7 +1839,7 @@
 	*recovery_offset = tdb->map_size;
 	recovery_head = *recovery_offset;
 
-	if (methods->tdb_expand_file(tdb, tdb->transaction->old_map_size, 
+	if (methods->tdb_expand_file(tdb, tdb->transaction->old_map_size,
 				     (tdb->map_size - tdb->transaction->old_map_size) +
 				     sizeof(rec) + *recovery_max_size) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_recovery_allocate: failed to create recovery area\n"));
@@ -1856,7 +1856,7 @@
 	/* write the recovery header offset and sync - we can sync without a race here
 	   as the magic ptr in the recovery record has not been set */
 	CONVERT(recovery_head);
-	if (methods->tdb_write(tdb, TDB_RECOVERY_HEAD, 
+	if (methods->tdb_write(tdb, TDB_RECOVERY_HEAD,
 			       &recovery_head, sizeof(tdb_off_t)) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_recovery_allocate: failed to write recovery head\n"));
 		return -1;
@@ -1869,7 +1869,7 @@
 /*
   setup the recovery data that will be used on a crash during commit
 */
-static int transaction_setup_recovery(struct tdb_context *tdb, 
+static int transaction_setup_recovery(struct tdb_context *tdb,
 				      tdb_off_t *magic_offset)
 {
 	struct tdb_transaction_el *el;
@@ -1884,7 +1884,7 @@
 	/*
 	  check that the recovery area has enough space
 	*/
-	if (tdb_recovery_allocate(tdb, &recovery_size, 
+	if (tdb_recovery_allocate(tdb, &recovery_size,
 				  &recovery_offset, &recovery_max_size) == -1) {
 		return -1;
 	}
@@ -1979,7 +1979,7 @@
   commit the current transaction
 */
 int tdb_transaction_commit(struct tdb_context *tdb)
-{	
+{
 	const struct tdb_methods *methods;
 	tdb_off_t magic_offset = 0;
 	u32 zero = 0;
@@ -1999,7 +1999,7 @@
 	if (tdb->transaction->nesting != 0) {
 		tdb->transaction->nesting--;
 		return 0;
-	}		
+	}
 
 	/* check for a null transaction */
 	if (tdb->transaction->elements == NULL) {
@@ -2008,7 +2008,7 @@
 	}
 
 	methods = tdb->transaction->io_methods;
-	
+
 	/* if there are any locks pending then the caller has not
 	   nested their locks properly, so fail the transaction */
 	if (tdb->num_locks || tdb->global_lock.count) {
@@ -2047,8 +2047,8 @@
 
 	/* expand the file to the new size if needed */
 	if (tdb->map_size != tdb->transaction->old_map_size) {
-		if (methods->tdb_expand_file(tdb, tdb->transaction->old_map_size, 
-					     tdb->map_size - 
+		if (methods->tdb_expand_file(tdb, tdb->transaction->old_map_size,
+					     tdb->map_size -
 					     tdb->transaction->old_map_size) == -1) {
 			tdb->ecode = TDB_ERR_IO;
 			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_commit: expansion failed\n"));
@@ -2066,12 +2066,12 @@
 
 		if (methods->tdb_write(tdb, el->offset, el->data, el->length) == -1) {
 			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_commit: write failed during commit\n"));
-			
+
 			/* we've overwritten part of the data and
 			   possibly expanded the file, so we need to
 			   run the crash recovery code */
 			tdb->methods = methods;
-			tdb_transaction_recover(tdb); 
+			tdb_transaction_recover(tdb);
 
 			tdb_transaction_cancel(tdb);
 			tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1);
@@ -2080,9 +2080,9 @@
 			return -1;
 		}
 		tdb->transaction->elements = el->next;
-		free(el->data); 
+		free(el->data);
 		free(el);
-	} 
+	}
 
 	if (!(tdb->flags & TDB_NOSYNC)) {
 		/* ensure the new data is on disk */
@@ -2151,9 +2151,9 @@
 	}
 
 	/* read the recovery record */
-	if (tdb->methods->tdb_read(tdb, recovery_head, &rec, 
+	if (tdb->methods->tdb_read(tdb, recovery_head, &rec,
 				   sizeof(rec), DOCONV()) == -1) {
-		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to read recovery record\n"));		
+		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to read recovery record\n"));
 		tdb->ecode = TDB_ERR_IO;
 		return -1;
 	}
@@ -2173,7 +2173,7 @@
 
 	data = (unsigned char *)malloc(rec.data_len);
 	if (data == NULL) {
-		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to allocate recovery data\n"));		
+		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to allocate recovery data\n"));
 		tdb->ecode = TDB_ERR_OOM;
 		return -1;
 	}
@@ -2181,7 +2181,7 @@
 	/* read the full recovery data */
 	if (tdb->methods->tdb_read(tdb, recovery_head + sizeof(rec), data,
 				   rec.data_len, 0) == -1) {
-		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to read recovery data\n"));		
+		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to read recovery data\n"));
 		tdb->ecode = TDB_ERR_IO;
 		return -1;
 	}
@@ -2218,24 +2218,24 @@
 		if (tdb_ofs_write(tdb, TDB_RECOVERY_HEAD, &zero) == -1) {
 			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to remove recovery head\n"));
 			tdb->ecode = TDB_ERR_IO;
-			return -1;			
+			return -1;
 		}
 	}
 
 	/* remove the recovery magic */
-	if (tdb_ofs_write(tdb, recovery_head + offsetof(struct list_struct, magic), 
+	if (tdb_ofs_write(tdb, recovery_head + offsetof(struct list_struct, magic),
 			  &zero) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to remove recovery magic\n"));
 		tdb->ecode = TDB_ERR_IO;
-		return -1;			
+		return -1;
 	}
-	
+
 	/* reduce the file size to the old size */
 	tdb_munmap(tdb);
 	if (ftruncate(tdb->fd, recovery_eof) != 0) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction_recover: failed to reduce to recovery size\n"));
 		tdb->ecode = TDB_ERR_IO;
-		return -1;			
+		return -1;
 	}
 	tdb->map_size = recovery_eof;
 	tdb_mmap(tdb);
@@ -2246,7 +2246,7 @@
 		return -1;
 	}
 
-	TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_transaction_recover: recovered %d byte database\n", 
+	TDB_LOG((tdb, TDB_DEBUG_TRACE, "tdb_transaction_recover: recovered %d byte database\n",
 		 recovery_eof));
 
 	/* all done */
@@ -2264,7 +2264,7 @@
 	if (rec->magic == TDB_MAGIC) {
 		/* this happens when a app is showdown while deleting a record - we should
 		   not completely fail when this happens */
-		TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_rec_free_read non-free magic 0x%x at offset=%d - fixing\n", 
+		TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_rec_free_read non-free magic 0x%x at offset=%d - fixing\n",
 			 rec->magic, off));
 		rec->magic = TDB_FREE_MAGIC;
 		if (tdb->methods->tdb_write(tdb, off, rec, sizeof(*rec)) == -1)
@@ -2274,7 +2274,7 @@
 	if (rec->magic != TDB_FREE_MAGIC) {
 		/* Ensure ecode is set for log fn. */
 		tdb->ecode = TDB_ERR_CORRUPT;
-		TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_rec_free_read bad magic 0x%x at offset=%d\n", 
+		TDB_LOG((tdb, TDB_DEBUG_WARNING, "tdb_rec_free_read bad magic 0x%x at offset=%d\n",
 			   rec->magic, off));
 		return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
 	}
@@ -2359,7 +2359,7 @@
 	if (left > TDB_DATA_START(tdb->header.hash_size)) {
 		struct list_struct l;
 		tdb_off_t leftsize;
-		
+
 		/* Read in tailer and jump back to header */
 		if (tdb_ofs_read(tdb, left, &leftsize) == -1) {
 			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_free: left offset read failed at %u\n", left));
@@ -2417,7 +2417,7 @@
 }
 
 
-/* 
+/*
    the core of tdb_allocate - called when we have decided which
    free list entry to use
  */
@@ -2433,22 +2433,22 @@
 	if (rec->rec_len > length + MIN_REC_SIZE) {
 		/* Length of left piece */
 		length = TDB_ALIGN(length, TDB_ALIGNMENT);
-		
+
 		/* Right piece to go on free list */
 		newrec.rec_len = rec->rec_len - (sizeof(*rec) + length);
 		newrec_ptr = rec_ptr + sizeof(*rec) + length;
-		
+
 		/* And left record is shortened */
 		rec->rec_len = length;
 	} else {
 		newrec_ptr = 0;
 	}
-	
+
 	/* Remove allocated record from the free list */
 	if (tdb_ofs_write(tdb, last_ptr, &rec->next) == -1) {
 		return 0;
 	}
-	
+
 	/* Update header: do this before we drop alloc
 	   lock, otherwise tdb_free() might try to
 	   merge with us, thinking we're free.
@@ -2457,7 +2457,7 @@
 	if (tdb_rec_write(tdb, rec_ptr, rec) == -1) {
 		return 0;
 	}
-	
+
 	/* Did we create new block? */
 	if (newrec_ptr) {
 		/* Update allocated record tailer (we
@@ -2465,13 +2465,13 @@
 		if (update_tailer(tdb, rec_ptr, rec) == -1) {
 			return 0;
 		}
-		
+
 		/* Free new record */
 		if (tdb_free(tdb, newrec_ptr, &newrec) == -1) {
 			return 0;
 		}
 	}
-	
+
 	/* all done - return the new record offset */
 	return rec_ptr;
 }
@@ -2507,7 +2507,7 @@
 	bestfit.last_ptr = 0;
 	bestfit.rec_len = 0;
 
-	/* 
+	/*
 	   this is a best fit allocation strategy. Originally we used
 	   a first fit strategy, but it suffered from massive fragmentation
 	   issues when faced with a slowly increasing record size.
@@ -2655,7 +2655,7 @@
 			   common for the use of tdb with ldb, where large
 			   hashes are used. In that case we spend most of our
 			   time in tdb_brlock(), locking empty hash chains.
-			   
+
 			   To avoid this, we do an unlocked pre-check to see
 			   if the hash chain is empty before starting to look
 			   inside it. If it is empty then we can avoid that
@@ -2663,7 +2663,7 @@
 			   the value we get back, as we read it without a
 			   lock, so instead we get the lock and re-fetch the
 			   value below.
-			   
+
 			   Notice that not doing this optimisation on the
 			   first hash chain is critical. We must guarantee
 			   that we have done at least one fcntl lock at the
@@ -2673,7 +2673,7 @@
 			   could possibly miss those with this trick, but we
 			   could miss them anyway without this trick, so the
 			   semantics don't change.
-			   
+
 			   With a non-indexed ldb search this trick gains us a
 			   factor of around 80 in speed on a linux 2.6.x
 			   system (testing using ldbtest).
@@ -2727,7 +2727,7 @@
 			/* Try to clean dead ones from old traverses */
 			current = tlock->off;
 			tlock->off = rec->next;
-			if (!(tdb->read_only || tdb->traverse_read) && 
+			if (!(tdb->read_only || tdb->traverse_read) &&
 			    tdb_do_delete(tdb, current, rec) != 0)
 				goto fail;
 		}
@@ -2749,7 +2749,7 @@
    if fn is NULL then it is not called
    a non-zero return value from fn() indicates that the traversal should stop
   */
-static int tdb_traverse_internal(struct tdb_context *tdb, 
+static int tdb_traverse_internal(struct tdb_context *tdb,
 				 tdb_traverse_func fn, void *private_data,
 				 struct tdb_traverse_lock *tl)
 {
@@ -2769,7 +2769,7 @@
 	while ((ret = tdb_next_lock(tdb, tl, &rec)) > 0) {
 		count++;
 		/* now read the full record */
-		key.dptr = tdb_alloc_read(tdb, tl->off + sizeof(rec), 
+		key.dptr = tdb_alloc_read(tdb, tl->off + sizeof(rec),
 					  rec.key_len + rec.data_len);
 		if (!key.dptr) {
 			ret = -1;
@@ -2813,7 +2813,7 @@
 /*
   a write style traverse - temporarily marks the db read only
 */
-int tdb_traverse_read(struct tdb_context *tdb, 
+int tdb_traverse_read(struct tdb_context *tdb,
 		      tdb_traverse_func fn, void *private_data)
 {
 	struct tdb_traverse_lock tl = { NULL, 0, 0, F_RDLCK };
@@ -2838,7 +2838,7 @@
   a write style traverse - needs to get the transaction lock to
   prevent deadlocks
 */
-int tdb_traverse(struct tdb_context *tdb, 
+int tdb_traverse(struct tdb_context *tdb,
 		 tdb_traverse_func fn, void *private_data)
 {
 	struct tdb_traverse_lock tl = { NULL, 0, 0, F_WRLCK };
@@ -2847,7 +2847,7 @@
 	if (tdb->read_only || tdb->traverse_read) {
 		return tdb_traverse_read(tdb, fn, private_data);
 	}
-	
+
 	if (tdb_transaction_lock(tdb, F_WRLCK)) {
 		return -1;
 	}
@@ -2953,7 +2953,7 @@
 	struct list_struct rec;
 	tdb_off_t tailer_ofs, tailer;
 
-	if (tdb->methods->tdb_read(tdb, offset, (char *)&rec, 
+	if (tdb->methods->tdb_read(tdb, offset, (char *)&rec,
 				   sizeof(rec), DOCONV()) == -1) {
 		printf("ERROR: failed to read record at %u\n", offset);
 		return 0;
@@ -3030,7 +3030,7 @@
 
 	printf("freelist top=[0x%08x]\n", rec_ptr );
 	while (rec_ptr) {
-		if (tdb->methods->tdb_read(tdb, rec_ptr, (char *)&rec, 
+		if (tdb->methods->tdb_read(tdb, rec_ptr, (char *)&rec,
 					   sizeof(rec), DOCONV()) == -1) {
 			tdb_unlock(tdb, -1, F_WRLCK);
 			return -1;
@@ -3042,14 +3042,14 @@
 			return -1;
 		}
 
-		printf("entry offset=[0x%08x], rec.rec_len = [0x%08x (%d)] (end = 0x%08x)\n", 
+		printf("entry offset=[0x%08x], rec.rec_len = [0x%08x (%d)] (end = 0x%08x)\n",
 		       rec_ptr, rec.rec_len, rec.rec_len, rec_ptr + rec.rec_len);
 		total_free += rec.rec_len;
 
 		/* move to the next record */
 		rec_ptr = rec.next;
 	}
-	printf("total rec_len = [0x%08x (%d)]\n", (int)total_free, 
+	printf("total rec_len = [0x%08x (%d)]\n", (int)total_free,
                (int)total_free);
 
 	return tdb_unlock(tdb, -1, F_WRLCK);
@@ -3066,7 +3066,7 @@
 void tdb_increment_seqnum_nonblock(struct tdb_context *tdb)
 {
 	tdb_off_t seqnum=0;
-	
+
 	if (!(tdb->flags & TDB_SEQNUM)) {
 		return;
 	}
@@ -3109,7 +3109,7 @@
 			struct list_struct *r)
 {
 	tdb_off_t rec_ptr;
-	
+
 	/* read in the hash top */
 	if (tdb_ofs_read(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1)
 		return 0;
@@ -3173,7 +3173,7 @@
 		rec.data_len = dbuf.dsize;
 		return tdb_rec_write(tdb, rec_ptr, &rec);
 	}
- 
+
 	return 0;
 }
 
@@ -3243,7 +3243,7 @@
 	return ret;
 }
 
-/* check if an entry in the database exists 
+/* check if an entry in the database exists
 
    note that 1 is returned if the key is found and 0 is returned if not found
    this doesn't match the conventions in the rest of this module, but is
@@ -3252,7 +3252,7 @@
 static int tdb_exists_hash(struct tdb_context *tdb, TDB_DATA key, u32 hash)
 {
 	struct list_struct rec;
-	
+
 	if (tdb_find_lock_hash(tdb, key, hash, F_RDLCK, &rec) == 0)
 		return 0;
 	tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK);
@@ -3305,7 +3305,7 @@
 	int res = 0;
 	tdb_off_t rec_ptr;
 	struct list_struct rec;
-	
+
 	/* read in the hash top */
 	if (tdb_ofs_read(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1)
 		return 0;
@@ -3334,7 +3334,7 @@
 	if (tdb_lock(tdb, -1, F_WRLCK) == -1) {
 		return -1;
 	}
-	
+
 	/* read in the hash top */
 	if (tdb_ofs_read(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1)
 		goto fail;
@@ -3426,7 +3426,7 @@
 			       struct list_struct *r, tdb_len_t length)
 {
 	tdb_off_t rec_ptr;
-	
+
 	/* read in the hash top */
 	if (tdb_ofs_read(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1)
 		return 0;
@@ -3449,7 +3449,7 @@
 }
 
 /* store an element in the database, replacing any existing element
-   with the same key 
+   with the same key
 
    return 0 on success, -1 on failure
 */
@@ -3585,7 +3585,7 @@
 		tdb_increment_seqnum(tdb);
 	}
 
-	SAFE_FREE(p); 
+	SAFE_FREE(p);
 	tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
 	return ret;
 }
@@ -3625,7 +3625,7 @@
 	dbuf.dsize += new_dbuf.dsize;
 
 	ret = tdb_store(tdb, key, dbuf, 0);
-	
+
 failed:
 	tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
 	SAFE_FREE(dbuf.dptr);
@@ -3720,7 +3720,7 @@
 	for (value = 0x238F13AF * key->dsize, i=0; i < key->dsize; i++)
 		value = (value + (key->dptr[i] << (i*5 % 24)));
 
-	return (1103515243 * value + 12345);  
+	return (1103515243 * value + 12345);
 }
 
 
@@ -3774,7 +3774,7 @@
 			    ino_t ino)
 {
 	struct tdb_context *i;
-	
+
 	for (i = tdbs; i; i = i->next) {
 		if (i->device == device && i->inode == ino) {
 			return 1;
@@ -3784,13 +3784,13 @@
 	return 0;
 }
 
-/* open the database, creating it if necessary 
+/* open the database, creating it if necessary
 
    The open_flags and mode are passed straight to the open call on the
    database file. A flags value of O_WRONLY is invalid. The hash size
    is advisory, use zero for a default value.
 
-   Return is NULL on error, in which case errno is also set.  Don't 
+   Return is NULL on error, in which case errno is also set.  Don't
    try to call tdb_error or tdb_errname, just do strerror(errno).
 
    @param name may be NULL for internal databases. */
@@ -3849,7 +3849,7 @@
 		errno = EINVAL;
 		goto fail;
 	}
-	
+
 	if (hash_size == 0)
 		hash_size = DEFAULT_HASH_SIZE;
 	if ((open_flags & O_ACCMODE) == O_RDONLY) {
@@ -3983,7 +3983,7 @@
 
 	if (!tdb)
 		return NULL;
-	
+
 	if (tdb->map_ptr) {
 		if (tdb->flags & TDB_INTERNAL)
 			SAFE_FREE(tdb->map_ptr);
@@ -4091,7 +4091,7 @@
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_reopen: open failed (%s)\n", strerror(errno)));
 		goto fail;
 	}
-	if ((tdb->flags & TDB_CLEAR_IF_FIRST) && 
+	if ((tdb->flags & TDB_CLEAR_IF_FIRST) &&
 	    (tdb->methods->tdb_brlock(tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW, 0, 1) == -1)) {
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_reopen: failed to obtain active lock\n"));
 		goto fail;
diff --git a/lib/ext2fs/tdb.h b/lib/ext2fs/tdb.h
index 447d6a1..bfcd943 100644
--- a/lib/ext2fs/tdb.h
+++ b/lib/ext2fs/tdb.h
@@ -1,17 +1,17 @@
 #ifndef __TDB_H__
 #define __TDB_H__
 
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    trivial database library
 
    Copyright (C) Andrew Tridgell 1999-2004
-   
+
      ** NOTE! The following LGPL license applies to the tdb
      ** library. This does NOT imply that all of Samba is released
      ** under the LGPL
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
@@ -51,12 +51,12 @@
 #define TDB_ERRCODE(code, ret) ((tdb->ecode = (code)), ret)
 
 /* error codes */
-enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK, 
+enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK,
 		TDB_ERR_OOM, TDB_ERR_EXISTS, TDB_ERR_NOLOCK, TDB_ERR_LOCK_TIMEOUT,
 		TDB_ERR_NOEXIST, TDB_ERR_EINVAL, TDB_ERR_RDONLY};
 
 /* debugging uses one of the following levels */
-enum tdb_debug_level {TDB_DEBUG_FATAL = 0, TDB_DEBUG_ERROR, 
+enum tdb_debug_level {TDB_DEBUG_FATAL = 0, TDB_DEBUG_ERROR,
 		      TDB_DEBUG_WARNING, TDB_DEBUG_TRACE};
 
 typedef struct TDB_DATA {
diff --git a/lib/ext2fs/tdbtool.c b/lib/ext2fs/tdbtool.c
index 0366cda..130fc58 100644
--- a/lib/ext2fs/tdbtool.c
+++ b/lib/ext2fs/tdbtool.c
@@ -1,4 +1,4 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    Samba database functions
    Copyright (C) Andrew Tridgell              1999-2000
@@ -10,12 +10,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
@@ -130,7 +130,7 @@
 		printf("%02X ",(int)buf[i]);
 		i++;
 		if (i%8 == 0) printf(" ");
-		if (i%16 == 0) {      
+		if (i%16 == 0) {
 			print_asc(&buf[i-16],8); printf(" ");
 			print_asc(&buf[i-8],8); printf("\n");
 			if (i<len) printf("[%03X] ",i);
@@ -138,18 +138,18 @@
 	}
 	if (i%16) {
 		int n;
-		
+
 		n = 16 - (i%16);
 		printf(" ");
 		if (n>8) printf(" ");
 		while (n--) printf("   ");
-		
+
 		n = i%16;
 		if (n > 8) n = 8;
 		print_asc(&buf[i-(i%16)],n); printf(" ");
 		n = (i%16) - n;
-		if (n>0) print_asc(&buf[i-n],n); 
-		printf("\n");    
+		if (n>0) print_asc(&buf[i-n],n);
+		printf("\n");
 	}
 }
 
@@ -171,7 +171,7 @@
 "  delete    key        : delete a record by key\n"
 "  list                 : print the database hash table and freelist\n"
 "  free                 : print the database freelist\n"
-"  ! command            : execute system command\n"             
+"  ! command            : execute system command\n"
 "  1 | first            : print the first record\n"
 "  n | next             : print the next record\n"
 "  q | quit             : terminate\n"
@@ -266,11 +266,11 @@
 	    terror("fetch failed");
 	    return;
 	}
-	
+
 	print_rec(tdb, key, dbuf, NULL);
-	
+
 	free( dbuf.dptr );
-	
+
 	return;
 }
 
@@ -314,23 +314,23 @@
 		terror("fetch failed");
 		return;
 	}
-	
+
 	print_rec(tdb, key, dbuf, NULL);
-	
+
 	dst_tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
 	if ( !dst_tdb ) {
 		terror("unable to open destination tdb");
 		return;
 	}
-	
+
 	if ( tdb_store( dst_tdb, key, dbuf, TDB_REPLACE ) == -1 ) {
 		terror("failed to move record");
 	}
 	else
 		printf("record moved\n");
-	
+
 	tdb_close( dst_tdb );
-	
+
 	return;
 }
 
@@ -399,7 +399,7 @@
 {
 	TDB_DATA dbuf;
 	*pkey = tdb_firstkey(the_tdb);
-	
+
 	dbuf = tdb_fetch(the_tdb, *pkey);
 	if (!dbuf.dptr) terror("fetch failed");
 	else {
@@ -411,9 +411,9 @@
 {
 	TDB_DATA dbuf;
 	*pkey = tdb_nextkey(the_tdb, *pkey);
-	
+
 	dbuf = tdb_fetch(the_tdb, *pkey);
-	if (!dbuf.dptr) 
+	if (!dbuf.dptr)
 		terror("fetch failed");
 	else
 		print_rec(the_tdb, *pkey, dbuf, NULL);
@@ -536,7 +536,7 @@
     size_t length = 0;
     char *outp, *inp;
     char temp[3];
-    
+
 
     outp = inp = instring;
 
diff --git a/lib/ext2fs/test_io.c b/lib/ext2fs/test_io.c
index 03d63ce..39b39bf 100644
--- a/lib/ext2fs/test_io.c
+++ b/lib/ext2fs/test_io.c
@@ -40,7 +40,7 @@
 
 #define EXT2_CHECK_MAGIC(struct, code) \
 	  if ((struct)->magic != (code)) return (code)
-  
+
 struct test_private_data {
 	int	magic;
 	io_channel real;
@@ -52,6 +52,8 @@
 	void (*write_blk)(unsigned long block, int count, errcode_t err);
 	void (*set_blksize)(int blksize, errcode_t err);
 	void (*write_byte)(unsigned long block, int count, errcode_t err);
+	void (*read_blk64)(unsigned long long block, int count, errcode_t err);
+	void (*write_blk64)(unsigned long long block, int count, errcode_t err);
 };
 
 static errcode_t test_open(const char *name, int flags, io_channel *channel);
@@ -61,11 +63,17 @@
 			       int count, void *data);
 static errcode_t test_write_blk(io_channel channel, unsigned long block,
 				int count, const void *data);
+static errcode_t test_read_blk64(io_channel channel, unsigned long long block,
+			       int count, void *data);
+static errcode_t test_write_blk64(io_channel channel, unsigned long long block,
+				int count, const void *data);
 static errcode_t test_flush(io_channel channel);
 static errcode_t test_write_byte(io_channel channel, unsigned long offset,
 				 int count, const void *buf);
-static errcode_t test_set_option(io_channel channel, const char *option, 
+static errcode_t test_set_option(io_channel channel, const char *option,
 				 const char *arg);
+static errcode_t test_get_stats(io_channel channel, io_stats *stats);
+
 
 static struct struct_io_manager struct_test_manager = {
 	EXT2_ET_MAGIC_IO_MANAGER,
@@ -77,7 +85,10 @@
 	test_write_blk,
 	test_flush,
 	test_write_byte,
-	test_set_option
+	test_set_option,
+	test_get_stats,
+	test_read_blk64,
+	test_write_blk64,
 };
 
 io_manager test_io_manager = &struct_test_manager;
@@ -91,6 +102,10 @@
 	(unsigned long block, int count, errcode_t err) = 0;
 void (*test_io_cb_write_blk)
 	(unsigned long block, int count, errcode_t err) = 0;
+void (*test_io_cb_read_blk64)
+	(unsigned long long block, int count, errcode_t err) = 0;
+void (*test_io_cb_write_blk64)
+	(unsigned long long block, int count, errcode_t err) = 0;
 void (*test_io_cb_set_blksize)
 	(int blksize, errcode_t err) = 0;
 void (*test_io_cb_write_byte)
@@ -205,6 +220,8 @@
 	data->write_blk = 	test_io_cb_write_blk;
 	data->set_blksize = 	test_io_cb_set_blksize;
 	data->write_byte = 	test_io_cb_write_byte;
+	data->read_blk64 = 	test_io_cb_read_blk64;
+	data->write_blk64 = 	test_io_cb_write_blk64;
 
 	data->outfile = NULL;
 	if ((value = safe_getenv("TEST_IO_LOGFILE")) != NULL)
@@ -215,7 +232,7 @@
 	data->flags = 0;
 	if ((value = safe_getenv("TEST_IO_FLAGS")) != NULL)
 		data->flags = strtoul(value, NULL, 0);
-	
+
 	data->block = 0;
 	if ((value = safe_getenv("TEST_IO_BLOCK")) != NULL)
 		data->block = strtoul(value, NULL, 0);
@@ -227,7 +244,7 @@
 	data->write_abort_count = 0;
 	if ((value = safe_getenv("TEST_IO_WRITE_ABORT")) != NULL)
 		data->write_abort_count = strtoul(value, NULL, 0);
-	
+
 	*channel = io;
 	return 0;
 
@@ -250,13 +267,13 @@
 
 	if (--channel->refcount > 0)
 		return 0;
-	
+
 	if (data->real)
 		retval = io_channel_close(data->real);
 
 	if (data->outfile && data->outfile != stderr)
 		fclose(data->outfile);
-	
+
 	ext2fs_free_mem(&channel->private_data);
 	if (channel->name)
 		ext2fs_free_mem(&channel->name);
@@ -309,7 +326,7 @@
 			test_dump_block(channel, data, block, buf);
 		if (--data->read_abort_count == 0)
 			test_abort(channel, block);
-	} 
+	}
 	return retval;
 }
 
@@ -340,6 +357,60 @@
 	return retval;
 }
 
+static errcode_t test_read_blk64(io_channel channel, unsigned long long block,
+			       int count, void *buf)
+{
+	struct test_private_data *data;
+	errcode_t	retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct test_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_TEST_IO_CHANNEL);
+
+	if (data->real)
+		retval = io_channel_read_blk64(data->real, block, count, buf);
+	if (data->read_blk64)
+		data->read_blk64(block, count, retval);
+	if (data->flags & TEST_FLAG_READ)
+		fprintf(data->outfile,
+			"Test_io: read_blk64(%llu, %d) returned %s\n",
+			block, count, retval ? error_message(retval) : "OK");
+	if (data->block && data->block == block) {
+		if (data->flags & TEST_FLAG_DUMP)
+			test_dump_block(channel, data, block, buf);
+		if (--data->read_abort_count == 0)
+			test_abort(channel, block);
+	}
+	return retval;
+}
+
+static errcode_t test_write_blk64(io_channel channel, unsigned long long block,
+			       int count, const void *buf)
+{
+	struct test_private_data *data;
+	errcode_t	retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct test_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_TEST_IO_CHANNEL);
+
+	if (data->real)
+		retval = io_channel_write_blk64(data->real, block, count, buf);
+	if (data->write_blk64)
+		data->write_blk64(block, count, retval);
+	if (data->flags & TEST_FLAG_WRITE)
+		fprintf(data->outfile,
+			"Test_io: write_blk64(%llu, %d) returned %s\n",
+			block, count, retval ? error_message(retval) : "OK");
+	if (data->block && data->block == block) {
+		if (data->flags & TEST_FLAG_DUMP)
+			test_dump_block(channel, data, block, buf);
+		if (--data->write_abort_count == 0)
+			test_abort(channel, block);
+	}
+	return retval;
+}
+
 static errcode_t test_write_byte(io_channel channel, unsigned long offset,
 			       int count, const void *buf)
 {
@@ -368,22 +439,22 @@
 {
 	struct test_private_data *data;
 	errcode_t	retval = 0;
-	
+
 	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
 	data = (struct test_private_data *) channel->private_data;
 	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_TEST_IO_CHANNEL);
 
 	if (data->real)
 		retval = io_channel_flush(data->real);
-	
+
 	if (data->flags & TEST_FLAG_FLUSH)
 		fprintf(data->outfile, "Test_io: flush() returned %s\n",
 			retval ? error_message(retval) : "OK");
-	
+
 	return retval;
 }
 
-static errcode_t test_set_option(io_channel channel, const char *option, 
+static errcode_t test_set_option(io_channel channel, const char *option,
 				 const char *arg)
 {
 	struct test_private_data *data;
@@ -395,10 +466,10 @@
 
 
 	if (data->flags & TEST_FLAG_SET_OPTION)
-		fprintf(data->outfile, "Test_io: set_option(%s, %s) ", 
+		fprintf(data->outfile, "Test_io: set_option(%s, %s) ",
 			option, arg);
 	if (data->real && data->real->manager->set_option) {
-		retval = (data->real->manager->set_option)(data->real, 
+		retval = (data->real->manager->set_option)(data->real,
 							   option, arg);
 		if (data->flags & TEST_FLAG_SET_OPTION)
 			fprintf(data->outfile, "returned %s\n",
@@ -409,3 +480,18 @@
 	}
 	return retval;
 }
+
+static errcode_t test_get_stats(io_channel channel, io_stats *stats)
+{
+	struct test_private_data *data;
+	errcode_t	retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct test_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_TEST_IO_CHANNEL);
+
+	if (data->real && data->real->manager->get_stats) {
+		retval = (data->real->manager->get_stats)(data->real, stats);
+	}
+	return retval;
+}
diff --git a/lib/ext2fs/tst_badblocks.c b/lib/ext2fs/tst_badblocks.c
index 2453f47..c4744b3 100644
--- a/lib/ext2fs/tst_badblocks.c
+++ b/lib/ext2fs/tst_badblocks.c
@@ -2,7 +2,7 @@
  * This testing program makes sure the badblocks implementation works.
  *
  * Copyright (C) 1996 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -42,7 +42,7 @@
 	11, 0,
 	12, 1,
 	13, 1,
-	14, 0, 
+	14, 0,
 	80, 0,
 	45, 0,
 	66, 1,
@@ -60,7 +60,7 @@
 	1, DEL_BLK,
 	0
 	};
-		
+
 
 static int test_fail = 0;
 static int test_expected_fail = 0;
@@ -70,7 +70,7 @@
 	errcode_t	retval;
 	badblocks_list	bb;
 	int		i;
-	
+
 	retval = ext2fs_badblocks_list_create(&bb, 5);
 	if (retval) {
 		com_err("create_test_list", retval, "while creating list");
@@ -95,7 +95,7 @@
 	badblocks_iterate	iter;
 	blk_t			blk;
 	int			i, ok;
-	
+
 	retval = ext2fs_badblocks_list_iterate_begin(bb, &iter);
 	if (retval) {
 		com_err("print_list", retval, "while setting up iterator");
@@ -156,7 +156,7 @@
 			ext2fs_badblocks_list_del(bb, vec[i]);
 			match = ext2fs_badblocks_list_test(bb, vec[i]);
 			printf("Removing block %u --- now %s\n", vec[i],
-			       ext2fs_badblocks_list_test(bb, vec[i]) ? 
+			       ext2fs_badblocks_list_test(bb, vec[i]) ?
 			       "present" : "absent");
 			if (match) {
 				printf("FAILURE!\n");
@@ -254,7 +254,7 @@
 		printf("Expected test failure didn't happen!\n");
 		test_fail++;
 	}
-		
+
 
 	if (ext2fs_badblocks_equal(bb, new_bb)) {
 		printf("Block bitmap matched after reading and writing.\n");
@@ -271,6 +271,8 @@
 	int	equal;
 	errcode_t	retval;
 
+	add_error_table(&et_ext2_error_table);
+
 	bb1 = bb2 = bb3 = bb4 = bb5 = 0;
 
 	printf("test1: ");
@@ -278,7 +280,7 @@
 	if (retval == 0)
 		print_list(bb1, 1);
 	printf("\n");
-	
+
 	printf("test2: ");
 	retval = create_test_list(test2, &bb2);
 	if (retval == 0)
@@ -290,7 +292,7 @@
 	if (retval == 0)
 		print_list(bb3, 1);
 	printf("\n");
-	
+
 	printf("test4: ");
 	retval = create_test_list(test4, &bb4);
 	if (retval == 0) {
@@ -315,31 +317,31 @@
 	if (bb1 && bb2 && bb3 && bb4 && bb5) {
 		printf("Comparison tests:\n");
 		equal = ext2fs_badblocks_equal(bb1, bb2);
-		printf("bb1 and bb2 are %sequal.\n", equal ? "" : "NOT "); 
+		printf("bb1 and bb2 are %sequal.\n", equal ? "" : "NOT ");
 		if (equal)
 			test_fail++;
 
 		equal = ext2fs_badblocks_equal(bb1, bb3);
-		printf("bb1 and bb3 are %sequal.\n", equal ? "" : "NOT "); 
+		printf("bb1 and bb3 are %sequal.\n", equal ? "" : "NOT ");
 		if (!equal)
 			test_fail++;
-		
+
 		equal = ext2fs_badblocks_equal(bb1, bb4);
-		printf("bb1 and bb4 are %sequal.\n", equal ? "" : "NOT "); 
+		printf("bb1 and bb4 are %sequal.\n", equal ? "" : "NOT ");
 		if (equal)
 			test_fail++;
 
 		equal = ext2fs_badblocks_equal(bb4, bb5);
-		printf("bb4 and bb5 are %sequal.\n", equal ? "" : "NOT "); 
+		printf("bb4 and bb5 are %sequal.\n", equal ? "" : "NOT ");
 		if (!equal)
 			test_fail++;
 		printf("\n");
 	}
-	
+
 	file_test(bb4);
 
 	file_test_invalid(bb4);
-	
+
 	if (test_fail == 0)
 		printf("ext2fs library badblocks tests checks out OK!\n");
 
diff --git a/lib/ext2fs/tst_bitops.c b/lib/ext2fs/tst_bitops.c
index eede295..6febe68 100644
--- a/lib/ext2fs/tst_bitops.c
+++ b/lib/ext2fs/tst_bitops.c
@@ -2,7 +2,7 @@
  * This testing program makes sure the bitops functions work
  *
  * Copyright (C) 2001 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -97,7 +97,7 @@
 		}
 	}
 	printf("ext2fs_clear_bit test succeed.\n");
-		
+
 
 	/* Do bigarray test */
 	bigarray = malloc(1 << 29);
@@ -150,7 +150,7 @@
 		}
 	}
 	printf("ext2fs_clear_bit test succeed.\n");
-		
+
 
         bigarray[BIG_TEST_BIT >> 3] = 0;
 
diff --git a/lib/ext2fs/tst_byteswap.c b/lib/ext2fs/tst_byteswap.c
index d73fb41..ba79c7c 100644
--- a/lib/ext2fs/tst_byteswap.c
+++ b/lib/ext2fs/tst_byteswap.c
@@ -2,7 +2,7 @@
  * This testing program makes sure the byteswap functions work
  *
  * Copyright (C) 2000 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -66,7 +66,7 @@
 		}
 		i += 2;
 	} while (test1[i] != 0);
-	
+
 	printf("Testing ext2fs_swab32\n");
 	i = 0;
 	do {
@@ -87,6 +87,6 @@
 
 	if (!errors)
 		printf("No errors found in the byteswap implementation!\n");
-	
+
 	return errors;
 }
diff --git a/lib/ext2fs/tst_getsectsize.c b/lib/ext2fs/tst_getsectsize.c
index 9967b61..cb1b8c6 100644
--- a/lib/ext2fs/tst_getsectsize.c
+++ b/lib/ext2fs/tst_getsectsize.c
@@ -1,8 +1,8 @@
 /*
  * tst_getsize.c --- this function tests the getsize function
- * 
+ *
  * Copyright (C) 1997 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -29,7 +29,7 @@
 {
 	int	sectsize;
 	int	retval;
-	
+
 	if (argc < 2) {
 		fprintf(stderr, "Usage: %s device\n", argv[0]);
 		exit(1);
diff --git a/lib/ext2fs/tst_getsize.c b/lib/ext2fs/tst_getsize.c
index 17f900c..b196cbc 100644
--- a/lib/ext2fs/tst_getsize.c
+++ b/lib/ext2fs/tst_getsize.c
@@ -1,8 +1,8 @@
 /*
  * tst_getsize.c --- this function tests the getsize function
- * 
+ *
  * Copyright (C) 1997 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -34,6 +34,7 @@
 		fprintf(stderr, "%s device\n", argv[0]);
 		exit(1);
 	}
+	add_error_table(&et_ext2_error_table);
 	retval = ext2fs_get_device_size(argv[1], 1024, &blocks);
 	if (retval) {
 		com_err(argv[0], retval, "while getting device size");
diff --git a/lib/ext2fs/tst_iscan.c b/lib/ext2fs/tst_iscan.c
index d7fdc12..b0c7fc3 100644
--- a/lib/ext2fs/tst_iscan.c
+++ b/lib/ext2fs/tst_iscan.c
@@ -1,8 +1,8 @@
 /*
  * tst_inode.c --- this function tests the inode scan function
- * 
+ *
  * Copyright (C) 1996 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -75,7 +75,7 @@
 
 
 	test_io_cb_read_blk = test_read_blk;
-	
+
 	retval = ext2fs_initialize("test fs", 0, &param,
 				   test_io_manager, &test_fs);
 	if (retval) {
@@ -110,7 +110,7 @@
 			"While allocating bad inode bitmap");
 		exit(1);
 	}
-	
+
 	retval = ext2fs_badblocks_list_create(&test_badblocks, 5);
 	if (retval) {
 		com_err("setup", retval, "while creating badblocks list");
diff --git a/lib/ext2fs/tst_super_size.c b/lib/ext2fs/tst_super_size.c
index 476b1a6..47fa5ba 100644
--- a/lib/ext2fs/tst_super_size.c
+++ b/lib/ext2fs/tst_super_size.c
@@ -2,7 +2,7 @@
  * This testing program makes sure superblock size is 1024 bytes long
  *
  * Copyright (C) 2007 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -25,4 +25,4 @@
 	}
 	exit(0);
 }
-		
+
diff --git a/lib/ext2fs/tst_types.c b/lib/ext2fs/tst_types.c
index 78de7bc..fbe35dc 100644
--- a/lib/ext2fs/tst_types.c
+++ b/lib/ext2fs/tst_types.c
@@ -2,7 +2,7 @@
  * This testing program makes sure the ext2_types header file
  *
  * Copyright (C) 2006 by Theodore Ts'o.
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
diff --git a/lib/ext2fs/undo_io.c b/lib/ext2fs/undo_io.c
new file mode 100644
index 0000000..827c038
--- /dev/null
+++ b/lib/ext2fs/undo_io.c
@@ -0,0 +1,586 @@
+/*
+ * undo_io.c --- This is the undo io manager that copies the old data that
+ * copies the old data being overwritten into a tdb database
+ *
+ * Copyright IBM Corporation, 2007
+ * Author Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <fcntl.h>
+#include <time.h>
+#ifdef __linux__
+#include <sys/utsname.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+#include "tdb.h"
+
+#include "ext2_fs.h"
+#include "ext2fs.h"
+
+#ifdef __GNUC__
+#define ATTR(x) __attribute__(x)
+#else
+#define ATTR(x)
+#endif
+
+/*
+ * For checking structure magic numbers...
+ */
+
+#define EXT2_CHECK_MAGIC(struct, code) \
+	  if ((struct)->magic != (code)) return (code)
+
+struct undo_private_data {
+	int	magic;
+	TDB_CONTEXT *tdb;
+	char *tdb_file;
+
+	/* The backing io channel */
+	io_channel real;
+
+	int tdb_data_size;
+	int tdb_written;
+
+	/* to support offset in unix I/O manager */
+	ext2_loff_t offset;
+};
+
+static errcode_t undo_open(const char *name, int flags, io_channel *channel);
+static errcode_t undo_close(io_channel channel);
+static errcode_t undo_set_blksize(io_channel channel, int blksize);
+static errcode_t undo_read_blk(io_channel channel, unsigned long block,
+			       int count, void *data);
+static errcode_t undo_write_blk(io_channel channel, unsigned long block,
+				int count, const void *data);
+static errcode_t undo_flush(io_channel channel);
+static errcode_t undo_write_byte(io_channel channel, unsigned long offset,
+				int size, const void *data);
+static errcode_t undo_set_option(io_channel channel, const char *option,
+				 const char *arg);
+
+static struct struct_io_manager struct_undo_manager = {
+	EXT2_ET_MAGIC_IO_MANAGER,
+	"Undo I/O Manager",
+	undo_open,
+	undo_close,
+	undo_set_blksize,
+	undo_read_blk,
+	undo_write_blk,
+	undo_flush,
+	undo_write_byte,
+	undo_set_option
+};
+
+io_manager undo_io_manager = &struct_undo_manager;
+static io_manager undo_io_backing_manager ;
+static char *tdb_file;
+static int actual_size;
+
+static unsigned char mtime_key[] = "filesystem MTIME";
+static unsigned char blksize_key[] = "filesystem BLKSIZE";
+static unsigned char uuid_key[] = "filesystem UUID";
+
+errcode_t set_undo_io_backing_manager(io_manager manager)
+{
+	/*
+	 * We may want to do some validation later
+	 */
+	undo_io_backing_manager = manager;
+	return 0;
+}
+
+errcode_t set_undo_io_backup_file(char *file_name)
+{
+	tdb_file = strdup(file_name);
+
+	if (tdb_file == NULL) {
+		return EXT2_ET_NO_MEMORY;
+	}
+
+	return 0;
+}
+
+static errcode_t write_file_system_identity(io_channel undo_channel,
+							TDB_CONTEXT *tdb)
+{
+	errcode_t retval;
+	struct ext2_super_block super;
+	TDB_DATA tdb_key, tdb_data;
+	struct undo_private_data *data;
+	io_channel channel;
+	int block_size ;
+
+	data = (struct undo_private_data *) undo_channel->private_data;
+	channel = data->real;
+	block_size = channel->block_size;
+
+	io_channel_set_blksize(channel, SUPERBLOCK_OFFSET);
+	retval = io_channel_read_blk(channel, 1, -SUPERBLOCK_SIZE, &super);
+	if (retval)
+		goto err_out;
+
+	/* Write to tdb file in the file system byte order */
+	tdb_key.dptr = mtime_key;
+	tdb_key.dsize = sizeof(mtime_key);
+	tdb_data.dptr = (unsigned char *) &(super.s_mtime);
+	tdb_data.dsize = sizeof(super.s_mtime);
+
+	retval = tdb_store(tdb, tdb_key, tdb_data, TDB_INSERT);
+	if (retval == -1) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+		goto err_out;
+	}
+
+	tdb_key.dptr = uuid_key;
+	tdb_key.dsize = sizeof(uuid_key);
+	tdb_data.dptr = (unsigned char *)&(super.s_uuid);
+	tdb_data.dsize = sizeof(super.s_uuid);
+
+	retval = tdb_store(tdb, tdb_key, tdb_data, TDB_INSERT);
+	if (retval == -1) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+	}
+
+err_out:
+	io_channel_set_blksize(channel, block_size);
+	return retval;
+}
+
+static errcode_t write_block_size(TDB_CONTEXT *tdb, int block_size)
+{
+	errcode_t retval;
+	TDB_DATA tdb_key, tdb_data;
+
+	tdb_key.dptr = blksize_key;
+	tdb_key.dsize = sizeof(blksize_key);
+	tdb_data.dptr = (unsigned char *)&(block_size);
+	tdb_data.dsize = sizeof(block_size);
+
+	retval = tdb_store(tdb, tdb_key, tdb_data, TDB_INSERT);
+	if (retval == -1) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+	}
+
+	return retval;
+}
+
+static errcode_t undo_write_tdb(io_channel channel,
+				unsigned long block, int count)
+
+{
+	int size, sz;
+	unsigned long block_num, backing_blk_num;
+	errcode_t retval = 0;
+	ext2_loff_t offset;
+	struct undo_private_data *data;
+	TDB_DATA tdb_key, tdb_data;
+	unsigned char *read_ptr;
+	unsigned long end_block;
+
+	data = (struct undo_private_data *) channel->private_data;
+
+	if (data->tdb == NULL) {
+		/*
+		 * Transaction database not initialized
+		 */
+		return 0;
+	}
+
+	if (count == 1)
+		size = channel->block_size;
+	else {
+		if (count < 0)
+			size = -count;
+		else
+			size = count * channel->block_size;
+	}
+	/*
+	 * Data is stored in tdb database as blocks of tdb_data_size size
+	 * This helps in efficient lookup further.
+	 *
+	 * We divide the disk to blocks of tdb_data_size.
+	 */
+	offset = (block * channel->block_size) + data->offset ;
+	block_num = offset / data->tdb_data_size;
+	end_block = (offset + size) / data->tdb_data_size;
+
+	tdb_transaction_start(data->tdb);
+	while (block_num <= end_block ) {
+
+		tdb_key.dptr = (unsigned char *)&block_num;
+		tdb_key.dsize = sizeof(block_num);
+		/*
+		 * Check if we have the record already
+		 */
+		if (tdb_exists(data->tdb, tdb_key)) {
+			/* Try the next block */
+			block_num++;
+			continue;
+		}
+		/*
+		 * Read one block using the backing I/O manager
+		 * The backing I/O manager block size may be
+		 * different from the tdb_data_size.
+		 * Also we need to recalcuate the block number with respect
+		 * to the backing I/O manager.
+		 */
+		offset = block_num * data->tdb_data_size;
+		backing_blk_num = (offset - data->offset) / channel->block_size;
+
+		count = data->tdb_data_size +
+				((offset - data->offset) % channel->block_size);
+		retval = ext2fs_get_mem(count, &read_ptr);
+		if (retval) {
+			tdb_transaction_cancel(data->tdb);
+			return retval;
+		}
+
+		memset(read_ptr, 0, count);
+		actual_size = 0;
+		if ((count % channel->block_size) == 0)
+			sz = count / channel->block_size;
+		else
+			sz = -count;
+		retval = io_channel_read_blk(data->real, backing_blk_num,
+					     sz, read_ptr);
+		if (retval) {
+			if (retval != EXT2_ET_SHORT_READ) {
+				free(read_ptr);
+				tdb_transaction_cancel(data->tdb);
+				return retval;
+			}
+			/*
+			 * short read so update the record size
+			 * accordingly
+			 */
+			tdb_data.dsize = actual_size;
+		} else {
+			tdb_data.dsize = data->tdb_data_size;
+		}
+		tdb_data.dptr = read_ptr +
+				((offset - data->offset) % channel->block_size);
+#ifdef DEBUG
+		printf("Printing with key %ld data %x and size %d\n",
+		       block_num,
+		       tdb_data.dptr,
+		       tdb_data.dsize);
+#endif
+		if (!data->tdb_written) {
+			data->tdb_written = 1;
+			/* Write the blocksize to tdb file */
+			retval = write_block_size(data->tdb,
+						  data->tdb_data_size);
+			if (retval) {
+				tdb_transaction_cancel(data->tdb);
+				retval = EXT2_ET_TDB_ERR_IO;
+				free(read_ptr);
+				return retval;
+			}
+		}
+		retval = tdb_store(data->tdb, tdb_key, tdb_data, TDB_INSERT);
+		if (retval == -1) {
+			/*
+			 * TDB_ERR_EXISTS cannot happen because we
+			 * have already verified it doesn't exist
+			 */
+			tdb_transaction_cancel(data->tdb);
+			retval = EXT2_ET_TDB_ERR_IO;
+			free(read_ptr);
+			return retval;
+		}
+		free(read_ptr);
+		/* Next block */
+		block_num++;
+	}
+	tdb_transaction_commit(data->tdb);
+
+	return retval;
+}
+
+static errcode_t undo_io_read_error(io_channel channel ATTR((unused)),
+				    unsigned long block ATTR((unused)),
+				    int count ATTR((unused)),
+				    void *data ATTR((unused)),
+				    size_t size ATTR((unused)),
+				    int actual,
+				    errcode_t error ATTR((unused)))
+{
+	actual_size = actual;
+	return error;
+}
+
+static void undo_err_handler_init(io_channel channel)
+{
+	channel->read_error = undo_io_read_error;
+}
+
+static errcode_t undo_open(const char *name, int flags, io_channel *channel)
+{
+	io_channel	io = NULL;
+	struct undo_private_data *data = NULL;
+	errcode_t	retval;
+
+	if (name == 0)
+		return EXT2_ET_BAD_DEVICE_NAME;
+	retval = ext2fs_get_mem(sizeof(struct struct_io_channel), &io);
+	if (retval)
+		return retval;
+	memset(io, 0, sizeof(struct struct_io_channel));
+	io->magic = EXT2_ET_MAGIC_IO_CHANNEL;
+	retval = ext2fs_get_mem(sizeof(struct undo_private_data), &data);
+	if (retval)
+		goto cleanup;
+
+	io->manager = undo_io_manager;
+	retval = ext2fs_get_mem(strlen(name)+1, &io->name);
+	if (retval)
+		goto cleanup;
+
+	strcpy(io->name, name);
+	io->private_data = data;
+	io->block_size = 1024;
+	io->read_error = 0;
+	io->write_error = 0;
+	io->refcount = 1;
+
+	memset(data, 0, sizeof(struct undo_private_data));
+	data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
+
+	if (undo_io_backing_manager) {
+		retval = undo_io_backing_manager->open(name, flags,
+						       &data->real);
+		if (retval)
+			goto cleanup;
+	} else {
+		data->real = 0;
+	}
+
+	/* setup the tdb file */
+	data->tdb = tdb_open(tdb_file, 0, TDB_CLEAR_IF_FIRST,
+			     O_RDWR | O_CREAT | O_TRUNC | O_EXCL, 0600);
+	if (!data->tdb) {
+		retval = errno;
+		goto cleanup;
+	}
+
+	/*
+	 * setup err handler for read so that we know
+	 * when the backing manager fails do short read
+	 */
+	undo_err_handler_init(data->real);
+
+	*channel = io;
+	return 0;
+
+cleanup:
+	if (data->real)
+		io_channel_close(data->real);
+	if (data)
+		ext2fs_free_mem(&data);
+	if (io)
+		ext2fs_free_mem(&io);
+	return retval;
+}
+
+static errcode_t undo_close(io_channel channel)
+{
+	struct undo_private_data *data;
+	errcode_t	retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (--channel->refcount > 0)
+		return 0;
+	/* Before closing write the file system identity */
+	retval = write_file_system_identity(channel, data->tdb);
+	if (retval)
+		return retval;
+	if (data->real)
+		retval = io_channel_close(data->real);
+	if (data->tdb)
+		tdb_close(data->tdb);
+	ext2fs_free_mem(&channel->private_data);
+	if (channel->name)
+		ext2fs_free_mem(&channel->name);
+	ext2fs_free_mem(&channel);
+
+	return retval;
+}
+
+static errcode_t undo_set_blksize(io_channel channel, int blksize)
+{
+	struct undo_private_data *data;
+	errcode_t		retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (data->real)
+		retval = io_channel_set_blksize(data->real, blksize);
+	/*
+	 * Set the block size used for tdb
+	 */
+	if (!data->tdb_data_size) {
+		data->tdb_data_size = blksize;
+	}
+	channel->block_size = blksize;
+	return retval;
+}
+
+static errcode_t undo_read_blk(io_channel channel, unsigned long block,
+			       int count, void *buf)
+{
+	errcode_t	retval = 0;
+	struct undo_private_data *data;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (data->real)
+		retval = io_channel_read_blk(data->real, block, count, buf);
+
+	return retval;
+}
+
+static errcode_t undo_write_blk(io_channel channel, unsigned long block,
+				int count, const void *buf)
+{
+	struct undo_private_data *data;
+	errcode_t	retval = 0;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+	/*
+	 * First write the existing content into database
+	 */
+	retval = undo_write_tdb(channel, block, count);
+	if (retval)
+		 return retval;
+	if (data->real)
+		retval = io_channel_write_blk(data->real, block, count, buf);
+
+	return retval;
+}
+
+static errcode_t undo_write_byte(io_channel channel, unsigned long offset,
+				 int size, const void *buf)
+{
+	struct undo_private_data *data;
+	errcode_t	retval = 0;
+	ext2_loff_t	location;
+	unsigned long blk_num, count;;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	location = offset + data->offset;
+	blk_num = location/channel->block_size;
+	/*
+	 * the size specified may spread across multiple blocks
+	 * also make sure we account for the fact that block start
+	 * offset for tdb is different from the backing I/O manager
+	 * due to possible different block size
+	 */
+	count = (size + (location % channel->block_size) +
+			channel->block_size  -1)/channel->block_size;
+	retval = undo_write_tdb(channel, blk_num, count);
+	if (retval)
+		return retval;
+	if (data->real && data->real->manager->write_byte)
+		retval = io_channel_write_byte(data->real, offset, size, buf);
+
+	return retval;
+}
+
+/*
+ * Flush data buffers to disk.
+ */
+static errcode_t undo_flush(io_channel channel)
+{
+	errcode_t	retval = 0;
+	struct undo_private_data *data;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (data->real)
+		retval = io_channel_flush(data->real);
+
+	return retval;
+}
+
+static errcode_t undo_set_option(io_channel channel, const char *option,
+				 const char *arg)
+{
+	errcode_t	retval = 0;
+	struct undo_private_data *data;
+	unsigned long tmp;
+	char *end;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct undo_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (!strcmp(option, "tdb_data_size")) {
+		if (!arg)
+			return EXT2_ET_INVALID_ARGUMENT;
+
+		tmp = strtoul(arg, &end, 0);
+		if (*end)
+			return EXT2_ET_INVALID_ARGUMENT;
+		if (!data->tdb_data_size || !data->tdb_written) {
+			data->tdb_data_size = tmp;
+		}
+		return 0;
+	}
+	/*
+	 * Need to support offset option to work with
+	 * Unix I/O manager
+	 */
+	if (data->real && data->real->manager->set_option) {
+		retval = data->real->manager->set_option(data->real,
+							option, arg);
+	}
+	if (!retval && !strcmp(option, "offset")) {
+		if (!arg)
+			return EXT2_ET_INVALID_ARGUMENT;
+
+		tmp = strtoul(arg, &end, 0);
+		if (*end)
+			return EXT2_ET_INVALID_ARGUMENT;
+		data->offset = tmp;
+	}
+	return retval;
+}
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 4ede000..797fce8 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -4,7 +4,7 @@
  *
  * Implements a one-block write-through cache.
  *
- * Includes support for Windows NT support under Cygwin. 
+ * Includes support for Windows NT support under Cygwin.
  *
  * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
  * 	2002 by Theodore Ts'o.
@@ -31,6 +31,12 @@
 #ifdef __linux__
 #include <sys/utsname.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -41,6 +47,10 @@
 #include <sys/resource.h>
 #endif
 
+#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
+#define BLKROGET   _IO(0x12, 94) /* Get read-only status (0 = read_write).  */
+#endif
+
 #include "ext2_fs.h"
 #include "ext2fs.h"
 
@@ -70,6 +80,7 @@
 	int	access_time;
 	ext2_loff_t offset;
 	struct unix_cache cache[CACHE_SIZE];
+	struct struct_io_stats io_stats;
 };
 
 static errcode_t unix_open(const char *name, int flags, io_channel *channel);
@@ -82,11 +93,16 @@
 static errcode_t unix_flush(io_channel channel);
 static errcode_t unix_write_byte(io_channel channel, unsigned long offset,
 				int size, const void *data);
-static errcode_t unix_set_option(io_channel channel, const char *option, 
+static errcode_t unix_set_option(io_channel channel, const char *option,
 				 const char *arg);
-
+static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
+;
 static void reuse_cache(io_channel channel, struct unix_private_data *data,
-		 struct unix_cache *cache, unsigned long block);
+		 struct unix_cache *cache, unsigned long long block);
+static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
+			       int count, void *data);
+static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
+				int count, const void *data);
 
 /* __FreeBSD_kernel__ is defined by GNU/kFreeBSD - the FreeBSD kernel
  * does not know buffered block devices - everything is raw. */
@@ -110,18 +126,37 @@
 #else
 	unix_write_byte,
 #endif
-	unix_set_option
+	unix_set_option,
+	unix_get_stats,
+	unix_read_blk64,
+	unix_write_blk64,
 };
 
 io_manager unix_io_manager = &struct_unix_manager;
 
+static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
+{
+	errcode_t 	retval = 0;
+
+	struct unix_private_data *data;
+
+	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
+	data = (struct unix_private_data *) channel->private_data;
+	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
+
+	if (stats)
+		*stats = &data->io_stats;
+
+	return retval;
+}
+
 /*
  * Here are the raw I/O functions
  */
 #ifndef NEED_BOUNCE_BUFFER
 static errcode_t raw_read_blk(io_channel channel,
 			      struct unix_private_data *data,
-			      unsigned long block,
+			      unsigned long long block,
 			      int count, void *buf)
 {
 	errcode_t	retval;
@@ -130,6 +165,7 @@
 	int		actual = 0;
 
 	size = (count < 0) ? -count : count * channel->block_size;
+	data->io_stats.bytes_read += size;
 	location = ((ext2_loff_t) block * channel->block_size) + data->offset;
 	if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
 		retval = errno ? errno : EXT2_ET_LLSEEK_FAILED;
@@ -143,7 +179,7 @@
 		goto error_out;
 	}
 	return 0;
-	
+
 error_out:
 	memset((char *) buf+actual, 0, size-actual);
 	if (channel->read_error)
@@ -168,6 +204,7 @@
 	char		sector[BLOCKALIGN];
 
 	size = (count < 0) ? -count : count * channel->block_size;
+	data->io_stats.bytes_read += size;
 	location = ((ext2_loff_t) block * channel->block_size) + data->offset;
 #ifdef DEBUG
 	printf("count=%d, size=%d, block=%lu, blk_size=%d, location=%llx\n",
@@ -208,7 +245,7 @@
 
 static errcode_t raw_write_blk(io_channel channel,
 			       struct unix_private_data *data,
-			       unsigned long block,
+			       unsigned long long block,
 			       int count, const void *buf)
 {
 	ssize_t		size;
@@ -224,20 +261,21 @@
 		else
 			size = count * channel->block_size;
 	}
+	data->io_stats.bytes_written += size;
 
 	location = ((ext2_loff_t) block * channel->block_size) + data->offset;
 	if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
 		retval = errno ? errno : EXT2_ET_LLSEEK_FAILED;
 		goto error_out;
 	}
-	
+
 	actual = write(data->dev, buf, size);
 	if (actual != size) {
 		retval = EXT2_ET_SHORT_WRITE;
 		goto error_out;
 	}
 	return 0;
-	
+
 error_out:
 	if (channel->write_error)
 		retval = (channel->write_error)(channel, block, count, buf,
@@ -257,7 +295,7 @@
 	errcode_t		retval;
 	struct unix_cache	*cache;
 	int			i;
-	
+
 	data->access_time = 0;
 	for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) {
 		cache->block = 0;
@@ -276,7 +314,7 @@
 {
 	struct unix_cache	*cache;
 	int			i;
-	
+
 	data->access_time = 0;
 	for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) {
 		cache->block = 0;
@@ -296,12 +334,12 @@
  * entry to that should be reused.
  */
 static struct unix_cache *find_cached_block(struct unix_private_data *data,
-					    unsigned long block,
+					    unsigned long long block,
 					    struct unix_cache **eldest)
 {
 	struct unix_cache	*cache, *unused_cache, *oldest_cache;
 	int			i;
-	
+
 	unused_cache = oldest_cache = 0;
 	for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) {
 		if (!cache->in_use) {
@@ -326,7 +364,7 @@
  * Reuse a particular cache entry for another block.
  */
 static void reuse_cache(io_channel channel, struct unix_private_data *data,
-		 struct unix_cache *cache, unsigned long block)
+		 struct unix_cache *cache, unsigned long long block)
 {
 	if (cache->dirty && cache->in_use)
 		raw_write_blk(channel, data, cache->block, 1, cache->buf);
@@ -348,18 +386,18 @@
 	struct unix_cache	*cache;
 	errcode_t		retval, retval2;
 	int			i;
-	
+
 	retval2 = 0;
 	for (i=0, cache = data->cache; i < CACHE_SIZE; i++, cache++) {
 		if (!cache->in_use)
 			continue;
-		
+
 		if (invalidate)
 			cache->in_use = 0;
-		
+
 		if (!cache->dirty)
 			continue;
-		
+
 		retval = raw_write_blk(channel, data,
 				       cache->block, 1, cache->buf);
 		if (retval)
@@ -407,6 +445,7 @@
 
 	memset(data, 0, sizeof(struct unix_private_data));
 	data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
+	data->io_stats.num_fields = 2;
 
 	if ((retval = alloc_cache(io, data)))
 		goto cleanup;
@@ -424,6 +463,21 @@
 		goto cleanup;
 	}
 
+#ifdef BLKROGET
+	if (flags & IO_FLAG_RW) {
+		int error;
+		int readonly = 0;
+
+		/* Is the block device actually writable? */
+		error = ioctl(data->dev, BLKROGET, &readonly);
+		if (!error && readonly) {
+			close(data->dev);
+			retval = EPERM;
+			goto cleanup;
+		}
+	}
+#endif
+
 #ifdef __linux__
 #undef RLIM_INFINITY
 #if (defined(__alpha__) || ((defined(__sparc__) || defined(__mips__)) && (SIZEOF_LONG == 4)))
@@ -436,7 +490,7 @@
 	 * block devices are wrongly getting hit by the filesize
 	 * limit.  This workaround isn't perfect, since it won't work
 	 * if glibc wasn't built against 2.2 header files.  (Sigh.)
-	 * 
+	 *
 	 */
 	if ((flags & IO_FLAG_RW) &&
 	    (uname(&ut) == 0) &&
@@ -447,7 +501,7 @@
 	    (fstat(data->dev, &st) == 0) &&
 	    (S_ISBLK(st.st_mode))) {
 		struct rlimit	rlim;
-		
+
 		rlim.rlim_cur = rlim.rlim_max = (unsigned long) RLIM_INFINITY;
 		setrlimit(RLIMIT_FSIZE, &rlim);
 		getrlimit(RLIMIT_FSIZE, &rlim);
@@ -512,7 +566,7 @@
 		if ((retval = flush_cached_blocks(channel, data, 0)))
 			return retval;
 #endif
-		
+
 		channel->block_size = blksize;
 		free_cache(data);
 		if ((retval = alloc_cache(channel, data)))
@@ -522,7 +576,7 @@
 }
 
 
-static errcode_t unix_read_blk(io_channel channel, unsigned long block,
+static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
 			       int count, void *buf)
 {
 	struct unix_private_data *data;
@@ -573,7 +627,7 @@
 #endif
 		if ((retval = raw_read_blk(channel, data, block, i, cp)))
 			return retval;
-		
+
 		/* Save the results in the cache */
 		for (j=0; j < i; j++) {
 			count--;
@@ -587,7 +641,13 @@
 #endif /* NO_IO_CACHE */
 }
 
-static errcode_t unix_write_blk(io_channel channel, unsigned long block,
+static errcode_t unix_read_blk(io_channel channel, unsigned long block,
+			       int count, void *buf)
+{
+	return unix_read_blk64(channel, block, count, buf);
+}
+
+static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
 				int count, const void *buf)
 {
 	struct unix_private_data *data;
@@ -602,7 +662,7 @@
 
 #ifdef NO_IO_CACHE
 	return raw_write_blk(channel, data, block, count, buf);
-#else	
+#else
 	/*
 	 * If we're doing an odd-sized write or a very large write,
 	 * flush out the cache completely and then do a direct write.
@@ -621,7 +681,7 @@
 	writethrough = channel->flags & CHANNEL_FLAGS_WRITETHROUGH;
 	if (writethrough)
 		retval = raw_write_blk(channel, data, block, count, buf);
-	
+
 	cp = buf;
 	while (count > 0) {
 		cache = find_cached_block(data, block, &reuse);
@@ -639,6 +699,12 @@
 #endif /* NO_IO_CACHE */
 }
 
+static errcode_t unix_write_blk(io_channel channel, unsigned long block,
+				int count, const void *buf)
+{
+	return unix_write_blk64(channel, block, count, buf);
+}
+
 static errcode_t unix_write_byte(io_channel channel, unsigned long offset,
 				 int size, const void *buf)
 {
@@ -660,7 +726,7 @@
 
 	if (lseek(data->dev, offset + data->offset, SEEK_SET) < 0)
 		return errno;
-	
+
 	actual = write(data->dev, buf, size);
 	if (actual != size)
 		return EXT2_ET_SHORT_WRITE;
@@ -669,13 +735,13 @@
 }
 
 /*
- * Flush data buffers to disk.  
+ * Flush data buffers to disk.
  */
 static errcode_t unix_flush(io_channel channel)
 {
 	struct unix_private_data *data;
 	errcode_t retval = 0;
-	
+
 	EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
 	data = (struct unix_private_data *) channel->private_data;
 	EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_UNIX_IO_CHANNEL);
@@ -687,7 +753,7 @@
 	return retval;
 }
 
-static errcode_t unix_set_option(io_channel channel, const char *option, 
+static errcode_t unix_set_option(io_channel channel, const char *option,
 				 const char *arg)
 {
 	struct unix_private_data *data;
diff --git a/lib/ext2fs/unlink.c b/lib/ext2fs/unlink.c
index a48b877..ffe8dbe 100644
--- a/lib/ext2fs/unlink.c
+++ b/lib/ext2fs/unlink.c
@@ -1,6 +1,6 @@
 /*
  * unlink.c --- delete links in a ext2fs directory
- * 
+ *
  * Copyright (C) 1993, 1994, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -25,7 +25,7 @@
 	int		flags;
 	struct ext2_dir_entry *prev;
 	int		done;
-};	
+};
 
 #ifdef __TURBOC__
  #pragma argsused
@@ -89,7 +89,7 @@
 	ls.done = 0;
 	ls.prev = 0;
 
-	retval = ext2fs_dir_iterate(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY, 
+	retval = ext2fs_dir_iterate(fs, dir, DIRENT_FLAG_INCLUDE_EMPTY,
 				    0, unlink_proc, &ls);
 	if (retval)
 		return retval;
diff --git a/lib/ext2fs/valid_blk.c b/lib/ext2fs/valid_blk.c
index 29ff27a..d0367e7 100644
--- a/lib/ext2fs/valid_blk.c
+++ b/lib/ext2fs/valid_blk.c
@@ -2,12 +2,12 @@
  * valid_blk.c --- does the inode have valid blocks?
  *
  * Copyright 1997 by Theodore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
  * %End-Header%
- * 
+ *
  */
 
 #include <stdio.h>
@@ -33,7 +33,7 @@
 	if (!LINUX_S_ISDIR(inode->i_mode) && !LINUX_S_ISREG(inode->i_mode) &&
 	    !LINUX_S_ISLNK(inode->i_mode))
 		return 0;
-	
+
 	/*
 	 * If the symbolic link is a "fast symlink", then the symlink
 	 * target is stored in the block entries.
diff --git a/lib/fpopen.c b/lib/fpopen.c
index 47346e1..0df25e4 100644
--- a/lib/fpopen.c
+++ b/lib/fpopen.c
@@ -46,7 +46,7 @@
 		errno = EFAULT;
 		return NULL;
 	}
-	
+
 	switch (*mode) {
 	case 'r':
 		do_stdin = 0;
@@ -91,7 +91,7 @@
 	 */
 	if (pipe(fds) < 0)
 		return NULL;
-	
+
 	/* Fork and execute the correct program. */
 	if ((pid = fork()) < 0) {
 		perror("fork");
diff --git a/lib/ss/Makefile.in b/lib/ss/Makefile.in
index 23b5f60..4a2bdb1 100644
--- a/lib/ss/Makefile.in
+++ b/lib/ss/Makefile.in
@@ -37,12 +37,12 @@
 XTRA_CFLAGS= -I$(srcdir)/../et
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $<
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -DSHARED_ELF_LIB -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $<
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -DSHARED_ELF_LIB -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 # for the library
 
@@ -96,18 +96,18 @@
 all::	libss.a ss.pc # libss_p.a lint
 
 std_rqs.c: std_rqs.ct mk_cmds
-	@echo "	MK_CMDS $@"
-	@DIR=$(srcdir) $(MK_CMDS) $(srcdir)/std_rqs.ct
+	$(E) "	MK_CMDS $@"
+	$(Q) DIR=$(srcdir) $(MK_CMDS) $(srcdir)/std_rqs.ct
 
 std_rqs.o: ss_err.h
 
 test_cmd.c: test_cmd.ct mk_cmds
-	@echo "	MK_CMDS $@"
-	@DIR=$(srcdir) $(MK_CMDS) $(srcdir)/test_cmd.ct
+	$(E) "	MK_CMDS $@"
+	$(Q) DIR=$(srcdir) $(MK_CMDS) $(srcdir)/test_cmd.ct
 
 ss_err.c ss_err.h: ss_err.et
-	@echo "	COMPILE_ET ss_err.et"
-	@$(COMPILE_ET) $(srcdir)/ss_err.et
+	$(E) "	COMPILE_ET ss_err.et"
+	$(Q) $(COMPILE_ET) $(srcdir)/ss_err.et
 
 ct.tab.c ct.tab.h: ct.y
 	$(RM) -f ct.tab.* y.*
@@ -120,42 +120,42 @@
 #	$(CHMOD) -x $@
 
 mk_cmds: $(DEP_SUBSTITUTE) $(srcdir)/mk_cmds.sh.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE) $(srcdir)/mk_cmds.sh.in mk_cmds
-	@$(CHMOD) +x mk_cmds
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE) $(srcdir)/mk_cmds.sh.in mk_cmds
+	$(Q) $(CHMOD) +x mk_cmds
 
 ss.pc: $(srcdir)/ss.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/ss/ss.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/ss/ss.pc ./config.status
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/ss $(datadir)/ss $(bindir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/ss $(datadir)/ss $(bindir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
 		$(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss \
 		$(DESTDIR)$(bindir) $(DESTDIR)$(libdir)/pkgconfig
 
 install:: libss.a $(INSTALL_HFILES) installdirs ss_err.h mk_cmds ss.pc
-	@echo "	INSTALL_DATA $(DESTDIR)$(libdir)/libss.a"
-	@$(INSTALL_DATA) libss.a $(DESTDIR)$(libdir)/libss.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libss.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libss.a
-	@$(RM) -f $(DESTDIR)$(includedir)/ss/*
-	@for i in $(INSTALL_HFILES); do \
+	$(E) "	INSTALL_DATA $(DESTDIR)$(libdir)/libss.a"
+	$(Q) $(INSTALL_DATA) libss.a $(DESTDIR)$(libdir)/libss.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libss.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libss.a
+	$(Q) $(RM) -f $(DESTDIR)$(includedir)/ss/*
+	$(Q) for i in $(INSTALL_HFILES); do \
 		echo "	INSTALL_DATA $(DESTDIR)$(includedir)/ss/$$i"; \
 		$(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/ss/$$i; \
 	done
-	@echo "	INSTALL_DATA $(includedir)/ss/ss_err.h"
-	@$(INSTALL_DATA) ss_err.h $(DESTDIR)$(includedir)/ss/ss_err.h
-	@for i in $(SHARE_FILES); do \
+	$(E) "	INSTALL_DATA $(includedir)/ss/ss_err.h"
+	$(Q) $(INSTALL_DATA) ss_err.h $(DESTDIR)$(includedir)/ss/ss_err.h
+	$(Q) for i in $(SHARE_FILES); do \
 		echo "	INSTALL_DATA $(DESTDIR)$(datadir)/ss/$$i"; \
 		$(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(datadir)/ss/$$i; \
 	done
-	@echo "	INSTALL $(bindir)/mk_cmds"
-	@$(INSTALL) mk_cmds $(DESTDIR)$(bindir)/mk_cmds
-	@echo "	INSTALL_DATA $(man1dir)/mk_cmds.1"
-	@$(INSTALL_DATA) $(srcdir)/mk_cmds.1 $(DESTDIR)$(man1dir)/mk_cmds.1
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/ss.pc"
-	@$(INSTALL_DATA) ss.pc $(DESTDIR)$(libdir)/pkgconfig/ss.pc
+	$(E) "	INSTALL $(bindir)/mk_cmds"
+	$(Q) $(INSTALL) mk_cmds $(DESTDIR)$(bindir)/mk_cmds
+	$(E) "	INSTALL_DATA $(man1dir)/mk_cmds.1"
+	$(Q) $(INSTALL_DATA) $(srcdir)/mk_cmds.1 $(DESTDIR)$(man1dir)/mk_cmds.1
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/ss.pc"
+	$(Q) $(INSTALL_DATA) ss.pc $(DESTDIR)$(libdir)/pkgconfig/ss.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libss.a $(DESTDIR)$(bindir)/mk_cmds \
@@ -163,16 +163,16 @@
 		$(DESTDIR)$(man1dir)/mk_cmds.1 
 	$(RM) -rf $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss
 
-test_ss: test_ss.o test_cmd.o $(LIBSS) $(LIBCOM_ERR)
-	@echo "	LD $@"
-	@$(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) \
+test_ss: test_ss.o test_cmd.o $(DEPLIBSS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(Q) $(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) \
 		$(LIBSS) $(LIBCOM_ERR)
 
 check:: all test_ss
-	@echo "	RUN TEST test_ss"
-	@(LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./test_ss -f $(srcdir)/test_script >& test_out; exit 0)
-	@if ! diff test_out $(srcdir)/test_script_expected > test.diff; then \
-		echo "Regression test for ss library failed!"; exit 1 ; fi
+	$(E) "	RUN TEST test_ss"
+	-@(LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./test_ss -f $(srcdir)/test_script > test_out 2>&1; exit 0)
+	$(Q) if diff test_out $(srcdir)/test_script_expected > test.diff; then \
+		true ; else echo "Regression test for ss library failed!"; exit 1 ; fi
 
 clean::
 	$(RM) -f ../libss.a libss.a mk_cmds ss_err.h ss_err.c std_rqs.c \
diff --git a/lib/ss/error.c b/lib/ss/error.c
index 14c0570..9a4b526 100644
--- a/lib/ss/error.c
+++ b/lib/ss/error.c
@@ -18,13 +18,13 @@
 #include "ss_internal.h"
 
 #include <stdarg.h>
-  
+
 char * ss_name(sci_idx)
     int sci_idx;
 {
     register char *ret_val;
     register ss_data *infop;
-    
+
     infop = ss_info(sci_idx);
     if (infop->current_request == (char const *)NULL) {
 	ret_val = malloc((unsigned)
@@ -38,7 +38,7 @@
     else {
 	register char *cp;
 	register char const *cp1;
-	ret_val = malloc((unsigned)sizeof(char) * 
+	ret_val = malloc((unsigned)sizeof(char) *
 			 (strlen(infop->subsystem_name)+
 			  strlen(infop->current_request)+
 			  4));
diff --git a/lib/ss/execute_cmd.c b/lib/ss/execute_cmd.c
index b9f2a4e..bc2a204 100644
--- a/lib/ss/execute_cmd.c
+++ b/lib/ss/execute_cmd.c
@@ -14,6 +14,11 @@
 #ifdef HAS_STDLIB_H
 #include <stdlib.h>
 #endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#else
+extern int errno;
+#endif
 #include "ss_internal.h"
 #include <stdio.h>
 
@@ -213,16 +218,14 @@
             return SS_ET_ESCAPE_DISABLED;
         else {
             line_ptr++;
-            system(line_ptr);
-	    return 0;
+            return (system(line_ptr) < 0) ? errno : 0;
         }
     }
 
     /* parse it */
     argv = ss_parse(sci_idx, line_ptr, &argc);
     if (argc == 0) {
-	if (argv)
-	    free(argv);
+	free(argv);
         return 0;
     }
 
diff --git a/lib/ss/get_readline.c b/lib/ss/get_readline.c
index 70099b0..4421052 100644
--- a/lib/ss/get_readline.c
+++ b/lib/ss/get_readline.c
@@ -25,7 +25,7 @@
 #ifdef HAVE_DLOPEN
 	if (!info->readline_handle)
 		return;
-	
+
 	info->readline = 0;
 	info->add_history = 0;
 	info->redisplay = 0;
@@ -36,7 +36,7 @@
 }
 
 /* Libraries we will try to use for readline/editline functionality */
-#define DEFAULT_LIBPATH "libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
+#define DEFAULT_LIBPATH "libreadline.so.6:libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
 
 void ss_get_readline(int sci_idx)
 {
@@ -46,7 +46,7 @@
 	const char **t, *libpath = 0;
 	char	*tmp, *cp, *next;
 	char **(**completion_func)(const char *, int, int);
-	
+
 	if (info->readline_handle)
 		return;
 
@@ -55,7 +55,7 @@
 		libpath = DEFAULT_LIBPATH;
 	if (*libpath == 0 || !strcmp(libpath, "none"))
 		return;
-	
+
 	tmp = malloc(strlen(libpath)+1);
 	if (!tmp)
 		return;
@@ -94,4 +94,4 @@
 #endif
 }
 
-	
+
diff --git a/lib/ss/invocation.c b/lib/ss/invocation.c
index 074706f..74fcb14 100644
--- a/lib/ss/invocation.c
+++ b/lib/ss/invocation.c
@@ -71,6 +71,7 @@
 	*(new_table->rqt_tables+1) = (ss_request_table *) NULL;
 
 	new_table->readline_handle = 0;
+	new_table->readline_shutdown = 0;
 	new_table->readline = 0;
 	new_table->add_history = 0;
 	new_table->redisplay = 0;
diff --git a/lib/ss/listen.c b/lib/ss/listen.c
index 05d0dc0..bd7c8c0 100644
--- a/lib/ss/listen.c
+++ b/lib/ss/listen.c
@@ -3,7 +3,7 @@
  *
  *	$Header$
  *	$Locker$
- * 
+ *
  * Copyright 1987, 1988 by MIT Student Information Processing Board
  *
  * Permission to use, copy, modify, and distribute this software and
@@ -56,7 +56,7 @@
     jmp_buf old_jmpb;
     ss_data *old_info = current_info;
     char *line;
-    
+
     current_info = info = ss_info(sci_idx);
     sig_cont = (sigret_t (*)(int)) 0;
     info->abort = 0;
@@ -81,7 +81,7 @@
 			line = input;
 		else
 			line = NULL;
-	
+
 		input[BUFSIZ-1] = 0;
 	}
 	if (line == NULL) {
@@ -89,7 +89,7 @@
 		(void) signal(SIGCONT, sig_cont);
 		goto egress;
 	}
-		
+
 	cp = strchr(line, '\n');
 	if (cp) {
 	    *cp = '\0';
@@ -130,11 +130,11 @@
 {
     ss_info(sci_idx)->abort = 1;
     ss_info(sci_idx)->exit_status = code;
-    
+
 }
 
-void ss_quit(int argc __SS_ATTR((unused)), 
-	     const char * const *argv __SS_ATTR((unused)), 
+void ss_quit(int argc __SS_ATTR((unused)),
+	     const char * const *argv __SS_ATTR((unused)),
 	     int sci_idx, pointer infop __SS_ATTR((unused)))
 {
     ss_abort_subsystem(sci_idx, 0);
@@ -151,7 +151,7 @@
 	static char const * const * name;
 	ss_request_entry *request;
 	char		*ret;
-	
+
 	if (state == 0) {
 		len = strlen(text);
 		rqtbl = current_info->rqt_tables;
@@ -187,7 +187,7 @@
 	return 0;
 }
 
-char **ss_rl_completion(const char *text, int start, 
+char **ss_rl_completion(const char *text, int start,
 			int end __SS_ATTR((unused)))
 {
 	if ((start == 0) && current_info->rl_completion_matches)
diff --git a/lib/ss/mk_cmds.1 b/lib/ss/mk_cmds.1
deleted file mode 100644
index 216e483..0000000
--- a/lib/ss/mk_cmds.1
+++ /dev/null
@@ -1,59 +0,0 @@
-.\" Copyright (c) 2003 Theodore Ts'o
-.\"
-.TH MK_CMDS 1 "2003" E2FSPROGS
-.SH NAME
-mk_cmds \- error table compiler
-.SH SYNOPSIS
-.B mk_cmds
-file
-.SH DESCRIPTION
-.B Mk_cmds
-converts a table listing command names and associated help messages
-into a C source file suitable for use with the
-.IR ss (3)
-library.
-
-The source file name must end with a suffix of ``.ct''; the file
-consists of a declaration supplying the name of the command table:
-
-.B command_table
-.I name
-
-followed by entries of the form:
-
-[
-.B request
-|
-.B unimplemented
-] 
-.I name,
-"
-.I string
-"[, abbrev]...;
-
-and a final
-
-.B end
-
-to indicate the end of the table.
-
-A C source file is generated which should be compiled and linked
-with the object files use the ss library.   
-
-A ``#'' in the source file is treated as a comment character, and all
-remaining text to the end of the source line will be ignored.
-
-.SH BUGS
-
-Since the original
-.B mk_cmds
-uses a very simple parser based on
-.IR yacc (1), 
-and this current version of 
-.B mk_cmds
-uses an awk/sed combination of scripts, 
-its error recovery leaves much to be desired.
-
-.SH "SEE ALSO"
-ss (3)
-
diff --git a/lib/ss/pager.c b/lib/ss/pager.c
index a7a2a09..67fc104 100644
--- a/lib/ss/pager.c
+++ b/lib/ss/pager.c
@@ -71,10 +71,10 @@
  */
 
 #ifndef NO_FORK
-int ss_pager_create(void) 
+int ss_pager_create(void)
 {
 	int filedes[2];
-     
+
 	if (pipe(filedes) != 0)
 		return(-1);
 
@@ -106,11 +106,30 @@
 }
 #endif
 
+static int write_all(int fd, char *buf, size_t count)
+{
+	ssize_t ret;
+	int c = 0;
+
+	while (count > 0) {
+		ret = write(fd, buf, count);
+		if (ret < 0) {
+			if ((errno == EAGAIN) || (errno == EINTR))
+				continue;
+			return -1;
+		}
+		count -= ret;
+		buf += ret;
+		c += ret;
+	}
+	return c;
+}
+
 void ss_page_stdin()
 {
 	int i;
 	sigset_t mask;
-	
+
 	for (i = 3; i < 32; i++)
 		(void) close(i);
 	(void) signal(SIGINT, SIG_DFL);
@@ -127,7 +146,7 @@
 		char buf[80];
 		register int n;
 		while ((n = read(0, buf, 80)) > 0)
-			write(1, buf, n);
+			write_all(1, buf, n);
 	}
 	exit(errno);
 }
diff --git a/lib/ss/request_tbl.c b/lib/ss/request_tbl.c
index 4027af8..4632d65 100644
--- a/lib/ss/request_tbl.c
+++ b/lib/ss/request_tbl.c
@@ -27,18 +27,19 @@
 {
 	register ss_data *info;
 	register int i, size;
+	ssrt **t;
 
 	info = ss_info(sci_idx);
 	for (size=0; info->rqt_tables[size] != (ssrt *)NULL; size++)
 		;
 	/* size == C subscript of NULL == #elements */
 	size += 2;		/* new element, and NULL */
-	info->rqt_tables = (ssrt **)realloc(info->rqt_tables,
-					    (unsigned)size*sizeof(ssrt));
-	if (info->rqt_tables == (ssrt **)NULL) {
+	t = (ssrt **)realloc(info->rqt_tables, (unsigned)size*sizeof(ssrt));
+	if (t == (ssrt **)NULL) {
 		*code_ptr = errno;
 		return;
 	}
+	info->rqt_tables = t;
 	if (position > size - 2)
 		position = size - 2;
 
diff --git a/lib/ss/requests.c b/lib/ss/requests.c
index 8013368..2e06100 100644
--- a/lib/ss/requests.c
+++ b/lib/ss/requests.c
@@ -18,7 +18,7 @@
 
 #define	DECLARE(name) void name(int argc,const char * const *argv, \
 				int sci_idx, void *infop)
-	
+
 /*
  * ss_self_identify -- assigned by default to the "." request
  */
@@ -36,7 +36,7 @@
  */
 void ss_subsystem_name(int argc __SS_ATTR((unused)),
 		       const char * const *argv __SS_ATTR((unused)),
-		       int sci_idx, 
+		       int sci_idx,
 		       void *infop __SS_ATTR((unused)))
 {
      printf("%s\n", ss_info(sci_idx)->subsystem_name);
@@ -47,7 +47,7 @@
  */
 void ss_subsystem_version(int argc __SS_ATTR((unused)),
 			  const char * const *argv __SS_ATTR((unused)),
-			  int sci_idx, 
+			  int sci_idx,
 			  void *infop __SS_ATTR((unused)))
 {
      printf("%s\n", ss_info(sci_idx)->subsystem_version);
diff --git a/lib/ss/ss.pc.in b/lib/ss/ss.pc.in
index 0218fd5..cf89361 100644
--- a/lib/ss/ss.pc.in
+++ b/lib/ss/ss.pc.in
@@ -6,6 +6,7 @@
 Name: ss
 Description: Subsystem command parsing library
 Version: @E2FSPROGS_VERSION@
-Requires: com_err
-Cflags: -I${includedir} 
-Libs: -L${libdir} -lss @DLOPEN_LIB@
+Requires.private: com_err
+Cflags: -I${includedir}/ss
+Libs: -L${libdir} -lss
+Libs.private: @DLOPEN_LIB@
diff --git a/lib/ss/test_script_expected b/lib/ss/test_script_expected
index 543f828..3f61d9a 100644
--- a/lib/ss/test_script_expected
+++ b/lib/ss/test_script_expected
@@ -10,9 +10,9 @@
 Hello, world!
 Args: 'bar', 'quux'
 test_icount: quux bar
-test_ss: Command not found quux
+test_ss: Command not found quux

 test_icount: quux
-test_ss: Command not found quux
+test_ss: Command not found quux

 test_icount: test quux
 Hello, world!
 Args: 'quux'
diff --git a/lib/ss/test_ss.c b/lib/ss/test_ss.c
index 0b0bb58..41d84ea 100644
--- a/lib/ss/test_ss.c
+++ b/lib/ss/test_ss.c
@@ -1,6 +1,6 @@
 /*
  * test_ss.c
- * 
+ *
  * Copyright 1987, 1988 by MIT Student Information Processing Board
  *
  * Permission to use, copy, modify, and distribute this software and
@@ -11,7 +11,7 @@
  * M.I.T. S.I.P.B. make no representations about the suitability of
  * this software for any purpose.  It is provided "as is" without
  * express or implied warranty.
- 
+
  */
 
 #include <unistd.h>
@@ -49,6 +49,8 @@
 			exit(1);
 		}
 	}
+	fflush(stdout);
+	fflush(stderr);
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	while (!feof(f)) {
@@ -85,7 +87,6 @@
 	char		*cmd_file = 0;
 	int sci_idx;
 	int exit_status = 0;
-	const char	*usage = "Usage: test_ss [-R request] [-f cmd_file]";
 
 	while ((c = getopt (argc, argv, "wR:f:")) != EOF) {
 		switch (c) {
@@ -96,7 +97,8 @@
 			cmd_file = optarg;
 			break;
 		default:
-			com_err(argv[0], 0, usage);
+			com_err(argv[0], 0, "Usage: test_ss [-R request] "
+				"[-f cmd_file]");
 			exit(1);
 		}
 	}
diff --git a/lib/uuid/Android.mk b/lib/uuid/Android.mk
index f8e453c..b7d2f67 100644
--- a/lib/uuid/Android.mk
+++ b/lib/uuid/Android.mk
@@ -1,7 +1,6 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+libext2_uuid_src_files := \
 	clear.c \
 	compare.c \
 	copy.c \
@@ -14,12 +13,9 @@
 	uuid_time.c
 
 
-LOCAL_MODULE := libext2_uuid
-LOCAL_MODULE_TAGS:= eng
+libext2_uuid_c_includes := external/e2fsprogs/lib
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
-
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+libext2_uuid_cflags := -O2 -g -W -Wall \
 	-DHAVE_INTTYPES_H \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
@@ -41,8 +37,32 @@
 	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+libext2_uuid_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_uuid_src_files)
+LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
+LOCAL_CFLAGS := $(libext2_uuid_cflags)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(libext2_uuid_system_shared_libraries)
+LOCAL_MODULE := libext2_uuid
+LOCAL_MODULE_TAGS:= $(use_e2fsprog_module_tags)
 LOCAL_PRELINK_MODULE := false
 
 include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libext2_uuid_src_files)
+LOCAL_C_INCLUDES := $(libext2_uuid_c_includes)
+LOCAL_CFLAGS := $(libext2_uuid_cflags)
+LOCAL_MODULE := libext2_uuid_host
+LOCAL_MODULE_STEM := libext2_uuid
+LOCAL_MODULE_TAGS:= $(use_e2fsprog_module_tags)
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/lib/uuid/Makefile.in b/lib/uuid/Makefile.in
index 35fc2e9..10e5277 100644
--- a/lib/uuid/Makefile.in
+++ b/lib/uuid/Makefile.in
@@ -60,97 +60,101 @@
 @MAKEFILE_CHECKER@
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) $(ALL_CFLAGS) -c $< -o $@
-@PROFILE_CMT@	@$(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
-@CHECKER_CMT@	@$(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
-@ELF_CMT@	@$(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
-@BSDLIB_CMT@	@$(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
+	$(E) "	CC $<"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
+@CHECKER_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -checker -g -o checker/$*.o -c $<
+@ELF_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -fPIC -o elfshared/$*.o -c $<
+@BSDLIB_CMT@	$(Q) $(CC) $(ALL_CFLAGS) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $<
 
 all:: tst_uuid uuid_time $(SMANPAGES) uuid.pc
 
+uuid.h: $(srcdir)/uuid.h.in
+	$(E) "	CP $@"
+	$(Q) cp $(srcdir)/uuid.h.in uuid.h
+
 $(top_builddir)/lib/uuid/uuid_types.h: $(srcdir)/uuid_types.h.in $(top_builddir)/config.status
 	cd $(top_builddir); CONFIG_FILES=$(my_dir)/uuid_types.h ./config.status
 
 tst_uuid.o: $(srcdir)/tst_uuid.c
-	@echo "	CC $@"
-	@$(CC) $(ALL_CFLAGS) -c $(srcdir)/tst_uuid.c -o tst_uuid.o
+	$(E) "	CC $@"
+	$(Q) $(CC) $(ALL_CFLAGS) -c $(srcdir)/tst_uuid.c -o tst_uuid.o
 
 tst_uuid: tst_uuid.o $(DEPSTATIC_LIBUUID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o tst_uuid tst_uuid.o $(STATIC_LIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o tst_uuid tst_uuid.o $(STATIC_LIBUUID)
 
 uuid_time: $(srcdir)/uuid_time.c $(DEPLIBUUID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_CFLAGS) -DDEBUG -o uuid_time $(srcdir)/uuid_time.c \
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_CFLAGS) -DDEBUG -o uuid_time $(srcdir)/uuid_time.c \
 		$(LIBUUID)
 
 uuid.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid.3.in uuid.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid.3.in uuid.3
 
 uuid_clear.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_clear.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_clear.3.in uuid_clear.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_clear.3.in uuid_clear.3
 
 uuid_compare.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_compare.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_compare.3.in uuid_compare.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_compare.3.in uuid_compare.3
 
 uuid_copy.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_copy.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_copy.3.in uuid_copy.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_copy.3.in uuid_copy.3
 
 uuid_generate.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_generate.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_generate.3.in uuid_generate.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_generate.3.in uuid_generate.3
 
 uuid_is_null.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_is_null.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_is_null.3.in uuid_is_null.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_is_null.3.in uuid_is_null.3
 
 uuid_parse.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_parse.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_parse.3.in uuid_parse.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_parse.3.in uuid_parse.3
 
 uuid_time.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_time.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_time.3.in uuid_time.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_time.3.in uuid_time.3
 
 uuid_unparse.3: $(DEP_SUBSTITUTE) $(srcdir)/uuid_unparse.3.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuid_unparse.3.in uuid_unparse.3
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuid_unparse.3.in uuid_unparse.3
 
 uuid.pc: $(srcdir)/uuid.pc.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=lib/uuid/uuid.pc ./config.status
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=lib/uuid/uuid.pc ./config.status
 
 installdirs::
-	@echo "	MKINSTALLDIRS $(libdir) $(includedir)/uuid $(man3dir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir)  \
+	$(E) "	MKINSTALLDIRS $(libdir) $(includedir)/uuid $(man3dir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(libdir)  \
 		$(DESTDIR)$(includedir)/uuid $(DESTDIR)$(man3dir) \
 		$(DESTDIR)$(libdir)/pkgconfig
 
 install:: all installdirs 
-	@echo "	INSTALL_DATA $(libdir)/libuuid.a"
-	@$(INSTALL_DATA) libuuid.a $(DESTDIR)$(libdir)/libuuid.a
-	@-$(RANLIB) $(DESTDIR)$(libdir)/libuuid.a
-	@$(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libuuid.a
-	@echo "	INSTALL_DATA $(includedir)/uuid/uuid.h"
-	@$(INSTALL_DATA) $(srcdir)/uuid.h $(DESTDIR)$(includedir)/uuid/uuid.h
-	@for i in $(SMANPAGES); do \
+	$(E) "	INSTALL_DATA $(libdir)/libuuid.a"
+	$(Q) $(INSTALL_DATA) libuuid.a $(DESTDIR)$(libdir)/libuuid.a
+	-$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libuuid.a
+	$(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libuuid.a
+	$(E) "	INSTALL_DATA $(includedir)/uuid/uuid.h"
+	$(Q) $(INSTALL_DATA) uuid.h $(DESTDIR)$(includedir)/uuid/uuid.h
+	$(Q) for i in $(SMANPAGES); do \
 		$(RM) -f $(DESTDIR)$(man3dir)/$$i.gz; \
 		echo "	INSTALL_DATA $(man3dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$i; \
 	done
-	@$(RM) -f $(DESTDIR)$(man3dir)/uuid_generate_random.3.gz \
+	$(Q) $(RM) -f $(DESTDIR)$(man3dir)/uuid_generate_random.3.gz \
 		$(DESTDIR)$(man3dir)/uuid_generate_time.3.gz
-	@echo "	LINK $(man3dir)/uuid_generate_random.3"
-	@$(LN) -f $(DESTDIR)$(man3dir)/uuid_generate.3 $(DESTDIR)$(man3dir)/uuid_generate_random.3
-	@echo "	LINK $(man3dir)/uuid_generate_time.3"
-	@$(LN) -f $(DESTDIR)$(man3dir)/uuid_generate.3 $(DESTDIR)$(man3dir)/uuid_generate_time.3
-	@echo "	INSTALL_DATA $(libdir)/pkgconfig/uuid.pc"
-	@$(INSTALL_DATA) uuid.pc $(DESTDIR)$(libdir)/pkgconfig/uuid.pc
+	$(E) "	LINK $(man3dir)/uuid_generate_random.3"
+	$(Q) $(LN) -f $(DESTDIR)$(man3dir)/uuid_generate.3 $(DESTDIR)$(man3dir)/uuid_generate_random.3
+	$(E) "	LINK $(man3dir)/uuid_generate_time.3"
+	$(Q) $(LN) -f $(DESTDIR)$(man3dir)/uuid_generate.3 $(DESTDIR)$(man3dir)/uuid_generate_time.3
+	$(E) "	INSTALL_DATA $(libdir)/pkgconfig/uuid.pc"
+	$(Q) $(INSTALL_DATA) uuid.pc $(DESTDIR)$(libdir)/pkgconfig/uuid.pc
 
 uninstall::
 	$(RM) -f $(DESTDIR)$(libdir)/libuuid.a \
@@ -161,7 +165,7 @@
 	$(RM) -f $(DESTDIR)$(man3dir)/uuid_generate_random.3 $(DESTDIR)$(man3dir)/uuid_generate_time.3
 
 clean::
-	$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/*
+	$(RM) -f \#* *.s *.o *.a *~ *.bak core profiled/* checker/* uuid.h
 	$(RM) -f ../libuuid.a ../libuuid_p.a tst_uuid uuid_time $(SMANPAGES)
 
 check:: tst_uuid
@@ -179,21 +183,20 @@
 ../../lib/libuuid.so: image
 ../../lib/libuuid.dylib: image
 
-$(OBJS): subdirs
+$(OBJS): subdirs uuid.h
 
 # +++ Dependency line eater +++
 # 
 # Makefile dependencies follow.  This must be the last section in
 # the Makefile.in file
 #
-clear.o: $(srcdir)/clear.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-compare.o: $(srcdir)/compare.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-copy.o: $(srcdir)/copy.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuid.h \
- $(srcdir)/uuidd.h
-isnull.o: $(srcdir)/isnull.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-pack.o: $(srcdir)/pack.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-parse.o: $(srcdir)/parse.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-unpack.o: $(srcdir)/unpack.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-unparse.o: $(srcdir)/unparse.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
-uuid_time.o: $(srcdir)/uuid_time.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
+clear.o: $(srcdir)/clear.c $(srcdir)/uuidP.h
+compare.o: $(srcdir)/compare.c $(srcdir)/uuidP.h
+copy.o: $(srcdir)/copy.c $(srcdir)/uuidP.h
+gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuidd.h
+isnull.o: $(srcdir)/isnull.c $(srcdir)/uuidP.h
+pack.o: $(srcdir)/pack.c $(srcdir)/uuidP.h
+parse.o: $(srcdir)/parse.c $(srcdir)/uuidP.h
+unpack.o: $(srcdir)/unpack.c $(srcdir)/uuidP.h
+unparse.o: $(srcdir)/unparse.c $(srcdir)/uuidP.h
+uuid_time.o: $(srcdir)/uuid_time.c $(srcdir)/uuidP.h
diff --git a/lib/uuid/clear.c b/lib/uuid/clear.c
index f3a1005..2d91fee 100644
--- a/lib/uuid/clear.c
+++ b/lib/uuid/clear.c
@@ -1,6 +1,6 @@
 /*
  * clear.c -- Clear a UUID
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
diff --git a/lib/uuid/compare.c b/lib/uuid/compare.c
index a9c505c..f28a726 100644
--- a/lib/uuid/compare.c
+++ b/lib/uuid/compare.c
@@ -2,7 +2,7 @@
  * compare.c --- compare whether or not two UUID's are the same
  *
  * Returns 0 if the two UUID's are different, and 1 if they are the same.
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -18,7 +18,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
diff --git a/lib/uuid/copy.c b/lib/uuid/copy.c
index 963bc81..ead33aa 100644
--- a/lib/uuid/copy.c
+++ b/lib/uuid/copy.c
@@ -1,6 +1,6 @@
 /*
  * copy.c --- copy UUIDs
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
diff --git a/lib/uuid/gen_uuid.c b/lib/uuid/gen_uuid.c
index cf2b5a6..420ca2b 100644
--- a/lib/uuid/gen_uuid.c
+++ b/lib/uuid/gen_uuid.c
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -38,6 +38,11 @@
  */
 #define _SVID_SOURCE
 
+#ifdef _WIN32
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#define UUID MYUUID
+#endif
 #include <stdio.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -49,10 +54,14 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <sys/types.h>
+#ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
+#endif
 #include <sys/wait.h>
 #include <sys/stat.h>
+#ifdef HAVE_SYS_FILE_H
 #include <sys/file.h>
+#endif
 #ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
 #endif
@@ -77,6 +86,9 @@
 #if defined(__linux__) && defined(HAVE_SYS_SYSCALL_H)
 #include <sys/syscall.h>
 #endif
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
 
 #include "uuidP.h"
 #include "uuidd.h"
@@ -97,6 +109,30 @@
 THREAD_LOCAL unsigned short jrand_seed[3];
 #endif
 
+#ifdef _WIN32
+static void gettimeofday (struct timeval *tv, void *dummy)
+{
+	FILETIME	ftime;
+	uint64_t	n;
+
+	GetSystemTimeAsFileTime (&ftime);
+	n = (((uint64_t) ftime.dwHighDateTime << 32)
+	     + (uint64_t) ftime.dwLowDateTime);
+	if (n) {
+		n /= 10;
+		n -= ((369 * 365 + 89) * (uint64_t) 86400) * 1000000;
+	}
+
+	tv->tv_sec = n / 1000000;
+	tv->tv_usec = n % 1000000;
+}
+
+static int getuid (void)
+{
+	return 1;
+}
+#endif
+
 static int get_random_fd(void)
 {
 	struct timeval	tv;
@@ -105,14 +141,16 @@
 
 	if (fd == -2) {
 		gettimeofday(&tv, 0);
+#ifndef _WIN32
 		fd = open("/dev/urandom", O_RDONLY);
 		if (fd == -1)
 			fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
 		if (fd >= 0) {
 			i = fcntl(fd, F_GETFD);
-			if (i >= 0) 
+			if (i >= 0)
 				fcntl(fd, F_SETFD, i | FD_CLOEXEC);
 		}
+#endif
 		srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
 #ifdef DO_JRAND_MIX
 		jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
@@ -152,7 +190,7 @@
 			lose_counter = 0;
 		}
 	}
-	
+
 	/*
 	 * We do this all the time, but this is the only source of
 	 * randomness if /dev/random/urandom is out to lunch.
@@ -164,7 +202,7 @@
 	jrand_seed[2] = jrand_seed[2] ^ syscall(__NR_gettid);
 	for (cp = buf, i = 0; i < nbytes; i++)
 		*cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
-	memcpy(jrand_seed, tmp_seed, 
+	memcpy(jrand_seed, tmp_seed,
 	       sizeof(jrand_seed)-sizeof(unsigned short));
 #endif
 
@@ -173,6 +211,11 @@
 
 /*
  * Get the ethernet hardware address, if we can find it...
+ *
+ * XXX for a windows version, probably should use GetAdaptersInfo:
+ * http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451
+ * commenting out get_node_id just to get gen_uuid to compile under windows
+ * is not the right way to go!
  */
 static int get_node_id(unsigned char *node_id)
 {
@@ -190,7 +233,7 @@
 /*
  * BSD 4.4 defines the size of an ifreq to be
  * max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
- * However, under earlier systems, sa_len isn't present, so the size is 
+ * However, under earlier systems, sa_len isn't present, so the size is
  * just sizeof(struct ifreq)
  */
 #ifdef HAVE_SA_LEN
@@ -269,8 +312,9 @@
 	THREAD_LOCAL uint16_t		clock_seq;
 	struct timeval 			tv;
 	struct flock			fl;
-	unsigned long long		clock_reg;
+	uint64_t			clock_reg;
 	mode_t				save_umask;
+	int				len;
 
 	if (state_fd == -2) {
 		save_umask = umask(0);
@@ -316,7 +360,7 @@
 	if ((last.tv_sec == 0) && (last.tv_usec == 0)) {
 		get_random_bytes(&clock_seq, sizeof(clock_seq));
 		clock_seq &= 0x3FFF;
-		last = tv;
+		gettimeofday(&last, 0);
 		last.tv_sec--;
 	}
 
@@ -337,10 +381,10 @@
 		adjustment = 0;
 		last = tv;
 	}
-		
+
 	clock_reg = tv.tv_usec*10 + adjustment;
-	clock_reg += ((unsigned long long) tv.tv_sec)*10000000;
-	clock_reg += (((unsigned long long) 0x01B21DD2) << 32) + 0x13814000;
+	clock_reg += ((uint64_t) tv.tv_sec)*10000000;
+	clock_reg += (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;
 
 	if (num && (*num > 1)) {
 		adjustment += *num - 1;
@@ -352,10 +396,14 @@
 
 	if (state_fd > 0) {
 		rewind(state_f);
-		ftruncate(state_fd, 0);
-		fprintf(state_f, "clock: %04x tv: %lu %lu adj: %d\n",
-			clock_seq, last.tv_sec, last.tv_usec, adjustment);
+		len = fprintf(state_f, 
+			      "clock: %04x tv: %016lu %08lu adj: %08d\n",
+			      clock_seq, last.tv_sec, last.tv_usec, adjustment);
 		fflush(state_f);
+		if (ftruncate(state_fd, len) < 0) {
+			fprintf(state_f, "                   \n");
+			fflush(state_f);
+		}
 		rewind(state_f);
 		fl.l_type = F_UNLCK;
 		fcntl(state_fd, F_SETLK, &fl);
@@ -371,15 +419,19 @@
 {
 	ssize_t ret;
 	ssize_t c = 0;
+	int tries = 0;
 
 	memset(buf, 0, count);
 	while (count > 0) {
 		ret = read(fd, buf, count);
-		if (ret < 0) {
-			if ((errno == EAGAIN) || (errno == EINTR))
+		if (ret <= 0) {
+			if ((errno == EAGAIN || errno == EINTR || ret == 0) &&
+			    (tries++ < 5))
 				continue;
-			return -1;
+			return c ? c : -1;
 		}
+		if (ret > 0)
+			tries = 0;
 		count -= ret;
 		buf += ret;
 		c += ret;
@@ -387,6 +439,33 @@
 	return c;
 }
 
+/*
+ * Close all file descriptors
+ */
+static void close_all_fds(void)
+{
+	int i, max;
+
+#if defined(HAVE_SYSCONF) && defined(_SC_OPEN_MAX)
+	max = sysconf(_SC_OPEN_MAX);
+#elif defined(HAVE_GETDTABLESIZE)
+	max = getdtablesize();
+#elif defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
+	struct rlimit rl;
+
+	getrlimit(RLIMIT_NOFILE, &rl);
+	max = rl.rlim_cur;
+#else
+	max = OPEN_MAX;
+#endif
+
+	for (i=0; i < max; i++) {
+		close(i);
+		if (i <= 2)
+			open("/dev/null", O_RDWR);
+	}
+}
+
 
 /*
  * Try using the uuidd daemon to generate the UUID
@@ -402,6 +481,7 @@
 	ssize_t ret;
 	int32_t reply_len = 0, expected = 16;
 	struct sockaddr_un srv_addr;
+	struct stat st;
 	pid_t pid;
 	static const char *uuidd_path = UUIDD_PATH;
 	static int access_ret = -2;
@@ -417,9 +497,14 @@
 		    sizeof(struct sockaddr_un)) < 0) {
 		if (access_ret == -2)
 			access_ret = access(uuidd_path, X_OK);
+		if (access_ret == 0)
+			access_ret = stat(uuidd_path, &st);
+		if (access_ret == 0 && (st.st_mode & (S_ISUID | S_ISGID)) == 0)
+			access_ret = access(UUIDD_DIR, W_OK);
 		if (access_ret == 0 && start_attempts++ < 5) {
 			if ((pid = fork()) == 0) {
-				execl(uuidd_path, "uuidd", "-qT", "300", 
+				close_all_fds();
+				execl(uuidd_path, "uuidd", "-qT", "300",
 				      (char *) NULL);
 				exit(1);
 			}
diff --git a/lib/uuid/isnull.c b/lib/uuid/isnull.c
index 54a8300..931e7e7 100644
--- a/lib/uuid/isnull.c
+++ b/lib/uuid/isnull.c
@@ -1,6 +1,6 @@
 /*
  * isnull.c --- Check whether or not the UUID is null
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
diff --git a/lib/uuid/pack.c b/lib/uuid/pack.c
index 348d432..097516d 100644
--- a/lib/uuid/pack.c
+++ b/lib/uuid/pack.c
@@ -1,6 +1,6 @@
 /*
  * Internal routine for packing UUID's
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -48,7 +48,7 @@
 	out[1] = (unsigned char) tmp;
 	tmp >>= 8;
 	out[0] = (unsigned char) tmp;
-	
+
 	tmp = uu->time_mid;
 	out[5] = (unsigned char) tmp;
 	tmp >>= 8;
diff --git a/lib/uuid/parse.c b/lib/uuid/parse.c
index 07b894d..074383e 100644
--- a/lib/uuid/parse.c
+++ b/lib/uuid/parse.c
@@ -1,6 +1,6 @@
 /*
  * parse.c --- UUID parsing
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -73,7 +73,7 @@
 		buf[1] = *cp++;
 		uuid.node[i] = strtoul(buf, NULL, 16);
 	}
-	
+
 	uuid_pack(&uuid, uu);
 	return 0;
 }
diff --git a/lib/uuid/tst_uuid.c b/lib/uuid/tst_uuid.c
index 47ff06c..7ac0207 100644
--- a/lib/uuid/tst_uuid.c
+++ b/lib/uuid/tst_uuid.c
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -32,10 +32,16 @@
  * %End-Header%
  */
 
+#ifdef _WIN32
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#define UUID MYUUID
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "uuid.h"
+#include <uuid/uuid.h>
 
 static int test_uuid(const char * uuid, int isValid)
 {
@@ -54,8 +60,14 @@
 	return 0;
 }
 
+#ifdef __GNUC__
+#define ATTR(x) __attribute__(x)
+#else
+#define ATTR(x)
+#endif
+
 int
-main(int argc, char **argv)
+main(int argc ATTR((unused)) , char **argv ATTR((unused)))
 {
 	uuid_t		buf, tst;
 	char		str[100];
diff --git a/lib/uuid/unpack.c b/lib/uuid/unpack.c
index 9502fc2..beaaff3 100644
--- a/lib/uuid/unpack.c
+++ b/lib/uuid/unpack.c
@@ -1,6 +1,6 @@
 /*
  * Internal routine for unpacking UUID
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -49,7 +49,7 @@
 	tmp = *ptr++;
 	tmp = (tmp << 8) | *ptr++;
 	uu->time_mid = tmp;
-	
+
 	tmp = *ptr++;
 	tmp = (tmp << 8) | *ptr++;
 	uu->time_hi_and_version = tmp;
diff --git a/lib/uuid/unparse.c b/lib/uuid/unparse.c
index c0e08ef..a95bbb0 100644
--- a/lib/uuid/unparse.c
+++ b/lib/uuid/unparse.c
@@ -1,6 +1,6 @@
 /*
  * unparse.c -- convert a UUID to string
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -36,10 +36,10 @@
 
 #include "uuidP.h"
 
-static const char *fmt_lower = 
+static const char *fmt_lower =
 	"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x";
 
-static const char *fmt_upper = 
+static const char *fmt_upper =
 	"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X";
 
 #ifdef UUID_UNPARSE_DEFAULT_UPPER
diff --git a/lib/uuid/uuid.h b/lib/uuid/uuid.h
index e9cf889..ca846da 100644
--- a/lib/uuid/uuid.h
+++ b/lib/uuid/uuid.h
@@ -1,6 +1,6 @@
 /*
  * Public include file for the UUID library
- * 
+ *
  * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -36,7 +36,9 @@
 #define _UUID_UUID_H
 
 #include <sys/types.h>
+#ifndef _WIN32
 #include <sys/time.h>
+#endif
 #include <time.h>
 
 typedef unsigned char uuid_t[16];
diff --git a/lib/uuid/uuid.h.in b/lib/uuid/uuid.h.in
new file mode 100644
index 0000000..ca846da
--- /dev/null
+++ b/lib/uuid/uuid.h.in
@@ -0,0 +1,103 @@
+/*
+ * Public include file for the UUID library
+ *
+ * Copyright (C) 1996, 1997, 1998 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ * %End-Header%
+ */
+
+#ifndef _UUID_UUID_H
+#define _UUID_UUID_H
+
+#include <sys/types.h>
+#ifndef _WIN32
+#include <sys/time.h>
+#endif
+#include <time.h>
+
+typedef unsigned char uuid_t[16];
+
+/* UUID Variant definitions */
+#define UUID_VARIANT_NCS 	0
+#define UUID_VARIANT_DCE 	1
+#define UUID_VARIANT_MICROSOFT	2
+#define UUID_VARIANT_OTHER	3
+
+/* UUID Type definitions */
+#define UUID_TYPE_DCE_TIME   1
+#define UUID_TYPE_DCE_RANDOM 4
+
+/* Allow UUID constants to be defined */
+#ifdef __GNUC__
+#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
+	static const uuid_t name __attribute__ ((unused)) = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
+#else
+#define UUID_DEFINE(name,u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15) \
+	static const uuid_t name = {u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15}
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* clear.c */
+void uuid_clear(uuid_t uu);
+
+/* compare.c */
+int uuid_compare(const uuid_t uu1, const uuid_t uu2);
+
+/* copy.c */
+void uuid_copy(uuid_t dst, const uuid_t src);
+
+/* gen_uuid.c */
+void uuid_generate(uuid_t out);
+void uuid_generate_random(uuid_t out);
+void uuid_generate_time(uuid_t out);
+
+/* isnull.c */
+int uuid_is_null(const uuid_t uu);
+
+/* parse.c */
+int uuid_parse(const char *in, uuid_t uu);
+
+/* unparse.c */
+void uuid_unparse(const uuid_t uu, char *out);
+void uuid_unparse_lower(const uuid_t uu, char *out);
+void uuid_unparse_upper(const uuid_t uu, char *out);
+
+/* uuid_time.c */
+time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);
+int uuid_type(const uuid_t uu);
+int uuid_variant(const uuid_t uu);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UUID_UUID_H */
diff --git a/lib/uuid/uuid.pc.in b/lib/uuid/uuid.pc.in
index e15a2be..9e38a32 100644
--- a/lib/uuid/uuid.pc.in
+++ b/lib/uuid/uuid.pc.in
@@ -7,5 +7,5 @@
 Description: Universally unique id library
 Version: @E2FSPROGS_VERSION@
 Requires: 
-Cflags: -I${includedir} 
+Cflags: -I${includedir}/uuid
 Libs: -L${libdir} -luuid
diff --git a/lib/uuid/uuidP.h b/lib/uuid/uuidP.h
index adf233d..e897bbb 100644
--- a/lib/uuid/uuidP.h
+++ b/lib/uuid/uuidP.h
@@ -1,6 +1,6 @@
 /*
  * uuid.h -- private header file for uuids
- * 
+ *
  * Copyright (C) 1996, 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -16,7 +16,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -39,7 +39,7 @@
 #endif
 #include <sys/types.h>
 
-#include "uuid.h"
+#include <uuid/uuid.h>
 
 /*
  * Offset between 15-Oct-1582 and 1-Jan-70
diff --git a/lib/uuid/uuid_time.c b/lib/uuid/uuid_time.c
index d5f992b..f25f5c9 100644
--- a/lib/uuid/uuid_time.c
+++ b/lib/uuid/uuid_time.c
@@ -2,7 +2,7 @@
  * uuid_time.c --- Interpret the time field from a uuid.  This program
  * 	violates the UUID abstraction barrier by reaching into the guts
  *	of a UUID and interpreting it.
- * 
+ *
  * Copyright (C) 1998, 1999 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -18,7 +18,7 @@
  * 3. The name of the author may not be used to endorse or promote
  *    products derived from this software without specific prior
  *    written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
@@ -34,28 +34,38 @@
  * %End-Header%
  */
 
+#ifdef _WIN32
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#define UUID MYUUID
+#endif
+
 #include <stdio.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <sys/types.h>
+#ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
+#endif
 #include <time.h>
 
 #include "uuidP.h"
 
 time_t uuid_time(const uuid_t uu, struct timeval *ret_tv)
 {
-	struct uuid		uuid;
-	uint32_t			high;
 	struct timeval		tv;
-	unsigned long long	clock_reg;
+	struct uuid		uuid;
+	uint32_t		high;
+	uint64_t		clock_reg;
 
 	uuid_unpack(uu, &uuid);
-	
-	high = uuid.time_mid | ((uuid.time_hi_and_version & 0xFFF) << 16);
-	clock_reg = uuid.time_low | ((unsigned long long) high << 32);
 
-	clock_reg -= (((unsigned long long) 0x01B21DD2) << 32) + 0x13814000;
+	high = uuid.time_mid | ((uuid.time_hi_and_version & 0xFFF) << 16);
+	clock_reg = uuid.time_low | ((uint64_t) high << 32);
+
+	clock_reg -= (((uint64_t) 0x01B21DD2) << 32) + 0x13814000;
 	tv.tv_sec = clock_reg / 10000000;
 	tv.tv_usec = (clock_reg % 10000000) / 10;
 
@@ -69,7 +79,7 @@
 {
 	struct uuid		uuid;
 
-	uuid_unpack(uu, &uuid);	
+	uuid_unpack(uu, &uuid);
 	return ((uuid.time_hi_and_version >> 12) & 0xF);
 }
 
@@ -78,7 +88,7 @@
 	struct uuid		uuid;
 	int			var;
 
-	uuid_unpack(uu, &uuid);	
+	uuid_unpack(uu, &uuid);
 	var = uuid.clock_seq;
 
 	if ((var & 0x8000) == 0)
@@ -105,7 +115,7 @@
 	}
 }
 
-	
+
 int
 main(int argc, char **argv)
 {
@@ -155,7 +165,7 @@
 	}
 	printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, tv.tv_usec,
 	       ctime(&time_reg));
-	
+
 	return 0;
 }
 #endif
diff --git a/lib/uuid/uuid_types.h b/lib/uuid/uuid_types.h
index 169a88a..3e2290b 100644
--- a/lib/uuid/uuid_types.h
+++ b/lib/uuid/uuid_types.h
@@ -12,7 +12,7 @@
 #if (4 == 8)
 typedef int		int64_t;
 typedef unsigned int	uint64_t;
-#elif (4 == 8)
+#elif (8 == 8)
 typedef long		int64_t;
 typedef unsigned long	uint64_t;
 #elif (8 == 8)
@@ -37,7 +37,7 @@
 #if (4 == 4)
 typedef	int		int32_t;
 typedef	unsigned int	uint32_t;
-#elif (4 == 4)
+#elif (8 == 4)
 typedef	long		int32_t;
 typedef	unsigned long	uint32_t;
 #elif (2 == 4)
diff --git a/lib/uuid/uuidd.h b/lib/uuid/uuidd.h
index 528acdc..c71f4b7 100644
--- a/lib/uuid/uuidd.h
+++ b/lib/uuid/uuidd.h
@@ -35,8 +35,9 @@
 #ifndef _UUID_UUIDD_H
 #define _UUID_UUIDD_H
 
-#define UUIDD_SOCKET_PATH	"/var/lib/libuuid/request"
-#define UUIDD_PIDFILE_PATH	"/var/lib/libuuid/uuidd.pid"
+#define UUIDD_DIR		"/var/lib/libuuid"
+#define UUIDD_SOCKET_PATH	UUIDD_DIR "/request"
+#define UUIDD_PIDFILE_PATH	UUIDD_DIR "/uuidd.pid"
 #define UUIDD_PATH		"/usr/sbin/uuidd"
 
 #define UUIDD_OP_GETPID			0
diff --git a/misc/Android.mk b/misc/Android.mk
index 0094869..743f6bb 100644
--- a/misc/Android.mk
+++ b/misc/Android.mk
@@ -2,25 +2,22 @@
 
 #########################################################################
 # Build mke2fs
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
+mke2fs_src_files := \
 	mke2fs.c \
 	util.c \
 	default_profile.c
 
-LOCAL_C_INCLUDES := \
+mke2fs_c_includes := \
 	external/e2fsprogs/lib \
 	external/e2fsprogs/e2fsck
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+mke2fs_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
 	-DHAVE_SYS_IOCTL_H \
 	-DHAVE_SYS_MMAN_H \
 	-DHAVE_SYS_MOUNT_H \
-	-DHAVE_SYS_PRCTL_H \
 	-DHAVE_SYS_RESOURCE_H \
 	-DHAVE_SYS_SELECT_H \
 	-DHAVE_SYS_STAT_H \
@@ -31,43 +28,69 @@
 	-DHAVE_MMAP \
 	-DHAVE_UTIME_H \
 	-DHAVE_GETPAGESIZE \
-	-DHAVE_LSEEK64 \
-	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
-	-DHAVE_LINUX_FD_H \
 	-DHAVE_TYPE_SSIZE_T \
-	-DHAVE_GETOPT_H
+	-DHAVE_GETOPT_H \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
-LOCAL_CFLAGS += -DNO_CHECK_BB
+mke2fs_cflags_linux := \
+	-DHAVE_LINUX_FD_H \
+	-DHAVE_SYS_PRCTL_H \
+	-DHAVE_LSEEK64 \
+	-DHAVE_LSEEK64_PROTOTYPE
 
-LOCAL_MODULE := mke2fs
-LOCAL_MODULE_TAGS := eng
+mke2fs_cflags += -DNO_CHECK_BB
 
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
+mke2fs_shared_libraries := \
 	libext2fs \
 	libext2_blkid \
 	libext2_uuid \
 	libext2_profile \
 	libext2_com_err \
-	libext2_e2p \
-	libc
+	libext2_e2p
 
+mke2fs_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(mke2fs_src_files)
+LOCAL_C_INCLUDES := $(mke2fs_c_includes)
+LOCAL_CFLAGS := $(mke2fs_cflags) $(mke2fs_cflags_linux)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(mke2fs_system_shared_libraries)
+LOCAL_SHARED_LIBRARIES := $(mke2fs_shared_libraries)
+LOCAL_MODULE := mke2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 include $(BUILD_EXECUTABLE)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(mke2fs_src_files)
+LOCAL_C_INCLUDES := $(mke2fs_c_includes)
+ifeq ($(HOST_OS),linux)
+LOCAL_CFLAGS := $(mke2fs_cflags) $(mke2fs_cflags_linux)
+else
+LOCAL_CFLAGS := $(mke2fs_cflags)
+endif
+LOCAL_SHARED_LIBRARIES := $(mke2fs_shared_libraries)
+LOCAL_MODULE := mke2fs_host
+LOCAL_MODULE_STEM := mke2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_EXECUTABLE)
+
 ###########################################################################
 # Build tune2fs
 #
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
+tune2fs_src_files := \
 	tune2fs.c \
 	util.c
 
-LOCAL_C_INCLUDES := \
+tune2fs_c_includes := \
 	external/e2fsprogs/lib \
 	external/e2fsprogs/e2fsck
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+tune2fs_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
@@ -90,31 +113,57 @@
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
 	-DHAVE_TYPE_SSIZE_T \
-	-DHAVE_GETOPT_H
+	-DHAVE_GETOPT_H \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
-LOCAL_CFLAGS += -DNO_CHECK_BB
+tune2fs_cflags += -DNO_CHECK_BB
 
-LOCAL_MODULE := tune2fs
-LOCAL_MODULE_TAGS := eng
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
+tune2fs_shared_libraries := \
 	libext2fs \
 	libext2_com_err \
-	libc
+	libext2_blkid \
+	libext2_uuid \
+	libext2_e2p
+
+tune2fs_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(tune2fs_src_files)
+LOCAL_C_INCLUDES := $(tune2fs_c_includes)
+LOCAL_CFLAGS := $(tune2fs_cflags)
+LOCAL_SHARED_LIBRARIES := $(tune2fs_shared_libraries)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(tune2fs_system_shared_libraries)
+LOCAL_MODULE := tune2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 
 include $(BUILD_EXECUTABLE)
 
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(tune2fs_src_files)
+LOCAL_C_INCLUDES := $(tune2fs_c_includes)
+LOCAL_CFLAGS := $(tune2fs_cflags)
+LOCAL_SHARED_LIBRARIES := $(tune2fs_shared_libraries)
+LOCAL_MODULE := tune2fs_host
+LOCAL_MODULE_STEM := tune2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_EXECUTABLE)
+
 #########################################################################
 # Build badblocks
 #
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+badblocks_src_files := \
 	badblocks.c
 
-LOCAL_C_INCLUDES := \
+badblocks_c_includes := \
 	external/e2fsprogs/lib
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+badblocks_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
@@ -137,14 +186,39 @@
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
 	-DHAVE_TYPE_SSIZE_T \
-	-DHAVE_GETOPT_H
+	-DHAVE_GETOPT_H \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
-LOCAL_MODULE := badblocks
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SYSTEM_SHARED_LIBRARIES := \
+badblocks_shared_libraries := \
 	libext2fs \
 	libext2_com_err \
-	libc
+	libext2_uuid \
+	libext2_blkid \
+	libext2_e2p
+
+badblocks_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(badblocks_src_files)
+LOCAL_C_INCLUDES := $(badblocks_c_includes)
+LOCAL_CFLAGS := $(badblocks_cflags)
+LOCAL_SHARED_LIBRARIES := $(badblocks_shared_libraries)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(badblocks_system_shared_libraries)
+LOCAL_MODULE := badblocks
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 
 include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(badblocks_src_files)
+LOCAL_C_INCLUDES := $(badblocks_c_includes)
+LOCAL_CFLAGS := $(badblocks_cflags)
+LOCAL_SHARED_LIBRARIES := $(badblocks_shared_libraries)
+LOCAL_MODULE := badblocks_host
+LOCAL_MODULE_STEM := badblocks
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_EXECUTABLE)
diff --git a/misc/Makefile.in b/misc/Makefile.in
index b4c39ee..09c6d6a 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -17,16 +17,22 @@
 @UUIDD_CMT@UUIDD_PROG= uuidd
 @UUIDD_CMT@UUIDD_MAN= uuidd.8
 
-SPROGS=		mke2fs badblocks tune2fs dumpe2fs blkid logsave \
-			$(E2IMAGE_PROG) @FSCK_PROG@
-USPROGS=	mklost+found filefrag $(UUIDD_PROG)
+@BLKID_CMT@BLKID_PROG= blkid
+@BLKID_CMT@BLKID_MAN= blkid.8
+
+@BLKID_CMT@FINDFS_LINK= findfs
+@BLKID_CMT@FINDFS_MAN= findfs.8
+
+SPROGS=		mke2fs badblocks tune2fs dumpe2fs $(BLKID_PROG) logsave \
+			$(E2IMAGE_PROG) @FSCK_PROG@ e2undo
+USPROGS=	mklost+found filefrag e2freefrag $(UUIDD_PROG)
 SMANPAGES=	tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
-			e2label.8 findfs.8 blkid.8 $(E2IMAGE_MAN) \
-			logsave.8 filefrag.8 $(UUIDD_MAN) @FSCK_MAN@
+			e2label.8 $(FINDFS_MAN) $(BLKID_MAN) $(E2IMAGE_MAN) \
+			logsave.8 filefrag.8 e2freefrag.8 e2undo.8 $(UUIDD_MAN) @FSCK_MAN@
 FMANPAGES=	mke2fs.conf.5
 
-UPROGS=		chattr lsattr uuidgen
-UMANPAGES=	chattr.1 lsattr.1 uuidgen.1
+UPROGS=		chattr lsattr @UUID_CMT@ uuidgen
+UMANPAGES=	chattr.1 lsattr.1 @UUID_CMT@ uuidgen.1
 
 LPROGS=		@E2INITRD_PROG@
 
@@ -43,6 +49,26 @@
 FSCK_OBJS=	fsck.o base_device.o ismounted.o
 BLKID_OBJS=	blkid.o
 FILEFRAG_OBJS=	filefrag.o
+E2UNDO_OBJS=  e2undo.o
+E2FREEFRAG_OBJS= e2freefrag.o
+
+PROFILED_TUNE2FS_OBJS=	profiled/tune2fs.o profiled/util.o
+PROFILED_MKLPF_OBJS=	profiled/mklost+found.o
+PROFILED_MKE2FS_OBJS=	profiled/mke2fs.o profiled/util.o profiled/profile.o \
+			profiled/prof_err.o profiled/default_profile.o
+PROFILED_CHATTR_OBJS=	profiled/chattr.o
+PROFILED_LSATTR_OBJS=	profiled/lsattr.o
+PROFILED_UUIDGEN_OBJS=	profiled/uuidgen.o
+PROFILED_UUIDD_OBJS=	profiled/uuidd.o
+PROFILED_DUMPE2FS_OBJS=	profiled/dumpe2fs.o
+PROFILED_BADBLOCKS_OBJS=	profiled/badblocks.o
+PROFILED_E2IMAGE_OBJS=	profiled/e2image.o
+PROFILED_FSCK_OBJS=	profiled/fsck.o profiled/base_device.o \
+			profiled/ismounted.o
+PROFILED_BLKID_OBJS=	profiled/blkid.o
+PROFILED_FILEFRAG_OBJS=	profiled/filefrag.o
+PROFILED_E2UNDO_OBJS=	profiled/e2undo.o
+
 
 XTRA_CFLAGS=	-I$(srcdir)/../e2fsck -I.
 
@@ -51,70 +77,123 @@
 		$(srcdir)/badblocks.c $(srcdir)/fsck.c $(srcdir)/util.c \
 		$(srcdir)/uuidgen.c $(srcdir)/blkid.c $(srcdir)/logsave.c \
 		$(srcdir)/filefrag.c $(srcdir)/base_device.c \
-		$(srcdir)/ismounted.c $(srcdir)/../e2fsck/profile.c
+		$(srcdir)/ismounted.c $(srcdir)/../e2fsck/profile.c \
+		$(srcdir)/e2undo.c $(srcdir)/e2freefrag.c
 
 LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) 
-DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) 
+DEPLIBS= $(LIBEXT2FS) $(DEPLIBCOM_ERR)
+PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR)
+PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(DEPPROFILED_LIBCOM_ERR)
 
 STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) 
-STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) 
-
-LIBS_BLKID= $(LIBBLKID) $(LIBUUID)
-DEPLIBS_BLKID= $(DEPLIBBLKID) $(DEPLIBUUID)
+STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) 
 
 LIBS_E2P= $(LIBE2P) $(LIBCOM_ERR) 
-DEPLIBS_E2P= $(LIBE2P) $(LIBCOM_ERR) 
+DEPLIBS_E2P= $(LIBE2P) $(DEPLIBCOM_ERR) 
 
 COMPILE_ET=$(top_builddir)/lib/et/compile_et --build-tree
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $< -o $@
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
 
-all:: $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \
+all:: profiled $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \
 	$(FMANPAGES) $(LPROGS)
 
+@PROFILE_CMT@all:: tune2fs.profiled blkid.profiled e2image.profiled \
+	e2undo.profiled mke2fs.profiled dumpe2fs.profiled fsck.profiled \
+	logsave.profiled filefrag.profiled uuidgen.profiled uuidd.profiled \
+	e2image.profiled
+
+profiled:
+@PROFILE_CMT@	$(E) "	MKDIR $@"
+@PROFILE_CMT@	$(Q) mkdir profiled
+
 prof_err.c prof_err.h: $(srcdir)/../e2fsck/prof_err.et
-	@echo "	COMPILE_ET prof_err.et"
-	@$(COMPILE_ET) $(srcdir)/../e2fsck/prof_err.et
+	$(E) "	COMPILE_ET prof_err.et"
+	$(Q) $(COMPILE_ET) $(srcdir)/../e2fsck/prof_err.et
 
 default_profile.c: $(srcdir)/mke2fs.conf $(srcdir)/profile-to-c.awk
-	@echo "	PROFILE_TO_C mke2fs.conf"
-	$(AWK) -f $(srcdir)/profile-to-c.awk < $(srcdir)/mke2fs.conf \
+	$(E) "	PROFILE_TO_C mke2fs.conf"
+	$(Q) $(AWK) -f $(srcdir)/profile-to-c.awk < $(srcdir)/mke2fs.conf \
 		>  default_profile.c
 profile.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $(srcdir)/../e2fsck/profile.c -o $@
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $(srcdir)/../e2fsck/profile.c -o $@
+@PROFILE_CMT@	$(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/profile.o -c \
+@PROFILE_CMT@	$(srcdir)/../e2fsck/profile.c
 
 findsuper: findsuper.o
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o findsuper findsuper.o
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o findsuper findsuper.o
 
 partinfo: partinfo.o
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o partinfo partinfo.o
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o partinfo partinfo.o
 
-e2initrd_helper: e2initrd_helper.o $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o e2initrd_helper e2initrd_helper.o $(LIBS) \
-		$(LIBS_BLKID) $(LIBS_E2P) $(LIBINTL)
+e2initrd_helper: e2initrd_helper.o $(DEPLIBS) $(DEPLIBBLKID) $(LIBEXT2FS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o e2initrd_helper e2initrd_helper.o $(LIBS) \
+		$(LIBBLKID) $(LIBEXT2FS) $(LIBINTL)
 
-tune2fs: $(TUNE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o tune2fs $(TUNE2FS_OBJS) $(LIBS) \
-		$(LIBS_BLKID) $(LIBS_E2P) $(LIBINTL)
+tune2fs: $(TUNE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBBLKID) \
+		$(DEPLIBUUID) $(LIBEXT2FS) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o tune2fs $(TUNE2FS_OBJS) $(LIBS) \
+		$(LIBBLKID) $(LIBUUID) $(LIBEXT2FS) $(LIBS_E2P) $(LIBINTL)
 
-blkid: $(BLKID_OBJS) $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o blkid $(BLKID_OBJS) $(LIBS_BLKID) $(LIBINTL)
+tune2fs.static: $(TUNE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIBBLKID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(LDFLAGS_STATIC) -o tune2fs.static $(TUNE2FS_OBJS) \
+		$(STATIC_LIBS) $(STATIC_LIBBLKID) $(STATIC_LIBUUID) \
+		$(STATIC_LIBE2P) $(LIBINTL)
+
+tune2fs.profiled: $(PROFILED_TUNE2FS_OBJS) $(PROFILED_DEPLIBS) \
+		$(PROFILED_E2P) $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o tune2fs.profiled \
+		$(PROFILED_TUNE2FS_OBJS) $(PROFILED_LIBBLKID) \
+		$(PROFILED_LIBUUID) $(PROFILED_LIBE2P) $(LIBINTL) \
+		$(PROFILED_LIBS) 
+
+blkid: $(BLKID_OBJS) $(DEPLIBBLKID) $(LIBEXT2FS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o blkid $(BLKID_OBJS) $(LIBBLKID) $(LIBINTL) \
+		$(LIBEXT2FS)
+
+blkid.static: $(BLKID_OBJS) $(STATIC_DEPLIBS) $(DEPSTATIC_LIBBLKID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o blkid.static $(BLKID_OBJS) $(STATIC_LIBS) \
+		$(STATIC_LIBBLKID) $(LIBINTL)
+
+blkid.profiled: $(PROFILED_BLKID_OBJS) $(DEPPROFILED_LIBBLKID) \
+		$(PROFILED_LIBEXT2FS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o blkid.profiled $(PROFILED_BLKID_OBJS) \
+		$(PROFILED_LIBBLKID) $(LIBINTL) $(PROFILED_LIBEXT2FS)
 
 e2image: $(E2IMAGE_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o e2image $(E2IMAGE_OBJS) $(LIBS) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o e2image $(E2IMAGE_OBJS) $(LIBS) $(LIBINTL)
+
+e2image.profiled: $(PROFILED_E2IMAGE_OBJS) $(PROFILED_DEPLIBS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e2image.profiled \
+		$(PROFILED_E2IMAGE_OBJS) $(PROFILED_LIBS) $(LIBINTL)
+
+e2undo: $(E2UNDO_OBJS) $(DEPLIBS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o e2undo $(E2UNDO_OBJS) $(LIBS) $(LIBINTL)
+
+e2undo.profiled: $(PROFILED_E2UNDO_OBJS) $(PROFILED_DEPLIBS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e2undo.profiled \
+		$(PROFILED_E2UNDO_OBJS) $(PROFILED_LIBS) $(LIBINTL)
 
 base_device: base_device.c
-	@echo "	LD $@"
-	@$(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(srcdir)/base_device.c \
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(srcdir)/base_device.c \
 		-DDEBUG -o base_device
 
 check:: base_device
@@ -122,211 +201,306 @@
 	cmp $(srcdir)/base_device.tst base_device.out
 
 mklost+found: $(MKLPF_OBJS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o mklost+found $(MKLPF_OBJS) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o mklost+found $(MKLPF_OBJS) $(LIBINTL)
 
-mke2fs: $(MKE2FS_OBJS) $(DEPLIBS) $(LIBE2P) $(DEPLIBUUID) $(DEPLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o mke2fs $(MKE2FS_OBJS) $(LIBS) $(LIBS_BLKID) \
-		$(LIBE2P) $(LIBUUID) $(LIBINTL)
+mke2fs: $(MKE2FS_OBJS) $(DEPLIBS) $(LIBE2P) $(DEPLIBBLKID) $(DEPLIBUUID) \
+		$(LIBEXT2FS) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o mke2fs $(MKE2FS_OBJS) $(LIBS) $(LIBBLKID) \
+		$(LIBUUID) $(LIBEXT2FS) $(LIBE2P) $(LIBINTL)
 
 mke2fs.static: $(MKE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIBUUID) $(DEPSTATIC_LIBBLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -static -o mke2fs.static $(MKE2FS_OBJS) \
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -static -o mke2fs.static $(MKE2FS_OBJS) \
 		$(STATIC_LIBS) $(STATIC_LIBE2P) $(STATIC_LIBBLKID) \
 		$(STATIC_LIBUUID) $(LIBINTL)
 
+mke2fs.profiled: $(PROFILED_MKE2FS_OBJS) $(PROFILED_DEPLIBS) \
+	$(PROFILED_LIBE2P) $(PROFILED_DEPLIBBLKID) $(PROFILED_DEPLIBUUID) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o mke2fs.profiled \
+		$(PROFILED_MKE2FS_OBJS) $(PROFILED_LIBBLKID) \
+		$(PROFILED_LIBUUID) $(PROFILED_LIBE2P) $(LIBINTL) \
+		$(PROFILED_LIBS)
+
 chattr: $(CHATTR_OBJS) $(DEPLIBS_E2P)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o chattr $(CHATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o chattr $(CHATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
 
 lsattr: $(LSATTR_OBJS) $(DEPLIBS_E2P)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o lsattr $(LSATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o lsattr $(LSATTR_OBJS) $(LIBS_E2P) $(LIBINTL)
 
 uuidgen: $(UUIDGEN_OBJS) $(DEPLIBUUID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o uuidgen $(UUIDGEN_OBJS) $(LIBUUID) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o uuidgen $(UUIDGEN_OBJS) $(LIBUUID) $(LIBINTL)
+
+uuidgen.profiled: $(PROFILED_UUIDGEN_OBJS) $(PROFILED_DEPLIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o uuidgen.profiled \
+		$(PROFILED_UUIDGEN_OBJS) $(PROFILED_LIBUUID) $(LIBINTL)
 
 uuidd: $(UUIDD_OBJS) $(DEPLIBUUID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o uuidd $(UUIDD_OBJS) $(LIBUUID) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o uuidd $(UUIDD_OBJS) $(LIBUUID) $(LIBINTL)
+
+uuidd.profiled: $(PROFILED_UUIDD_OBJS) $(PROFILED_DEPLIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o uuidd.profiled $(PROFILED_UUIDD_OBJS) \
+		$(PROFILED_LIBUUID) $(LIBINTL)
 
 dumpe2fs: $(DUMPE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBUUID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o dumpe2fs $(DUMPE2FS_OBJS) $(LIBS) \
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o dumpe2fs $(DUMPE2FS_OBJS) $(LIBS) \
 		$(LIBS_E2P) $(LIBUUID) $(LIBINTL)
 
-fsck: $(FSCK_OBJS) $(DEBLIBS_BLKID)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBS_BLKID) $(LIBINTL)
+dumpe2fs.profiled: $(PROFILED_DUMPE2FS_OBJS) $(PROFILED_DEPLIBS) \
+		$(PROFILED_LIBE2P) $(PROFILED_DEPLIBUUID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o dumpe2fs.profiled \
+		$(PROFILED_DUMPE2FS_OBJS) $(PROFILED_LIBS) \
+		$(PROFILED_LIBE2P) $(PROFILED_LIBUUID) $(LIBINTL)
+
+fsck: $(FSCK_OBJS) $(DEPLIBBLKID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBBLKID) $(LIBINTL)
+
+fsck.profiled: $(PROFILED_FSCK_OBJS) $(PROFILED_DEPLIBBLKID)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o fsck.profiled $(PROFILED_FSCK_OBJS) \
+		$(PROFILED_LIBBLKID) $(LIBINTL)
 
 badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
+
+badblocks.profiled: $(PROFILED_BADBLOCKS_OBJS) $(PROFILED_DEPLIBS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o badblocks.profiled \
+		$(PROFILED_BADBLOCKS_OBJS) $(PROFILED_LIBS) $(LIBINTL)
 
 logsave: logsave.o
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o logsave logsave.o
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o logsave logsave.o
+
+logsave.profiled: profiled/logsave.o
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o logsave.profiled profiled/logsave.o
+
+e2freefrag: $(E2FREEFRAG_OBJS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o e2freefrag $(E2FREEFRAG_OBJS) $(LIBS)
 
 filefrag: $(FILEFRAG_OBJS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o filefrag $(FILEFRAG_OBJS) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o filefrag $(FILEFRAG_OBJS) 
 
-tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS)
-	@echo "	LD $@"
-	$(CC) -o tst_ismounted $(srcdir)/ismounted.c -DDEBUG $(ALL_CFLAGS) $(LIBCOM_ERR)
+filefrag.profiled: $(PROFILED_FILEFRAG_OBJS)
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o filefrag.profiled \
+		$(PROFILED_FILEFRAG_OBJS) 
+
+tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+	$(E) "	LD $@"
+	$(CC) -o tst_ismounted $(srcdir)/ismounted.c -DDEBUG $(ALL_CFLAGS) \
+		$(LIBCOM_ERR)
 
 tune2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/tune2fs.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/tune2fs.8.in tune2fs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/tune2fs.8.in tune2fs.8
 
 mklost+found.8: $(DEP_SUBSTITUTE) $(srcdir)/mklost+found.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/mklost+found.8.in mklost+found.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/mklost+found.8.in mklost+found.8
 
 mke2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/mke2fs.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.8.in mke2fs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.8.in mke2fs.8
 
 mke2fs.conf.5: $(DEP_SUBSTITUTE) $(srcdir)/mke2fs.conf.5.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.conf.5.in mke2fs.conf.5
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/mke2fs.conf.5.in mke2fs.conf.5
 
 e2label.8: $(DEP_SUBSTITUTE) $(srcdir)/e2label.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/e2label.8.in e2label.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2label.8.in e2label.8
+
+e2undo.8: $(DEP_SUBSTITUTE) $(srcdir)/e2undo.8.in
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2undo.8.in e2undo.8
 
 findfs.8: $(DEP_SUBSTITUTE) $(srcdir)/findfs.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/findfs.8.in findfs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/findfs.8.in findfs.8
 
 e2image.8: $(DEP_SUBSTITUTE) $(srcdir)/e2image.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/e2image.8.in e2image.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2image.8.in e2image.8
 
 dumpe2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/dumpe2fs.8.in 
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/dumpe2fs.8.in dumpe2fs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/dumpe2fs.8.in dumpe2fs.8
 
 badblocks.8: $(DEP_SUBSTITUTE) $(srcdir)/badblocks.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/badblocks.8.in badblocks.8	
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/badblocks.8.in badblocks.8	
 
 fsck.8: $(DEP_SUBSTITUTE) $(srcdir)/fsck.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/fsck.8.in fsck.8 
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/fsck.8.in fsck.8 
 
 blkid.8: $(DEP_SUBSTITUTE) $(srcdir)/blkid.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/blkid.8.in blkid.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/blkid.8.in blkid.8
 
 logsave.8: $(DEP_SUBSTITUTE) $(srcdir)/logsave.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/logsave.8.in logsave.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/logsave.8.in logsave.8
 
 uuidd.8: $(DEP_SUBSTITUTE) $(srcdir)/uuidd.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuidd.8.in uuidd.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuidd.8.in uuidd.8
 
 chattr.1: $(DEP_SUBSTITUTE) $(srcdir)/chattr.1.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/chattr.1.in chattr.1 
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/chattr.1.in chattr.1 
 
 lsattr.1: $(DEP_SUBSTITUTE) $(srcdir)/lsattr.1.in 
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/lsattr.1.in lsattr.1 
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/lsattr.1.in lsattr.1 
 
 uuidgen.1: $(DEP_SUBSTITUTE) $(srcdir)/uuidgen.1.in 
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/uuidgen.1.in uuidgen.1 
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/uuidgen.1.in uuidgen.1 
 
 blkid.1: $(DEP_SUBSTITUTE) $(srcdir)/blkid.1.in 
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/blkid.1.in blkid.1 
+
+e2freefrag.8: $(DEP_SUBSTITUTE) $(srcdir)/e2freefrag.8.in
 	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/blkid.1.in blkid.1 
+	@$(SUBSTITUTE_UPTIME) $(srcdir)/e2freefrag.8.in e2freefrag.8
 
 filefrag.8: $(DEP_SUBSTITUTE) $(srcdir)/filefrag.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/filefrag.8.in filefrag.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/filefrag.8.in filefrag.8
 
 installdirs:
-	@echo "	MKINSTALLDIRS $(sbindir) $(root_sbindir) $(bindir) $(man1dir) $(man8dir) $(libdir) $(root_sysconfdir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(sbindir) \
+	$(E) "	MKINSTALLDIRS $(sbindir) $(root_sbindir) $(bindir) $(man1dir) $(man8dir) $(libdir) $(root_sysconfdir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) \
 		$(DESTDIR)$(root_sbindir) $(DESTDIR)$(bindir) \
 		$(DESTDIR)$(man1dir) $(DESTDIR)$(man8dir) \
 		$(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) \
 		$(DESTDIR)$(libdir) $(DESTDIR)/$(root_sysconfdir)
 
 install: all $(SMANPAGES) $(UMANPAGES) installdirs
-	@for i in $(SPROGS); do \
+	$(Q) for i in $(SPROGS); do \
 		echo "	INSTALL $(root_sbindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	@for i in $(USPROGS); do \
+	$(Q) for i in $(USPROGS); do \
 		echo "	INSTALL $(sbindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(sbindir)/$$i; \
 	done
-	@echo "	LINK $(root_sbindir)/mkfs.ext2"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
+	$(E) "	LINK $(root_sbindir)/mkfs.ext2"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
 		$(DESTDIR)$(root_sbindir)/mkfs.ext2
-	@echo "	LINK $(root_sbindir)/mkfs.ext3"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
+	$(E) "	LINK $(root_sbindir)/mkfs.ext3"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
 		$(DESTDIR)$(root_sbindir)/mkfs.ext3
-	@echo "	LINK $(root_sbindir)/e2label"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/tune2fs \
+	$(E) "	LINK $(root_sbindir)/mkfs.ext4"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
+		$(DESTDIR)$(root_sbindir)/mkfs.ext4
+	$(E) "	LINK $(root_sbindir)/mkfs.ext4dev"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/mke2fs \
+		$(DESTDIR)$(root_sbindir)/mkfs.ext4dev
+	$(E) "	LINK $(root_sbindir)/e2label"
+	$(Q) $(LN) -f $(DESTDIR)$(root_sbindir)/tune2fs \
 		$(DESTDIR)$(root_sbindir)/e2label
-	@echo "	LINK $(root_sbindir)/findfs"
-	@$(LN) -f $(DESTDIR)$(root_sbindir)/tune2fs \
-		$(DESTDIR)$(root_sbindir)/findfs
-	@for i in $(UPROGS); do \
+	$(Q) if test -n "$(FINDFS_LINK)"; then \
+		echo "  LINK $(root_sbindir)/findfs"; \
+		$(LN) -f $(DESTDIR)$(root_sbindir)/tune2fs \
+			$(DESTDIR)$(root_sbindir)/$(FINDFS_LINK); \
+	fi
+	$(Q) for i in $(UPROGS); do \
 		echo "	INSTALL $(bindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$i; \
 	done
-	@for i in $(LPROGS); do \
+	$(Q) for i in $(LPROGS); do \
 		echo "	INSTALL $(libdir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(libdir)/$$i; \
 	done
-	@for i in $(SMANPAGES); do \
+	$(Q) for i in $(SMANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
 		done; \
 		echo "	INSTALL_DATA $(man8dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man8dir)/$$i; \
 	done
-	@$(RM) -f $(DESTDIR)$(man8dir)/mkfs.ext2.8.gz \
+	$(Q) $(RM) -f $(DESTDIR)$(man8dir)/mkfs.ext2.8.gz \
 		$(DESTDIR)$(man8dir)/mkfs.ext3.8.gz
-	@echo "	LINK mkfs.ext2.8"
-	@$(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
+	$(E) "	LINK mkfs.ext2.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
 		$(DESTDIR)$(man8dir)/mkfs.ext2.8
-	@echo "	LINK mkfs.ext3.8"
-	@$(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
+	$(E) "	LINK mkfs.ext3.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
 		$(DESTDIR)$(man8dir)/mkfs.ext3.8
-	@for i in $(UMANPAGES); do \
+	$(E) "	LINK mkfs.ext4.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
+		$(DESTDIR)$(man8dir)/mkfs.ext4.8
+	$(E) "	LINK mkfs.ext4dev.8"
+	$(Q) $(LN) -f $(DESTDIR)$(man8dir)/mke2fs.8 \
+		$(DESTDIR)$(man8dir)/mkfs.ext4dev.8
+	$(Q) for i in $(UMANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man1dir)/$$i.$$j; \
 		done; \
 		echo "	INSTALL_DATA $(man1dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man1dir)/$$i; \
 	done
-	@for i in $(FMANPAGES); do \
+	$(Q) for i in $(FMANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man5dir)/$$i.$$j; \
 		done; \
 		echo "	INSTALL_DATA $(man5dir)/$$i"; \
 		$(INSTALL_DATA) $$i $(DESTDIR)$(man5dir)/$$i; \
 	done
-	@if ! test -f $(DESTDIR)$(root_sysconfdir)/mke2fs.conf; then \
+	$(Q) if test -f $(DESTDIR)$(root_sysconfdir)/mke2fs.conf; then \
+		if cmp -s $(DESTDIR)$(root_sysconfdir)/mke2fs.conf \
+			$(srcdir)/mke2fs.conf; then \
+			true; \
+		else \
+			if grep -q ext4dev $(DESTDIR)$(root_sysconfdir)/mke2fs.conf ; then \
+				echo "	INSTALL_DATA $(root_sysconfdir)/mke2fs.conf.e2fsprogs-new"; \
+				$(INSTALL_DATA) $(srcdir)/mke2fs.conf \
+					$(DESTDIR)$(root_sysconfdir)/mke2fs.conf.e2fsprogs-new; \
+				echo "Warning: installing mke2fs.conf in $(DESTDIR)$(root_sysconfdir)/mke2fs.conf.e2fsprogs-new"; \
+				echo "Check to see if you need to update your $(root_sysconfdir)/mke2fs.conf"; \
+			else \
+				echo "	INSTALL_DATA $(root_sysconfdir)/mke2fs.conf"; \
+				mv $(DESTDIR)$(root_sysconfdir)/mke2fs.conf \
+				   $(DESTDIR)$(root_sysconfdir)/mke2fs.conf.e2fsprogs-old; \
+				$(INSTALL_DATA) $(srcdir)/mke2fs.conf \
+					$(DESTDIR)$(root_sysconfdir)/mke2fs.conf; \
+				echo "Your mke2fs.conf is too old.  Backing up old version in"; \
+				echo "$(DESTDIR)$(root_sysconfdir)/mke2fs.conf.e2fsprogs-old.  Please check to see"; \
+				echo "if you have any local customizations that you wish to preserve."; \
+			fi; \
+			echo " "; \
+		fi; \
+	else \
 		echo "	INSTALL_DATA $(root_sysconfdir)/mke2fs.conf"; \
 		$(INSTALL_DATA) $(srcdir)/mke2fs.conf \
 			$(DESTDIR)$(root_sysconfdir)/mke2fs.conf; \
 	fi
 
 install-strip: install
-	@for i in $(SPROGS); do \
+	$(Q) for i in $(SPROGS); do \
 		echo "	STRIP $(root_sbindir)/$$i"; \
 		$(STRIP) $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	@for i in $(USPROGS); do \
+	$(Q) for i in $(USPROGS); do \
 		echo "	STRIP $(sbindir)/$$i"; \
 		$(STRIP) $(DESTDIR)$(sbindir)/$$i; \
 	done
@@ -342,7 +516,9 @@
 		$(RM) -f $(DESTDIR)$(libdir)/$$i; \
 	done
 	$(RM) -f $(DESTDIR)$(root_sbindir)/mkfs.ext2 \
-			$(DESTDIR)$(root_sbindir)/mkfs.ext3
+			$(DESTDIR)$(root_sbindir)/mkfs.ext3 \
+			$(DESTDIR)$(root_sbindir)/mkfs.ext4 \
+			$(DESTDIR)$(root_sbindir)/mkfs.ext4dev
 	for i in $(UPROGS); do \
 		$(RM) -f $(DESTDIR)$(bindir)/$$i; \
 	done
@@ -350,16 +526,15 @@
 		$(RM) -f $(DESTDIR)$(man8dir)/$$i; \
 	done
 	$(RM) -f $(DESTDIR)$(man8dir)/mkfs.ext2.8 \
-		$(DESTDIR)$(man8dir)/mkfs.ext3.8
+		$(DESTDIR)$(man8dir)/mkfs.ext3.8 \
+		$(DESTDIR)$(man8dir)/mkfs.ext4.8 \
+		$(DESTDIR)$(man8dir)/mkfs.ext4dev.8
 	for i in $(UMANPAGES); do \
 		$(RM) -f $(DESTDIR)$(man1dir)/$$i; \
 	done
-	for i in findfs e2label ; do \
+	for i in $(FINDFS_LINK) e2label ; do \
 		$(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	for i in fsck.ext2.8 fsck.ext3.8 ; do \
-		$(RM) -f $(DESTDIR)$(man8dir)/$$i; \
-	done
 	for i in $(FMANPAGES); do \
 		$(RM) -f $(DESTDIR)$(man5dir)/$$i; \
 	done
@@ -370,9 +545,14 @@
 clean:
 	$(RM) -f $(SPROGS) $(USPROGS) $(UPROGS) $(UMANPAGES) $(SMANPAGES) \
 		$(FMANPAGES) \
-		base_device base_device.out mke2fs.static filefrag \
+		base_device base_device.out mke2fs.static filefrag e2freefrag \
 		e2initrd_helper partinfo prof_err.[ch] default_profile.c \
-		uuidd e2image tst_ismounted \#* *.s *.o *.a *~ core
+		uuidd e2image tune2fs.static tst_ismounted fsck.profiled \
+		blkid.profiled tune2fs.profiled e2image.profiled \
+		e2undo.profiled mke2fs.profiled dumpe2fs.profiled \
+		logsave.profiled filefrag.profiled uuidgen.profiled \
+		uuidd.profiled e2image.profiled \
+		profiled/*.o \#* *.s *.o *.a *~ core gmon.out
 
 mostlyclean: clean
 distclean: clean
@@ -385,69 +565,79 @@
 #
 tune2fs.o: $(srcdir)/tune2fs.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
- $(top_srcdir)/lib/uuid/uuid.h $(top_srcdir)/lib/e2p/e2p.h \
- $(srcdir)/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \
- $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \
- $(srcdir)/util.h $(top_srcdir)/lib/blkid/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h $(top_srcdir)/version.h \
- $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h $(srcdir)/jfs_user.h \
+ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(srcdir)/util.h \
+ $(top_srcdir)/version.h $(srcdir)/nls-enable.h
 mklost+found.o: $(srcdir)/mklost+found.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/version.h \
  $(srcdir)/nls-enable.h
 mke2fs.o: $(srcdir)/mke2fs.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/et/com_err.h \
- $(top_srcdir)/lib/uuid/uuid.h $(top_srcdir)/lib/e2p/e2p.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
- $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
- $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/util.h \
- $(srcdir)/../e2fsck/profile.h prof_err.h $(top_srcdir)/version.h \
- $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/util.h $(srcdir)/../e2fsck/profile.h prof_err.h \
+ $(top_srcdir)/version.h $(srcdir)/nls-enable.h
 chattr.o: $(srcdir)/chattr.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/et/com_err.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
- $(top_srcdir)/version.h $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/version.h $(srcdir)/nls-enable.h
 lsattr.o: $(srcdir)/lsattr.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/et/com_err.h \
- $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
- $(top_srcdir)/version.h $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/version.h $(srcdir)/nls-enable.h
 dumpe2fs.o: $(srcdir)/dumpe2fs.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/lib/e2p/e2p.h $(srcdir)/jfs_user.h \
  $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \
- $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/uuid/uuid.h \
- $(top_srcdir)/version.h $(srcdir)/nls-enable.h
+ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/version.h \
+ $(srcdir)/nls-enable.h
 badblocks.o: $(srcdir)/badblocks.c $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(srcdir)/nls-enable.h
 fsck.o: $(srcdir)/fsck.c $(top_srcdir)/version.h $(srcdir)/nls-enable.h \
- $(srcdir)/fsck.h $(top_srcdir)/lib/blkid/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h
+ $(srcdir)/fsck.h
 util.o: $(srcdir)/util.c $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/nls-enable.h $(srcdir)/util.h
+uuidgen.o: $(srcdir)/uuidgen.c $(srcdir)/nls-enable.h
+blkid.o: $(srcdir)/blkid.c $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
- $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/nls-enable.h \
- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
- $(srcdir)/util.h
-uuidgen.o: $(srcdir)/uuidgen.c $(top_srcdir)/lib/uuid/uuid.h \
- $(srcdir)/nls-enable.h
-blkid.o: $(srcdir)/blkid.c $(top_srcdir)/lib/blkid/blkid.h \
- $(top_builddir)/lib/blkid/blkid_types.h
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h
 logsave.o: $(srcdir)/logsave.c
-filefrag.o: $(srcdir)/filefrag.c
+filefrag.o: $(srcdir)/filefrag.c $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/fiemap.h
 base_device.o: $(srcdir)/base_device.c $(srcdir)/fsck.h
-ismounted.o: $(srcdir)/ismounted.c $(top_srcdir)/lib/et/com_err.h
+ismounted.o: $(srcdir)/ismounted.c $(srcdir)/fsck.h \
+ $(top_srcdir)/lib/et/com_err.h
 profile.o: $(srcdir)/../e2fsck/profile.c $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/../e2fsck/profile.h prof_err.h
+e2undo.o: $(srcdir)/e2undo.c $(top_srcdir)/lib/ext2fs/tdb.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/nls-enable.h
+e2freefrag.o: $(srcdir)/e2freefrag.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(srcdir)/e2freefrag.h
diff --git a/misc/badblocks.8.in b/misc/badblocks.8.in
index 4748810..f256c0e 100644
--- a/misc/badblocks.8.in
+++ b/misc/badblocks.8.in
@@ -16,6 +16,14 @@
 .I blocks_at_once
 ]
 [
+.B \-e
+.I max_bad_blocks
+]
+[
+.B \-d
+.I read_delay_factor
+]
+[
 .B \-i
 .I input_file
 ]
@@ -35,7 +43,7 @@
 [
 .I last-block
 ] [
-.I start-block 
+.I first-block 
 ]
 .SH DESCRIPTION
 .B badblocks
@@ -46,7 +54,7 @@
 .I last-block
 is the last block to be checked; if it is not specified, the last block
 on the device is used as a default.
-.I start-block
+.I first-block
 is an optional parameter specifying the starting block number
 for the test, which allows the testing to start in the middle of the
 disk.  If it is not specified the first block on the disk is used as a default.
@@ -81,6 +89,19 @@
 .BI \-c " number of blocks"
 is the number of blocks which are tested at a time.  The default is 64.
 .TP
+.BI \-e " max bad block count"
+Specify a maximum number of bad blocks before aborting the test.  The
+default is 0, meaning the test will continue until the end of the test
+range is reached.
+.TP
+.BI \-d " read delay factor"
+This parameter, if passed and non-zero, will cause bad blocks to sleep
+between reads if there were no errors encountered in the read
+operation; the delay will be calculated as a percentage of the time it
+took for the read operation to be performed. In other words, a value of 
+100 will cause each read to be delayed by the amount the previous read
+took, and a value of 200 by twice the amount.
+.TP
 .B \-f
 Normally, badblocks will refuse to do a read/write or a non-destructive
 test on a device which is mounted, since either can cause the system to
@@ -110,6 +131,12 @@
 can be used to retrieve the list of blocks currently marked bad on
 an existing filesystem, in a format suitable for use with this option.
 .TP
+.B \-n
+Use non-destructive read-write mode.  By default only a non-destructive 
+read-only test is done.  This option must not be combined with the 
+.B \-w
+option, as they are mutually exclusive.
+.TP
 .BI \-o " output_file"
 Write the list of bad blocks to the specified file.  Without this option,
 .B badblocks
@@ -129,6 +156,15 @@
 .B badblocks
 will exit after the first pass.
 .TP
+.B \-s
+Show the progress of the scan by writing out rough percentage completion
+of the current badblocks pass over the disk.  Note that badblocks may do
+multiple test passes over the disk, in particular if the
+.B \-p
+or
+.B \-w
+option is requested by the user.
+.TP
 .BI \-t " test_pattern"
 Specify a test pattern to be read (and written) to disk blocks.   The
 .I test_pattern
@@ -147,16 +183,6 @@
 are specified then all blocks will be tested with one pattern 
 before proceeding to the next pattern.
 .TP
-.B \-n
-Use non-destructive read-write mode.  By default only a non-destructive 
-read-only test is done.  This option must not be combined with the 
-.B \-w
-option, as they are mutually exclusive.
-.TP
-.B \-s
-Show the progress of the scan by writing out the block numbers as they
-are checked.
-.TP
 .B \-v
 Verbose mode.
 .TP
@@ -183,6 +209,13 @@
 an existing file system, use the
 .B \-n
 option instead.  It is slower, but it will preserve your data.  
+.PP
+The
+.B \-e
+option will cause badblocks to output a possibly incomplete list of
+bad blocks. Therefore it is recommended to use it only when one wants
+to know if there are any bad blocks at all on the device, and not when
+the list of bad blocks is wanted.
 .SH AUTHOR
 .B badblocks
 was written by Remy Card <Remy.Card@linux.org>.  Current maintainer is
diff --git a/misc/badblocks.c b/misc/badblocks.c
index 88c5a74..bcf89f7 100644
--- a/misc/badblocks.c
+++ b/misc/badblocks.c
@@ -10,7 +10,7 @@
  *
  * This file is based on the minix file system programs fsck and mkfs
  * written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -24,13 +24,17 @@
  * 99/06/30...99/07/26 - Added non-destructive write-testing,
  *                       configurable blocks-at-once parameter,
  * 			 loading of badblocks list to avoid testing
- * 			 blocks known to be bad, multiple passes to 
+ * 			 blocks known to be bad, multiple passes to
  * 			 make sure that no new blocks are added to the
  * 			 list.  (Work done by David Beattie)
  */
 
 #define _GNU_SOURCE /* for O_DIRECT */
 
+#ifndef O_LARGEFILE
+#define O_LARGEFILE 0
+#endif
+
 #include <errno.h>
 #include <fcntl.h>
 #ifdef HAVE_GETOPT_H
@@ -48,6 +52,7 @@
 #include <time.h>
 #include <limits.h>
 
+#include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 
@@ -67,31 +72,38 @@
 static int force = 0;			/* force check of mounted device */
 static int t_flag = 0;			/* number of test patterns */
 static int t_max = 0;			/* allocated test patterns */
-static unsigned long *t_patts = NULL;	/* test patterns */
+static unsigned int *t_patts = NULL;	/* test patterns */
 static int current_O_DIRECT = 0;	/* Current status of O_DIRECT flag */
 static int exclusive_ok = 0;
+static unsigned int max_bb = 0;		/* Abort test if more than this number of bad blocks has been encountered */
+static unsigned int d_flag = 0;		/* delay factor between reads */
+static struct timeval time_start;
 
 #define T_INC 32
 
-int sys_page_size = 4096;
+unsigned int sys_page_size = 4096;
 
 static void usage(void)
 {
-	fprintf(stderr, _("Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n device [last_block [start_block]]\n"),
+	fprintf(stderr, _(
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"),
 		 program_name);
 	exit (1);
 }
 
 static void exclusive_usage(void)
 {
-	fprintf(stderr, 
-		_("%s: The -n and -w options are mutually exclusive.\n\n"), 
+	fprintf(stderr,
+		_("%s: The -n and -w options are mutually exclusive.\n\n"),
 		program_name);
 	exit(1);
 }
 
-static unsigned long currently_testing = 0;
-static unsigned long num_blocks = 0;
+static blk_t currently_testing = 0;
+static blk_t num_blocks = 0;
 static ext2_badblocks_list bb_list = NULL;
 static FILE *out;
 static blk_t next_bad = 0;
@@ -100,7 +112,7 @@
 static void *allocate_buffer(size_t size)
 {
 	void	*ret = 0;
-	
+
 #ifdef HAVE_POSIX_MEMALIGN
 	if (posix_memalign(&ret, sys_page_size, size) < 0)
 		ret = 0;
@@ -111,7 +123,7 @@
 #ifdef HAVE_VALLOC
 	ret = valloc(size);
 #endif /* HAVE_VALLOC */
-#endif /* HAVE_MEMALIGN */	
+#endif /* HAVE_MEMALIGN */
 #endif /* HAVE_POSIX_MEMALIGN */
 
 	if (!ret)
@@ -124,14 +136,14 @@
  * This routine reports a new bad block.  If the bad block has already
  * been seen before, then it returns 0; otherwise it returns 1.
  */
-static int bb_output (unsigned long bad)
+static int bb_output (blk_t bad)
 {
 	errcode_t errcode;
 
 	if (ext2fs_badblocks_list_test(bb_list, bad))
 		return 0;
 
-	fprintf(out, "%lu\n", bad);
+	fprintf(out, "%lu\n", (unsigned long) bad);
 	fflush(out);
 
 	errcode = ext2fs_badblocks_list_add (bb_list, bad);
@@ -141,7 +153,7 @@
 	}
 
 	/* kludge:
-	   increment the iteration through the bb_list if 
+	   increment the iteration through the bb_list if
 	   an element was just added before the current iteration
 	   position.  This should not cause next_bad to change. */
 	if (bb_iter && bad < next_bad)
@@ -149,10 +161,52 @@
 	return 1;
 }
 
+static char *time_diff_format(struct timeval *tv1,
+			      struct timeval *tv2, char *buf)
+{
+        time_t	diff = (tv1->tv_sec - tv2->tv_sec);
+	int	hr,min,sec;
+
+	sec = diff % 60;
+	diff /= 60;
+	min = diff % 60;
+	hr = diff / 60;
+
+	if (hr)
+		sprintf(buf, "%d:%02d:%02d", hr, min, sec);
+	else
+		sprintf(buf, "%d:%02d", min, sec);
+	return buf;
+}
+
+static float calc_percent(unsigned long current, unsigned long total) {
+	float percent = 0.0;
+	if (total <= 0)
+		return percent;
+	if (current >= total) {
+		percent = 100.0;
+	} else {
+		percent=(100.0*(float)current/(float)total);
+	}
+	return percent;
+}
+
 static void print_status(void)
 {
-	fprintf(stderr, "%15ld/%15ld", currently_testing, num_blocks);
-	fputs("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", stderr);
+	struct timeval time_end;
+	char diff_buf[32], line_buf[128];
+	int len;
+
+	gettimeofday(&time_end, 0);
+	len = snprintf(line_buf, sizeof(line_buf), 
+		       _("%6.2f%% done, %s elapsed"),
+		       calc_percent((unsigned long) currently_testing,
+				    (unsigned long) num_blocks), 
+		       time_diff_format(&time_end, &time_start, diff_buf));
+	fputs(line_buf, stderr);
+	memset(line_buf, '\b', len);
+	line_buf[len] = 0;
+	fputs(line_buf, stderr);	
 	fflush (stderr);
 }
 
@@ -169,6 +223,10 @@
 
 static void terminate_intr(int signo EXT2FS_ATTR((unused)))
 {
+	fflush(out);
+	fprintf(stderr, "\n\nInterrupted at block %llu\n", 
+		(unsigned long long) currently_testing);
+	fflush(stderr);
 	if (terminate_addr)
 		longjmp(terminate_addr,1);
 	exit(1);
@@ -197,12 +255,12 @@
 }
 
 static void set_o_direct(int dev, unsigned char *buffer, size_t size,
-			 unsigned long current_block)
+			 blk_t current_block)
 {
 #ifdef O_DIRECT
 	int new_flag = O_DIRECT;
 	int flag;
-	
+
 	if ((((unsigned long) buffer & (sys_page_size - 1)) != 0) ||
 	    ((size & (sys_page_size - 1)) != 0) ||
 	    ((current_block & ((sys_page_size >> 9)-1)) != 0))
@@ -221,13 +279,13 @@
 }
 
 
-static void pattern_fill(unsigned char *buffer, unsigned long pattern,
+static void pattern_fill(unsigned char *buffer, unsigned int pattern,
 			 size_t n)
 {
 	unsigned int	i, nb;
 	unsigned char	bpattern[sizeof(pattern)], *ptr;
-	
-	if (pattern == (unsigned long) ~0) {
+
+	if (pattern == (unsigned int) ~0) {
 		for (ptr = buffer; ptr < buffer + n; ptr++) {
 			(*ptr) = random() % (1 << (8 * sizeof(char)));
 		}
@@ -262,10 +320,13 @@
  * Perform a read of a sequence of blocks; return the number of blocks
  *    successfully sequentially read.
  */
-static long do_read (int dev, unsigned char * buffer, int try, int block_size,
-		     unsigned long current_block)
+static int do_read (int dev, unsigned char * buffer, int try, int block_size,
+		    blk_t current_block)
 {
 	long got;
+	struct timeval tv1, tv2;
+#define NANOSEC (1000000000L)
+#define MILISEC (1000L)
 
 	set_o_direct(dev, buffer, try * block_size, current_block);
 
@@ -278,12 +339,52 @@
 		com_err (program_name, errno, _("during seek"));
 
 	/* Try the read */
+	if (d_flag)
+		gettimeofday(&tv1, NULL);
 	got = read (dev, buffer, try * block_size);
+	if (d_flag)
+		gettimeofday(&tv2, NULL);
 	if (got < 0)
-		got = 0;	
+		got = 0;
 	if (got & 511)
 		fprintf(stderr, _("Weird value (%ld) in do_read\n"), got);
 	got /= block_size;
+	if (d_flag && got == try) {
+#ifdef HAVE_NANOSLEEP
+		struct timespec ts;
+		ts.tv_sec = tv2.tv_sec - tv1.tv_sec;
+		ts.tv_nsec = (tv2.tv_usec - tv1.tv_usec) * MILISEC;
+		if (ts.tv_nsec < 0) {
+			ts.tv_nsec += NANOSEC;
+			ts.tv_sec -= 1;
+		}
+		/* increase/decrease the sleep time based on d_flag value */
+		ts.tv_sec = ts.tv_sec * d_flag / 100;
+		ts.tv_nsec = ts.tv_nsec * d_flag / 100;
+		if (ts.tv_nsec > NANOSEC) {
+			ts.tv_sec += ts.tv_nsec / NANOSEC;
+			ts.tv_nsec %= NANOSEC;
+		}
+		if (ts.tv_sec || ts.tv_nsec)
+			nanosleep(&ts, NULL);
+#else
+#ifdef HAVE_USLEEP
+		struct timeval tv;
+		tv.tv_sec = tv2.tv_sec - tv1.tv_sec;
+		tv.tv_usec = tv2.tv_usec - tv1.tv_usec;
+		tv.tv_sec = tv.tv_sec * d_flag / 100;
+		tv.tv_usec = tv.tv_usec * d_flag / 100;
+		if (tv.tv_usec > 1000000) {
+			tv.tv_sec += tv.tv_usec / 1000000;
+			tv.tv_usec %= 1000000;
+		}
+		if (tv.tv_sec)
+			sleep(tv.tv_sec);
+		if (tv.tv_usec)
+			usleep(tv.tv_usec);
+#endif
+#endif
+	}
 	return got;
 }
 
@@ -291,8 +392,8 @@
  * Perform a write of a sequence of blocks; return the number of blocks
  *    successfully sequentially written.
  */
-static long do_write (int dev, unsigned char * buffer, int try, int block_size,
-		     unsigned long current_block)
+static int do_write(int dev, unsigned char * buffer, int try, int block_size,
+		    unsigned long current_block)
 {
 	long got;
 
@@ -309,7 +410,7 @@
 	/* Try the write */
 	got = write (dev, buffer, try * block_size);
 	if (got < 0)
-		got = 0;	
+		got = 0;
 	if (got & 511)
 		fprintf(stderr, "Weird value (%ld) in do_write\n", got);
 	got /= block_size;
@@ -327,16 +428,19 @@
 		com_err(program_name, retval, _("during ext2fs_sync_device"));
 }
 
-static unsigned int test_ro (int dev, unsigned long last_block,
-			     int block_size, unsigned long from_count,
-			     unsigned long blocks_at_once)
+static unsigned int test_ro (int dev, blk_t last_block,
+			     int block_size, blk_t first_block,
+			     unsigned int blocks_at_once)
 {
 	unsigned char * blkbuf;
 	int try;
-	long got;
+	int got;
 	unsigned int bb_count = 0;
 	errcode_t errcode;
 
+	/* set up abend handler */
+	capture_terminate(NULL);
+
 	errcode = ext2fs_badblocks_list_iterate_begin(bb_list,&bb_iter);
 	if (errcode) {
 		com_err (program_name, errcode,
@@ -345,7 +449,7 @@
 	}
 	do {
 		ext2fs_badblocks_list_iterate (bb_iter, &next_bad);
-	} while (next_bad && next_bad < from_count);
+	} while (next_bad && next_bad < first_block);
 
 	if (t_flag) {
 		blkbuf = allocate_buffer((blocks_at_once + 1) * block_size);
@@ -358,8 +462,9 @@
 		exit (1);
 	}
 	if (v_flag) {
-	    fprintf (stderr, _("Checking blocks %lu to %lu\n"), from_count,
-		     last_block - 1);
+		fprintf (stderr, _("Checking blocks %lu to %lu\n"),
+			 (unsigned long) first_block,
+			 (unsigned long) last_block - 1);
 	}
 	if (t_flag) {
 		fputs(_("Checking for bad blocks in read-only mode\n"), stderr);
@@ -368,7 +473,7 @@
 	}
 	flush_bufs();
 	try = blocks_at_once;
-	currently_testing = from_count;
+	currently_testing = first_block;
 	num_blocks = last_block - 1;
 	if (!t_flag && (s_flag || v_flag)) {
 		fputs(_("Checking for bad blocks (read-only test): "), stderr);
@@ -377,6 +482,12 @@
 	}
 	while (currently_testing < last_block)
 	{
+		if (max_bb && bb_count >= max_bb) {
+			if (s_flag || v_flag) {
+				fputs(_("Too many bad blocks, aborting test\n"), stderr);
+			}
+			break;
+		}
 		if (next_bad) {
 			if (currently_testing == next_bad) {
 				/* fprintf (out, "%lu\n", nextbad); */
@@ -404,10 +515,10 @@
 		if (got == try) {
 			try = blocks_at_once;
 			/* recover page-aligned offset for O_DIRECT */
-			if ( blocks_at_once >= (unsigned long) (sys_page_size >> 9)
+			if ( (blocks_at_once >= sys_page_size >> 9)
 			     && (currently_testing % (sys_page_size >> 9)!= 0))
 				try -= (sys_page_size >> 9)
-					- (currently_testing 
+					- (currently_testing
 					   % (sys_page_size >> 9));
 			continue;
 		}
@@ -427,22 +538,27 @@
 
 	ext2fs_badblocks_list_iterate_end(bb_iter);
 
+	uncapture_terminate();
+
 	return bb_count;
 }
 
-static unsigned int test_rw (int dev, unsigned long last_block,
-			     int block_size, unsigned long from_count,
-			     unsigned long blocks_at_once)
+static unsigned int test_rw (int dev, blk_t last_block,
+			     int block_size, blk_t first_block,
+			     unsigned int blocks_at_once)
 {
 	unsigned char *buffer, *read_buffer;
-	const unsigned long patterns[] = {0xaa, 0x55, 0xff, 0x00};
-	const unsigned long *pattern;
+	const unsigned int patterns[] = {0xaa, 0x55, 0xff, 0x00};
+	const unsigned int *pattern;
 	int i, try, got, nr_pattern, pat_idx;
 	unsigned int bb_count = 0;
 
+	/* set up abend handler */
+	capture_terminate(NULL);
+
 	buffer = allocate_buffer(2 * blocks_at_once * block_size);
 	read_buffer = buffer + blocks_at_once * block_size;
-	
+
 	if (!buffer) {
 		com_err (program_name, ENOMEM, _("while allocating buffers"));
 		exit (1);
@@ -451,10 +567,11 @@
 	flush_bufs();
 
 	if (v_flag) {
-		fputs(_("Checking for bad blocks in read-write mode\n"), 
+		fputs(_("Checking for bad blocks in read-write mode\n"),
 		      stderr);
 		fprintf(stderr, _("From block %lu to %lu\n"),
-			 from_count, last_block);
+			(unsigned long) first_block,
+			(unsigned long) last_block - 1);
 	}
 	if (t_flag) {
 		pattern = t_patts;
@@ -467,12 +584,18 @@
 		pattern_fill(buffer, pattern[pat_idx],
 			     blocks_at_once * block_size);
 		num_blocks = last_block - 1;
-		currently_testing = from_count;
+		currently_testing = first_block;
 		if (s_flag && v_flag <= 1)
 			alarm_intr(SIGALRM);
 
 		try = blocks_at_once;
 		while (currently_testing < last_block) {
+			if (max_bb && bb_count >= max_bb) {
+				if (s_flag || v_flag) {
+					fputs(_("Too many bad blocks, aborting test\n"), stderr);
+				}
+				break;
+			}
 			if (currently_testing + try > last_block)
 				try = last_block - currently_testing;
 			got = do_write(dev, buffer, try, block_size,
@@ -484,11 +607,11 @@
 			if (got == try) {
 				try = blocks_at_once;
 				/* recover page-aligned offset for O_DIRECT */
-				if ( blocks_at_once >= (unsigned long) (sys_page_size >> 9)
-				     && (currently_testing % 
+				if ( (blocks_at_once >= sys_page_size >> 9)
+				     && (currently_testing %
 					 (sys_page_size >> 9)!= 0))
 					try -= (sys_page_size >> 9)
-						- (currently_testing 
+						- (currently_testing
 						   % (sys_page_size >> 9));
 				continue;
 			} else
@@ -497,7 +620,7 @@
 				bb_count += bb_output(currently_testing++);
 			}
 		}
-		
+
 		num_blocks = 0;
 		alarm (0);
 		if (s_flag | v_flag)
@@ -506,12 +629,18 @@
 		if (s_flag | v_flag)
 			fputs(_("Reading and comparing: "), stderr);
 		num_blocks = last_block;
-		currently_testing = from_count;
+		currently_testing = first_block;
 		if (s_flag && v_flag <= 1)
 			alarm_intr(SIGALRM);
 
 		try = blocks_at_once;
 		while (currently_testing < last_block) {
+			if (max_bb && bb_count >= max_bb) {
+				if (s_flag || v_flag) {
+					fputs(_("Too many bad blocks, aborting test\n"), stderr);
+				}
+				break;
+			}
 			if (currently_testing + try > last_block)
 				try = last_block - currently_testing;
 			got = do_read (dev, read_buffer, try, block_size,
@@ -528,17 +657,17 @@
 			}
 			currently_testing += got;
 			/* recover page-aligned offset for O_DIRECT */
-			if ( blocks_at_once >= (unsigned long) (sys_page_size >> 9)
+			if ( (blocks_at_once >= sys_page_size >> 9)
 			     && (currently_testing % (sys_page_size >> 9)!= 0))
 				try = blocks_at_once - (sys_page_size >> 9)
-					- (currently_testing 
+					- (currently_testing
 					   % (sys_page_size >> 9));
 			else
 				try = blocks_at_once;
 			if (v_flag > 1)
 				print_status();
 		}
-		
+
 		num_blocks = 0;
 		alarm (0);
 		if (s_flag | v_flag)
@@ -555,17 +684,18 @@
 	int	num;
 };
 
-static unsigned int test_nd (int dev, unsigned long last_block,
-			     int block_size, unsigned long from_count,
-			     unsigned long blocks_at_once)
+static unsigned int test_nd (int dev, blk_t last_block,
+			     int block_size, blk_t first_block,
+			     unsigned int blocks_at_once)
 {
 	unsigned char *blkbuf, *save_ptr, *test_ptr, *read_ptr;
 	unsigned char *test_base, *save_base, *read_base;
 	int try, i;
-	const unsigned long patterns[] = { ~0 };
-	const unsigned long *pattern;
+	const unsigned int patterns[] = { ~0 };
+	const unsigned int *pattern;
 	int nr_pattern, pat_idx;
-	long got, used2, written, save_currently_testing;
+	int got, used2, written;
+	blk_t save_currently_testing;
 	struct saved_blk_record *test_record;
 	/* This is static to prevent being clobbered by the longjmp */
 	static int num_saved;
@@ -583,7 +713,7 @@
 	}
 	do {
 		ext2fs_badblocks_list_iterate (bb_iter, &next_bad);
-	} while (next_bad && next_bad < from_count);
+	} while (next_bad && next_bad < first_block);
 
 	blkbuf = allocate_buffer(3 * blocks_at_once * block_size);
 	test_record = malloc (blocks_at_once*sizeof(struct saved_blk_record));
@@ -595,13 +725,15 @@
 	save_base = blkbuf;
 	test_base = blkbuf + (blocks_at_once * block_size);
 	read_base = blkbuf + (2 * blocks_at_once * block_size);
-	
+
 	num_saved = 0;
 
 	flush_bufs();
 	if (v_flag) {
 	    fputs(_("Checking for bad blocks in non-destructive read-write mode\n"), stderr);
-	    fprintf (stderr, _("From block %lu to %lu\n"), from_count, last_block);
+	    fprintf (stderr, _("From block %lu to %lu\n"),
+		     (unsigned long) first_block,
+		     (unsigned long) last_block - 1);
 	}
 	if (s_flag || v_flag > 1) {
 		fputs(_("Checking for bad blocks (non-destructive read-write test)\n"), stderr);
@@ -622,7 +754,7 @@
 		fflush (out);
 		exit(1);
 	}
-	
+
 	/* set up abend handler */
 	capture_terminate(terminate_env);
 
@@ -641,12 +773,18 @@
 		bb_count = 0;
 		save_ptr = save_base;
 		test_ptr = test_base;
-		currently_testing = from_count;
+		currently_testing = first_block;
 		num_blocks = last_block - 1;
 		if (s_flag && v_flag <= 1)
 			alarm_intr(SIGALRM);
 
 		while (currently_testing < last_block) {
+			if (max_bb && bb_count >= max_bb) {
+				if (s_flag || v_flag) {
+					fputs(_("Too many bad blocks, aborting test\n"), stderr);
+				}
+				break;
+			}
 			got = try = blocks_at_once - buf_used;
 			if (next_bad) {
 				if (currently_testing == next_bad) {
@@ -682,7 +820,8 @@
 			if (written != got)
 				com_err (program_name, errno,
 					 _("during test data write, block %lu"),
-					 currently_testing + written);
+					 (unsigned long) currently_testing +
+					 written);
 
 			buf_used += got;
 			save_ptr += got * block_size;
@@ -728,7 +867,7 @@
 					try = test_record[used2].num;
 					used2++;
 				}
-				
+
 				got = do_read (dev, read_ptr, try,
 					       block_size, currently_testing);
 
@@ -742,7 +881,7 @@
 					bb_count += bb_output(currently_testing + got);
 					got++;
 				}
-					
+
 				/* write back original data */
 				do_write (dev, save_ptr, got,
 					  block_size, currently_testing);
@@ -813,28 +952,45 @@
 
 }
 
+/*
+ * This function will convert a string to an unsigned long, printing
+ * an error message if it fails, and returning success or failure in err.
+ */
+static unsigned int parse_uint(const char *str, const char *descr)
+{
+	char		*tmp;
+	unsigned long	ret;
+
+	errno = 0;
+	ret = strtoul(str, &tmp, 0);
+	if (*tmp || errno || (ret > UINT_MAX) ||
+	    (ret == ULONG_MAX && errno == ERANGE)) {
+		com_err (program_name, 0, _("invalid %s - %s"), descr, str);
+		exit (1);
+	}
+	return ret;
+}
 
 int main (int argc, char ** argv)
 {
 	int c;
-	char * tmp;
 	char * device_name;
 	char * host_device_name = NULL;
 	char * input_file = NULL;
 	char * output_file = NULL;
 	FILE * in = NULL;
 	int block_size = 1024;
-	unsigned long blocks_at_once = 64;
-	blk_t last_block, from_count;
+	unsigned int blocks_at_once = 64;
+	blk_t last_block, first_block;
 	int num_passes = 0;
 	int passes_clean = 0;
 	int dev;
 	errcode_t errcode;
-	unsigned long pattern;
-	unsigned int (*test_func)(int, unsigned long,
-				  int, unsigned long,
-				  unsigned long);
-	int open_flag = 0;
+	unsigned int pattern;
+	unsigned int (*test_func)(int, blk_t,
+				  int, blk_t,
+				  unsigned int);
+	int open_flag;
 	long sysval;
 
 	setbuf(stdout, NULL);
@@ -859,18 +1015,13 @@
 		sys_page_size = sysval;
 #endif /* _SC_PAGESIZE */
 #endif /* HAVE_SYSCONF */
-	
+
 	if (argc && *argv)
 		program_name = *argv;
-	while ((c = getopt (argc, argv, "b:fi:o:svwnc:p:h:t:X")) != EOF) {
+	while ((c = getopt (argc, argv, "b:d:e:fi:o:svwnc:p:h:t:X")) != EOF) {
 		switch (c) {
 		case 'b':
-			block_size = strtoul (optarg, &tmp, 0);
-			if (*tmp || block_size > 4096) {
-				com_err (program_name, 0,
-					 _("bad block size - %s"), optarg);
-				exit (1);
-			}
+			block_size = parse_uint(optarg, "block size");
 			break;
 		case 'f':
 			force++;
@@ -900,29 +1051,27 @@
 			w_flag = 2;
 			break;
 		case 'c':
-			blocks_at_once = strtoul (optarg, &tmp, 0);
-			if (*tmp) {
-				com_err (program_name, 0,
-					 "bad simultaneous block count - %s", optarg);
-				exit (1);
-			}
+			blocks_at_once = parse_uint(optarg, "blocks at once");
+			break;
+		case 'e':
+			max_bb = parse_uint(optarg, "max bad block count");
+			break;
+		case 'd':
+			d_flag = parse_uint(optarg, "read delay factor");
 			break;
 		case 'p':
-			num_passes = strtoul (optarg, &tmp, 0);
-			if (*tmp) {
-				com_err (program_name, 0,
-				    "bad number of clean passes - %s", optarg);
-				exit (1);
-			}
+			num_passes = parse_uint(optarg,
+						"number of clean passes");
 			break;
 		case 'h':
 			host_device_name = optarg;
 			break;
 		case 't':
 			if (t_flag + 1 > t_max) {
-				unsigned long *t_patts_new;
+				unsigned int *t_patts_new;
 
-				t_patts_new = realloc(t_patts, t_max + T_INC);
+				t_patts_new = realloc(t_patts, sizeof(int) *
+						      (t_max + T_INC));
 				if (!t_patts_new) {
 					com_err(program_name, ENOMEM,
 						_("can't allocate memory for "
@@ -936,14 +1085,8 @@
 			if (!strcmp(optarg, "r") || !strcmp(optarg,"random")) {
 				t_patts[t_flag++] = ~0;
 			} else {
-				pattern = strtoul(optarg, &tmp, 0);
-				if (*tmp) {
-					com_err(program_name, 0,
-					_("invalid test_pattern: %s\n"),
-						optarg);
-					exit(1);
-				}
-				if (pattern == (unsigned long) ~0)
+				pattern = parse_uint(optarg, "test pattern");
+				if (pattern == (unsigned int) ~0)
 					pattern = 0xffff;
 				t_patts[t_flag++] = pattern;
 			}
@@ -962,7 +1105,7 @@
 			  "in read-only mode"));
 			exit(1);
 		}
-		if (t_patts && (t_patts[0] == (unsigned long) ~0)) {
+		if (t_patts && (t_patts[0] == (unsigned int) ~0)) {
 			com_err(program_name, 0,
 			_("Random test_pattern is not allowed "
 			  "in read-only mode"));
@@ -989,37 +1132,24 @@
 		}
 	} else {
 		errno = 0;
-		last_block = strtoul (argv[optind], &tmp, 0);
-		printf("last_block = %d (%s)\n", last_block, argv[optind]);
-		if (*tmp || errno || 
-		    (last_block == ULONG_MAX && errno == ERANGE)) {
-			com_err (program_name, 0, _("invalid blocks count - %s"),
-				 argv[optind]);
-			exit (1);
-		}
+		last_block = parse_uint(argv[optind], _("last block"));
 		last_block++;
 		optind++;
 	}
 	if (optind <= argc-1) {
 		errno = 0;
-		from_count = strtoul (argv[optind], &tmp, 0);
-		printf("from_count = %d\n", from_count);
-		if (*tmp || errno ||
-		    (from_count == ULONG_MAX && errno == ERANGE)) {
-			com_err (program_name, 0, _("invalid starting block - %s"),
-				 argv[optind]);
-			exit (1);
-		}
-	} else from_count = 0;
-	if (from_count >= last_block) {
-	    com_err (program_name, 0, _("invalid starting block (%d): must be less than %lu"),
-		     (unsigned long) from_count, (unsigned long) last_block);
+		first_block = parse_uint(argv[optind], _("first block"));
+	} else first_block = 0;
+	if (first_block >= last_block) {
+	    com_err (program_name, 0, _("invalid starting block (%lu): must be less than %lu"),
+		     (unsigned long) first_block, (unsigned long) last_block);
 	    exit (1);
 	}
 	if (w_flag)
 		check_mount(device_name);
-	
-	open_flag = w_flag ? O_RDWR : O_RDONLY;
+
+	gettimeofday(&time_start, 0);
+	open_flag = O_LARGEFILE | (w_flag ? O_RDWR : O_RDONLY);
 	dev = open (device_name, open_flag);
 	if (dev == -1) {
 		com_err (program_name, errno, _("while trying to open %s"),
@@ -1098,15 +1228,15 @@
 		unsigned int bb_count;
 
 		bb_count = test_func(dev, last_block, block_size,
-				     from_count, blocks_at_once);
+				     first_block, blocks_at_once);
 		if (bb_count)
 			passes_clean = 0;
 		else
 			++passes_clean;
-		
+
 		if (v_flag)
 			fprintf(stderr,
-				_("Pass completed, %u bad blocks found.\n"), 
+				_("Pass completed, %u bad blocks found.\n"),
 				bb_count);
 
 	} while (passes_clean < num_passes);
@@ -1114,8 +1244,7 @@
 	close (dev);
 	if (out != stdout)
 		fclose (out);
-	if (t_patts)
-		free(t_patts);
+	free(t_patts);
 	return 0;
 }
 
diff --git a/misc/base_device.c b/misc/base_device.c
index 6237d0e..aad2ba0 100644
--- a/misc/base_device.c
+++ b/misc/base_device.c
@@ -5,12 +5,12 @@
  * assure that we only fsck one partition on a particular drive at any
  * one time.  Otherwise, the disk heads will be seeking all over the
  * place.  If the base device can not be determined, return NULL.
- * 
+ *
  * The base_device() function returns an allocated string which must
  * be freed.
- * 
+ *
  * Written by Theodore Ts'o, <tytso@mit.edu>
- * 
+ *
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -58,7 +58,7 @@
 	/* Skip over /dev/dsk/... */
 	if (strncmp(cp, "dsk/", 4) == 0)
 		cp += 4;
-	
+
 	/*
 	 * For md devices, we treat them all as if they were all
 	 * on one disk, since we don't know how to parallelize them.
diff --git a/misc/blkid.8.in b/misc/blkid.8.in
index 42ad0d7..9c42686 100644
--- a/misc/blkid.8.in
+++ b/misc/blkid.8.in
@@ -1,17 +1,17 @@
 .\" Copyright 2000 Andreas Dilger (adilger@turbolinux.com)
 .\"
 .\" This man page was created for blkid from e2fsprogs-1.25.
-.\" 
+.\"
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .\" Based on uuidgen, Mon Sep 17 10:42:12 2000, Andreas Dilger
 .TH BLKID 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
 blkid \- command\-line utility to locate/print block device attributes
 .SH SYNOPSIS
-.B blkid 
+.B blkid
 [
-.B \-ghlv
+.B \-ghlLv
 ]
 [
 [
@@ -41,7 +41,7 @@
 .B blkid
 program is the command-line interface to working with
 .BR libblkid (3)
-library.  It can determine the type of content (e.g. filesystem, swap) 
+library.  It can determine the type of content (e.g. filesystem, swap)
 a block device holds, and also attributes (tokens, NAME=value pairs)
 from the content metadata (e.g. LABEL or UUID fields).
 .PP
@@ -51,63 +51,69 @@
 more devices.
 .SH OPTIONS
 .TP
-.B \-c
+.BI \-c " cachefile"
 Read from
 .I cachefile
 instead of reading from the default cache file
 .IR /etc/blkid.tab .
 If you want to start with a clean cache (i.e. don't report devices previously
 scanned but not necessarily available at this time), specify
-.IR /dev/null.
+.IR /dev/null .
 .TP
 .B \-g
-Perform a garbage collection pass on the blkid cache.
+Perform a garbage collection pass on the blkid cache to remove
+devices which no longer exist.
 .TP
 .B \-h
 Display a usage message and exit.
 .TP
 .B \-l
 Look up one device that matches the search parameter specified using
-the 
+the
 .B \-t
 option.  If there are multiple devices that match the specified search
 parameter, then the device with the highest priority is returned, and/or
 the first device found at a given priority.  Device types in order of
 decreasing priority are Device Mapper, EVMS, LVM, MD, and finally regular
-block devices.  If this option is not specified, 
+block devices.  If this option is not specified,
 .B blkid
 will print all of the devices that match the search parameter.
 .TP
-.B \-o 
-Display 
+.BI \-o " format"
+Display
 .BR blkid 's
 output using the specified format.  The
 .I format
-parameter may be 
-.IR full ,
-(the default), 
-.IR  value ,
-(only print the value of any tags printed by 
-.BR blkid)
-or 
+parameter may be
+.I full
+(the default),
+.I value
+(only print the value of the tags),
+.I list
+(print the devices in a user-friendly format),
+or
 .I device
 (only print the device name).
 .TP
-.B \-s
-Show only the tags for each (specified) device that match
+.B \-L
+Print the devices in a user-friendly list format.  This is the
+equivalent of using the option \fB-o list\fR.
+.TP
+.BI \-s " tag"
+For each (specified) device, show only the tags that match
 .IR tag .
 It is possible to specify multiple
-.B \-s 
+.B \-s
 options.  If no tag is specified, then all tokens are shown for all
 (specified) devices.
-In order to just refresh the cache without showing any tokens use
+In order to just refresh the cache without showing any tokens, use
 .B "-s none"
 with no other options.
 .TP
-.B \-t
+.BI \-t " NAME" = "value"
 Search for block devices with tokens named
 .I NAME
-that have the value 
+that have the value
 .IR value ,
 and display any devices which are found.
 Common values for
@@ -117,14 +123,13 @@
 .BR LABEL ,
 and
 .BR UUID .
-If there are no devices specified on the command line, all block devices 
-will be searched; otherwise, only search the devices specified by the user.
+If there are no devices specified on the command line, all block devices
+will be searched; otherwise only the specified devices are searched.
 .TP
 .B \-v
 Display version number and exit.
 .TP
-.B \-w
-.I <writecachefile>
+.BI \-w " writecachefile"
 Write the device cache to
 .I writecachefile
 instead of writing it to the default cache file
@@ -135,18 +140,18 @@
 .B \-c
 option.
 .TP
-.I <device>
+.I device
 Display tokens from only the specified device.  It is possible to
 give multiple
-.I <device>
+.I device
 options on the command line.  If none is given, all devices which
 appear in
 .I /proc/partitions
 are shown, if they are recognized.
 .SH "RETURN CODE"
 If the specified token was found, or if any tags were shown from (specified)
-devices 0 is returned.  If the specified token was not found, or no
-(specified) devices could be identified, an exit code of 2 is returned.  
+devices, 0 is returned.  If the specified token was not found, or no
+(specified) devices could be identified, an exit code of 2 is returned.
 For usage or other errors, an exit code of 4 is returned.
 .SH AUTHOR
 .B blkid
diff --git a/misc/blkid.c b/misc/blkid.c
index c0fda73..388abad 100644
--- a/misc/blkid.c
+++ b/misc/blkid.c
@@ -11,7 +11,17 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <string.h>
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+#ifdef HAVE_TERMIO_H
+#include <termio.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
 #else
@@ -22,7 +32,9 @@
 
 #define OUTPUT_VALUE_ONLY	0x0001
 #define OUTPUT_DEVICE_ONLY	0x0002
+#define OUTPUT_PRETTY_LIST	0x0004
 
+#include "ext2fs/ext2fs.h"
 #include "blkid/blkid.h"
 
 const char *progname = "blkid";
@@ -38,8 +50,8 @@
 
 	print_version(out);
 	fprintf(out,
-		"usage:\t%s [-c <file>] [-ghl] [-o format] "
-		"[-s <tag>] [-t <token>]\n    [-v] [-w <file>] [dev ...]\n"
+		"usage:\t%s [-c <file>] [-ghlLv] [-o format] "
+		"[-s <tag>] [-t <token>]\n    [-w <file>] [dev ...]\n"
 		"\t-c\tcache file (default: /etc/blkid.tab, /dev/null = none)\n"
 		"\t-h\tprint this usage message and exit\n"
 		"\t-g\tgarbage collect the blkid cache\n"
@@ -78,6 +90,132 @@
 	}
 }
 
+static int get_terminal_width(void)
+{
+#ifdef TIOCGSIZE
+	struct ttysize	t_win;
+#endif
+#ifdef TIOCGWINSZ
+	struct winsize	w_win;
+#endif
+        const char	*cp;
+
+#ifdef TIOCGSIZE
+	if (ioctl (0, TIOCGSIZE, &t_win) == 0)
+		return (t_win.ts_cols);
+#endif
+#ifdef TIOCGWINSZ
+	if (ioctl (0, TIOCGWINSZ, &w_win) == 0)
+		return (w_win.ws_col);
+#endif
+        cp = getenv("COLUMNS");
+	if (cp)
+		return strtol(cp, NULL, 10);
+	return 80;
+}
+
+static int pretty_print_word(const char *str, int max_len,
+			     int left_len, int overflow_nl)
+{
+	int len = strlen(str) + left_len;
+	int ret = 0;
+
+	fputs(str, stdout);
+	if (overflow_nl && len > max_len) {
+		fputc('\n', stdout);
+		len = 0;
+	} else if (len > max_len)
+		ret = len - max_len;
+	do
+		fputc(' ', stdout);
+	while (len++ < max_len);
+	return ret;
+}
+
+static void pretty_print_line(const char *device, const char *fs_type,
+			      const char *label, const char *mtpt,
+			      const char *uuid)
+{
+	static int device_len = 10, fs_type_len = 7;
+	static int label_len = 8, mtpt_len = 14;
+	static int term_width = -1;
+	int len, w;
+
+	if (term_width < 0)
+		term_width = get_terminal_width();
+
+	if (term_width > 80) {
+		term_width -= 80;
+		w = term_width / 10;
+		if (w > 8)
+			w = 8;
+		term_width -= 2*w;
+		label_len += w;
+		fs_type_len += w;
+		w = term_width/2;
+		device_len += w;
+		mtpt_len +=w;
+	}
+
+	len = pretty_print_word(device, device_len, 0, 1);
+	len = pretty_print_word(fs_type, fs_type_len, len, 0);
+	len = pretty_print_word(label, label_len, len, 0);
+	len = pretty_print_word(mtpt, mtpt_len, len, 0);
+	fputs(uuid, stdout);
+	fputc('\n', stdout);
+}
+
+static void pretty_print_dev(blkid_dev dev)
+{
+	blkid_tag_iterate	iter;
+	const char		*type, *value, *devname;
+	const char		*uuid = "", *fs_type = "", *label = "";
+	int			len, mount_flags;
+	char			mtpt[80];
+	errcode_t		retval;
+
+	if (dev == NULL) {
+		pretty_print_line("device", "fs_type", "label",
+				  "mount point", "UUID");
+		for (len=get_terminal_width()-1; len > 0; len--)
+			fputc('-', stdout);
+		fputc('\n', stdout);
+		return;
+	}
+
+	devname = blkid_dev_devname(dev);
+	if (access(devname, F_OK))
+		return;
+
+	/* Get the uuid, label, type */
+	iter = blkid_tag_iterate_begin(dev);
+	while (blkid_tag_next(iter, &type, &value) == 0) {
+		if (!strcmp(type, "UUID"))
+			uuid = value;
+		if (!strcmp(type, "TYPE"))
+			fs_type = value;
+		if (!strcmp(type, "LABEL"))
+			label = value;
+	}
+	blkid_tag_iterate_end(iter);
+
+	/* Get the mount point */
+	mtpt[0] = 0;
+	retval = ext2fs_check_mount_point(devname, &mount_flags,
+					  mtpt, sizeof(mtpt));
+	if (retval == 0) {
+		if (mount_flags & EXT2_MF_MOUNTED) {
+			if (!mtpt[0])
+				strcpy(mtpt, "(mounted, mtpt unknown)");
+		} else if (mount_flags & EXT2_MF_BUSY)
+			strcpy(mtpt, "(in use)");
+		else
+			strcpy(mtpt, "(not mounted)");
+	}
+
+	pretty_print_line(devname, fs_type, label, mtpt, uuid);
+}
+
 static void print_tags(blkid_dev dev, char *show[], int numtag, int output)
 {
 	blkid_tag_iterate	iter;
@@ -87,6 +225,11 @@
 	if (!dev)
 		return;
 
+	if (output & OUTPUT_PRETTY_LIST) {
+		pretty_print_dev(dev);
+		return;
+	}
+
 	if (output & OUTPUT_DEVICE_ONLY) {
 		printf("%s\n", blkid_dev_devname(dev));
 		return;
@@ -137,7 +280,7 @@
 	int lookup = 0, gc = 0;
 	int c;
 
-	while ((c = getopt (argc, argv, "c:f:ghlo:s:t:w:v")) != EOF)
+	while ((c = getopt (argc, argv, "c:f:ghlLo:s:t:w:v")) != EOF)
 		switch (c) {
 		case 'c':
 			if (optarg && !*optarg)
@@ -150,6 +293,9 @@
 		case 'l':
 			lookup++;
 			break;
+		case 'L':
+			output_format = OUTPUT_PRETTY_LIST;
+			break;
 		case 'g':
 			gc = 1;
 			break;
@@ -158,10 +304,14 @@
 				output_format = OUTPUT_VALUE_ONLY;
 			else if (!strcmp(optarg, "device"))
 				output_format = OUTPUT_DEVICE_ONLY;
+			else if (!strcmp(optarg, "list"))
+				output_format = OUTPUT_PRETTY_LIST;
 			else if (!strcmp(optarg, "full"))
 				output_format = 0;
 			else {
-				fprintf(stderr, "Invalid output format %s.  Chose from value, device, or full\n", optarg);
+				fprintf(stderr, "Invalid output format %s. "
+					"Choose from value,\n\t"
+					"device, list, or full\n", optarg);
 				exit(1);
 			}
 			break;
@@ -214,7 +364,12 @@
 	err = 2;
 	if (gc) {
 		blkid_gc_cache(cache);
-	} else if (lookup) {
+		goto exit;
+	}
+	if (output_format & OUTPUT_PRETTY_LIST)
+		pretty_print_dev(NULL);
+
+	if (lookup) {
 		blkid_dev dev;
 
 		if (!search_type) {
@@ -254,8 +409,8 @@
 						  BLKID_DEV_NORMAL);
 
 		if (dev) {
-			if (search_type && 
-			    !blkid_dev_has_tag(dev, search_type, 
+			if (search_type &&
+			    !blkid_dev_has_tag(dev, search_type,
 					       search_value))
 				continue;
 			print_tags(dev, show, numtag, output_format);
@@ -264,10 +419,8 @@
 	}
 
 exit:
-	if (search_type)
-		free(search_type);
-	if (search_value)
-		free(search_value);
+	free(search_type);
+	free(search_value);
 	blkid_put_cache(cache);
 	return err;
 }
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
index 2b48fb0..92f6d70 100644
--- a/misc/chattr.1.in
+++ b/misc/chattr.1.in
@@ -1,11 +1,11 @@
 .\" -*- nroff -*-
 .TH CHATTR 1 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-chattr \- change file attributes on a Linux second extended file system
+chattr \- change file attributes on a Linux file system
 .SH SYNOPSIS
 .B chattr
 [
-.B \-RV
+.B \-RVf
 ]
 [
 .B \-v
@@ -17,29 +17,36 @@
 .I files...
 .SH DESCRIPTION
 .B chattr
-changes the file attributes on a Linux second extended file system.
+changes the file attributes on a Linux file system.
 .PP
-The format of a symbolic mode is +-=[ASacDdIijsTtu].
+The format of a symbolic mode is +-=[acdeijstuADST].
 .PP
 The operator `+' causes the selected attributes to be added to the
 existing attributes of the files; `-' causes them to be removed; and
 `=' causes them to be the only attributes that the files have.
 .PP
-The letters `acdijsuADST' select the new attributes for the files: 
-append only (a), compressed (c), no dump (d), immutable (i),
+The letters `acdeijstuADST' select the new attributes for the files:
+append only (a), compressed (c), no dump (d), extent format (e), immutable (i),
 data journalling (j), secure deletion (s), no tail-merging (t), 
 undeletable (u), no atime updates (A), synchronous directory updates (D), 
 synchronous updates (S), and top of directory hierarchy (T).
+.PP
+The following attributes are read-only, and may be listed by
+.BR lsattr (1)
+but not modified by chattr: huge file (h), compression error (E),
+indexed directory (I), compression raw access (X), and compressed dirty
+file (Z).
 .SH OPTIONS
 .TP
 .B \-R
 Recursively change attributes of directories and their contents.
-Symbolic links encountered during recursive directory traversals are
-ignored.
 .TP
 .B \-V
 Be verbose with chattr's output and print the program version.
 .TP
+.B \-f
+Suppress most error messages.
+.TP
 .BI \-v " version"
 Set the file's version/generation number.
 .SH ATTRIBUTES
@@ -72,12 +79,23 @@
 although it can be displayed by
 .BR lsattr (1).
 .PP
+The 'e' attribute indicates that the file is using extents for mapping
+the blocks on disk.  It may not be removed using
+.BR chattr (1).
+.PP
 The 'I' attribute is used by the htree code to indicate that a directory
 is being indexed using hashed trees.  It may not be set or reset using 
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
 .PP
+The 'h' attribute indicates the file is storing its blocks in units of the
+filesystem blocksize instead of in units of sectors, and means that the file
+is (or at one time was) larger than 2TB.  It may not be set or reset using
+.BR chattr (1),
+although it can be displayed by
+.BR lsattr (1).
+.PP
 A file with the `i' attribute cannot be modified: it cannot be deleted or
 renamed, no link can be created to this file and no data can be written
 to the file.  Only the superuser or a process possessing the
@@ -100,8 +118,14 @@
 the `sync' mount option applied to a subset of the files.
 .PP
 A directory with the 'T' attribute will be deemed to be the top of 
-directory hierarchies for the purposes of the Orlov block allocator
-(which is used in on systems with Linux 2.5.46 or later).
+directory hierarchies for the purposes of the Orlov block allocator.
+This is a hint to the block allocator used by ext3 and ext4 that the
+subdirectories under this directory are not related, and thus should be
+spread apart for allocation purposes.   For example it is a very good
+idea to set the 'T' attribute on the /home directory, so that /home/john
+and /home/mary are placed into separate block groups.  For directories
+where this attribute is not set, the Orlov block allocator will try to
+group subdirectories closer together where possible.
 .PP
 A file with the 't' attribute will not have a partial block fragment at
 the end of the file merged with other files (for those filesystems which
diff --git a/misc/chattr.c b/misc/chattr.c
index c6d8d9f..de33b08 100644
--- a/misc/chattr.c
+++ b/misc/chattr.c
@@ -65,6 +65,7 @@
 
 static int recursive;
 static int verbose;
+static int silent;
 
 static unsigned long af;
 static unsigned long rf;
@@ -80,8 +81,8 @@
 
 static void usage(void)
 {
-	fprintf(stderr, 
-		_("Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"),
+	fprintf(stderr,
+		_("Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"),
 		program_name);
 	exit(1);
 }
@@ -98,6 +99,7 @@
 	{ EXT2_APPEND_FL, 'a' },
 	{ EXT2_COMPR_FL, 'c' },
 	{ EXT2_NODUMP_FL, 'd' },
+	{ EXT4_EXTENTS_FL, 'e'},
 	{ EXT2_IMMUTABLE_FL, 'i' },
 	{ EXT3_JOURNAL_DATA_FL, 'j' },
 	{ EXT2_SECRM_FL, 's' },
@@ -110,7 +112,7 @@
 static unsigned long get_flag(char c)
 {
 	const struct flags_char *fp;
-	
+
 	for (fp = flags_array; fp->flag != 0; fp++) {
 		if (fp->optchar == c)
 			return fp->flag;
@@ -137,6 +139,10 @@
 				verbose = 1;
 				continue;
 			}
+			if (*p == 'f') {
+				silent = 1;
+				continue;
+			}
 			if (*p == 'v') {
 				(*i)++;
 				if (*i >= argc)
@@ -144,7 +150,7 @@
 				version = strtol (argv[*i], &tmp, 0);
 				if (*tmp) {
 					com_err (program_name, 0,
-						 _("bad version - %s\n"), 
+						 _("bad version - %s\n"),
 						 argv[*i]);
 					usage ();
 				}
@@ -180,30 +186,37 @@
 	return 1;
 }
 
-static int chattr_dir_proc (const char *, struct dirent *, void *);
+static int chattr_dir_proc(const char *, struct dirent *, void *);
 
-static void change_attributes (const char * name)
+static int change_attributes(const char * name)
 {
 	unsigned long flags;
 	STRUCT_STAT	st;
+	int extent_file = 0;
 
 	if (LSTAT (name, &st) == -1) {
-		com_err (program_name, errno, _("while trying to stat %s"), 
-			 name);
-		return;
+		if (!silent)
+			com_err (program_name, errno,
+				 _("while trying to stat %s"), name);
+		return -1;
 	}
-	if (S_ISLNK(st.st_mode) && recursive)
-		return;
 
-	/* Don't try to open device files, fifos etc.  We probably
-           ought to display an error if the file was explicitly given
-           on the command line (whether or not recursive was
-           requested).  */
-	if (!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode) &&
-	    !S_ISDIR(st.st_mode))
-		return;
-
+	if (fgetflags(name, &flags) == -1) {
+		if (!silent)
+			com_err(program_name, errno,
+					_("while reading flags on %s"), name);
+		return -1;
+	}
+	if (flags & EXT4_EXTENTS_FL)
+		extent_file = 1;
 	if (set) {
+		if (extent_file && !(sf & EXT4_EXTENTS_FL)) {
+			if (!silent)
+				com_err(program_name, 0,
+				_("Clearing extent flag not supported on %s"),
+					name);
+			return -1;
+		}
 		if (verbose) {
 			printf (_("Flags of %s set as "), name);
 			print_flags (stdout, sf, 0);
@@ -212,40 +225,54 @@
 		if (fsetflags (name, sf) == -1)
 			perror (name);
 	} else {
-		if (fgetflags (name, &flags) == -1)
-			com_err (program_name, errno,
-			         _("while reading flags on %s"), name);
-		else {
-			if (rem)
-				flags &= ~rf;
-			if (add)
-				flags |= af;
-			if (verbose) {
-				printf (_("Flags of %s set as "), name);
-				print_flags (stdout, flags, 0);
-				printf ("\n");
+		if (rem)
+			flags &= ~rf;
+		if (add)
+			flags |= af;
+		if (extent_file && !(flags & EXT4_EXTENTS_FL)) {
+			if (!silent)
+				com_err(program_name, 0,
+				_("Clearing extent flag not supported on %s"),
+					name);
+			return -1;
+		}
+		if (verbose) {
+			printf(_("Flags of %s set as "), name);
+			print_flags(stdout, flags, 0);
+			printf("\n");
+		}
+		if (!S_ISDIR(st.st_mode))
+			flags &= ~EXT2_DIRSYNC_FL;
+		if (fsetflags(name, flags) == -1) {
+			if (!silent) {
+				com_err(program_name, errno,
+						_("while setting flags on %s"),
+						name);
 			}
-			if (!S_ISDIR(st.st_mode))
-				flags &= ~EXT2_DIRSYNC_FL;
-			if (fsetflags (name, flags) == -1)
-				com_err (program_name, errno,
-				         _("while setting flags on %s"), name);
+			return -1;
 		}
 	}
 	if (set_version) {
 		if (verbose)
 			printf (_("Version of %s set as %lu\n"), name, version);
-		if (fsetversion (name, version) == -1)
-			com_err (program_name, errno,
-			         _("while setting version on %s"), name);
+		if (fsetversion (name, version) == -1) {
+			if (!silent)
+				com_err (program_name, errno,
+					 _("while setting version on %s"),
+					 name);
+			return -1;
+		}
 	}
 	if (S_ISDIR(st.st_mode) && recursive)
-		iterate_on_dir (name, chattr_dir_proc, NULL);
+		return iterate_on_dir (name, chattr_dir_proc, NULL);
+	return 0;
 }
 
 static int chattr_dir_proc (const char * dir_name, struct dirent * de,
 			    void * private EXT2FS_ATTR((unused)))
 {
+	int ret = 0;
+
 	if (strcmp (de->d_name, ".") && strcmp (de->d_name, "..")) {
 	        char *path;
 
@@ -253,19 +280,20 @@
 		if (!path) {
 			fprintf(stderr, _("Couldn't allocate path variable "
 					  "in chattr_dir_proc"));
-			exit(1);
+			return -1;
 		}
-		sprintf (path, "%s/%s", dir_name, de->d_name);
-		change_attributes (path);
+		sprintf(path, "%s/%s", dir_name, de->d_name);
+		ret = change_attributes(path);
 		free(path);
 	}
-	return 0;
+	return ret;
 }
 
 int main (int argc, char ** argv)
 {
 	int i, j;
 	int end_arg = 0;
+	int err, retval = 0;
 
 #ifdef ENABLE_NLS
 	setlocale(LC_MESSAGES, "");
@@ -303,7 +331,10 @@
 	if (verbose)
 		fprintf (stderr, "chattr %s (%s)\n",
 			 E2FSPROGS_VERSION, E2FSPROGS_DATE);
-	for (j = i; j < argc; j++)
-		change_attributes (argv[j]);
-	exit(0);
+	for (j = i; j < argc; j++) {
+		err = change_attributes (argv[j]);
+		if (err)
+			retval = 1;
+	}
+	exit(retval);
 }
diff --git a/misc/default_profile.c b/misc/default_profile.c
index 27a7d91..21c514d 100644
--- a/misc/default_profile.c
+++ b/misc/default_profile.c
@@ -6,6 +6,18 @@
   "	inode_ratio = 16384\n"
   "\n"
   "[fs_types]\n"
+  "	ext3 = {\n"
+  "		features = has_journal\n"
+  "	}\n"
+  "	ext4 = {\n"
+  "		features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize\n"
+  "		inode_size = 256\n"
+  "	}\n"
+  "	ext4dev = {\n"
+  "		features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize\n"
+  "		inode_size = 256\n"
+  "		options = test_fs=1\n"
+  "	}\n"
   "	small = {\n"
   "		blocksize = 1024\n"
   "		inode_size = 128\n"
@@ -21,8 +33,14 @@
   "	}\n"
   "	largefile = {\n"
   "		inode_ratio = 1048576\n"
+  "		blocksize = -1\n"
   "	}\n"
   "	largefile4 = {\n"
   "		inode_ratio = 4194304\n"
+  "		blocksize = -1\n"
+  "	}\n"
+  "	hurd = {\n"
+  "	     blocksize = 4096\n"
+  "	     inode_size = 128\n"
   "	}\n"
 ;
diff --git a/misc/dumpe2fs.8.in b/misc/dumpe2fs.8.in
index 79cf863..c1dfcbd 100644
--- a/misc/dumpe2fs.8.in
+++ b/misc/dumpe2fs.8.in
@@ -4,7 +4,7 @@
 .\" 
 .TH DUMPE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-dumpe2fs \- dump ext2/ext3 filesystem information
+dumpe2fs \- dump ext2/ext3/ext4 filesystem information
 .SH SYNOPSIS
 .B dumpe2fs
 [
diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index 394f8b2..a70cc4e 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -50,14 +50,14 @@
 
 static void usage(void)
 {
-	fprintf (stderr, _("Usage: %s [-bfhixV] [-ob superblock] "
-		 "[-oB blocksize] device\n"), program_name);
+	fprintf (stderr, _("Usage: %s [-bfhixV] [-o superblock=<num>] "
+		 "[-o blocksize=<num>] device\n"), program_name);
 	exit (1);
 }
 
 static void print_number(unsigned long num)
 {
-	if (hex_format) 
+	if (hex_format)
 		printf("0x%04lx", num);
 	else
 		printf("%lu", num);
@@ -65,7 +65,7 @@
 
 static void print_range(unsigned long a, unsigned long b)
 {
-	if (hex_format) 
+	if (hex_format)
 		printf("0x%04lx-0x%04lx", a, b);
 	else
 		printf("%lu-%lu", a, b);
@@ -110,16 +110,16 @@
 }
 static void print_bg_opts(ext2_filsys fs, dgrp_t i)
 {
-	int first = 1, bg_flags;
+	int first = 1, bg_flags = 0;
 
-	if (fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_LAZY_BG)
+	if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
 		bg_flags = fs->group_desc[i].bg_flags;
-	else
-		bg_flags = 0;
 
-	print_bg_opt(bg_flags, EXT2_BG_INODE_UNINIT, "Inode not init",
+	print_bg_opt(bg_flags, EXT2_BG_INODE_UNINIT, "INODE_UNINIT",
  		     &first);
-	print_bg_opt(bg_flags, EXT2_BG_BLOCK_UNINIT, "Block not init",
+	print_bg_opt(bg_flags, EXT2_BG_BLOCK_UNINIT, "BLOCK_UNINIT",
+ 		     &first);
+	print_bg_opt(bg_flags, EXT2_BG_INODE_ZEROED, "ITABLE_ZEROED",
  		     &first);
 	if (!first)
 		fputc(']', stdout);
@@ -134,12 +134,18 @@
 	blk_t	super_blk, old_desc_blk, new_desc_blk;
 	char *block_bitmap=NULL, *inode_bitmap=NULL;
 	int inode_blocks_per_group, old_desc_blocks, reserved_gdt;
+	int		block_nbytes, inode_nbytes;
 	int has_super;
+	blk_t		blk_itr = fs->super->s_first_data_block;
+	ext2_ino_t	ino_itr = 1;
+
+	block_nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+	inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
 
 	if (fs->block_map)
-		block_bitmap = fs->block_map->bitmap;
+		block_bitmap = malloc(block_nbytes);
 	if (fs->inode_map)
-		inode_bitmap = fs->inode_map->bitmap;
+		inode_bitmap = malloc(inode_nbytes);
 
 	inode_blocks_per_group = ((fs->super->s_inodes_per_group *
 				   EXT2_INODE_SIZE(fs->super)) +
@@ -156,13 +162,17 @@
 		first_block = ext2fs_group_first_block(fs, i);
 		last_block = ext2fs_group_last_block(fs, i);
 
-		ext2fs_super_and_bgd_loc(fs, i, &super_blk, 
+		ext2fs_super_and_bgd_loc(fs, i, &super_blk,
 					 &old_desc_blk, &new_desc_blk, 0);
 
 		printf (_("Group %lu: (Blocks "), i);
 		print_range(first_block, last_block);
 		fputs(")", stdout);
 		print_bg_opts(fs, i);
+		if (fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
+			printf(_("  Checksum 0x%04x, unused inodes %d\n"),
+			       fs->group_desc[i].bg_checksum,
+			       fs->group_desc[i].bg_itable_unused);
 		has_super = ((i==0) || super_blk);
 		if (has_super) {
 			printf (_("  %s superblock at "),
@@ -171,12 +181,12 @@
 		}
 		if (old_desc_blk) {
 			printf(_(", Group descriptors at "));
-			print_range(old_desc_blk, 
+			print_range(old_desc_blk,
 				    old_desc_blk + old_desc_blocks - 1);
 			if (reserved_gdt) {
 				printf(_("\n  Reserved GDT blocks at "));
 				print_range(old_desc_blk + old_desc_blocks,
-					    old_desc_blk + old_desc_blocks + 
+					    old_desc_blk + old_desc_blocks +
 					    reserved_gdt - 1);
 			}
 		} else if (new_desc_blk) {
@@ -204,27 +214,39 @@
 		diff = fs->group_desc[i].bg_inode_table - first_block;
 		if (diff > 0)
 			printf(" (+%ld)", diff);
-		printf (_("\n  %d free blocks, %d free inodes, "
-			  "%d directories\n"),
+		printf (_("\n  %u free blocks, %u free inodes, "
+			  "%u directories%s"),
 			fs->group_desc[i].bg_free_blocks_count,
 			fs->group_desc[i].bg_free_inodes_count,
-			fs->group_desc[i].bg_used_dirs_count);
+			fs->group_desc[i].bg_used_dirs_count,
+			fs->group_desc[i].bg_itable_unused ? "" : "\n");
+		if (fs->group_desc[i].bg_itable_unused)
+			printf (_(", %u unused inodes\n"),
+				fs->group_desc[i].bg_itable_unused);
 		if (block_bitmap) {
 			fputs(_("  Free blocks: "), stdout);
+			ext2fs_get_block_bitmap_range(fs->block_map,
+				 blk_itr, block_nbytes << 3, block_bitmap);
 			print_free (i, block_bitmap,
 				    fs->super->s_blocks_per_group,
 				    fs->super->s_first_data_block);
 			fputc('\n', stdout);
-			block_bitmap += fs->super->s_blocks_per_group / 8;
+			blk_itr += fs->super->s_blocks_per_group;
 		}
 		if (inode_bitmap) {
 			fputs(_("  Free inodes: "), stdout);
+			ext2fs_get_inode_bitmap_range(fs->inode_map,
+				 ino_itr, inode_nbytes << 3, inode_bitmap);
 			print_free (i, inode_bitmap,
 				    fs->super->s_inodes_per_group, 1);
 			fputc('\n', stdout);
-			inode_bitmap += fs->super->s_inodes_per_group / 8;
+			ino_itr += fs->super->s_inodes_per_group;
 		}
 	}
+	if (block_bitmap)
+		free(block_bitmap);
+	if (inode_bitmap)
+		free(inode_bitmap);
 }
 
 static void list_bad_blocks(ext2_filsys fs, int dump)
@@ -259,27 +281,75 @@
 	ext2fs_badblocks_list_iterate_end(bb_iter);
 	if (!dump)
 		fputc('\n', stdout);
+	ext2fs_badblocks_list_free(bb_list);
 }
 
 static void print_inline_journal_information(ext2_filsys fs)
 {
+	journal_superblock_t	*jsb;
 	struct ext2_inode	inode;
+	ext2_file_t		journal_file;
 	errcode_t		retval;
 	ino_t			ino = fs->super->s_journal_inum;
-	int			size;
-	
+	char			buf[1024];
+	__u32			*mask_ptr, mask, m;
+	int			i, j, size, printed = 0;
+
 	retval = ext2fs_read_inode(fs, ino,  &inode);
 	if (retval) {
 		com_err(program_name, retval,
 			_("while reading journal inode"));
 		exit(1);
 	}
+	retval = ext2fs_file_open2(fs, ino, &inode, 0, &journal_file);
+	if (retval) {
+		com_err(program_name, retval,
+			_("while opening journal inode"));
+		exit(1);
+	}
+	retval = ext2fs_file_read(journal_file, buf, sizeof(buf), 0);
+	if (retval) {
+		com_err(program_name, retval,
+			_("while reading journal super block"));
+		exit(1);
+	}
+	ext2fs_file_close(journal_file);
+	jsb = (journal_superblock_t *) buf;
+	if (be32_to_cpu(jsb->s_header.h_magic) != JFS_MAGIC_NUMBER) {
+		fprintf(stderr,
+			"Journal superblock magic number invalid!\n");
+		exit(1);
+	}
+	printf(_("Journal features:        "));
+	for (i=0, mask_ptr=&jsb->s_feature_compat; i <3; i++,mask_ptr++) {
+		mask = be32_to_cpu(*mask_ptr);
+		for (j=0,m=1; j < 32; j++, m<<=1) {
+			if (mask & m) {
+				printf(" %s", e2p_jrnl_feature2string(i, m));
+				printed++;
+			}
+		}
+	}
+	if (printed == 0)
+		printf(" (none)");
+	printf("\n");
 	fputs(_("Journal size:             "), stdout);
-	size = inode.i_blocks >> 1;
+	if ((fs->super->s_feature_ro_compat &
+	     EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
+	    (inode.i_flags & EXT4_HUGE_FILE_FL))
+		size = inode.i_blocks / (fs->blocksize / 1024);
+	else
+		size = inode.i_blocks >> 1;
 	if (size < 8192)
 		printf("%uk\n", size);
 	else
 		printf("%uM\n", size >> 10);
+	printf(_("Journal length:           %u\n"
+		 "Journal sequence:         0x%08x\n"
+		 "Journal start:            %u\n"),
+	       (unsigned int)ntohl(jsb->s_maxlen),
+	       (unsigned int)ntohl(jsb->s_sequence),
+	       (unsigned int)ntohl(jsb->s_start));
 }
 
 static void print_journal_information(ext2_filsys fs)
@@ -323,12 +393,12 @@
 	}
 }
 
-static void parse_extended_opts(const char *opts, blk_t *superblock, 
+static void parse_extended_opts(const char *opts, blk_t *superblock,
 				int *blocksize)
 {
-	char	*buf, *token, *next, *p, *arg, *badopt = "";
+	char	*buf, *token, *next, *p, *arg, *badopt = 0;
 	int	len;
-	int	usage = 0;
+	int	do_usage = 0;
 
 	len = strlen(opts);
 	buf = malloc(len+1);
@@ -353,7 +423,7 @@
 		if (strcmp(token, "superblock") == 0 ||
 		    strcmp(token, "sb") == 0) {
 			if (!arg) {
-				usage++;
+				do_usage++;
 				badopt = token;
 				continue;
 			}
@@ -362,13 +432,13 @@
 				fprintf(stderr,
 					_("Invalid superblock parameter: %s\n"),
 					arg);
-				usage++;
+				do_usage++;
 				continue;
 			}
 		} else if (strcmp(token, "blocksize") == 0 ||
 			   strcmp(token, "bs") == 0) {
 			if (!arg) {
-				usage++;
+				do_usage++;
 				badopt = token;
 				continue;
 			}
@@ -377,15 +447,15 @@
 				fprintf(stderr,
 					_("Invalid blocksize parameter: %s\n"),
 					arg);
-				usage++;
+				do_usage++;
 				continue;
 			}
 		} else {
-			usage++;
+			do_usage++;
 			badopt = token;
 		}
 	}
-	if (usage) {
+	if (do_usage) {
 		fprintf(stderr, _("\nBad extended option(s) specified: %s\n\n"
 			"Extended options are separated by commas, "
 			"and may take an argument which\n"
@@ -393,25 +463,24 @@
 			"Valid extended options are:\n"
 			"\tsuperblock=<superblock number>\n"
 			"\tblocksize=<blocksize>\n"),
-			badopt);
+			badopt ? badopt : "");
 		free(buf);
 		exit(1);
 	}
 	free(buf);
-}	
+}
 
 int main (int argc, char ** argv)
 {
 	errcode_t	retval;
 	ext2_filsys	fs;
 	int		print_badblocks = 0;
-	int		use_superblock = 0;
+	blk_t		use_superblock = 0;
 	int		use_blocksize = 0;
 	int		image_dump = 0;
 	int		force = 0;
 	int		flags;
 	int		header_only = 0;
-	int		big_endian;
 	int		c;
 
 #ifdef ENABLE_NLS
@@ -425,7 +494,7 @@
 		 E2FSPROGS_DATE);
 	if (argc && *argv)
 		program_name = *argv;
-	
+
 	while ((c = getopt (argc, argv, "bfhixVo:")) != EOF) {
 		switch (c) {
 		case 'b':
@@ -441,7 +510,7 @@
 			image_dump++;
 			break;
 		case 'o':
-			parse_extended_opts(optarg, &use_superblock, 
+			parse_extended_opts(optarg, &use_superblock,
 					    &use_blocksize);
 			break;
 		case 'V':
@@ -464,7 +533,7 @@
 		flags |= EXT2_FLAG_FORCE;
 	if (image_dump)
 		flags |= EXT2_FLAG_IMAGE_FILE;
-	
+
 	if (use_superblock && !use_blocksize) {
 		for (use_blocksize = EXT2_MIN_BLOCK_SIZE;
 		     use_blocksize <= EXT2_MAX_BLOCK_SIZE;
@@ -488,12 +557,6 @@
 	if (print_badblocks) {
 		list_bad_blocks(fs, 1);
 	} else {
-		big_endian = ((fs->flags & EXT2_FLAG_SWAP_BYTES) != 0);
-#ifdef WORDS_BIGENDIAN
-		big_endian = !big_endian;
-#endif
-		if (big_endian)
-			printf(_("Note: This is a byte-swapped filesystem\n"));
 		list_super (fs->super);
 		if (fs->super->s_feature_incompat &
 		      EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
@@ -501,8 +564,9 @@
 			ext2fs_close(fs);
 			exit(0);
 		}
-		if (fs->super->s_feature_compat &
-		      EXT3_FEATURE_COMPAT_HAS_JOURNAL)
+		if ((fs->super->s_feature_compat &
+		     EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+		    (fs->super->s_journal_inum != 0))
 			print_inline_journal_information(fs);
 		list_bad_blocks(fs, 0);
 		if (header_only) {
diff --git a/misc/e2freefrag.8.in b/misc/e2freefrag.8.in
new file mode 100644
index 0000000..564be74
--- /dev/null
+++ b/misc/e2freefrag.8.in
@@ -0,0 +1,96 @@
+.\" -*- nroff -*-
+.TH E2FREEFRAG 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
+.SH NAME
+e2freefrag \- report free space fragmentation information
+.SH SYNOPSIS
+.B e2freefrag
+[
+.B \-c chunk_kb
+]
+[
+.B \-h
+]
+.B filesys
+
+.SH DESCRIPTION
+.B e2freefrag
+is used to report free space fragmentation on ext2/3/4 file systems.
+.I filesys
+is the filesystem device name (e.g.
+.IR /dev/hdc1 ", " /dev/md0 ).
+The
+.B e2freefrag
+program will scan the block bitmap information to check how many free blocks
+are present as contiguous and aligned free space. The percentage of contiguous
+free blocks of size and of alignment
+.IR chunk_kb
+is reported.  It also displays the minimum/maximum/average free chunk size in
+the filesystem, along with a histogram of all free chunks.  This information
+can be used to gauge the level of free space fragmentation in the filesystem.
+.SH OPTIONS
+.TP
+.BI \-c " chunk_kb"
+If a chunk size is specified, then
+.B e2freefrag
+will print how many free chunks of size
+.I chunk_kb
+are available in units of kilobytes (Kb).  The chunk size must be a
+power of two and be larger than filesystem block size.
+.TP
+.BI \-h
+Print the usage of the program.
+.SH EXAMPLE
+# e2freefrag /dev/vgroot/lvhome
+.br
+Device: /dev/vgroot/lvhome
+.br
+Blocksize: 4096 bytes
+.br
+Total blocks: 1504085
+.br
+Free blocks: 292995 (19.5%)
+.br
+
+Min. free extent: 4 KB
+.br
+Max. free extent: 24008 KB
+.br
+Avg. free extent: 252 KB
+.br
+
+HISTOGRAM OF FREE EXTENT SIZES:
+.br
+Extent Size Range :   Free extents   Free Blocks  Percent
+.br
+    4K...    8K- :           704           704     0.2%
+.br
+    8K...   16K- :           810          1979     0.7%
+.br
+   16K...   32K- :           843          4467     1.5%
+.br
+   32K...   64K- :           579          6263     2.1%
+.br
+   64K...  128K- :           493         11067     3.8%
+.br
+  128K...  256K- :           394         18097     6.2%
+.br
+  256K...  512K- :           281         25477     8.7%
+.br
+  512K... 1024K- :           253         44914    15.3%
+.br
+    1M...    2M- :           143         51897    17.7%
+.br
+    2M...    4M- :            73         50683    17.3%
+.br
+    4M...    8M- :            37         52417    17.9%
+.br
+    8M...   16M- :             7         19028     6.5%
+.br
+   16M...   32M- :             1          6002     2.0%
+.SH AUTHOR
+This version of e2freefrag was written by Rupesh Thakare, and modified by
+Andreas Dilger <adilger@sun.com>, and Kalpak Shah.
+.SH SEE ALSO
+.IR debugfs (8),
+.IR dumpe2fs (8),
+.IR e2fsck (8)
diff --git a/misc/e2freefrag.c b/misc/e2freefrag.c
new file mode 100644
index 0000000..a4ab994
--- /dev/null
+++ b/misc/e2freefrag.c
@@ -0,0 +1,310 @@
+/*
+ * e2freefrag - report filesystem free-space fragmentation
+ *
+ * Copyright (C) 2009 Sun Microsystems, Inc.
+ *
+ * Author: Rupesh Thakare <rupesh@sun.com>
+ *         Andreas Dilger <adilger@sun.com>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License version 2.
+ * %End-Header%
+ */
+#include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#else
+extern char *optarg;
+extern int optind;
+#endif
+
+#include "ext2fs/ext2_fs.h"
+#include "ext2fs/ext2fs.h"
+#include "e2freefrag.h"
+
+void usage(const char *prog)
+{
+	fprintf(stderr, "usage: %s [-c chunksize in kb] [-h] "
+		"device_name\n", prog);
+	exit(1);
+}
+
+static int ul_log2(unsigned long arg)
+{
+        int     l = 0;
+
+        arg >>= 1;
+        while (arg) {
+                l++;
+                arg >>= 1;
+        }
+        return l;
+}
+
+void init_chunk_info(ext2_filsys fs, struct chunk_info *info)
+{
+	int i;
+
+	info->blocksize_bits = ul_log2((unsigned long)fs->blocksize);
+	if (info->chunkbytes) {
+		info->chunkbits = ul_log2(info->chunkbytes);
+		info->blks_in_chunk = info->chunkbytes >> info->blocksize_bits;
+	} else {
+		info->chunkbits = ul_log2(DEFAULT_CHUNKSIZE);
+		info->blks_in_chunk = DEFAULT_CHUNKSIZE >> info->blocksize_bits;
+	}
+
+	info->min = ~0UL;
+	info->max = info->avg = 0;
+	info->real_free_chunks = 0;
+
+	for (i = 0; i < MAX_HIST; i++) {
+		info->histogram.fc_chunks[i] = 0;
+		info->histogram.fc_blocks[i] = 0;
+	}
+}
+
+void update_chunk_stats(struct chunk_info *info, unsigned long chunk_size)
+{
+	unsigned long index;
+
+	index = ul_log2(chunk_size) + 1;
+	if (index >= MAX_HIST)
+		index = MAX_HIST-1;
+	info->histogram.fc_chunks[index]++;
+	info->histogram.fc_blocks[index] += chunk_size;
+
+	if (chunk_size > info->max)
+		info->max = chunk_size;
+	if (chunk_size < info->min)
+		info->min = chunk_size;
+	info->avg += chunk_size;
+	info->real_free_chunks++;
+}
+
+void scan_block_bitmap(ext2_filsys fs, struct chunk_info *info)
+{
+	unsigned long long blocks_count = fs->super->s_blocks_count;
+	unsigned long long chunks = (blocks_count + info->blks_in_chunk) >>
+				(info->chunkbits - info->blocksize_bits);
+	unsigned long long chunk_num;
+	unsigned long last_chunk_size = 0;
+	unsigned long long chunk_start_blk = 0;
+	int used;
+
+	for (chunk_num = 0; chunk_num < chunks; chunk_num++) {
+		unsigned long long blk, num_blks;
+		int chunk_free;
+
+		/* Last chunk may be smaller */
+		if (chunk_start_blk + info->blks_in_chunk > blocks_count)
+			num_blks = blocks_count - chunk_start_blk;
+		else
+			num_blks = info->blks_in_chunk;
+
+		chunk_free = 0;
+
+		/* Initialize starting block for first chunk correctly else
+		 * there is a segfault when blocksize = 1024 in which case
+		 * block_map->start = 1 */
+		for (blk = 0; blk < num_blks; blk++, chunk_start_blk++) {
+			if (chunk_num == 0 && blk == 0) {
+				blk = fs->super->s_first_data_block;
+				chunk_start_blk = blk;
+			}
+			used = ext2fs_fast_test_block_bitmap(fs->block_map,
+							     chunk_start_blk);
+			if (!used) {
+				last_chunk_size++;
+				chunk_free++;
+			}
+
+			if (used && last_chunk_size != 0) {
+				update_chunk_stats(info, last_chunk_size);
+				last_chunk_size = 0;
+			}
+		}
+
+		if (chunk_free == info->blks_in_chunk)
+			info->free_chunks++;
+	}
+	if (last_chunk_size != 0)
+		update_chunk_stats(info, last_chunk_size);
+}
+
+errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info)
+{
+	unsigned long total_chunks;
+	char *unitp = "KMGTPEZY";
+	int units = 10;
+	unsigned long start = 0, end, cum;
+	int i, retval = 0;
+
+	scan_block_bitmap(fs, info);
+
+	printf("Total blocks: %u\nFree blocks: %u (%0.1f%%)\n",
+	       fs->super->s_blocks_count, fs->super->s_free_blocks_count,
+	       (double)fs->super->s_free_blocks_count * 100 /
+						fs->super->s_blocks_count);
+
+	if (info->chunkbytes) {
+		printf("\nChunksize: %lu bytes (%u blocks)\n",
+		       info->chunkbytes, info->blks_in_chunk);
+		total_chunks = (fs->super->s_blocks_count +
+				info->blks_in_chunk) >>
+			(info->chunkbits - info->blocksize_bits);
+		printf("Total chunks: %lu\nFree chunks: %lu (%0.1f%%)\n",
+		       total_chunks, info->free_chunks,
+		       (double)info->free_chunks * 100 / total_chunks);
+	}
+
+	/* Display chunk information in KB */
+	if (info->real_free_chunks) {
+		info->min = (info->min * fs->blocksize) >> 10;
+		info->max = (info->max * fs->blocksize) >> 10;
+		info->avg = (info->avg / info->real_free_chunks *
+			     fs->blocksize) >> 10;
+	} else {
+		info->min = 0;
+	}
+
+	printf("\nMin. free extent: %lu KB \nMax. free extent: %lu KB\n"
+	       "Avg. free extent: %lu KB\n", info->min, info->max, info->avg);
+
+	printf("\nHISTOGRAM OF FREE EXTENT SIZES:\n");
+	printf("%s :  %12s  %12s  %7s\n", "Extent Size Range", "Free extents",
+	       "Free Blocks", "Percent");
+	for (i = 0; i < MAX_HIST; i++) {
+		end = 1 << (i + info->blocksize_bits - units);
+		if (info->histogram.fc_chunks[i] != 0) {
+			char end_str[32];
+
+			sprintf(end_str, "%5lu%c-", end, *unitp);
+			if (i == MAX_HIST-1)
+				strcpy(end_str, "max ");
+			printf("%5lu%c...%7s  :  %12lu  %12lu  %6.2f%%\n",
+			       start, *unitp, end_str,
+			       info->histogram.fc_chunks[i],
+			       info->histogram.fc_blocks[i],
+			       (double)info->histogram.fc_blocks[i] * 100 /
+			       fs->super->s_free_blocks_count);
+		}
+		start = end;
+		if (start == 1<<10) {
+			start = 1;
+			units += 10;
+			unitp++;
+		}
+	}
+
+	return retval;
+}
+
+void close_device(char *device_name, ext2_filsys fs)
+{
+	int retval = ext2fs_close(fs);
+
+	if (retval)
+		com_err(device_name, retval, "while closing the filesystem.\n");
+}
+
+void collect_info(ext2_filsys fs, struct chunk_info *chunk_info)
+{
+	unsigned int retval = 0, i, free_blks;
+
+	printf("Device: %s\n", fs->device_name);
+	printf("Blocksize: %u bytes\n", fs->blocksize);
+
+	retval = ext2fs_read_block_bitmap(fs);
+	if (retval) {
+		com_err(fs->device_name, retval, "while reading block bitmap");
+		close_device(fs->device_name, fs);
+		exit(1);
+	}
+
+	init_chunk_info(fs, chunk_info);
+
+	retval = get_chunk_info(fs, chunk_info);
+	if (retval) {
+		com_err(fs->device_name, retval, "while collecting chunk info");
+                close_device(fs->device_name, fs);
+		exit(1);
+	}
+}
+
+void open_device(char *device_name, ext2_filsys *fs)
+{
+	int retval;
+	int flag = EXT2_FLAG_FORCE;
+
+	retval = ext2fs_open(device_name, flag, 0, 0, unix_io_manager, fs);
+	if (retval) {
+		com_err(device_name, retval, "while opening filesystem");
+		exit(1);
+	}
+}
+
+int main(int argc, char *argv[])
+{
+	struct chunk_info chunk_info = { };
+	errcode_t retval = 0;
+	ext2_filsys fs = NULL;
+	char *device_name;
+	char *progname;
+	char c, *end;
+
+	add_error_table(&et_ext2_error_table);
+	progname = argv[0];
+
+	while ((c = getopt(argc, argv, "c:h")) != EOF) {
+		switch (c) {
+		case 'c':
+			chunk_info.chunkbytes = strtoull(optarg, &end, 0);
+			if (*end != '\0') {
+				fprintf(stderr, "%s: bad chunk size '%s'\n",
+					progname, optarg);
+				usage(progname);
+			}
+			if (chunk_info.chunkbytes &
+			    (chunk_info.chunkbytes - 1)) {
+				fprintf(stderr, "%s: chunk size must be a "
+					"power of 2.\n", argv[0]);
+				usage(progname);
+			}
+			chunk_info.chunkbytes *= 1024;
+			break;
+		default:
+			fprintf(stderr, "%s: bad option '%c'\n",
+				progname, c);
+		case 'h':
+			usage(progname);
+			break;
+		}
+	}
+
+	if (optind == argc) {
+		fprintf(stderr, "%s: missing device name.\n", progname);
+		usage(progname);
+	}
+
+	device_name = argv[optind];
+
+	open_device(device_name, &fs);
+
+	if (chunk_info.chunkbytes && (chunk_info.chunkbytes < fs->blocksize)) {
+		fprintf(stderr, "%s: chunksize must be greater than or equal "
+			"to filesystem blocksize.\n", progname);
+		exit(1);
+	}
+	collect_info(fs, &chunk_info);
+	close_device(device_name, fs);
+
+	return retval;
+}
diff --git a/misc/e2freefrag.h b/misc/e2freefrag.h
new file mode 100644
index 0000000..80d1eef
--- /dev/null
+++ b/misc/e2freefrag.h
@@ -0,0 +1,20 @@
+#include <sys/types.h>
+
+#define DEFAULT_CHUNKSIZE (1024*1024)
+
+#define MAX_HIST	32
+struct free_chunk_histogram {
+	unsigned long fc_chunks[MAX_HIST];
+	unsigned long fc_blocks[MAX_HIST];
+};
+
+struct chunk_info {
+	unsigned long chunkbytes;	/* chunk size in bytes */
+	int chunkbits;			/* chunk size in bits */
+	unsigned long free_chunks;	/* total free chunks of given size */
+	unsigned long real_free_chunks; /* free chunks of any size */
+	int blocksize_bits;		/* fs blocksize in bits */
+	int blks_in_chunk;		/* number of blocks in a chunk */
+	unsigned long min, max, avg;	/* chunk size stats */
+	struct free_chunk_histogram histogram; /* histogram of all chunk sizes*/
+};
diff --git a/misc/e2image.8.in b/misc/e2image.8.in
index a0300b4..e18a30b 100644
--- a/misc/e2image.8.in
+++ b/misc/e2image.8.in
@@ -4,7 +4,7 @@
 .\" 
 .TH E2IMAGE 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-e2image \- Save critical ext2/ext3 filesystem metadata to a file
+e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file
 .SH SYNOPSIS
 .B e2image
 [
@@ -15,7 +15,7 @@
 .SH DESCRIPTION
 The
 .B e2image
-program will save critical ext2 or ext3 filesystem metadata located on 
+program will save critical ext2, ext3, or ext4 filesystem metadata located on 
 .I device  
 to a file specified by 
 .IR image-file .
diff --git a/misc/e2image.c b/misc/e2image.c
index e10554e..83c1cca 100644
--- a/misc/e2image.c
+++ b/misc/e2image.c
@@ -23,7 +23,9 @@
 #endif
 #include <pwd.h>
 #include <stdio.h>
+#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
@@ -47,7 +49,7 @@
 
 static void usage(void)
 {
-	fprintf(stderr, _("Usage: %s [-rsI] device image_file\n"), 
+	fprintf(stderr, _("Usage: %s [-rsI] device image_file\n"),
 		program_name);
 	exit (1);
 }
@@ -68,10 +70,10 @@
 		exit(1);
 	}
 	memset(header_buf, 0, blocksize);
-	
+
 	if (hdr)
 		memcpy(header_buf, hdr, sizeof(struct ext2_image_hdr));
-	
+
 	actual = write(fd, header_buf, blocksize);
 	if (actual < 0) {
 		perror("write header");
@@ -100,7 +102,7 @@
 		com_err(program_name, retval, _("while writing superblock"));
 		exit(1);
 	}
-	
+
 	hdr.offset_inode = lseek(fd, 0, SEEK_CUR);
 	retval = ext2fs_image_inode_write(fs, fd,
 				  (fd != 1) ? IMAGER_FLAG_SPARSEWRITE : 0);
@@ -108,7 +110,7 @@
 		com_err(program_name, retval, _("while writing inode table"));
 		exit(1);
 	}
-	
+
 	hdr.offset_blockmap = lseek(fd, 0, SEEK_CUR);
 	retval = ext2fs_image_bitmap_write(fs, fd, 0);
 	if (retval) {
@@ -129,7 +131,7 @@
 	strncpy(hdr.fs_device_name, device_name, sizeof(hdr.fs_device_name)-1);
 	hdr.fs_device_name[sizeof(hdr.fs_device_name) - 1] = 0;
 	hdr.fs_blocksize = fs->blocksize;
-	
+
 	if (stat(device_name, &st) == 0)
 		hdr.fs_device = st.st_rdev;
 
@@ -163,12 +165,12 @@
 static ino_t stashed_ino = 0;
 static struct ext2_inode *stashed_inode;
 
-static errcode_t meta_get_blocks(ext2_filsys fs EXT2FS_ATTR((unused)), 
+static errcode_t meta_get_blocks(ext2_filsys fs EXT2FS_ATTR((unused)),
 				 ext2_ino_t ino,
 				 blk_t *blocks)
 {
 	int	i;
-	
+
 	if ((ino != stashed_ino) || !stashed_inode)
 		return EXT2_ET_CALLBACK_NOTHANDLED;
 
@@ -177,7 +179,7 @@
 	return 0;
 }
 
-static errcode_t meta_check_directory(ext2_filsys fs EXT2FS_ATTR((unused)), 
+static errcode_t meta_check_directory(ext2_filsys fs EXT2FS_ATTR((unused)),
 				      ext2_ino_t ino)
 {
 	if ((ino != stashed_ino) || !stashed_inode)
@@ -188,7 +190,7 @@
 	return 0;
 }
 
-static errcode_t meta_read_inode(ext2_filsys fs EXT2FS_ATTR((unused)), 
+static errcode_t meta_read_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
 				 ext2_ino_t ino,
 				 struct ext2_inode *inode)
 {
@@ -212,11 +214,11 @@
 	}
 }
 
-static int process_dir_block(ext2_filsys fs EXT2FS_ATTR((unused)), 
+static int process_dir_block(ext2_filsys fs EXT2FS_ATTR((unused)),
 			     blk_t *block_nr,
-			     e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), 
+			     e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
 			     blk_t ref_block EXT2FS_ATTR((unused)),
-			     int ref_offset EXT2FS_ATTR((unused)), 
+			     int ref_offset EXT2FS_ATTR((unused)),
 			     void *priv_data EXT2FS_ATTR((unused)))
 {
 	struct process_block_struct *p;
@@ -224,16 +226,16 @@
 	p = (struct process_block_struct *) priv_data;
 
 	ext2fs_mark_block_bitmap(meta_block_map, *block_nr);
-	if (scramble_block_map && p->is_dir && blockcnt >= 0) 
+	if (scramble_block_map && p->is_dir && blockcnt >= 0)
 		ext2fs_mark_block_bitmap(scramble_block_map, *block_nr);
 	return 0;
 }
 
-static int process_file_block(ext2_filsys fs EXT2FS_ATTR((unused)), 
+static int process_file_block(ext2_filsys fs EXT2FS_ATTR((unused)),
 			      blk_t *block_nr,
-			      e2_blkcnt_t blockcnt, 
+			      e2_blkcnt_t blockcnt,
 			      blk_t ref_block EXT2FS_ATTR((unused)),
-			      int ref_offset EXT2FS_ATTR((unused)), 
+			      int ref_offset EXT2FS_ATTR((unused)),
 			      void *priv_data EXT2FS_ATTR((unused)))
 {
 	if (blockcnt < 0) {
@@ -246,13 +248,13 @@
 {
 	blk_t	first_block, b;
 	unsigned int	i,j;
-	
+
 	first_block = fs->super->s_first_data_block;
 	/*
 	 * Mark primary superblock
 	 */
 	ext2fs_mark_block_bitmap(meta_block_map, first_block);
-			
+
 	/*
 	 * Mark the primary superblock descriptors
 	 */
@@ -271,17 +273,17 @@
 			     j++, b++)
 				ext2fs_mark_block_bitmap(meta_block_map, b);
 		}
-			    
+
 		/*
-		 * Mark block used for the block bitmap 
+		 * Mark block used for the block bitmap
 		 */
 		if (fs->group_desc[i].bg_block_bitmap) {
 			ext2fs_mark_block_bitmap(meta_block_map,
 				     fs->group_desc[i].bg_block_bitmap);
 		}
-		
+
 		/*
-		 * Mark block used for the inode bitmap 
+		 * Mark block used for the inode bitmap
 		 */
 		if (fs->group_desc[i].bg_inode_bitmap) {
 			ext2fs_mark_block_bitmap(meta_block_map,
@@ -337,38 +339,45 @@
 
 int name_id[256];
 
+#define EXT4_MAX_REC_LEN		((1<<16)-1)
+
 static void scramble_dir_block(ext2_filsys fs, blk_t blk, char *buf)
 {
 	char *p, *end, *cp;
 	struct ext2_dir_entry_2 *dirent;
-	int rec_len, id, len;
+	unsigned int rec_len;
+	int id, len;
 
 	end = buf + fs->blocksize;
 	for (p = buf; p < end-8; p += rec_len) {
 		dirent = (struct ext2_dir_entry_2 *) p;
 		rec_len = dirent->rec_len;
-#ifdef EXT2FS_ENABLE_SWAPFS
-		if (fs->flags & EXT2_FLAG_SWAP_BYTES) 
-			rec_len = ext2fs_swab16(rec_len);
+#ifdef WORDS_BIGENDIAN
+		rec_len = ext2fs_swab16(rec_len);
 #endif
+		if (rec_len == EXT4_MAX_REC_LEN || rec_len == 0)
+			rec_len = fs->blocksize;
+		else 
+			rec_len = (rec_len & 65532) | ((rec_len & 3) << 16);
 #if 0
 		printf("rec_len = %d, name_len = %d\n", rec_len, dirent->name_len);
 #endif
 		if (rec_len < 8 || (rec_len % 4) ||
 		    (p+rec_len > end)) {
 			printf("Corrupt directory block %lu: "
-			       "bad rec_len (%d)\n", (unsigned long) blk, 
+			       "bad rec_len (%d)\n", (unsigned long) blk,
 			       rec_len);
 			rec_len = end - p;
-#ifdef EXT2FS_ENABLE_SWAPFS
-			if (fs->flags & EXT2_FLAG_SWAP_BYTES) 
-				dirent->rec_len = ext2fs_swab16(rec_len);
+			(void) ext2fs_set_rec_len(fs, rec_len,
+					(struct ext2_dir_entry *) dirent);
+#ifdef WORDS_BIGENDIAN
+			dirent->rec_len = ext2fs_swab16(dirent->rec_len);
 #endif
 			continue;
 		}
 		if (dirent->name_len + 8 > rec_len) {
 			printf("Corrupt directory block %lu: "
-			       "bad name_len (%d)\n", (unsigned long) blk, 
+			       "bad name_len (%d)\n", (unsigned long) blk,
 			       dirent->name_len);
 			dirent->name_len = rec_len - 8;
 			continue;
@@ -420,7 +429,7 @@
 				com_err(program_name, retval,
 					"error reading block %u", blk);
 			}
-			if (scramble_block_map && 
+			if (scramble_block_map &&
 			    ext2fs_test_block_bitmap(scramble_block_map, blk))
 				scramble_dir_block(fs, blk, buf);
 			if ((fd != 1) && check_zero_block(buf, fs->blocksize))
@@ -455,7 +464,7 @@
 	ext2_ino_t			ino;
 	errcode_t			retval;
 	char *				block_buf;
-	
+
 	retval = ext2fs_allocate_block_bitmap(fs, "in-use block map",
 					      &meta_block_map);
 	if (retval) {
@@ -467,12 +476,12 @@
 		retval = ext2fs_allocate_block_bitmap(fs, "scramble block map",
 						      &scramble_block_map);
 		if (retval) {
-			com_err(program_name, retval, 
+			com_err(program_name, retval,
 				"while allocating scramble block bitmap");
 			exit(1);
 		}
 	}
-	
+
 	mark_table_blocks(fs);
 
 	retval = ext2fs_open_inode_scan(fs, 0, &scan);
@@ -486,7 +495,7 @@
 		com_err(program_name, 0, "Can't allocate block buffer");
 		exit(1);
 	}
-	
+
 	use_inode_shortcuts(fs, 1);
 	stashed_inode = &inode;
 	while (1) {
@@ -508,7 +517,7 @@
 		}
 		if (!ext2fs_inode_has_valid_blocks(&inode))
 			continue;
-		
+
 		stashed_ino = ino;
 		pb.ino = ino;
 		pb.is_dir = LINUX_S_ISDIR(inode.i_mode);
@@ -516,8 +525,9 @@
 		    (LINUX_S_ISLNK(inode.i_mode) &&
 		     ext2fs_inode_has_valid_blocks(&inode)) ||
 		    ino == fs->super->s_journal_inum) {
-			retval = ext2fs_block_iterate2(fs, ino, 0, 
-				       block_buf, process_dir_block, &pb);
+			retval = ext2fs_block_iterate2(fs, ino,
+					BLOCK_FLAG_READ_ONLY, block_buf,
+					process_dir_block, &pb);
 			if (retval) {
 				com_err(program_name, retval,
 					"while iterating over inode %u",
@@ -525,11 +535,12 @@
 				exit(1);
 			}
 		} else {
-			if (inode.i_block[EXT2_IND_BLOCK] ||
+			if ((inode.i_flags & EXT4_EXTENTS_FL) ||
+			    inode.i_block[EXT2_IND_BLOCK] ||
 			    inode.i_block[EXT2_DIND_BLOCK] ||
 			    inode.i_block[EXT2_TIND_BLOCK]) {
 				retval = ext2fs_block_iterate2(fs,
-				       ino, 0, block_buf,
+				       ino, BLOCK_FLAG_READ_ONLY, block_buf,
 				       process_file_block, &pb);
 				if (retval) {
 					com_err(program_name, retval,
@@ -557,13 +568,14 @@
 		com_err(program_name, 0, "Raw images cannot be installed");
 		exit(1);
 	}
-	
+
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
+		io_ptr = unix_io_manager;
 
 	retval = ext2fs_open (image_fn, open_flag, 0, 0,
 			      io_ptr, &fs);
@@ -589,7 +601,7 @@
 		exit(1);
 	}
 
-	retval = io_ptr->open(device, IO_FLAG_RW, &io); 
+	retval = io_ptr->open(device, IO_FLAG_RW, &io);
 	if (retval) {
 		com_err(device, 0, "while opening device file");
 		exit(1);
diff --git a/misc/e2initrd_helper.c b/misc/e2initrd_helper.c
index 8b8a00c..eaf9ce6 100644
--- a/misc/e2initrd_helper.c
+++ b/misc/e2initrd_helper.c
@@ -11,7 +11,9 @@
 
 #include <stdio.h>
 #include <unistd.h>
+#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
 #include <ctype.h>
 #include <string.h>
 #include <time.h>
@@ -24,14 +26,13 @@
 #include <utime.h>
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
-#else 
+#else
 extern int optind;
 extern char *optarg;
 #endif
 
 #include "ext2fs/ext2_fs.h"
 #include "ext2fs/ext2fs.h"
-#include "e2p/e2p.h"
 #include "blkid/blkid.h"
 
 #include "../version.h"
@@ -67,7 +68,7 @@
 	exit (1);
 }
 
-static errcode_t get_file(ext2_filsys fs, const char * filename, 
+static errcode_t get_file(ext2_filsys fs, const char * filename,
 		   struct mem_file *ret_file)
 {
 	errcode_t	retval;
@@ -81,7 +82,7 @@
 	ret_file->size = 0;
 	ret_file->ptr = 0;
 
-	retval = ext2fs_namei(fs, EXT2_ROOT_INO, EXT2_ROOT_INO, 
+	retval = ext2fs_namei(fs, EXT2_ROOT_INO, EXT2_ROOT_INO,
 			      filename, &ino);
 	if (retval)
 		return retval;
@@ -103,7 +104,7 @@
 		return retval;
 
 	retval = ext2fs_file_read(e2_file, buf, inode.i_size, &got);
-	if (retval) 
+	if (retval)
 		goto errout;
 
 	retval = ext2fs_file_close(e2_file);
@@ -246,7 +247,7 @@
 
 	if (!device)
 		return -1;	/* Allow blank lines */
-	
+
 	if (!mntpnt || !type)
 		return -1;
 
@@ -273,9 +274,8 @@
 	fs->flags = 0;
 	fs->next = NULL;
 
-	if (dev)
-		free(dev);
-	   
+	free(dev);
+
 	return 0;
 }
 
@@ -311,7 +311,7 @@
 			break;
 
 		case 'v':
-			printf("%s %s (%s)\n", program_name, 
+			printf("%s %s (%s)\n", program_name,
 			       E2FSPROGS_VERSION, E2FSPROGS_DATE);
 			break;
 		default:
@@ -322,7 +322,7 @@
 		usage();
 	device_name = blkid_get_devname(NULL, argv[optind], NULL);
 	if (!device_name) {
-		com_err("tune2fs", 0, _("Unable to resolve '%s'"), 
+		com_err("tune2fs", 0, _("Unable to resolve '%s'"),
 			argv[optind]);
 		exit(1);
 	}
@@ -342,9 +342,9 @@
 		buf = get_line(&file);
 		if (!buf)
 			continue;
-		
+
 		ret = parse_fstab_line(buf, &fs_info);
-		if (ret < 0) 
+		if (ret < 0)
 			goto next_line;
 
 		if (!strcmp(fs_info.mountpt, "/"))
@@ -368,18 +368,19 @@
 
 	blkid_get_cache(&cache, NULL);
 	PRS(argc, argv);
-	
+
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
+		io_ptr = unix_io_manager;
 	retval = ext2fs_open (device_name, open_flag, 0, 0, io_ptr, &fs);
         if (retval)
 		exit(1);
 
-	if (root_type) 
+	if (root_type)
 		get_root_type(fs);
 
 	remove_error_table(&et_ext2_error_table);
diff --git a/misc/e2label.8.in b/misc/e2label.8.in
index 8040de2..aff08d9 100644
--- a/misc/e2label.8.in
+++ b/misc/e2label.8.in
@@ -4,7 +4,7 @@
 .\" 
 .TH E2LABEL 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-e2label \- Change the label on an ext2/ext3 filesystem
+e2label \- Change the label on an ext2/ext3/ext4 filesystem
 .SH SYNOPSIS
 .B e2label
 .I device
@@ -13,7 +13,8 @@
 ]
 .SH DESCRIPTION
 .B e2label
-will display or change the filesystem label on the ext2 filesystem located on
+will display or change the filesystem label on the ext2, ext3, or ext4 
+filesystem located on
 .I device.  
 .PP
 If the optional argument 
diff --git a/misc/e2label.c b/misc/e2label.c
index cf65513..e96101a 100644
--- a/misc/e2label.c
+++ b/misc/e2label.c
@@ -2,7 +2,7 @@
  * e2label.c		- Print or change the volume label on an ext2 fs
  *
  * Written by Andries Brouwer (aeb@cwi.nl), 970714
- * 
+ *
  * Copyright 1997, 1998 by Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/misc/e2undo.8.in b/misc/e2undo.8.in
new file mode 100644
index 0000000..4bf0798
--- /dev/null
+++ b/misc/e2undo.8.in
@@ -0,0 +1,44 @@
+.\" -*- nroff -*-
+.\" Copyright 2008 by Theodore Ts'o.  All Rights Reserved.
+.\" This file may be copied under the terms of the GNU Public License.
+.\"
+.TH E2UNDO 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
+.SH NAME
+e2undo \- Replay an undo log for an ext2/ext3/ext4 filesystem
+.SH SYNOPSIS
+.B e2undo
+[
+.B \-f
+]
+.I undo_log device
+.SH DESCRIPTION
+.B e2undo
+will replay the undo log
+.I undo_log
+for an ext2/ext3/ext4 filesystem found on
+.IR device .
+This can be
+used to undo a failed operation by an e2fsprogs program.
+.SH OPTIONS
+.TP
+.B \-f
+Normally,
+.B e2undo
+will check the filesystem UUID and last modified time to make sure the
+undo log matches with the filesystem on the device.  If they do not
+match,
+.B e2undo
+will refuse to apply the undo log as a safety mechanism.  The
+.B \-f
+option disables this safety mechanism.
+.SH AUTHOR
+.B e2undo
+was written by Aneesh Kumar K.V. (aneesh.kumar@linux.vnet.ibm.com)
+.SH AVAILABILITY
+.B e2undo
+is part of the e2fsprogs package and is available from
+http://e2fsprogs.sourceforge.net.
+.SH SEE ALSO
+.BR mke2fs (8),
+.BR tune2fs (8)
+
diff --git a/misc/e2undo.c b/misc/e2undo.c
new file mode 100644
index 0000000..2c9d536
--- /dev/null
+++ b/misc/e2undo.c
@@ -0,0 +1,224 @@
+/*
+ * e2undo.c - Replay an undo log onto an ext2/3/4 filesystem
+ *
+ * Copyright IBM Corporation, 2007
+ * Author Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+#include <fcntl.h>
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include "ext2fs/tdb.h"
+#include "ext2fs/ext2fs.h"
+#include "nls-enable.h"
+
+unsigned char mtime_key[] = "filesystem MTIME";
+unsigned char uuid_key[] = "filesystem UUID";
+unsigned char blksize_key[] = "filesystem BLKSIZE";
+
+char *prg_name;
+
+static void usage(char *prg_name)
+{
+	fprintf(stderr,
+		_("Usage: %s <transaction file> <filesystem>\n"), prg_name);
+	exit(1);
+
+}
+
+static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
+{
+	__u32   s_mtime;
+	__u8    s_uuid[16];
+	errcode_t retval;
+	TDB_DATA tdb_key, tdb_data;
+	struct ext2_super_block super;
+
+	io_channel_set_blksize(channel, SUPERBLOCK_OFFSET);
+	retval = io_channel_read_blk(channel, 1, -SUPERBLOCK_SIZE, &super);
+	if (retval) {
+		com_err(prg_name,
+			retval, _("Failed to read the file system data \n"));
+		return retval;
+	}
+
+	tdb_key.dptr = mtime_key;
+	tdb_key.dsize = sizeof(mtime_key);
+	tdb_data = tdb_fetch(tdb, tdb_key);
+	if (!tdb_data.dptr) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+		com_err(prg_name, retval,
+			_("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
+		return retval;
+	}
+
+	s_mtime = *(__u32 *)tdb_data.dptr;
+	if (super.s_mtime != s_mtime) {
+
+		com_err(prg_name, 0,
+			_("The file system Mount time didn't match %u\n"),
+			s_mtime);
+
+		return  -1;
+	}
+
+
+	tdb_key.dptr = uuid_key;
+	tdb_key.dsize = sizeof(uuid_key);
+	tdb_data = tdb_fetch(tdb, tdb_key);
+	if (!tdb_data.dptr) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+		com_err(prg_name, retval,
+			_("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
+		return retval;
+	}
+	memcpy(s_uuid, tdb_data.dptr, sizeof(s_uuid));
+	if (memcmp(s_uuid, super.s_uuid, sizeof(s_uuid))) {
+		com_err(prg_name, 0,
+			_("The file system UUID didn't match \n"));
+		return -1;
+	}
+
+	return 0;
+}
+
+static int set_blk_size(TDB_CONTEXT *tdb, io_channel channel)
+{
+	int block_size;
+	errcode_t retval;
+	TDB_DATA tdb_key, tdb_data;
+
+	tdb_key.dptr = blksize_key;
+	tdb_key.dsize = sizeof(blksize_key);
+	tdb_data = tdb_fetch(tdb, tdb_key);
+	if (!tdb_data.dptr) {
+		retval = EXT2_ET_TDB_SUCCESS + tdb_error(tdb);
+		com_err(prg_name, retval,
+			_("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
+		return retval;
+	}
+
+	block_size = *(int *)tdb_data.dptr;
+#ifdef DEBUG
+	printf("Block size %d\n", block_size);
+#endif
+	io_channel_set_blksize(channel, block_size);
+
+	return 0;
+}
+
+int main(int argc, char *argv[])
+{
+	int c,force = 0;
+	TDB_CONTEXT *tdb;
+	TDB_DATA key, data;
+	io_channel channel;
+	errcode_t retval;
+	int  mount_flags;
+	unsigned long  blk_num;
+	char *device_name, *tdb_file;
+	io_manager manager = unix_io_manager;
+
+#ifdef ENABLE_NLS
+	setlocale(LC_MESSAGES, "");
+	setlocale(LC_CTYPE, "");
+	bindtextdomain(NLS_CAT_NAME, LOCALEDIR);
+	textdomain(NLS_CAT_NAME);
+#endif
+	add_error_table(&et_ext2_error_table);
+
+	prg_name = argv[0];
+	while((c = getopt(argc, argv, "f")) != EOF) {
+		switch (c) {
+			case 'f':
+				force = 1;
+				break;
+			default:
+				usage(prg_name);
+		}
+	}
+
+	if (argc != optind+2)
+		usage(prg_name);
+
+	tdb_file = argv[optind];
+	device_name = argv[optind+1];
+
+	tdb = tdb_open(tdb_file, 0, 0, O_RDONLY, 0600);
+
+	if (!tdb) {
+		com_err(prg_name, errno,
+				_("Failed tdb_open %s\n"), tdb_file);
+		exit(1);
+	}
+
+	retval = ext2fs_check_if_mounted(device_name, &mount_flags);
+	if (retval) {
+		com_err(prg_name, retval, _("Error while determining whether "
+				"%s is mounted.\n"), device_name);
+		exit(1);
+	}
+
+	if (mount_flags & EXT2_MF_MOUNTED) {
+		com_err(prg_name, retval, _("e2undo should only be run on "
+				"unmounted file system\n"));
+		exit(1);
+	}
+
+	retval = manager->open(device_name,
+				IO_FLAG_EXCLUSIVE | IO_FLAG_RW,  &channel);
+	if (retval) {
+		com_err(prg_name, retval,
+				_("Failed to open %s\n"), device_name);
+		exit(1);
+	}
+
+	if (!force && check_filesystem(tdb, channel)) {
+		exit(1);
+	}
+
+	if (set_blk_size(tdb, channel)) {
+		exit(1);
+	}
+
+	for (key = tdb_firstkey(tdb); key.dptr; key = tdb_nextkey(tdb, key)) {
+		if (!strcmp((char *) key.dptr, (char *) mtime_key) ||
+		    !strcmp((char *) key.dptr, (char *) uuid_key) ||
+		    !strcmp((char *) key.dptr, (char *) blksize_key)) {
+			continue;
+		}
+
+		data = tdb_fetch(tdb, key);
+		if (!data.dptr) {
+			com_err(prg_name, 0,
+				_("Failed tdb_fetch %s\n"), tdb_errorstr(tdb));
+			exit(1);
+		}
+		blk_num = *(unsigned long *)key.dptr;
+		printf(_("Replayed transaction of size %zd at location %ld\n"),
+							data.dsize, blk_num);
+		retval = io_channel_write_blk(channel, blk_num,
+						-data.dsize, data.dptr);
+		if (retval == -1) {
+			com_err(prg_name, retval,
+					_("Failed write %s\n"),
+					strerror(errno));
+			exit(1);
+		}
+	}
+	io_channel_close(channel);
+	tdb_close(tdb);
+
+	return 0;
+}
diff --git a/misc/filefrag.8.in b/misc/filefrag.8.in
index 1077c9d..463f731 100644
--- a/misc/filefrag.8.in
+++ b/misc/filefrag.8.in
@@ -5,7 +5,7 @@
 .SH SYNOPSIS
 .B filefrag
 [
-.B \-v
+.B \-Bbsvx
 ]
 [
 .I files...
@@ -15,10 +15,29 @@
 reports on how badly fragmented a particular file might be.  It makes 
 allowances for indirect blocks for ext2 and ext3 filesystems, but can be
 used on files for any filesystem.
+.PP
+The 
+.B filefrag
+program initially attempts to get the
+extent information using FIEMAP ioctl which is more efficient and faster.
+If FIEMAP is not supported then filefrag will fall back to using FIBMAP.
 .SH OPTIONS
 .TP
+.B \-B
+Force the use of the older FIBMAP ioctl instead of the FIEMAP ioctl for
+testing purposes.
+.TP
+.B \-b
+Use 1024 byte blocksize for the output.
+.TP
+.B \-s
+Sync the file before requesting the mapping.
+.TP
 .B \-v
 Be verbose when checking for file fragmentation.
+.TP
+.B \-x
+Display mapping of extended attributes.
 .SH AUTHOR
 .B filefrag
 was written by Theodore Ts'o <tytso@mit.edu>.
diff --git a/misc/filefrag.c b/misc/filefrag.c
index 27675b1..1611f90 100644
--- a/misc/filefrag.c
+++ b/misc/filefrag.c
@@ -1,6 +1,6 @@
 /*
  * filefrag.c -- report if a particular file is fragmented
- * 
+ *
  * Copyright 2003 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -12,6 +12,7 @@
 #ifndef __linux__
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 int main(void) {
     fputs("This program is only supported on Linux!\n", stderr);
@@ -38,15 +39,51 @@
 #include <sys/vfs.h>
 #include <sys/ioctl.h>
 #include <linux/fd.h>
+#include <ext2fs/ext2_types.h>
+#include <ext2fs/fiemap.h>
 
 int verbose = 0;
+int no_bs = 0;		/* Don't use the files blocksize, use 1K blocksize */
+int sync_file = 0;	/* fsync file before getting the mapping */
+int xattr_map = 0;	/* get xattr mapping */
+int force_bmap = 0;
+int logical_width = 12;
+int physical_width = 14;
+unsigned long long filesize;
 
-#define FIBMAP	   _IO(0x00,1)	/* bmap access */
-#define FIGETBSZ   _IO(0x00,2)	/* get the block size used for bmap */
+#define FILEFRAG_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
 
-#define EXT4_EXTENTS_FL			0x00080000 /* Inode uses extents */
+#define FIBMAP		_IO(0x00, 1)	/* bmap access */
+#define FIGETBSZ	_IO(0x00, 2)	/* get the block size used for bmap */
+#define FS_IOC_FIEMAP	_IOWR('f', 11, struct fiemap)
+
+#define	EXT4_EXTENTS_FL			0x00080000 /* Inode uses extents */
 #define	EXT3_IOC_GETFLAGS		_IOR('f', 1, long)
 
+static int int_log2(int arg)
+{
+	int     l = 0;
+
+	arg >>= 1;
+	while (arg) {
+		l++;
+		arg >>= 1;
+	}
+	return l;
+}
+
+static int int_log10(unsigned long long arg)
+{
+	int     l = 0;
+
+	arg = arg / 10;
+	while (arg) {
+		l++;
+		arg = arg / 10;
+	}
+	return l;
+}
+
 static unsigned int div_ceil(unsigned int a, unsigned int b)
 {
 	if (!a)
@@ -54,21 +91,164 @@
 	return ((a - 1) / b) + 1;
 }
 
-static unsigned long get_bmap(int fd, unsigned long block)
+static int get_bmap(int fd, unsigned long block, unsigned long *phy_blk)
 {
 	int	ret;
 	unsigned int b;
 
 	b = block;
-	ret = ioctl(fd, FIBMAP, &b); /* FIBMAP takes a pointer to an integer */
+	ret = ioctl(fd, FIBMAP, &b); /* FIBMAP takes pointer to integer */
 	if (ret < 0) {
 		if (errno == EPERM) {
-			fprintf(stderr, "No permission to use FIBMAP ioctl; must have root privileges\n");
+			fprintf(stderr, "No permission to use FIBMAP ioctl; "
+				"must have root privileges\n");
 			exit(1);
 		}
 		perror("FIBMAP");
 	}
-	return b;
+	*phy_blk = b;
+
+	return ret;
+}
+
+static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
+			      unsigned long long expected, int blk_shift)
+{
+	__u64 phy_blk;
+	unsigned long long logical_blk;
+	unsigned long ext_len;
+	char flags[256] = "";
+
+	/* For inline data all offsets should be in terms of bytes, not blocks */
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_INLINE)
+		blk_shift = 0;
+
+	ext_len = fm_extent->fe_length >> blk_shift;
+	logical_blk = fm_extent->fe_logical >> blk_shift;
+	phy_blk = fm_extent->fe_physical >> blk_shift;
+
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_UNKNOWN)
+		strcat(flags, "unknown,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_DELALLOC)
+		strcat(flags, "delalloc,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_ENCRYPTED)
+		strcat(flags, "encrypted,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_NOT_ALIGNED)
+		strcat(flags, "not_aligned,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_INLINE)
+		strcat(flags, "inline,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_TAIL)
+		strcat(flags, "tail_packed,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_UNWRITTEN)
+		strcat(flags, "unwritten,");
+	if (fm_extent->fe_flags & FIEMAP_EXTENT_MERGED)
+		strcat(flags, "merged,");
+
+	if (fm_extent->fe_logical + fm_extent->fe_length >= filesize)
+		strcat(flags, "eof,");
+
+	/* Remove trailing comma, if any */
+	if (flags[0])
+		flags[strlen(flags) - 1] = '\0';
+
+	if (expected)
+		printf("%4d %*llu %*llu %*llu %6lu %s\n",
+		       cur_ex, logical_width, logical_blk,
+		       physical_width, phy_blk, physical_width, expected,
+		       ext_len, flags);
+	else
+		printf("%4d %*llu %*llu %*s %6lu %s\n",
+		       cur_ex, logical_width, logical_blk,
+		       physical_width, phy_blk, physical_width, "",
+		       ext_len, flags);
+}
+
+static int filefrag_fiemap(int fd, int blk_shift, int *num_extents)
+{
+	char buf[4096] = "";
+	struct fiemap *fiemap = (struct fiemap *)buf;
+	struct fiemap_extent *fm_ext = &fiemap->fm_extents[0];
+	int count = (sizeof(buf) - sizeof(*fiemap)) /
+			sizeof(struct fiemap_extent);
+	unsigned long long last_blk = 0;
+	unsigned long flags = 0;
+	unsigned int i;
+	static int fiemap_incompat_printed;
+	int fiemap_header_printed = 0;
+	int tot_extents = 1, n = 0;
+	int last = 0;
+	int rc;
+
+	fiemap->fm_length = ~0ULL;
+
+	memset(fiemap, 0, sizeof(struct fiemap));
+
+	if (!verbose)
+		count = 0;
+
+	if (sync_file)
+		flags |= FIEMAP_FLAG_SYNC;
+
+	if (xattr_map)
+		flags |= FIEMAP_FLAG_XATTR;
+
+	do {
+		fiemap->fm_length = ~0ULL;
+		fiemap->fm_flags = flags;
+		fiemap->fm_extent_count = count;
+		rc = ioctl(fd, FS_IOC_FIEMAP, (unsigned long) fiemap);
+		if (rc < 0) {
+			if (errno == EBADR && fiemap_incompat_printed == 0) {
+				printf("FIEMAP failed with unsupported "
+				       "flags %x\n", fiemap->fm_flags);
+				fiemap_incompat_printed = 1;
+			}
+			return rc;
+		}
+
+		if (verbose && !fiemap_header_printed) {
+			printf(" ext %*s %*s %*s length flags\n", logical_width,
+			       "logical", physical_width, "physical",
+			       physical_width, "expected");
+			fiemap_header_printed = 1;
+		}
+
+		if (!verbose) {
+			*num_extents = fiemap->fm_mapped_extents;
+			goto out;
+		}
+
+		/* If 0 extents are returned, then more ioctls are not needed */
+		if (fiemap->fm_mapped_extents == 0)
+			break;
+
+		for (i = 0; i < fiemap->fm_mapped_extents; i++) {
+			__u64 phy_blk, logical_blk;
+			unsigned long ext_len;
+
+			phy_blk = fm_ext[i].fe_physical >> blk_shift;
+			ext_len = fm_ext[i].fe_length >> blk_shift;
+			logical_blk = fm_ext[i].fe_logical >> blk_shift;
+
+			if (logical_blk && phy_blk != last_blk + 1)
+				tot_extents++;
+			else
+				last_blk = 0;
+			print_extent_info(&fm_ext[i], n, last_blk, blk_shift);
+
+			last_blk = phy_blk + ext_len - 1;
+			if (fm_ext[i].fe_flags & FIEMAP_EXTENT_LAST)
+				last = 1;
+			n++;
+		}
+
+		fiemap->fm_start = (fm_ext[i-1].fe_logical +
+				    fm_ext[i-1].fe_length);
+	} while (last == 0);
+
+	*num_extents = tot_extents;
+out:
+	return 0;
 }
 
 #define EXT2_DIRECT	12
@@ -83,12 +263,24 @@
 #endif
 	int		bs;
 	long		fd;
-	unsigned long	block, last_block = 0, numblocks, i;
+	unsigned long	block, last_block = 0, numblocks, i, count;
 	long		bpib;	/* Blocks per indirect block */
 	long		cylgroups;
-	int		discont = 0, expected;
+	int		num_extents = 0, expected;
 	int		is_ext2 = 0;
+	static int	once = 1;
 	unsigned int	flags;
+	int rc;
+
+#ifdef HAVE_OPEN64
+	fd = open64(filename, O_RDONLY);
+#else
+	fd = open(filename, O_RDONLY);
+#endif
+	if (fd < 0) {
+		perror("open");
+		return;
+	}
 
 	if (statfs(filename, &fsinfo) < 0) {
 		perror("statfs");
@@ -102,88 +294,89 @@
 		perror("stat");
 		return;
 	}
-	if (!S_ISREG(fileinfo.st_mode)) {
-		printf("%s: Not a regular file\n", filename);
-		return;
-	}
-	if ((fsinfo.f_type == 0xef51) || (fsinfo.f_type == 0xef52) || 
-	    (fsinfo.f_type == 0xef53))
+	if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0)
+		flags = 0;
+	if (!(flags & EXT4_EXTENTS_FL) &&
+	    ((fsinfo.f_type == 0xef51) || (fsinfo.f_type == 0xef52) ||
+	     (fsinfo.f_type == 0xef53)))
 		is_ext2++;
-	if (verbose) {
-		printf("Filesystem type is: %lx\n", 
+	if (verbose && once)
+		printf("Filesystem type is: %lx\n",
 		       (unsigned long) fsinfo.f_type);
-	}
+
 	cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize*8);
-	if (verbose) {
-		printf("Filesystem cylinder groups is approximately %ld\n", 
+	if (verbose && is_ext2 && once)
+		printf("Filesystem cylinder groups is approximately %ld\n",
 		       cylgroups);
-	}
-#ifdef HAVE_OPEN64
-	fd = open64(filename, O_RDONLY);
-#else
-	fd = open(filename, O_RDONLY);
-#endif
-	if (fd < 0) {
-		perror("open");
-		return;
-	}
+
+	physical_width = int_log10(fsinfo.f_blocks);
+	if (physical_width < 8)
+		physical_width = 8;
+
 	if (ioctl(fd, FIGETBSZ, &bs) < 0) { /* FIGETBSZ takes an int */
 		perror("FIGETBSZ");
 		close(fd);
 		return;
 	}
-	if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0)
-		flags = 0;
-	if (flags & EXT4_EXTENTS_FL) {
-		printf("File is stored in extents format\n");
-		is_ext2 = 0;
-	}
-	if (verbose)
-		printf("Blocksize of file %s is %d\n", filename, bs);
+
+	if (no_bs)
+		bs = 1024;
+
 	bpib = bs / 4;
 	numblocks = (fileinfo.st_size + (bs-1)) / bs;
-	if (verbose) {
-		printf("File size of %s is %lld (%ld blocks)\n", filename, 
-		       (long long) fileinfo.st_size, numblocks);
-		printf("First block: %lu\nLast block: %lu\n",
-		       get_bmap(fd, 0), get_bmap(fd, numblocks - 1));
-	}
-	for (i=0; i < numblocks; i++) {
-		if (is_ext2 && last_block) {
-			if (((i-EXT2_DIRECT) % bpib) == 0)
-				last_block++;
-			if (((i-EXT2_DIRECT-bpib) % (bpib*bpib)) == 0)
-				last_block++;
-			if (((i-EXT2_DIRECT-bpib-bpib*bpib) % (bpib*bpib*bpib)) == 0)
-				last_block++;
+	logical_width = int_log10(numblocks);
+	if (logical_width < 7)
+		logical_width = 7;
+	filesize = (long long)fileinfo.st_size;
+	if (verbose)
+		printf("File size of %s is %lld (%ld block%s, blocksize %d)\n",
+		       filename, (long long) fileinfo.st_size, numblocks,
+		       numblocks == 1 ? "" : "s", bs);
+	if (force_bmap ||
+	    filefrag_fiemap(fd, int_log2(bs), &num_extents) != 0) {
+		for (i = 0, count = 0; i < numblocks; i++) {
+			if (is_ext2 && last_block) {
+				if (((i-EXT2_DIRECT) % bpib) == 0)
+					last_block++;
+				if (((i-EXT2_DIRECT-bpib) % (bpib*bpib)) == 0)
+					last_block++;
+				if (((i-EXT2_DIRECT-bpib-bpib*bpib) %
+				     (((__u64) bpib)*bpib*bpib)) == 0)
+					last_block++;
+			}
+			rc = get_bmap(fd, i, &block);
+			if (block == 0)
+				continue;
+			if (!num_extents)
+				num_extents++;
+			count++;
+			if (last_block && (block != last_block+1) ) {
+				if (verbose)
+					printf("Discontinuity: Block %ld is at "
+					       "%lu (was %lu)\n",
+					       i, block, last_block+1);
+				num_extents++;
+			}
+			last_block = block;
 		}
-		block = get_bmap(fd, i);
-		if (block == 0)
-			continue;
-		if (last_block && (block != last_block +1) ) {
-			if (verbose)
-				printf("Discontinuity: Block %ld is at %lu (was %lu)\n",
-				       i, block, last_block);
-			discont++;
-		}
-		last_block = block;
 	}
-	if (discont==0)
+	if (num_extents == 1)
 		printf("%s: 1 extent found", filename);
 	else
-		printf("%s: %d extents found", filename, discont+1);
-	expected = (numblocks/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1;
-	if (is_ext2 && expected != discont+1)
+		printf("%s: %d extents found", filename, num_extents);
+	expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1;
+	if (is_ext2 && expected < num_extents)
 		printf(", perfection would be %d extent%s\n", expected,
 			(expected>1) ? "s" : "");
 	else
 		fputc('\n', stdout);
 	close(fd);
+	once = 0;
 }
 
 static void usage(const char *progname)
 {
-	fprintf(stderr, "Usage: %s [-v] file ...\n", progname);
+	fprintf(stderr, "Usage: %s [-Bbvsx] file ...\n", progname);
 	exit(1);
 }
 
@@ -192,22 +385,31 @@
 	char **cpp;
 	int c;
 
-	while ((c = getopt(argc, argv, "v")) != EOF)
+	while ((c = getopt(argc, argv, "Bbsvx")) != EOF)
 		switch (c) {
+		case 'B':
+			force_bmap++;
+			break;
+		case 'b':
+			no_bs++;
+			break;
 		case 'v':
 			verbose++;
 			break;
+		case 's':
+			sync_file++;
+			break;
+		case 'x':
+			xattr_map++;
+			break;
 		default:
 			usage(argv[0]);
 			break;
 		}
 	if (optind == argc)
 		usage(argv[0]);
-	for (cpp=argv+optind; *cpp; cpp++) {
-		if (verbose)
-			printf("Checking %s\n", *cpp);
+	for (cpp=argv+optind; *cpp; cpp++)
 		frag_report(*cpp);
-	}
 	return 0;
 }
 #endif
diff --git a/misc/findsuper.c b/misc/findsuper.c
index 5eade88..fbc28a3 100644
--- a/misc/findsuper.c
+++ b/misc/findsuper.c
@@ -6,7 +6,7 @@
  * using gpart program.
  *
  * Portions Copyright 1998-2000, Theodore Ts'o.
- * 
+ *
  * Well, here's my linux version of findsuper.
  * I'm sure you coulda done it faster.  :)
  * IMHO there isn't as much interesting data to print in the
@@ -18,7 +18,7 @@
  *
  * I wanted to add msdos support, but I couldn't make heads or tails
  * of the kernel include files to find anything I could look for in msdos.
- * 
+ *
  * Reading every block of a Sun partition is fairly quick.  Doing the
  * same under linux (slower hardware I suppose) just isn't the same.
  * It might be more useful to default to reading the first (second?) block
@@ -59,26 +59,26 @@
 
 /*
  * Documentation addendum added by Andreas dwguest@win.tue.nl/aeb@cwi.nl
- * 
+ *
  * The program findsuper is a utility that scans a disk and finds
  * copies of ext2 superblocks (by checking for the ext2 signature).
- * 
+ *
  * For each superblock found, it prints the offset in bytes, the
  * offset in 1024-byte blocks, the size of the ext2 partition in fs
  * blocks, the filesystem blocksize (in bytes), the block group number
  * (always 0 for older ext2 systems), and a timestamp (s_mtime).
- * 
+ *
  * This program can be used to retrieve partitions that have been
  * lost.  The superblock for block group 0 is found 1 block (2
  * sectors) after the partition start.
- * 
+ *
  * For new systems that have a block group number in the superblock it
  * is immediately clear which superblock is the first of a partition.
  * For old systems where no group numbers are given, the first
  * superblock can be recognised by the timestamp: all superblock
  * copies have the creation time in s_mtime, except the first, which
  * has the last time e2fsck or tune2fs wrote to the filesystem.
- * 
+ *
  */
 
 #define _FILE_OFFSET_BITS 64
@@ -102,9 +102,9 @@
 #define WHY(fmt, arg...) { continue; }
 #endif
 
-static void usage(void) 
+static void usage(void)
 {
-	fprintf(stderr, 
+	fprintf(stderr,
 		_("Usage:  findsuper device [skipbytes [startkb]]\n"));
 	exit(1);
 }
@@ -172,7 +172,7 @@
 		fprintf(stderr, _("startkb should be positive, not %Lu\n"), sk);
 		exit(1);
 	}
-	
+
 	fd = open(device_name, O_RDONLY);
 	if (fd < 0) {
 		perror(device_name);
diff --git a/misc/fsck.c b/misc/fsck.c
index db572b1..fe9426e 100644
--- a/misc/fsck.c
+++ b/misc/fsck.c
@@ -7,7 +7,7 @@
  * parallel execution.
  *
  * Written by Theodore Ts'o, <tytso@mit.edu>
- * 
+ *
  * Miquel van Smoorenburg (miquels@drinkel.ow.org) 20-Oct-1994:
  *   o Changed -t fstype to behave like with mount when -A (all file
  *     systems) or -M (like mount) is specified.
@@ -16,7 +16,7 @@
  *     can be added without changing this front-end.
  *   o -R flag skip root file system.
  *
- * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
  * 	2001, 2002, 2003, 2004, 2005 by  Theodore Ts'o.
  *
  * %Begin-Header%
@@ -25,6 +25,8 @@
  * %End-Header%
  */
 
+#define _XOPEN_SOURCE 600 /* for inclusion of sa_handler in Solaris */
+
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <sys/signal.h>
@@ -81,6 +83,8 @@
 	"minix",
 	"ext2",
 	"ext3",
+	"ext4",
+	"ext4dev",
 	"jfs",
 	"reiserfs",
 	"xiafs",
@@ -229,18 +233,15 @@
 
 static void free_instance(struct fsck_instance *i)
 {
-	if (i->prog)
-		free(i->prog);
-	if (i->device)
-		free(i->device);
-	if (i->base_device)
-		free(i->base_device);
+	free(i->prog);
+	free(i->device);
+	free(i->base_device);
 	free(i);
 	return;
 }
 
 static struct fs_info *create_fs_device(const char *device, const char *mntpnt,
-					const char *type, const char *opts, 
+					const char *type, const char *opts,
 					int freq, int passno)
 {
 	struct fs_info *fs;
@@ -306,9 +307,8 @@
 	fs = create_fs_device(device, mntpnt, type ? type : "auto", opts,
 			      freq ? atoi(freq) : -1,
 			      passno ? atoi(passno) : -1);
-	if (dev)
-		free(dev);
-	   
+	free(dev);
+
 	if (!fs)
 		return -1;
 	*ret_fs = fs;
@@ -318,7 +318,7 @@
 static void interpret_type(struct fs_info *fs)
 {
 	char	*t;
-	
+
 	if (strcmp(fs->type, "auto") != 0)
 		return;
 	t = blkid_get_tag_value(cache, "TYPE", fs->device);
@@ -361,21 +361,21 @@
 		else
 			old_fstab = 0;
 	}
-	
+
 	fclose(f);
-	
+
 	if (old_fstab && filesys_info) {
 		fputs(_("\007\007\007"
 		"WARNING: Your /etc/fstab does not contain the fsck passno\n"
 		"	field.  I will kludge around things for you, but you\n"
 		"	should fix your /etc/fstab file as soon as you can.\n\n"), stderr);
-		
+
 		for (fs = filesys_info; fs; fs = fs->next) {
 			fs->passno = 1;
 		}
 	}
 }
-	
+
 /* Lookup filesys in /etc/fstab and return the corresponding entry. */
 static struct fs_info *lookup(char *filesys)
 {
@@ -447,17 +447,25 @@
 	sprintf(prog, "fsck.%s", type);
 	argv[0] = string_copy(prog);
 	argc = 1;
-	
+
 	for (i=0; i <num_args; i++)
 		argv[argc++] = string_copy(args[i]);
 
-	if (progress && !progress_active()) {
+	if (progress) {
 		if ((strcmp(type, "ext2") == 0) ||
-		    (strcmp(type, "ext3") == 0)) {
+		    (strcmp(type, "ext3") == 0) ||
+		    (strcmp(type, "ext4") == 0) ||
+		    (strcmp(type, "ext4dev") == 0)) {
 			char tmp[80];
-			snprintf(tmp, 80, "-C%d", progress_fd);
-			argv[argc++] = string_copy(tmp);
-			inst->flags |= FLAG_PROGRESS;
+
+			tmp[0] = 0;
+			if (!progress_active()) {
+				snprintf(tmp, 80, "-C%d", progress_fd);
+				inst->flags |= FLAG_PROGRESS;
+			} else if (progress_fd)
+				snprintf(tmp, 80, "-C%d", progress_fd * -1);
+			if (tmp[0])
+				argv[argc++] = string_copy(tmp);
 		}
 	}
 
@@ -478,7 +486,7 @@
 			printf("%s ", argv[i]);
 		printf("\n");
 	}
-	
+
 	/* Fork and execute the correct program. */
 	if (noexecute)
 		pid = -1;
@@ -497,7 +505,7 @@
 
 	for (i=0; i < argc; i++)
 		free(argv[i]);
-	
+
 	inst->pid = pid;
 	inst->prog = string_copy(prog);
 	inst->type = string_copy(type);
@@ -515,7 +523,7 @@
 		p->next = inst;
 	else
 		instance_list = inst;
-	
+
 	return 0;
 }
 
@@ -568,7 +576,7 @@
 	 * (inst and prev are thought to be uninitialized variables)
 	 */
 	inst = prev = NULL;
-	
+
 	do {
 		pid = waitpid(-1, &status, flags);
 		if (cancel_requested && !kill_sent) {
@@ -597,7 +605,7 @@
 		}
 	} while (!inst);
 
-	if (WIFEXITED(status)) 
+	if (WIFEXITED(status))
 		status = WEXITSTATUS(status);
 	else if (WIFSIGNALED(status)) {
 		sig = WTERMSIG(status);
@@ -615,13 +623,16 @@
 		status = EXIT_ERROR;
 	}
 	inst->exit_status = status;
+	inst->flags |= FLAG_DONE;
 	if (progress && (inst->flags & FLAG_PROGRESS) &&
 	    !progress_active()) {
 		for (inst2 = instance_list; inst2; inst2 = inst2->next) {
 			if (inst2->flags & FLAG_DONE)
 				continue;
 			if (strcmp(inst2->type, "ext2") &&
-			    strcmp(inst2->type, "ext3"))
+			    strcmp(inst2->type, "ext3") &&
+			    strcmp(inst2->type, "ext4") &&
+			    strcmp(inst2->type, "ext4dev"))
 				continue;
 			/*
 			 * If we've just started the fsck, wait a tiny
@@ -679,11 +690,11 @@
 
 /*
  * Run the fsck program on a particular device
- * 
+ *
  * If the type is specified using -t, and it isn't prefixed with "no"
  * (as in "noext2") and only one filesystem type is specified, then
  * use that type regardless of what is specified in /etc/fstab.
- * 
+ *
  * If the type isn't specified by the user, then use either the type
  * specified in /etc/fstab, or DEFAULT_FSTYPE.
  */
@@ -697,7 +708,7 @@
 	if (strcmp(fs->type, "auto") != 0)
 		type = fs->type;
 	else if (fstype && strncmp(fstype, "no", 2) &&
-	    strncmp(fstype, "opts=", 5) && strncmp(fstype, "loop", 4) && 
+	    strncmp(fstype, "opts=", 5) && strncmp(fstype, "loop", 4) &&
 	    !strchr(fstype, ','))
 		type = fstype;
 	else
@@ -746,7 +757,7 @@
 	cmp->list = malloc(num * sizeof(char *));
 	cmp->type = malloc(num * sizeof(int));
 	if (!cmp->list || !cmp->type) {
-		fputs(_("Couldn't allocate memory for filesystem types\n"), 
+		fputs(_("Couldn't allocate memory for filesystem types\n"),
 		      stderr);
 		exit(EXIT_ERROR);
 	}
@@ -756,7 +767,7 @@
 
 	if (!fs_type)
 		return;
-	
+
 	list = string_copy(fs_type);
 	num = 0;
 	s = strtok(list, ",");
@@ -800,14 +811,14 @@
  * This function returns true if a particular option appears in a
  * comma-delimited options list
  */
-static int opt_in_list(char *opt, char *optlist)
+static int opt_in_list(const char *opt, char *optlist)
 {
 	char	*list, *s;
 
 	if (!optlist)
 		return 0;
 	list = string_copy(optlist);
-	
+
 	s = strtok(list, ",");
 	while(s) {
 		if (strcmp(s, opt) == 0) {
@@ -881,7 +892,7 @@
 	 * ignore it.
 	 */
 	if (!fs_match(fs, &fs_type_compiled)) return 1;
-	
+
 	/* Are we ignoring this type? */
 	for(ip = ignored_types; *ip; ip++)
 		if (strcmp(fs->type, *ip) == 0) return 1;
@@ -930,7 +941,7 @@
 	 * If we don't know the base device, assume that the device is
 	 * already active if there are any fsck instances running.
 	 */
-	if (!base) 
+	if (!base)
 		return (instance_list != 0);
 	for (inst = instance_list; inst; inst = inst->next) {
 		if (!inst->base_device || !strcmp(base, inst->base_device)) {
@@ -963,7 +974,7 @@
 		if (ignore(fs))
 			fs->flags |= FLAG_DONE;
 	}
-		
+
 	/*
 	 * Find and check the root filesystem.
 	 */
@@ -1047,7 +1058,7 @@
 		status |= wait_many(pass_done ? FLAG_WAIT_ALL :
 				    FLAG_WAIT_ATLEAST_ONE);
 		if (pass_done) {
-			if (verbose > 1) 
+			if (verbose > 1)
 				printf("----------------------------------\n");
 			passno++;
 		} else
@@ -1092,7 +1103,7 @@
 	sigaction(SIGINT, &sa, 0);
 	sigaction(SIGTERM, &sa, 0);
 #endif
-	
+
 	num_devices = 0;
 	num_args = 0;
 	instance_list = 0;
@@ -1162,7 +1173,7 @@
 						progress_fd = 0;
 					else
 						goto next_arg;
-				} else if ((i+1) < argc && 
+				} else if ((i+1) < argc &&
 					   !strncmp(argv[i+1], "-", 1) == 0) {
 					progress_fd = string_to_int(argv[i]);
 					if (progress_fd < 0)
@@ -1280,7 +1291,7 @@
 	} else {
 		fsck_path = string_copy(fsck_prefix_path);
 	}
-	
+
 	if ((num_devices == 1) || (serialize))
 		interactive = 1;
 
@@ -1320,7 +1331,7 @@
 				status |= inst->exit_status;
 				free_instance(inst);
 			}
-			if (verbose > 1) 
+			if (verbose > 1)
 				printf("----------------------------------\n");
 		}
 	}
diff --git a/misc/fsck.h b/misc/fsck.h
index 55cb525..8a0f70e 100644
--- a/misc/fsck.h
+++ b/misc/fsck.h
@@ -68,3 +68,6 @@
 
 extern char *base_device(const char *device);
 extern const char *identify_fs(const char *fs_name, const char *fs_types);
+
+/* ismounted.h */
+extern int is_mounted(const char *file);
diff --git a/misc/ismounted.c b/misc/ismounted.c
index 72f4cba..50b4140 100644
--- a/misc/ismounted.c
+++ b/misc/ismounted.c
@@ -28,6 +28,9 @@
 #endif
 #include <string.h>
 #include <sys/stat.h>
+#include <ctype.h>
+
+#include "fsck.h"
 
 /*
  * ext2fs_check_if_mounted flags
@@ -74,18 +77,15 @@
 static errcode_t check_mntent_file(const char *mtab_file, const char *file,
 				   int *mount_flags)
 {
+#ifdef HAVE_MNTENT_H
 	struct stat	st_buf;
 	errcode_t	retval = 0;
 	dev_t		file_dev=0, file_rdev=0;
 	ino_t		file_ino=0;
 	FILE 		*f;
 	char		buf[1024], *device = 0, *mnt_dir = 0, *cp;
-	int		fd;
 
 	*mount_flags = 0;
-	if ((f = fopen(mtab_file, "r")) == NULL)
-		return errno;
-
 	if ((f = setmntent (mtab_file, "r")) == NULL)
 		return errno;
 	if (stat(file, &st_buf) == 0) {
@@ -177,6 +177,9 @@
 errout:
 	endmntent (f);
 	return retval;
+#else /* !HAVE_MNTENT_H */
+	return 0;
+#endif /* HAVE_MNTENT_H */
 }
 
 int is_mounted(const char *file)
diff --git a/misc/logsave.c b/misc/logsave.c
index f256c20..43eb6f7 100644
--- a/misc/logsave.c
+++ b/misc/logsave.c
@@ -10,6 +10,8 @@
  * %End-Header%
  */
 
+#define _XOPEN_SOURCE 600 /* for inclusion of sa_handler in Solaris */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -19,6 +21,9 @@
 #include <fcntl.h>
 #include <time.h>
 #include <errno.h>
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
 #else
@@ -32,6 +37,7 @@
 int	verbose = 0;
 int	do_skip = 0;
 int	skip_mode = 0;
+pid_t	child_pid = -1;
 
 static void usage(char *progname)
 {
@@ -43,19 +49,61 @@
 #define SEND_CONSOLE	0x02
 #define SEND_BOTH	0x03
 
+/*
+ * Helper function that does the right thing if write returns a
+ * partial write, or an EGAIN/EINTR error.
+ */
+static int write_all(int fd, const char *buf, size_t count)
+{
+	ssize_t ret;
+	int c = 0;
+
+	while (count > 0) {
+		ret = write(fd, buf, count);
+		if (ret < 0) {
+			if ((errno == EAGAIN) || (errno == EINTR))
+				continue;
+			return -1;
+		}
+		count -= ret;
+		buf += ret;
+		c += ret;
+	}
+	return c;
+}
+
 static void send_output(const char *buffer, int c, int flag)
 {
-	char	*n;
-	
+	const char	*cp;
+	char		*n;
+	int		cnt, d, del;
+
 	if (c == 0)
 		c = strlen(buffer);
-	
-	if (flag & SEND_CONSOLE)
-		write(1, buffer, c);
+
+	if (flag & SEND_CONSOLE) {
+		cnt = c;
+		cp = buffer;
+		while (cnt) {
+			del = 0;
+			for (d=0; d < cnt; d++) {
+				if (skip_mode &&
+				    (cp[d] == '\001' || cp[d] == '\002')) {
+					del = 1;
+					break;
+				}
+			}
+			write_all(1, cp, d);
+			if (del)
+				d++;
+			cnt -= d;
+			cp += d;
+		}
+	}
 	if (!(flag & SEND_LOG))
 		return;
 	if (outfd > 0)
-		write(outfd, buffer, c);
+		write_all(outfd, buffer, c);
 	else {
 		n = realloc(outbuf, outbufsize + c);
 		if (n) {
@@ -102,17 +150,36 @@
 	return c;
 }
 
+static void signal_term(int sig)
+{
+	if (child_pid > 0)
+		kill(child_pid, sig);
+}
+
 static int run_program(char **argv)
 {
 	int	fds[2];
 	int	status, rc, pid;
 	char	buffer[80];
+#ifdef HAVE_SIGNAL_H
+	struct sigaction	sa;
+#endif
 
 	if (pipe(fds) < 0) {
 		perror("pipe");
 		exit(1);
 	}
 
+#ifdef HAVE_SIGNAL_H
+	memset(&sa, 0, sizeof(struct sigaction));
+	sa.sa_handler = signal_term;
+	sigaction(SIGINT, &sa, 0);
+	sigaction(SIGTERM, &sa, 0);
+#ifdef SA_RESTART
+	sa.sa_flags = SA_RESTART;
+#endif
+#endif
+
 	pid = fork();
 	if (pid < 0) {
 		perror("vfork");
@@ -122,16 +189,18 @@
 		dup2(fds[1],1);		/* fds[1] replaces stdout */
 		dup2(fds[1],2);  	/* fds[1] replaces stderr */
 		close(fds[0]);	/* don't need this here */
-		
+
 		execvp(argv[0], argv);
 		perror(argv[0]);
 		exit(1);
 	}
+	child_pid = pid;
 	close(fds[1]);
 
 	while (!(waitpid(pid, &status, WNOHANG ))) {
 		do_read(fds[0]);
 	}
+	child_pid = -1;
 	do_read(fds[0]);
 	close(fds[0]);
 
@@ -174,8 +243,8 @@
 		bad_read = 0;
 	}
 	return 0;
-}	
-	
+}
+
 
 
 int main(int argc, char **argv)
@@ -186,7 +255,7 @@
 	int	send_flag = SEND_LOG;
 	int	do_stdin;
 	time_t	t;
-	
+
 	while ((c = getopt(argc, argv, "+asv")) != EOF) {
 		switch (c) {
 		case 'a':
@@ -211,7 +280,7 @@
 
 	outfd = open(outfn, openflags, 0644);
 	do_stdin = !strcmp(argv[0], "-");
-	
+
 	send_output("Log of ", 0, send_flag);
 	if (do_stdin)
 		send_output("stdin", 0, send_flag);
@@ -230,7 +299,7 @@
 		rc = copy_from_stdin();
 	else
 		rc = run_program(argv);
-	
+
 	send_output("\n", 0, send_flag);
 	t = time(0);
 	send_output(ctime(&t), 0, send_flag);
@@ -252,11 +321,11 @@
 		while (outfd < 0) {
 			outfd = open(outfn, openflags, 0644);
 			sleep(1);
-		} 
-		write(outfd, outbuf, outbufsize);
+		}
+		write_all(outfd, outbuf, outbufsize);
 		free(outbuf);
 	}
 	close(outfd);
-	
+
 	exit(rc);
 }
diff --git a/misc/lsattr.c b/misc/lsattr.c
index 093f50f..15b17ad 100644
--- a/misc/lsattr.c
+++ b/misc/lsattr.c
@@ -74,7 +74,7 @@
 	exit(1);
 }
 
-static void list_attributes (const char * name)
+static int list_attributes (const char * name)
 {
 	unsigned long flags;
 	unsigned long generation;
@@ -82,14 +82,14 @@
 	if (fgetflags (name, &flags) == -1) {
 		com_err (program_name, errno, _("While reading flags on %s"),
 			 name);
-		return;
+		return -1;
 	}
 	if (generation_opt) {
 		if (fgetversion (name, &generation) == -1) {
 			com_err (program_name, errno,
 				 _("While reading version on %s"),
 				 name);
-			return;
+			return -1;
 		}
 		printf ("%5lu ", generation);
 	}
@@ -101,26 +101,30 @@
 		print_flags(stdout, flags, pf_options);
 		printf(" %s\n", name);
 	}
+	return 0;
 }
 
 static int lsattr_dir_proc (const char *, struct dirent *, void *);
 
-static void lsattr_args (const char * name)
+static int lsattr_args (const char * name)
 {
 	STRUCT_STAT	st;
+	int retval = 0;
 
-	if (LSTAT (name, &st) == -1)
+	if (LSTAT (name, &st) == -1) {
 		com_err (program_name, errno, _("while trying to stat %s"),
 			 name);
-	else {
+		retval = -1;
+	} else {
 		if (S_ISDIR(st.st_mode) && !dirs_opt)
-			iterate_on_dir (name, lsattr_dir_proc, NULL);
+			retval = iterate_on_dir (name, lsattr_dir_proc, NULL);
 		else
-			list_attributes (name);
+			retval = list_attributes (name);
 	}
+	return retval;
 }
 
-static int lsattr_dir_proc (const char * dir_name, struct dirent * de, 
+static int lsattr_dir_proc (const char * dir_name, struct dirent * de,
 			    void * private EXT2FS_ATTR((unused)))
 {
 	STRUCT_STAT	st;
@@ -155,6 +159,7 @@
 {
 	int c;
 	int i;
+	int err, retval = 0;
 
 #ifdef ENABLE_NLS
 	setlocale(LC_MESSAGES, "");
@@ -192,10 +197,15 @@
 	if (verbose)
 		fprintf (stderr, "lsattr %s (%s)\n",
 			 E2FSPROGS_VERSION, E2FSPROGS_DATE);
-	if (optind > argc - 1)
-		lsattr_args (".");
-	else
-		for (i = optind; i < argc; i++)
-			lsattr_args (argv[i]);
-	exit(0);
+	if (optind > argc - 1) {
+		if (lsattr_args (".") == -1)
+			retval = 1;
+	} else {
+		for (i = optind; i < argc; i++) {
+			err = lsattr_args (argv[i]);
+			if (err)
+				retval = 1;
+		}
+	}
+	exit(retval);
 }
diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in
index 14c3ca5..45a99f8 100644
--- a/misc/mke2fs.8.in
+++ b/misc/mke2fs.8.in
@@ -1,15 +1,15 @@
 .\" -*- nroff -*-
 .\" Copyright 1993, 1994, 1995 by Theodore Ts'o.  All Rights Reserved.
 .\" This file may be copied under the terms of the GNU Public License.
-.\" 
+.\"
 .TH MKE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-mke2fs \- create an ext2/ext3 filesystem
+mke2fs \- create an ext2/ext3/ext4 filesystem
 .SH SYNOPSIS
 .B mke2fs
 [
 .B \-c
-| 
+|
 .B \-l
 .I filename
 ]
@@ -26,6 +26,10 @@
 .I blocks-per-group
 ]
 [
+.B \-G
+.I number-of-groups
+]
+[
 .B \-i
 .I bytes-per-inode
 ]
@@ -41,11 +45,14 @@
 .I journal-options
 ]
 [
+.B \-K
+]
+[
 .B \-N
 .I number-of-inodes
 ]
 [
-.B -n
+.B \-n
 ]
 [
 .B \-m
@@ -56,7 +63,7 @@
 .I creator-os
 ]
 [
-.B \-O 
+.B \-O
 .IR feature [,...]
 ]
 [
@@ -88,8 +95,16 @@
 .B \-S
 ]
 [
+.B \-t
+.I fs-type
+]
+[
 .B \-T
-.I filesystem-type
+.I usage-type
+]
+[
+.B \-U
+.I UUID
 ]
 [
 .B \-V
@@ -128,9 +143,10 @@
 @JDEV@]
 .SH DESCRIPTION
 .B mke2fs
-is used to create an ext2/ext3 filesystem (usually in a disk partition).
+is used to create an ext2, ext3, or ext4 filesystem, usually in a disk
+partition.
 .I device
-is the special file corresponding to the device (e.g 
+is the special file corresponding to the device (e.g
 .IR /dev/hdXX ).
 .I blocks-count
 is the number of blocks on the device.  If omitted,
@@ -140,42 +156,48 @@
 a journal is created as if the
 .B \-j
 option was specified.
+.PP
+The defaults of the parameters for the newly created filesystem, if not
+overridden by the options listed below, are controlled by the
+.B /etc/mke2fs.conf
+configuration file.  See the
+.BR mke2fs.conf (5)
+manual page for more details.
 .SH OPTIONS
 .TP
 .BI \-b " block-size"
-Specify the size of blocks in bytes.  Valid block size vales are 1024, 
+Specify the size of blocks in bytes.  Valid block-size values are 1024,
 2048 and 4096 bytes per block.  If omitted,
-.B mke2fs
-block-size is heuristically determined by the file system size and
+block-size is heuristically determined by the filesystem size and
 the expected usage of the filesystem (see the
 .B \-T
-option).  If 
+option).  If
 .I block-size
-is negative, then 
+is negative, then
 .B mke2fs
 will use heuristics to determine the
 appropriate block size, with the constraint that the block size will be
-at least 
+at least
 .I block-size
 bytes.  This is useful for certain hardware devices which require that
 the blocksize be a multiple of 2k.
 .TP
 .B \-c
 Check the device for bad blocks before creating the file system.  If
-this option is specified twice, then a slower, read-write
+this option is specified twice, then a slower read-write
 test is used instead of a fast read-only test.
 .TP
 .BI \-E " extended-options"
 Set extended options for the filesystem.  Extended options are comma
 separated, and may take an argument using the equals ('=') sign.  The
-.B -E
-option used to be 
-.B -R
-in earlier versions of 
+.B \-E
+option used to be
+.B \-R
+in earlier versions of
 .BR mke2fs .
-The 
-.B -R
-option is still accepted for backwards compatibility.   The 
+The
+.B \-R
+option is still accepted for backwards compatibility.   The
 following extended options are supported:
 .RS 1.2i
 .TP
@@ -183,23 +205,37 @@
 Configure the filesystem for a RAID array with
 .I stride-size
 filesystem blocks. This is the number of blocks read or written to disk
-before moving to next disk. This mostly affects placement of filesystem
-metadata like bitmaps at
-.BR mke2fs (2)
-time to avoid placing them on a single disk, which can hurt the performanace.
-It may also be used by block allocator.
+before moving to the next disk, which is sometimes referred to as the
+.I chunk size.
+This mostly affects placement of filesystem metadata like bitmaps at
+.B mke2fs
+time to avoid placing them on a single disk, which can hurt performance.
+It may also be used by the block allocator.
 .TP
 .BI stripe-width= stripe-width
 Configure the filesystem for a RAID array with
 .I stripe-width
-filesystem blocks per stripe. This is typically be stride-size * N, where
-N is the number of data disks in the RAID (e.g. RAID 5 N+1, RAID 6 N+2).
+filesystem blocks per stripe. This is typically stride-size * N, where
+N is the number of data-bearing disks in the RAID (e.g. for RAID 5 there is one
+parity disk, so N will be the number of disks in the array minus 1).
 This allows the block allocator to prevent read-modify-write of the
 parity in a RAID stripe if possible when the data is written.
 .TP
 .BI resize= max-online-resize
 Reserve enough space so that the block group descriptor table can grow
-to support a filesystem that has max-online-resize blocks.
+to support a filesystem that has
+.I max-online-resize
+blocks.
+.TP
+.B lazy_itable_init\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
+If enabled and the uninit_bg feature is enabled, the inode table will
+not be fully initialized by
+.BR mke2fs .
+This speeds up filesystem
+initialization noticeably, but it requires the kernel to finish
+initializing the filesystem in the background when the filesystem is
+first mounted.  If the option value is omitted, it defaults to 1 to
+enable lazy inode table initialization.
 .TP
 .B test_fs
 Set a flag in the filesystem superblock indicating that it may be
@@ -210,63 +246,73 @@
 Specify the size of fragments in bytes.
 .TP
 .B \-F
-Force 
+Force
 .B mke2fs
 to create a filesystem, even if the specified device is not a partition
 on a block special device, or if other parameters do not make sense.
-In order to force 
+In order to force
 .B mke2fs
-to create a filesystem even if the filesystem appears to be in use 
+to create a filesystem even if the filesystem appears to be in use
 or is mounted (a truly dangerous thing to do), this option must be
 specified twice.
 .TP
 .BI \-g " blocks-per-group"
 Specify the number of blocks in a block group.  There is generally no
-reason the user to ever set this parameter, as the default is optimal
+reason for the user to ever set this parameter, as the default is optimal
 for the filesystem.  (For administrators who are creating
 filesystems on RAID arrays, it is preferable to use the
 .I stride
 RAID parameter as part of the
-.B \-R
-option rather than manipulating the number of blocks per group.)  
+.B \-E
+option rather than manipulating the number of blocks per group.)
 This option is generally used by developers who
-are developing test cases.  
+are developing test cases.
+.TP
+.BI \-G " number-of-groups"
+Specify the number of block groups that will be packed together to
+create a larger virtual block group (or "flex_bg group") in an
+ext4 filesystem.  This improves meta-data locality and performance
+on meta-data heavy workloads.  The number of groups must be a power
+of 2 and may only be specified if the 
+.B flex_bg
+filesystem feature is enabled.
 .TP
 .BI \-i " bytes-per-inode"
-Specify the bytes/inode ratio. 
+Specify the bytes/inode ratio.
 .B mke2fs
 creates an inode for every
 .I bytes-per-inode
-bytes of space on the disk.  The larger the 
+bytes of space on the disk.  The larger the
 .I bytes-per-inode
 ratio, the fewer inodes will be created.  This value generally shouldn't
-be smaller than the blocksize of the filesystem, since then too many
-inodes will be made.  Be warned that is not possible to expand the number 
+be smaller than the blocksize of the filesystem, since in that case more
+inodes would be made than can ever be used.  Be warned that it is not
+possible to expand the number
 of inodes on a filesystem after it is created, so be careful deciding the
-correct value for this parameter. 
+correct value for this parameter.
 .TP
 .BI \-I " inode-size"
-Specify the size of each inode in bytes. 
+Specify the size of each inode in bytes.
 .B mke2fs
 creates 256-byte inodes by default.  In kernels after 2.6.10 and some
 earlier vendor kernels it is possible to utilize inodes larger than
-128-bytes to store
-extended attributes for improved performance.  The 
+128 bytes to store
+extended attributes for improved performance.  The
 .I inode-size
-value must be a power of two larger or equal to 128.  The larger the 
+value must be a power of 2 larger or equal to 128.  The larger the
 .I inode-size
 the more space the inode table will consume, and this reduces the usable
-space in the filesystem and can also negatively impact performance.  
+space in the filesystem and can also negatively impact performance.
 Extended attributes
 stored in large inodes are not visible with older kernels, and such
 filesystems will not be mountable with 2.4 kernels at all.  It is not
 possible to change this value after the filesystem is created.
-.TP 
+.TP
 .B \-j
 Create the filesystem with an ext3 journal.  If the
 .B \-J
 option is not specified, the default journal parameters will be used to
-create an appropriately sized journal (given the size of the filesystem) 
+create an appropriately sized journal (given the size of the filesystem)
 stored within the filesystem.  Note that you must be using a kernel
 which has ext3 support in order to actually make use of the journal.
 .TP
@@ -279,11 +325,11 @@
 .TP
 .BI size= journal-size
 Create an internal journal (i.e., stored inside the filesystem) of size
-.I journal-size 
+.I journal-size
 megabytes.
-The size of the journal must be at least 1024 filesystem blocks 
-(i.e., 1MB if using 1k blocks, 4MB if using 4k blocks, etc.) 
-and may be no more than 102,400 filesystem blocks.  
+The size of the journal must be at least 1024 filesystem blocks
+(i.e., 1MB if using 1k blocks, 4MB if using 4k blocks, etc.)
+and may be no more than 102,400 filesystem blocks.
 @JDEV@.TP
 @JDEV@.BI device= external-journal
 @JDEV@Attach the filesystem to the journal block device located on
@@ -300,7 +346,7 @@
 @JDEV@same block size as the new filesystem.
 @JDEV@In addition, while there is support for attaching
 @JDEV@multiple filesystems to a single external journal,
-@JDEV@the Linux kernel and 
+@JDEV@the Linux kernel and
 @JDEV@.BR e2fsck (8)
 @JDEV@do not currently support shared external journals yet.
 @JDEV@.IP
@@ -323,16 +369,22 @@
 @JDEV@.BR size " or " device
 @JDEV@options can be given for a filesystem.
 .TP
+.BI \-K
+Keep, do not attempt to discard blocks at mkfs time (discarding blocks initially
+is useful on solid state devices and sparse / thin-provisioned storage).
+.TP
 .BI \-l " filename"
 Read the bad blocks list from
-.IR filename .  
+.IR filename .
 Note that the block numbers in the bad block list must be generated
-using the same block size as used by mke2fs.  As a result, the
+using the same block size as used by
+.BR mke2fs .
+As a result, the
 .B \-c
-option to 
+option to
 .B mke2fs
 is a much simpler and less error-prone method of checking a disk for bad
-blocks before formatting it, as 
+blocks before formatting it, as
 .B mke2fs
 will automatically pass the correct parameters to the
 .B badblocks
@@ -345,86 +397,108 @@
 volume label is 16 bytes.
 .TP
 .BI \-m " reserved-blocks-percentage"
-Specify the percentage of the filesystem blocks reserved for 
+Specify the percentage of the filesystem blocks reserved for
 the super-user.  This avoids fragmentation, and allows root-owned
-daemons, such as 
+daemons, such as
 .BR syslogd (8),
-to continue to function correctly after non-privileged processes are 
-prevented from writing to the filesystem.  The default percentage 
+to continue to function correctly after non-privileged processes are
+prevented from writing to the filesystem.  The default percentage
 is 5%.
 .TP
-.B \-M
-Set the last mounted directory for the filesystem.  This might be useful 
-for the sake of utilities that key off of the last mounted directory to 
+.BI \-M " last-mounted-directory"
+Set the last mounted directory for the filesystem.  This might be useful
+for the sake of utilities that key off of the last mounted directory to
 determine where the filesystem should be mounted.
 .TP
 .B \-n
-causes mke2fs to not actually create a filesystem, but display what it
+Causes
+.B mke2fs
+to not actually create a filesystem, but display what it
 would do if it were to create a filesystem.  This can be used to
 determine the location of the backup superblocks for a particular
-filesystem, so long as the mke2fs parameters that were passed when the
+filesystem, so long as the
+.B mke2fs
+parameters that were passed when the
 filesystem was originally created are used again.  (With the
-.B \-n 
+.B \-n
 option added, of course!)
 .TP
 .BI \-N " number-of-inodes"
-overrides the default calculation of the number of inodes that should be 
-reserved for the filesystem (which is based on the number of blocks and 
-the 
+Overrides the default calculation of the number of inodes that should be
+reserved for the filesystem (which is based on the number of blocks and
+the
 .I bytes-per-inode
-ratio).  This allows the user to specify the number 
+ratio).  This allows the user to specify the number
 of desired inodes directly.
 .TP
 .BI \-o " creator-os"
-Manually override the default value of the "creator os" field of the 
-filesystem.  Normally the creator field is set by default to the native OS
-of the
+Overrides the default value of the "creator operating system" field of the
+filesystem.  The creator field is set by default to the name of the OS the
 .B mke2fs
-executable.
+executable was compiled for.
 .TP
 .B "\-O \fIfeature\fR[,...]"
-Create filesystem with given features (filesystem options), overriding 
-the default filesystem options.  The default features which are 
+Create a filesystem with the given features (filesystem options),
+overriding the default filesystem options.  The features that are
 enabled by default are specified by the
 .I base_features
 relation, either in the
-.I [libdefaults]
+.I [defaults]
 section in the
 .B /etc/mke2fs.conf
-configuration file, or in the subsection of the 
+configuration file,
+or in the
 .I [fs_types]
-section for the filesystem type as specified by the
-.B -T
-option.  The filesystem type-specific configuration setting found in
-the 
+subsections for the usage types as specified by the
+.B \-T
+option, further modified by the
+.I features
+relation found in the
+.I [fs_types]
+subsections for the filesystem and usage types.  See the
+.BR mke2fs.conf (5)
+manual page for more details.
+The filesystem type-specific configuration setting found in the
 .I [fs_types]
 section will override the global default found in
-.IR [libdefaults] .
+.IR [defaults] .
 .sp
-The filesystem feature set will be further edited 
-using either the feature set specification specified by this option, 
-or if this option is not specified, by the
+The filesystem feature set will be further edited
+using either the feature set specified by this option,
+or if this option is not given, by the
 .I default_features
-relation for the filesystem type being created, or in the 
-.I [libdefaults]
+relation for the filesystem type being created, or in the
+.I [defaults]
 section of the configuration file.
 .sp
 The filesystem feature set is comprised of a list of features, separated
 by commas, that are to be enabled.  To disable a feature, simply
-prefix the feature name with a  caret ('^') character.  The 
+prefix the feature name with a  caret ('^') character.  The
 pseudo-filesystem feature "none" will clear all filesystem features.
 .RS 1.2i
 .TP
-.B large_file
-Filesystem can contain files that are greater than 2GB.  (Modern kernels
-set this feature automatically when a file > 2GB is created.)
-.TP
 .B dir_index
 Use hashed b-trees to speed up lookups in large directories.
 .TP
+.B extent
+Instead of using the indirect block scheme for storing the location of
+data blocks in an inode, use extents instead.  This is a much more
+efficient encoding which speeds up filesystem access, especially for
+large files.
+.TP
 .B filetype
 Store file type information in directory entries.
 .TP
+.B flex_bg
+Allow the per-block group metadata (allocation bitmaps and inode tables)
+to be placed anywhere on the storage media.  In addition,
+.B mke2fs
+will place the per-block group metadata together starting at the first
+block group of each "flex_bg group".   The size of the flex_bg group
+can be specified using the 
+.B \-G
+option.
+.TP
 .B has_journal
 Create an ext3 journal (as if using the
 .B \-j
@@ -438,39 +512,53 @@
 @JDEV@must be created with the same
 @JDEV@block size as the filesystems that will be using it.
 .TP
+.B large_file
+Filesystem can contain files that are greater than 2GB.  (Modern kernels
+set this feature automatically when a file > 2GB is created.)
+.TP
 .B resize_inode
 Reserve space so the block group descriptor table may grow in the future.
-Useful for online resizing using 
+Useful for online resizing using
 .BR resize2fs .
-By default 
+By default
 .B mke2fs
 will attempt to reserve enough space so that the
 filesystem may grow to 1024 times its initial size.  This can be changed
-using
+using the
 .B resize
 extended option.
 .TP
 .B sparse_super
 Create a filesystem with fewer superblock backup copies
 (saves space on large filesystems).
+.TP
+.B uninit_bg
+Create a filesystem without initializing all of the block groups.  This
+feature also enables checksums and highest-inode-used statistics in each
+blockgroup.  This feature can
+speed up filesystem creation time noticeably (if lazy_itable_init is
+enabled), and can also reduce
+.BR e2fsck
+time dramatically.  It is only supported by the ext4 filesystem in
+recent Linux kernels.
 .RE
 .TP
 .B \-q
-Quiet execution.  Useful if 
+Quiet execution.  Useful if
 .B mke2fs
 is run in a script.
 .TP
 .BI \-r " revision"
 Set the filesystem revision for the new filesystem.  Note that 1.2
-kernels only support revision 0 filesystems.  The default is to 
+kernels only support revision 0 filesystems.  The default is to
 create revision 1 filesystems.
 .TP
 .B \-S
 Write superblock and group descriptors only.  This is useful if all of
 the superblock and backup superblocks are corrupted, and a last-ditch
-recovery method is desired.  It causes 
+recovery method is desired.  It causes
 .B mke2fs
-to reinitialize the 
+to reinitialize the
 superblock and group descriptors, while not touching the inode table
 and the block and inode bitmaps.  The
 .B e2fsck
@@ -483,20 +571,66 @@
 .\" Check the device for bad blocks before creating the file system
 .\" using the specified test.
 .TP
-.BI \-T " fs-type"
-Specify how the filesystem is going to be used, so that 
-.B mke2fs 
-can choose optimal filesystem parameters for that use.  The filesystem
-types that are can be supported are defined in the configuration file 
+.BI \-t " fs-type"
+Specify the filesystem type (i.e., ext2, ext3, ext4, etc.) that is to be created.
+If this option is not specified,
+.B mke2fs
+will pick a default either via how
+the command was run (for example, using a name of the form mkfs.ext2,
+mkfs.ext3, etc.) or via a default as defined by the
+.BR /etc/mke2fs.conf (5)
+file.   This option controls which filesystem options are used by
+default, based on the
+.B fstypes
+configuration stanza in
 .BR /etc/mke2fs.conf (5).
-The default configuration file contains definitions for the filesystem
-types: small, floppy, news, largefile, and largefile4.  
+.sp
+If the
+.B \-O
+option is used to explicitly add or remove filesystem options that
+should be set in the newly created filesystem, the
+resulting filesystem may not be supported by the requested
+.IR fs-type .
+(e.g., "\fBmke2fs \-t ext3 \-O extents /dev/sdXX\fR" will create a
+filesystem that is not supported by the ext3 implementation as found in
+the Linux kernel; and "\fBmke2fs \-t ext3 \-O ^has_journal /dev/hdXX\fR"
+will create a filesystem that does not have a journal and hence will not
+be supported by the ext3 filesystem code in the Linux kernel.)
+.TP
+.BI \-T " usage-type[,...]"
+Specify how the filesystem is going to be used, so that
+.B mke2fs
+can choose optimal filesystem parameters for that use.  The usage
+types that are supported are defined in the configuration file
+.BR /etc/mke2fs.conf (5).
+The user may specify one or more usage types
+using a comma separated list.
+.sp
+If this option is is not specified,
+.B mke2fs
+will pick a single default usage type based on the size of the filesystem to
+be created.  If the filesystem size is less than or equal to 3 megabytes,
+.B mke2fs
+will use the filesystem type
+.IR floppy .
+If the filesystem size is greater than 3 but less than or equal to
+512 megabytes,
+.BR mke2fs (8)
+will use the filesystem
+.IR small .
+Otherwise,
+.BR mke2fs (8)
+will use the default filesystem type
+.IR default .
+.TP
+.BI \-U " UUID"
+Create the filesystem with the specified UUID.
 .TP
 .B \-v
 Verbose execution.
 .TP
 .B \-V
-Print the version number of 
+Print the version number of
 .B mke2fs
 and exit.
 .SH AUTHOR
@@ -513,7 +647,7 @@
 There may be other ones.  Please, report them to the author.
 .SH AVAILABILITY
 .B mke2fs
-is part of the e2fsprogs package and is available from 
+is part of the e2fsprogs package and is available from
 http://e2fsprogs.sourceforge.net.
 .SH SEE ALSO
 .BR mke2fs.conf (5),
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index c54acb0..aaff161 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -1,6 +1,6 @@
 /*
  * mke2fs.c - Make a ext2fs filesystem.
- * 
+ *
  * Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
  * 	2003, 2004, 2005 by Theodore Ts'o.
  *
@@ -11,13 +11,16 @@
  */
 
 /* Usage: mke2fs [options] device
- * 
+ *
  * The device may be a block device or a image of one, but this isn't
- * enforced (but it's not much fun on a character device :-). 
+ * enforced (but it's not much fun on a character device :-).
  */
 
+#define _XOPEN_SOURCE 600 /* for inclusion of PATH_MAX in Solaris */
+
 #include <stdio.h>
 #include <string.h>
+#include <strings.h>
 #include <fcntl.h>
 #include <ctype.h>
 #include <time.h>
@@ -44,6 +47,10 @@
 #endif
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#include <sys/stat.h>
+#include <libgen.h>
+#include <limits.h>
+#include <blkid/blkid.h>
 
 #include "ext2fs/ext2_fs.h"
 #include "et/com_err.h"
@@ -62,6 +69,10 @@
 #define ZAP_BOOTBLOCK
 #endif
 
+#ifndef ROOT_SYSCONFDIR
+#define ROOT_SYSCONFDIR "/etc"
+#endif
+
 extern int isatty(int);
 extern FILE *fpopen(const char *cmd, const char *mode);
 
@@ -73,19 +84,23 @@
 int	verbose;
 int	quiet;
 int	super_only;
+int	discard = 1;
 int	force;
 int	noaction;
 int	journal_size;
 int	journal_flags;
+int	lazy_itable_init;
 char	*bad_blocks_filename;
 __u32	fs_stride;
 
 struct ext2_super_block fs_param;
+char *fs_uuid = NULL;
 char *creator_os;
 char *volume_label;
 char *mount_dir;
 char *journal_device;
 int sync_kludge;	/* Set using the MKE2FS_SYNC env. option */
+char **fs_types;
 
 profile_t	profile;
 
@@ -97,11 +112,12 @@
 	fprintf(stderr, _("Usage: %s [-c|-l filename] [-b block-size] "
 	"[-f fragment-size]\n\t[-i bytes-per-inode] [-I inode-size] "
 	"[-J journal-options]\n"
-	"\t[-N number-of-inodes] [-m reserved-blocks-percentage] "
-	"[-o creator-os]\n\t[-g blocks-per-group] [-L volume-label] "
+	"\t[-G meta group size] [-N number-of-inodes]\n"
+	"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
+	"\t[-g blocks-per-group] [-L volume-label] "
 	"[-M last-mounted-directory]\n\t[-O feature[,...]] "
 	"[-r fs-revision] [-E extended-option[,...]]\n"
-	"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"),
+	"\t[-T fs-type] [-U UUID] [-jnqvFKSV] device [blocks-count]\n"),
 		program_name);
 	exit(1);
 }
@@ -227,7 +243,7 @@
 
 	if (!bb_list)
 		return;
-	
+
 	/*
 	 * The primary superblock and group descriptors *must* be
 	 * good; if not, abort.
@@ -252,13 +268,13 @@
 	 */
 	group_block = fs->super->s_first_data_block +
 		fs->super->s_blocks_per_group;
-	
+
 	for (i = 1; i < fs->group_desc_count; i++) {
 		group_bad = 0;
 		for (j=0; j < fs->desc_blocks+1; j++) {
 			if (ext2fs_badblocks_list_test(bb_list,
 						       group_block + j)) {
-				if (!group_bad) 
+				if (!group_bad)
 					fprintf(stderr,
 _("Warning: the backup superblock/group descriptors at block %u contain\n"
 "	bad blocks.\n\n"),
@@ -266,12 +282,13 @@
 				group_bad++;
 				group = ext2fs_group_of_blk(fs, group_block+j);
 				fs->group_desc[group].bg_free_blocks_count++;
+				ext2fs_group_desc_csum_set(fs, group);
 				fs->super->s_free_blocks_count++;
 			}
 		}
 		group_block += fs->super->s_blocks_per_group;
 	}
-	
+
 	/*
 	 * Mark all the bad blocks as used...
 	 */
@@ -281,7 +298,7 @@
 			_("while marking bad blocks as used"));
 		exit(1);
 	}
-	while (ext2fs_badblocks_list_iterate(bb_iter, &blk)) 
+	while (ext2fs_badblocks_list_iterate(bb_iter, &blk))
 		ext2fs_mark_block_bitmap(fs->block_map, blk);
 	ext2fs_badblocks_list_iterate_end(bb_iter);
 }
@@ -339,76 +356,13 @@
 	fputs(_("done                            \n"), stdout);
 }
 
-
-/*
- * Helper function which zeros out _num_ blocks starting at _blk_.  In
- * case of an error, the details of the error is returned via _ret_blk_
- * and _ret_count_ if they are non-NULL pointers.  Returns 0 on
- * success, and an error code on an error.
- *
- * As a special case, if the first argument is NULL, then it will
- * attempt to free the static zeroizing buffer.  (This is to keep
- * programs that check for memory leaks happy.)
- */
-static errcode_t zero_blocks(ext2_filsys fs, blk_t blk, int num,
-			     struct progress_struct *progress,
-			     blk_t *ret_blk, int *ret_count)
-{
-	int		j, count, next_update, next_update_incr;
-	static char	*buf;
-	errcode_t	retval;
-
-	/* If fs is null, clean up the static buffer and return */
-	if (!fs) {
-		if (buf) {
-			free(buf);
-			buf = 0;
-		}
-		return 0;
-	}
-	/* Allocate the zeroizing buffer if necessary */
-	if (!buf) {
-		buf = malloc(fs->blocksize * STRIDE_LENGTH);
-		if (!buf) {
-			com_err("malloc", ENOMEM,
-				_("while allocating zeroizing buffer"));
-			exit(1);
-		}
-		memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
-	}
-	/* OK, do the write loop */
-	next_update = 0;
-	next_update_incr = num / 100;
-	if (next_update_incr < 1)
-		next_update_incr = 1;
-	for (j=0; j < num; j += STRIDE_LENGTH, blk += STRIDE_LENGTH) {
-		count = num - j;
-		if (count > STRIDE_LENGTH)
-			count = STRIDE_LENGTH;
-		retval = io_channel_write_blk(fs->io, blk, count, buf);
-		if (retval) {
-			if (ret_count)
-				*ret_count = count;
-			if (ret_blk)
-				*ret_blk = blk;
-			return retval;
-		}
-		if (progress && j > next_update) {
-			next_update += num / 100;
-			progress_update(progress, blk);
-		}
-	}
-	return 0;
-}	
-
-static void write_inode_tables(ext2_filsys fs)
+static void write_inode_tables(ext2_filsys fs, int lazy_flag)
 {
 	errcode_t	retval;
 	blk_t		blk;
 	dgrp_t		i;
-	int		num;
+	int		num, ipb;
 	struct progress_struct progress;
-	int		lazy_flag = 0;
 
 	if (quiet)
 		memset(&progress, 0, sizeof(progress));
@@ -416,25 +370,30 @@
 		progress_init(&progress, _("Writing inode tables: "),
 			      fs->group_desc_count);
 
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, 
-				    EXT2_FEATURE_COMPAT_LAZY_BG))
-		lazy_flag = 1;
-
 	for (i = 0; i < fs->group_desc_count; i++) {
 		progress_update(&progress, i);
-		
+
 		blk = fs->group_desc[i].bg_inode_table;
 		num = fs->inode_blocks_per_group;
 
-		if (!(lazy_flag &&
-		      (fs->group_desc[i].bg_flags & EXT2_BG_INODE_UNINIT))) {
-			retval = zero_blocks(fs, blk, num, 0, &blk, &num);
-			if (retval) {
-				fprintf(stderr, _("\nCould not write %d "
-				"blocks in inode table starting at %u: %s\n"),
-					num, blk, error_message(retval));
-				exit(1);
-			}
+		if (lazy_flag) {
+			ipb = fs->blocksize / EXT2_INODE_SIZE(fs->super);
+			num = ((((fs->super->s_inodes_per_group -
+				  fs->group_desc[i].bg_itable_unused) *
+				 EXT2_INODE_SIZE(fs->super)) +
+				EXT2_BLOCK_SIZE(fs->super) - 1) /
+			       EXT2_BLOCK_SIZE(fs->super));
+		} else {
+			/* The kernel doesn't need to zero the itable blocks */
+			fs->group_desc[i].bg_flags |= EXT2_BG_INODE_ZEROED;
+			ext2fs_group_desc_csum_set(fs, i);
+		}
+		retval = ext2fs_zero_blocks(fs, blk, num, &blk, &num);
+		if (retval) {
+			fprintf(stderr, _("\nCould not write %d "
+				  "blocks in inode table starting at %u: %s\n"),
+				num, blk, error_message(retval));
+			exit(1);
 		}
 		if (sync_kludge) {
 			if (sync_kludge == 1)
@@ -443,41 +402,10 @@
 				sync();
 		}
 	}
-	zero_blocks(0, 0, 0, 0, 0, 0);
+	ext2fs_zero_blocks(0, 0, 0, 0, 0);
 	progress_close(&progress);
 }
 
-static void setup_lazy_bg(ext2_filsys fs)
-{
-	dgrp_t i;
-	int blks;
-	struct ext2_super_block *sb = fs->super;
-	struct ext2_group_desc *bg = fs->group_desc;
-
-	if (EXT2_HAS_COMPAT_FEATURE(fs->super, 
-				    EXT2_FEATURE_COMPAT_LAZY_BG)) {
-		for (i = 0; i < fs->group_desc_count; i++, bg++) {
-			if ((i == 0) ||
-			    (i == fs->group_desc_count-1))
-				continue;
-			if (bg->bg_free_inodes_count ==
-			    sb->s_inodes_per_group) {
-				bg->bg_free_inodes_count = 0;
-				bg->bg_flags |= EXT2_BG_INODE_UNINIT;
-				sb->s_free_inodes_count -= 
-					sb->s_inodes_per_group;
-			}
-			blks = ext2fs_super_and_bgd_loc(fs, i, 0, 0, 0, 0);
-			if (bg->bg_free_blocks_count == blks) {
-				bg->bg_free_blocks_count = 0;
-				bg->bg_flags |= EXT2_BG_BLOCK_UNINIT;
-				sb->s_free_blocks_count -= blks;
-			}
-		}
-	}
-}
-
-
 static void create_root_dir(ext2_filsys fs)
 {
 	errcode_t		retval;
@@ -515,11 +443,11 @@
 
 static void create_lost_and_found(ext2_filsys fs)
 {
+	unsigned int		lpf_size = 0;
 	errcode_t		retval;
 	ext2_ino_t		ino;
 	const char		*name = "lost+found";
 	int			i;
-	int			lpf_size = 0;
 
 	fs->umask = 077;
 	retval = ext2fs_mkdir(fs, EXT2_ROOT_INO, 0, name);
@@ -535,9 +463,12 @@
 			_("while looking up /lost+found"));
 		exit(1);
 	}
-	
+
 	for (i=1; i < EXT2_NDIR_BLOCKS; i++) {
-		if ((lpf_size += fs->blocksize) >= 16*1024)
+		/* Ensure that lost+found is at least 2 blocks, so we always
+		 * test large empty blocks for big-block filesystems.  */
+		if ((lpf_size += fs->blocksize) >= 16*1024 &&
+		    lpf_size >= 2 * fs->blocksize)
 			break;
 		retval = ext2fs_expand_dir(fs, ino);
 		if (retval) {
@@ -551,10 +482,9 @@
 static void create_bad_block_inode(ext2_filsys fs, badblocks_list bb_list)
 {
 	errcode_t	retval;
-	
+
 	ext2fs_mark_inode_bitmap(fs->inode_map, EXT2_BAD_INO);
-	fs->group_desc[0].bg_free_inodes_count--;
-	fs->super->s_free_inodes_count--;
+	ext2fs_inode_alloc_stats2(fs, EXT2_BAD_INO, +1, 0);
 	retval = ext2fs_update_bb_inode(fs, bb_list);
 	if (retval) {
 		com_err("ext2fs_update_bb_inode", retval,
@@ -567,14 +497,9 @@
 static void reserve_inodes(ext2_filsys fs)
 {
 	ext2_ino_t	i;
-	int		group;
 
-	for (i = EXT2_ROOT_INO + 1; i < EXT2_FIRST_INODE(fs->super); i++) {
-		ext2fs_mark_inode_bitmap(fs->inode_map, i);
-		group = ext2fs_group_of_ino(fs, i);
-		fs->group_desc[group].bg_free_inodes_count--;
-		fs->super->s_free_inodes_count--;
-	}
+	for (i = EXT2_ROOT_INO + 1; i < EXT2_FIRST_INODE(fs->super); i++)
+		ext2fs_inode_alloc_stats2(fs, i, +1, 0);
 	ext2fs_mark_ib_dirty(fs);
 }
 
@@ -625,8 +550,8 @@
 	struct progress_struct progress;
 	errcode_t		retval;
 	char			*buf;
-	blk_t			blk;
-	int			count;
+	blk_t			blk, err_blk;
+	int			c, count, err_count;
 
 	retval = ext2fs_create_journal_superblock(fs,
 				  fs->super->s_blocks_count, 0, &buf);
@@ -641,15 +566,26 @@
 		progress_init(&progress, _("Zeroing journal device: "),
 			      fs->super->s_blocks_count);
 
-	retval = zero_blocks(fs, 0, fs->super->s_blocks_count,
-			     &progress, &blk, &count);
-	if (retval) {
-		com_err("create_journal_dev", retval,
-			_("while zeroing journal device (block %u, count %d)"),
-			blk, count);
-		exit(1);
+	blk = 0;
+	count = fs->super->s_blocks_count;
+	while (count > 0) {
+		if (count > 1024)
+			c = 1024;
+		else
+			c = count;
+		retval = ext2fs_zero_blocks(fs, blk, c, &err_blk, &err_count);
+		if (retval) {
+			com_err("create_journal_dev", retval,
+				_("while zeroing journal device "
+				  "(block %u, count %d)"),
+				err_blk, err_count);
+			exit(1);
+		}
+		blk += c;
+		count -= c;
+		progress_update(&progress, blk);
 	}
-	zero_blocks(0, 0, 0, 0, 0, 0);
+	ext2fs_zero_blocks(0, 0, 0, 0, 0);
 
 	retval = io_channel_write_blk(fs->io,
 				      fs->super->s_first_data_block+1,
@@ -670,7 +606,7 @@
 	blk_t			group_block;
 	dgrp_t			i;
 	int			need, col_left;
-	
+
 	if (fs_param.s_blocks_count != s->s_blocks_count)
 		fprintf(stderr, _("warning: %u blocks unused.\n\n"),
 		       fs_param.s_blocks_count - s->s_blocks_count);
@@ -687,6 +623,8 @@
 		s->s_log_block_size);
 	printf(_("Fragment size=%u (log=%u)\n"), fs->fragsize,
 		s->s_log_frag_size);
+	printf(_("Stride=%u blocks, Stripe width=%u blocks\n"),
+	       s->s_raid_stride, s->s_raid_stripe_width);
 	printf(_("%u inodes, %u blocks\n"), s->s_inodes_count,
 	       s->s_blocks_count);
 	printf(_("%u blocks (%2.2f%%) reserved for the super user\n"),
@@ -696,8 +634,7 @@
 	if (s->s_reserved_gdt_blocks)
 		printf(_("Maximum filesystem blocks=%lu\n"),
 		       (s->s_reserved_gdt_blocks + fs->desc_blocks) *
-		       (fs->blocksize / sizeof(struct ext2_group_desc)) *
-		       s->s_blocks_per_group);
+		       EXT2_DESC_PER_BLOCK(s) * s->s_blocks_per_group);
 	if (fs->group_desc_count > 1)
 		printf(_("%u block groups\n"), fs->group_desc_count);
 	else
@@ -743,8 +680,6 @@
 		sb->s_creator_os = EXT2_OS_LINUX;
 	else if (strcasecmp(os, "GNU") == 0 || strcasecmp(os, "hurd") == 0)
 		sb->s_creator_os = EXT2_OS_HURD;
-	else if (strcasecmp(os, "masix") == 0)
-		sb->s_creator_os = EXT2_OS_MASIX;
 	else if (strcasecmp(os, "freebsd") == 0)
 		sb->s_creator_os = EXT2_OS_FREEBSD;
 	else if (strcasecmp(os, "lites") == 0)
@@ -756,10 +691,10 @@
 
 #define PATH_SET "PATH=/sbin"
 
-static void parse_extended_opts(struct ext2_super_block *param, 
+static void parse_extended_opts(struct ext2_super_block *param,
 				const char *opts)
 {
-	char	*buf, *token, *next, *p, *arg, *badopt = "";
+	char	*buf, *token, *next, *p, *arg, *badopt = 0;
 	int	len;
 	int	r_usage = 0;
 
@@ -824,18 +759,18 @@
 				continue;
 			}
 
-			resize = parse_num_blocks(arg, 
+			resize = parse_num_blocks(arg,
 						  param->s_log_block_size);
 
 			if (resize == 0) {
-				fprintf(stderr, 
+				fprintf(stderr,
 					_("Invalid resize parameter: %s\n"),
 					arg);
 				r_usage++;
 				continue;
 			}
 			if (resize <= param->s_blocks_count) {
-				fprintf(stderr, 
+				fprintf(stderr,
 					_("The resize maximum must be greater "
 					  "than the filesystem size.\n"));
 				r_usage++;
@@ -846,20 +781,20 @@
 			bpg = param->s_blocks_per_group;
 			if (!bpg)
 				bpg = blocksize * 8;
-			gdpb = blocksize / sizeof(struct ext2_group_desc);
-			group_desc_count = 
+			gdpb = EXT2_DESC_PER_BLOCK(param);
+			group_desc_count =
 				ext2fs_div_ceil(param->s_blocks_count, bpg);
 			desc_blocks = (group_desc_count +
 				       gdpb - 1) / gdpb;
 			rsv_groups = ext2fs_div_ceil(resize, bpg);
-			rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) - 
+			rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) -
 				desc_blocks;
 			if (rsv_gdb > (int) EXT2_ADDR_PER_BLOCK(param))
 				rsv_gdb = EXT2_ADDR_PER_BLOCK(param);
 
 			if (rsv_gdb > 0) {
 				if (param->s_rev_level == EXT2_GOOD_OLD_REV) {
-					fprintf(stderr, 
+					fprintf(stderr,
 	_("On-line resizing not supported with revision 0 filesystems\n"));
 					free(buf);
 					exit(1);
@@ -871,6 +806,11 @@
 			}
 		} else if (!strcmp(token, "test_fs")) {
 			param->s_flags |= EXT2_FLAGS_TEST_FILESYS;
+		} else if (!strcmp(token, "lazy_itable_init")) {
+			if (arg)
+				lazy_itable_init = strtoul(arg, &p, 0);
+			else
+				lazy_itable_init = 1;
 		} else {
 			r_usage++;
 			badopt = token;
@@ -884,9 +824,10 @@
 			"Valid extended options are:\n"
 			"\tstride=<RAID per-disk data chunk in blocks>\n"
 			"\tstripe-width=<RAID stride * data disks in blocks>\n"
-			"\tresize=<resize maximum size in blocks>\n\n"
-			"\ttest_fs\n"),
-			badopt);
+			"\tresize=<resize maximum size in blocks>\n"
+			"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+			"\ttest_fs\n\n"),
+			badopt ? badopt : "");
 		free(buf);
 		exit(1);
 	}
@@ -897,61 +838,303 @@
 			param->s_raid_stripe_width, param->s_raid_stride);
 
 	free(buf);
-}	
+}
 
 static __u32 ok_features[3] = {
 	/* Compat */
 	EXT3_FEATURE_COMPAT_HAS_JOURNAL |
 		EXT2_FEATURE_COMPAT_RESIZE_INODE |
 		EXT2_FEATURE_COMPAT_DIR_INDEX |
-		EXT2_FEATURE_COMPAT_LAZY_BG |
 		EXT2_FEATURE_COMPAT_EXT_ATTR,
 	/* Incompat */
 	EXT2_FEATURE_INCOMPAT_FILETYPE|
+		EXT3_FEATURE_INCOMPAT_EXTENTS|
 		EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
-		EXT2_FEATURE_INCOMPAT_META_BG,
+		EXT2_FEATURE_INCOMPAT_META_BG|
+		EXT4_FEATURE_INCOMPAT_FLEX_BG,
 	/* R/O compat */
 	EXT2_FEATURE_RO_COMPAT_LARGE_FILE|
-		EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
+		EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+		EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
+		EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
+		EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|
+		EXT4_FEATURE_RO_COMPAT_GDT_CSUM
 };
 
 
 static void syntax_err_report(const char *filename, long err, int line_num)
 {
-	fprintf(stderr, 
+	fprintf(stderr,
 		_("Syntax error in mke2fs config file (%s, line #%d)\n\t%s\n"),
 		filename, line_num, error_message(err));
 	exit(1);
 }
 
-#ifndef ROOT_SYSCONFDIR
-#define ROOT_SYSCONFDIR "/etc"
-#endif
 static const char *config_fn[] = { ROOT_SYSCONFDIR "/mke2fs.conf", 0 };
 
-static void edit_feature(const char *str, __u32 *compat_array) 
+static void edit_feature(const char *str, __u32 *compat_array)
 {
 	if (!str)
 		return;
 
 	if (e2p_edit_feature(str, compat_array, ok_features)) {
-		fprintf(stderr, _("Invalid filesystem option set: %s\n"), 
+		fprintf(stderr, _("Invalid filesystem option set: %s\n"),
 			str);
 		exit(1);
 	}
 }
 
+struct str_list {
+	char **list;
+	int num;
+	int max;
+};
+
+static errcode_t init_list(struct str_list *sl)
+{
+	sl->num = 0;
+	sl->max = 0;
+	sl->list = malloc((sl->max+1) * sizeof(char *));
+	if (!sl->list)
+		return ENOMEM;
+	sl->list[0] = 0;
+	return 0;
+}
+
+static errcode_t push_string(struct str_list *sl, const char *str)
+{
+	char **new_list;
+
+	if (sl->num >= sl->max) {
+		sl->max += 2;
+		new_list = realloc(sl->list, (sl->max+1) * sizeof(char *));
+		if (!new_list)
+			return ENOMEM;
+		sl->list = new_list;
+	}
+	sl->list[sl->num] = malloc(strlen(str)+1);
+	if (sl->list[sl->num] == 0)
+		return ENOMEM;
+	strcpy(sl->list[sl->num], str);
+	sl->num++;
+	sl->list[sl->num] = 0;
+	return 0;
+}
+
+static void print_str_list(char **list)
+{
+	char **cpp;
+
+	for (cpp = list; *cpp; cpp++) {
+		printf("'%s'", *cpp);
+		if (cpp[1])
+			fputs(", ", stdout);
+	}
+	fputc('\n', stdout);
+}
+
+static char **parse_fs_type(const char *fs_type,
+			    const char *usage_types,
+			    struct ext2_super_block *fs_param,
+			    char *progname)
+{
+	const char	*ext_type = 0;
+	char		*parse_str;
+	char		*profile_type = 0;
+	char		*cp, *t;
+	const char	*size_type;
+	struct str_list	list;
+	unsigned long	meg;
+	int		is_hurd = 0;
+
+	if (init_list(&list))
+		return 0;
+
+	if (creator_os && (!strcasecmp(creator_os, "GNU") ||
+			   !strcasecmp(creator_os, "hurd")))
+		is_hurd = 1;
+
+	if (fs_type)
+		ext_type = fs_type;
+	else if (is_hurd)
+		ext_type = "ext2";
+	else if (!strcmp(program_name, "mke3fs"))
+		ext_type = "ext3";
+	else if (progname) {
+		ext_type = strrchr(progname, '/');
+		if (ext_type)
+			ext_type++;
+		else
+			ext_type = progname;
+
+		if (!strncmp(ext_type, "mkfs.", 5)) {
+			ext_type += 5;
+			if (ext_type[0] == 0)
+				ext_type = 0;
+		} else
+			ext_type = 0;
+	}
+
+	if (!ext_type) {
+		profile_get_string(profile, "defaults", "fs_type", 0,
+				   "ext2", &profile_type);
+		ext_type = profile_type;
+		if (!strcmp(ext_type, "ext2") && (journal_size != 0))
+			ext_type = "ext3";
+	}
+
+	if (!strcmp(ext_type, "ext3") || !strcmp(ext_type, "ext4") ||
+	    !strcmp(ext_type, "ext4dev")) {
+		profile_get_string(profile, "fs_types", ext_type, "features",
+				   0, &t);
+		if (!t) {
+			printf(_("\nWarning!  Your mke2fs.conf file does "
+				 "not define the %s filesystem type.\n"),
+			       ext_type);
+			printf(_("You probably need to install an updated "
+				 "mke2fs.conf file.\n\n"));
+			sleep(5);
+		}
+	}
+
+	meg = (1024 * 1024) / EXT2_BLOCK_SIZE(fs_param);
+	if (fs_param->s_blocks_count < 3 * meg)
+		size_type = "floppy";
+	else if (fs_param->s_blocks_count < 512 * meg)
+		size_type = "small";
+	else
+		size_type = "default";
+
+	if (!usage_types)
+		usage_types = size_type;
+
+	parse_str = malloc(usage_types ? strlen(usage_types)+1 : 1);
+	if (!parse_str) {
+		free(list.list);
+		return 0;
+	}
+	if (usage_types)
+		strcpy(parse_str, usage_types);
+	else
+		*parse_str = '\0';
+
+	if (ext_type)
+		push_string(&list, ext_type);
+	cp = parse_str;
+	while (1) {
+		t = strchr(cp, ',');
+		if (t)
+			*t = '\0';
+
+		if (*cp)
+			push_string(&list, cp);
+		if (t)
+			cp = t+1;
+		else {
+			cp = "";
+			break;
+		}
+	}
+	free(parse_str);
+	free(profile_type);
+	if (is_hurd)
+		push_string(&list, "hurd");
+	return (list.list);
+}
+
+static char *get_string_from_profile(char **fs_types, const char *opt,
+				     const char *def_val)
+{
+	char *ret = 0;
+	int i;
+
+	for (i=0; fs_types[i]; i++);
+	for (i-=1; i >=0 ; i--) {
+		profile_get_string(profile, "fs_types", fs_types[i],
+				   opt, 0, &ret);
+		if (ret)
+			return ret;
+	}
+	profile_get_string(profile, "defaults", opt, 0, def_val, &ret);
+	return (ret);
+}
+
+static int get_int_from_profile(char **fs_types, const char *opt, int def_val)
+{
+	int ret;
+	char **cpp;
+
+	profile_get_integer(profile, "defaults", opt, 0, def_val, &ret);
+	for (cpp = fs_types; *cpp; cpp++)
+		profile_get_integer(profile, "fs_types", *cpp, opt, ret, &ret);
+	return ret;
+}
+
+static int get_bool_from_profile(char **fs_types, const char *opt, int def_val)
+{
+	int ret;
+	char **cpp;
+
+	profile_get_boolean(profile, "defaults", opt, 0, def_val, &ret);
+	for (cpp = fs_types; *cpp; cpp++)
+		profile_get_boolean(profile, "fs_types", *cpp, opt, ret, &ret);
+	return ret;
+}
+
 extern const char *mke2fs_default_profile;
 static const char *default_files[] = { "<default>", 0 };
 
+#ifdef HAVE_BLKID_PROBE_GET_TOPOLOGY
+/*
+ * Sets the geometry of a device (stripe/stride), and returns the
+ * device's alignment offset, if any, or a negative error.
+ */
+static int ext2fs_get_device_geometry(const char *file,
+				      struct ext2_super_block *fs_param)
+{
+	int rc = -1;
+	int blocksize;
+	blkid_probe pr;
+	blkid_topology tp;
+	unsigned long min_io;
+	unsigned long opt_io;
+	struct stat statbuf;
+
+	/* Nothing to do for a regular file */
+	if (!stat(file, &statbuf) && S_ISREG(statbuf.st_mode))
+		return 0;
+
+	pr = blkid_new_probe_from_filename(file);
+	if (!pr)
+		goto out;
+
+	tp = blkid_probe_get_topology(pr);
+	if (!tp)
+		goto out;
+
+	min_io = blkid_topology_get_minimum_io_size(tp);
+	opt_io = blkid_topology_get_optimal_io_size(tp);
+	blocksize = EXT2_BLOCK_SIZE(fs_param);
+
+	fs_param->s_raid_stride = min_io / blocksize;
+	fs_param->s_raid_stripe_width = opt_io / blocksize;
+
+	rc = blkid_topology_get_alignment_offset(tp);
+out:
+	blkid_free_probe(pr);
+	return rc;
+}
+#endif
+
 static void PRS(int argc, char *argv[])
 {
 	int		b, c;
 	int		size;
-	char 		*tmp, *tmp2;
+	char 		*tmp, **cpp;
 	int		blocksize = 0;
 	int		inode_ratio = 0;
 	int		inode_size = 0;
+	unsigned long	flex_bg_size = 0;
 	double		reserved_ratio = 5.0;
 	int		sector_size = 0;
 	int		show_version_only = 0;
@@ -960,6 +1143,7 @@
 	char *		oldpath = getenv("PATH");
 	char *		extended_opts = 0;
 	const char *	fs_type = 0;
+	const char *	usage_types = 0;
 	blk_t		dev_size;
 #ifdef __linux__
 	struct 		utsname ut;
@@ -1007,7 +1191,7 @@
 		profile_init(default_files, &profile);
 		profile_set_default(profile, mke2fs_default_profile);
 	}
-	
+
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	add_error_table(&et_ext2_error_table);
@@ -1029,12 +1213,13 @@
 		program_name = get_progname(*argv);
 
 		/* If called as mkfs.ext3, create a journal inode */
-		if (!strcmp(program_name, "mkfs.ext3"))
+		if (!strcmp(program_name, "mkfs.ext3") ||
+		    !strcmp(program_name, "mke3fs"))
 			journal_size = -1;
 	}
 
 	while ((c = getopt (argc, argv,
-		    "b:cf:g:i:jl:m:no:qr:s:tvE:FI:J:L:M:N:O:R:ST:V")) != EOF) {
+		    "b:cf:g:G:i:jl:m:no:qr:s:t:vE:FI:J:KL:M:N:O:R:ST:U:V")) != EOF) {
 		switch (c) {
 		case 'b':
 			blocksize = strtol(optarg, &tmp, 0);
@@ -1049,13 +1234,12 @@
 				fprintf(stderr, _("Warning: blocksize %d not "
 						  "usable on most systems.\n"),
 					blocksize);
-			if (blocksize > 0) 
+			if (blocksize > 0)
 				fs_param.s_log_block_size =
 					int_log2(blocksize >>
 						 EXT2_MIN_BLOCK_LOG_SIZE);
 			break;
 		case 'c':	/* Check for bad blocks */
-		case 't':	/* deprecated */
 #ifndef NO_CHECK_BB
 			cflag++;
 #else
@@ -1090,6 +1274,20 @@
 				exit(1);
 			}
 			break;
+		case 'G':
+			flex_bg_size = strtoul(optarg, &tmp, 0);
+			if (*tmp) {
+				com_err(program_name, 0,
+					_("Illegal number for flex_bg size"));
+				exit(1);
+			}
+			if (flex_bg_size < 2 ||
+			    (flex_bg_size & (flex_bg_size-1)) != 0) {
+				com_err(program_name, 0,
+					_("flex_bg size must be a power of 2"));
+				exit(1);
+			}
+			break;
 		case 'i':
 			inode_ratio = strtoul(optarg, &tmp, 0);
 			if (inode_ratio < EXT2_MIN_BLOCK_SIZE ||
@@ -1105,6 +1303,9 @@
 		case 'J':
 			parse_journal_opts(optarg);
 			break;
+		case 'K':
+			discard = 0;
+			break;
 		case 'j':
 			if (!journal_size)
 				journal_size = -1;
@@ -1120,7 +1321,8 @@
 			break;
 		case 'm':
 			reserved_ratio = strtod(optarg, &tmp);
-			if (reserved_ratio > 50 || *tmp) {
+			if ( *tmp || reserved_ratio > 50 ||
+			     reserved_ratio < 0) {
 				com_err(program_name, 0,
 					_("invalid reserved blocks percent - %s"),
 					optarg);
@@ -1186,9 +1388,15 @@
 		case 'S':
 			super_only = 1;
 			break;
-		case 'T':
+		case 't':
 			fs_type = optarg;
 			break;
+		case 'T':
+			usage_types = optarg;
+			break;
+		case 'U':
+			fs_uuid = optarg;
+			break;
 		case 'V':
 			/* Print version number and exit */
 			show_version_only++;
@@ -1202,11 +1410,11 @@
 	device_name = argv[optind++];
 
 	if (!quiet || show_version_only)
-		fprintf (stderr, "mke2fs %s (%s)\n", E2FSPROGS_VERSION, 
+		fprintf (stderr, "mke2fs %s (%s)\n", E2FSPROGS_VERSION,
 			 E2FSPROGS_DATE);
 
 	if (show_version_only) {
-		fprintf(stderr, _("\tUsing %s\n"), 
+		fprintf(stderr, _("\tUsing %s\n"),
 			error_message(EXT2_ET_BASE));
 		exit(0);
 	}
@@ -1220,11 +1428,12 @@
 		io_manager	io_ptr;
 
 #ifdef CONFIG_TESTIO_DEBUG
-		io_ptr = test_io_manager;
-		test_io_backing_manager = unix_io_manager;
-#else
-		io_ptr = unix_io_manager;
+		if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+			io_ptr = test_io_manager;
+			test_io_backing_manager = unix_io_manager;
+		} else
 #endif
+			io_ptr = unix_io_manager;
 		retval = ext2fs_open(journal_device,
 				     EXT2_FLAG_JOURNAL_DEV_OK, 0,
 				     0, io_ptr, &jfs);
@@ -1242,6 +1451,7 @@
 			exit(1);
 		}
 		blocksize = jfs->blocksize;
+		printf(_("Using journal device's blocksize: %d\n"), blocksize);
 		fs_param.s_log_block_size =
 			int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
 		ext2fs_close(jfs);
@@ -1259,7 +1469,7 @@
 			blocksize, sys_page_size);
 	}
 	if (optind < argc) {
-		fs_param.s_blocks_count = parse_num_blocks(argv[optind++], 
+		fs_param.s_blocks_count = parse_num_blocks(argv[optind++],
 				fs_param.s_log_block_size);
 		if (!fs_param.s_blocks_count) {
 			com_err(program_name, 0, _("invalid blocks count - %s"),
@@ -1285,19 +1495,42 @@
 						EXT2_BLOCK_SIZE(&fs_param),
 						&dev_size);
 		if ((retval == EFBIG) &&
-		    (blocksize == 0) && 
+		    (blocksize == 0) &&
 		    (fs_param.s_log_block_size == 0)) {
 			fs_param.s_log_block_size = 2;
 			blocksize = 4096;
 			goto retry;
 		}
 	}
-			
+
+	if (retval == EFBIG) {
+		blk64_t	big_dev_size;
+
+		if (blocksize < 4096) {
+			fs_param.s_log_block_size = 2;
+			blocksize = 4096;
+		}
+		retval = ext2fs_get_device_size2(device_name,
+				 EXT2_BLOCK_SIZE(&fs_param), &big_dev_size);
+		if (retval)
+			goto get_size_failure;
+		if (big_dev_size == (1ULL << 32)) {
+			dev_size = (blk_t) (big_dev_size - 1);
+			goto got_size;
+		}
+		fprintf(stderr, _("%s: Size of device %s too big "
+				  "to be expressed in 32 bits\n\t"
+				  "using a blocksize of %d.\n"),
+			program_name, device_name, EXT2_BLOCK_SIZE(&fs_param));
+		exit(1);
+	}
+get_size_failure:
 	if (retval && (retval != EXT2_ET_UNIMPLEMENTED)) {
 		com_err(program_name, retval,
 			_("while trying to determine filesystem size"));
 		exit(1);
 	}
+got_size:
 	if (!fs_param.s_blocks_count) {
 		if (retval == EXT2_ET_UNIMPLEMENTED) {
 			com_err(program_name, 0,
@@ -1323,57 +1556,56 @@
 				fs_param.s_blocks_count &= ~((sys_page_size /
 					   EXT2_BLOCK_SIZE(&fs_param))-1);
 		}
-		
+
 	} else if (!force && (fs_param.s_blocks_count > dev_size)) {
 		com_err(program_name, 0,
 			_("Filesystem larger than apparent device size."));
 		proceed_question();
 	}
 
-	if (!fs_type) {
-		int megs = (__u64)fs_param.s_blocks_count *
-			(EXT2_BLOCK_SIZE(&fs_param) / 1024) / 1024;
-
-		if (fs_param.s_feature_incompat & 
-		    EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)
-			fs_type = "journal";
-		else if (megs <= 3)
-			fs_type = "floppy";
-		else if (megs <= 512)
-			fs_type = "small";
-		else
-			fs_type = "default";
+	fs_types = parse_fs_type(fs_type, usage_types, &fs_param, argv[0]);
+	if (!fs_types) {
+		fprintf(stderr, _("Failed to parse fs types list\n"));
+		exit(1);
 	}
 
 	/* Figure out what features should be enabled */
 
-	tmp = tmp2 = NULL;
+	tmp = NULL;
 	if (fs_param.s_rev_level != EXT2_GOOD_OLD_REV) {
-		profile_get_string(profile, "defaults", "base_features", 0,
-				   "sparse_super,filetype,resize_inode,dir_index",
-				   &tmp);
-		profile_get_string(profile, "fs_types", fs_type, 
-				   "base_features", tmp, &tmp2);
-		edit_feature(tmp2, &fs_param.s_feature_compat);
+		tmp = get_string_from_profile(fs_types, "base_features",
+		      "sparse_super,filetype,resize_inode,dir_index");
+		edit_feature(tmp, &fs_param.s_feature_compat);
 		free(tmp);
-		free(tmp2);
 
-		tmp = tmp2 = NULL;
-		profile_get_string(profile, "defaults", "default_features", 0,
-				   "", &tmp);
-		profile_get_string(profile, "fs_types", fs_type, 
-				   "default_features", tmp, &tmp2);
+		for (cpp = fs_types; *cpp; cpp++) {
+			tmp = NULL;
+			profile_get_string(profile, "fs_types", *cpp,
+					   "features", "", &tmp);
+			if (tmp && *tmp)
+				edit_feature(tmp, &fs_param.s_feature_compat);
+			free(tmp);
+		}
+		tmp = get_string_from_profile(fs_types, "default_features",
+					      "");
 	}
-	edit_feature(fs_features ? fs_features : tmp2, 
+	edit_feature(fs_features ? fs_features : tmp,
 		     &fs_param.s_feature_compat);
-	if (tmp)
-		free(tmp);
-	if (tmp2)
-		free(tmp2);
+	free(tmp);
 
-	if (r_opt == EXT2_GOOD_OLD_REV && 
+	if (fs_param.s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
+		fs_types[0] = strdup("journal");
+		fs_types[1] = 0;
+	}
+
+	if (verbose) {
+		fputs(_("fs_types for mke2fs.conf resolution: "), stdout);
+		print_str_list(fs_types);
+	}
+
+	if (r_opt == EXT2_GOOD_OLD_REV &&
 	    (fs_param.s_feature_compat || fs_param.s_feature_incompat ||
-	     fs_param.s_feature_incompat)) {
+	     fs_param.s_feature_ro_compat)) {
 		fprintf(stderr, _("Filesystem features not supported "
 				  "with revision 0 filesystems\n"));
 		exit(1);
@@ -1397,18 +1629,27 @@
 				  "with revision 0 filesystems\n"));
 			exit(1);
 		}
-		fs_param.s_feature_compat |= 
+		fs_param.s_feature_compat |=
 			EXT3_FEATURE_COMPAT_HAS_JOURNAL;
 	}
 
-	if (fs_param.s_feature_incompat & 
+	if (fs_param.s_feature_incompat &
 	    EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
 		reserved_ratio = 0;
 		fs_param.s_feature_incompat = EXT3_FEATURE_INCOMPAT_JOURNAL_DEV;
 		fs_param.s_feature_compat = 0;
 		fs_param.s_feature_ro_compat = 0;
  	}
-	
+
+	if ((fs_param.s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) &&
+	    (fs_param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
+		fprintf(stderr, _("The resize_inode and meta_bg features "
+				  "are not compatible.\n"
+				  "They can not be both enabled "
+				  "simultaneously.\n"));
+		exit(1);
+	}
+
 	/* Set first meta blockgroup via an environment variable */
 	/* (this is mostly for debugging purposes) */
 	if ((fs_param.s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) &&
@@ -1425,12 +1666,9 @@
 
 	if ((tmp = getenv("MKE2FS_DEVICE_SECTSIZE")) != NULL)
 		sector_size = atoi(tmp);
-	
+
 	if (blocksize <= 0) {
-		profile_get_integer(profile, "defaults", "blocksize", 0,
-				    4096, &use_bsize);
-		profile_get_integer(profile, "fs_types", fs_type, 
-				    "blocksize", use_bsize, &use_bsize);
+		use_bsize = get_int_from_profile(fs_types, "blocksize", 4096);
 
 		if (use_bsize == -1) {
 			use_bsize = sys_page_size;
@@ -1447,12 +1685,8 @@
 	}
 
 	if (inode_ratio == 0) {
-		profile_get_integer(profile, "defaults", "inode_ratio", 0,
-				    8192, &inode_ratio);
-		profile_get_integer(profile, "fs_types", fs_type, 
-				    "inode_ratio", inode_ratio, 
-				    &inode_ratio);
-
+		inode_ratio = get_int_from_profile(fs_types, "inode_ratio",
+						   8192);
 		if (inode_ratio < blocksize)
 			inode_ratio = blocksize;
 	}
@@ -1460,8 +1694,34 @@
 	fs_param.s_log_frag_size = fs_param.s_log_block_size =
 		int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
 
+#ifdef HAVE_BLKID_PROBE_GET_TOPOLOGY
+	retval = ext2fs_get_device_geometry(device_name, &fs_param);
+	if (retval < 0) {
+		fprintf(stderr,
+			_("warning: Unable to get device geometry for %s\n"),
+			device_name);
+	} else if (retval) {
+		printf(_("%s alignment is offset by %lu bytes.\n"),
+		       device_name, retval);
+		printf(_("This may result in very poor performance, "
+			  "(re)-partitioning suggested.\n"));
+	}
+#endif
+
 	blocksize = EXT2_BLOCK_SIZE(&fs_param);
-	
+
+	lazy_itable_init = get_bool_from_profile(fs_types,
+						 "lazy_itable_init", 0);
+
+	/* Get options from profile */
+	for (cpp = fs_types; *cpp; cpp++) {
+		tmp = NULL;
+		profile_get_string(profile, "fs_types", *cpp, "options", "", &tmp);
+			if (tmp && *tmp)
+				parse_extended_opts(&fs_param, tmp);
+			free(tmp);
+	}
+
 	if (extended_opts)
 		parse_extended_opts(&fs_param, extended_opts);
 
@@ -1485,25 +1745,21 @@
 		}
 	}
 
-	if (!force && fs_param.s_blocks_count >= ((unsigned) 1 << 31)) {
-		com_err(program_name, 0,
-			_("Filesystem too large.  No more than 2**31-1 blocks\n"
-			  "\t (8TB using a blocksize of 4k) are currently supported."));
-             exit(1);
-	}
-
-	if ((blocksize > 4096) &&
-	    (fs_param.s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
-		fprintf(stderr, _("\nWarning: some 2.4 kernels do not support "
-			"blocksizes greater than 4096\n\tusing ext3.  "
-			"Use -b 4096 if this is an issue for you.\n\n"));
-
-	if (inode_size == 0) {
-		profile_get_integer(profile, "defaults", "inode_size", NULL,
-				    0, &inode_size);
-		profile_get_integer(profile, "fs_types", fs_type,
-				    "inode_size", inode_size,
-				    &inode_size);
+	if (inode_size == 0)
+		inode_size = get_int_from_profile(fs_types, "inode_size", 0);
+	if (!flex_bg_size && (fs_param.s_feature_incompat &
+			      EXT4_FEATURE_INCOMPAT_FLEX_BG))
+		flex_bg_size = get_int_from_profile(fs_types,
+						    "flex_bg_size", 16);
+	if (flex_bg_size) {
+		if (!(fs_param.s_feature_incompat &
+		      EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+			com_err(program_name, 0,
+				_("Flex_bg feature not enabled, so "
+				  "flex_bg size may not be specified"));
+			exit(1);
+		}
+		fs_param.s_log_groups_per_flex = int_log2(flex_bg_size);
 	}
 
 	if (inode_size && fs_param.s_rev_level >= EXT2_DYNAMIC_REV) {
@@ -1516,10 +1772,6 @@
 				blocksize);
 			exit(1);
 		}
-		if (inode_size != EXT2_GOOD_OLD_INODE_SIZE)
-			fprintf(stderr, _("Warning: %d-byte inodes not usable "
-				"on older systems\n"),
-				inode_size);
 		fs_param.s_inode_size = inode_size;
 	}
 
@@ -1541,13 +1793,13 @@
 	/*
 	 * Calculate number of inodes based on the inode ratio
 	 */
-	fs_param.s_inodes_count = num_inodes ? num_inodes : 
+	fs_param.s_inodes_count = num_inodes ? num_inodes :
 		((__u64) fs_param.s_blocks_count * blocksize)
 			/ inode_ratio;
 
 	if ((((long long)fs_param.s_inodes_count) *
 	     (inode_size ? inode_size : EXT2_GOOD_OLD_INODE_SIZE)) >=
-	    (((long long)fs_param.s_blocks_count) * 
+	    (((long long)fs_param.s_blocks_count) *
 	     EXT2_BLOCK_SIZE(&fs_param))) {
 		com_err(program_name, 0, _("inode_size (%u) * inodes_count "
 					  "(%u) too big for a\n\t"
@@ -1555,7 +1807,7 @@
 					  "specify higher inode_ratio (-i)\n\t"
 					  "or lower inode count (-N).\n"),
 			inode_size ? inode_size : EXT2_GOOD_OLD_INODE_SIZE,
-			fs_param.s_inodes_count, 
+			fs_param.s_inodes_count,
 			(unsigned long) fs_param.s_blocks_count);
 		exit(1);
 	}
@@ -1563,19 +1815,174 @@
 	/*
 	 * Calculate number of blocks to reserve
 	 */
-	fs_param.s_r_blocks_count = e2p_percent(reserved_ratio, 
-						fs_param.s_blocks_count);
+	fs_param.s_r_blocks_count = (unsigned int) (reserved_ratio *
+					fs_param.s_blocks_count / 100.0);
 }
 
+static int should_do_undo(const char *name)
+{
+	errcode_t retval;
+	io_channel channel;
+	__u16	s_magic;
+	struct ext2_super_block super;
+	io_manager manager = unix_io_manager;
+	int csum_flag, force_undo;
+
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(&fs_param,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
+	force_undo = get_int_from_profile(fs_types, "force_undo", 0);
+	if (!force_undo && (!csum_flag || !lazy_itable_init))
+		return 0;
+
+	retval = manager->open(name, IO_FLAG_EXCLUSIVE,  &channel);
+	if (retval) {
+		/*
+		 * We don't handle error cases instead we
+		 * declare that the file system doesn't exist
+		 * and let the rest of mke2fs take care of
+		 * error
+		 */
+		retval = 0;
+		goto open_err_out;
+	}
+
+	io_channel_set_blksize(channel, SUPERBLOCK_OFFSET);
+	retval = io_channel_read_blk(channel, 1, -SUPERBLOCK_SIZE, &super);
+	if (retval) {
+		retval = 0;
+		goto err_out;
+	}
+
+#if defined(WORDS_BIGENDIAN)
+	s_magic = ext2fs_swab16(super.s_magic);
+#else
+	s_magic = super.s_magic;
+#endif
+
+	if (s_magic == EXT2_SUPER_MAGIC)
+		retval = 1;
+
+err_out:
+	io_channel_close(channel);
+
+open_err_out:
+
+	return retval;
+}
+
+static int mke2fs_setup_tdb(const char *name, io_manager *io_ptr)
+{
+	errcode_t retval = 0;
+	char *tdb_dir, *tdb_file;
+	char *device_name, *tmp_name;
+
+	/*
+	 * Configuration via a conf file would be
+	 * nice
+	 */
+	tdb_dir = getenv("E2FSPROGS_UNDO_DIR");
+	if (!tdb_dir)
+		profile_get_string(profile, "defaults",
+				   "undo_dir", 0, "/var/lib/e2fsprogs",
+				   &tdb_dir);
+
+	if (!strcmp(tdb_dir, "none") || (tdb_dir[0] == 0) ||
+	    access(tdb_dir, W_OK))
+		return 0;
+
+	tmp_name = strdup(name);
+	if (!tmp_name) {
+	alloc_fn_fail:
+		com_err(program_name, ENOMEM, 
+			_("Couldn't allocate memory for tdb filename\n"));
+		return ENOMEM;
+	}
+	device_name = basename(tmp_name);
+	tdb_file = malloc(strlen(tdb_dir) + 8 + strlen(device_name) + 7 + 1);
+	if (!tdb_file)
+		goto alloc_fn_fail;
+	sprintf(tdb_file, "%s/mke2fs-%s.e2undo", tdb_dir, device_name);
+
+	if (!access(tdb_file, F_OK)) {
+		if (unlink(tdb_file) < 0) {
+			retval = errno;
+			com_err(program_name, retval,
+				_("while trying to delete %s"),
+				tdb_file);
+			free(tdb_file);
+			return retval;
+		}
+	}
+
+	set_undo_io_backing_manager(*io_ptr);
+	*io_ptr = undo_io_manager;
+	set_undo_io_backup_file(tdb_file);
+	printf(_("Overwriting existing filesystem; this can be undone "
+		 "using the command:\n"
+		 "    e2undo %s %s\n\n"), tdb_file, name);
+
+	free(tdb_file);
+	free(tmp_name);
+	return retval;
+}
+
+#ifdef __linux__
+
+#ifndef BLKDISCARD
+#define BLKDISCARD	_IO(0x12,119)
+#endif
+
+static void mke2fs_discard_blocks(ext2_filsys fs)
+{
+	int fd;
+	int ret;
+	int blocksize;
+	__u64 blocks;
+	__uint64_t range[2];
+
+	blocks = fs->super->s_blocks_count;
+	blocksize = EXT2_BLOCK_SIZE(fs->super);
+	range[0] = 0;
+	range[1] = blocks * blocksize;
+
+#ifdef HAVE_OPEN64		
+	fd = open64(fs->device_name, O_RDWR);
+#else
+	fd = open(fs->device_name, O_RDWR);
+#endif
+
+	/*
+	 * We don't care about whether the ioctl succeeds; it's only an
+	 * optmization for SSDs or sparse storage.
+	 */
+	if (fd > 0) {
+		ret = ioctl(fd, BLKDISCARD, &range);
+		if (verbose) {
+			printf(_("Calling BLKDISCARD from %llu to %llu "),
+				range[0], range[1]);
+			if (ret)
+				printf(_("failed.\n"));
+			else
+				printf(_("succeeded.\n"));
+		}
+		close(fd);
+	}
+}
+#else
+#define mke2fs_discard_blocks(fs)
+#endif
+
 int main (int argc, char *argv[])
 {
 	errcode_t	retval = 0;
 	ext2_filsys	fs;
 	badblocks_list	bb_list = 0;
-	int		journal_blocks;
+	unsigned int	journal_blocks;
 	unsigned int	i;
-	int		val;
+	int		val, hash_alg;
 	io_manager	io_ptr;
+	char		tdb_string[40];
+	char		*hash_alg_str;
 
 #ifdef ENABLE_NLS
 	setlocale(LC_MESSAGES, "");
@@ -1586,11 +1993,18 @@
 	PRS(argc, argv);
 
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
+		io_ptr = unix_io_manager;
+
+	if (should_do_undo(device_name)) {
+		retval = mke2fs_setup_tdb(device_name, &io_ptr);
+		if (retval)
+			exit(1);
+	}
 
 	/*
 	 * Initialize the superblock....
@@ -1602,9 +2016,25 @@
 		exit(1);
 	}
 
+	/* Can't undo discard ... */
+	if (discard && (io_ptr != undo_io_manager))
+		mke2fs_discard_blocks(fs);
+
+	sprintf(tdb_string, "tdb_data_size=%d", fs->blocksize <= 4096 ?
+		32768 : fs->blocksize * 8);
+	io_channel_set_options(fs->io, tdb_string);
+
 	if (fs_param.s_flags & EXT2_FLAGS_TEST_FILESYS)
 		fs->super->s_flags |= EXT2_FLAGS_TEST_FILESYS;
 
+	if ((fs_param.s_feature_incompat &
+	     (EXT3_FEATURE_INCOMPAT_EXTENTS|EXT4_FEATURE_INCOMPAT_FLEX_BG)) ||
+	    (fs_param.s_feature_ro_compat &
+	     (EXT4_FEATURE_RO_COMPAT_HUGE_FILE|EXT4_FEATURE_RO_COMPAT_GDT_CSUM|
+	      EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
+	      EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)))
+		fs->super->s_kbytes_written = 1;
+
 	/*
 	 * Wipe out the old on-disk superblock
 	 */
@@ -1612,14 +2042,25 @@
 		zap_sector(fs, 2, 6);
 
 	/*
-	 * Generate a UUID for it...
+	 * Parse or generate a UUID for the filesystem
 	 */
-	uuid_generate(fs->super->s_uuid);
+	if (fs_uuid) {
+		if (uuid_parse(fs_uuid, fs->super->s_uuid) !=0) {
+			com_err(device_name, 0, "could not parse UUID: %s\n",
+				fs_uuid);
+			exit(1);
+		}
+	} else
+		uuid_generate(fs->super->s_uuid);
 
 	/*
 	 * Initialize the directory index variables
 	 */
-	fs->super->s_def_hash_version = EXT2_HASH_TEA;
+	hash_alg_str = get_string_from_profile(fs_types, "hash_alg",
+					       "half_md4");
+	hash_alg = e2p_string2hash(hash_alg_str);
+	fs->super->s_def_hash_version = (hash_alg >= 0) ? hash_alg :
+		EXT2_HASH_HALF_MD4;
 	uuid_generate((unsigned char *) fs->super->s_hash_seed);
 
 	/*
@@ -1666,7 +2107,7 @@
 		strncpy(fs->super->s_last_mounted, mount_dir,
 			sizeof(fs->super->s_last_mounted));
 	}
-	
+
 	if (!quiet || noaction)
 		show_stats(fs);
 
@@ -1718,21 +2159,20 @@
 		if (start > rsv)
 			start -= rsv;
 		if (start > 0)
-			retval = zero_blocks(fs, start, blocks - start,
-					     NULL, &ret_blk, NULL);
+			retval = ext2fs_zero_blocks(fs, start, blocks - start,
+						    &ret_blk, NULL);
 
 		if (retval) {
 			com_err(program_name, retval,
 				_("while zeroing block %u at end of filesystem"),
 				ret_blk);
 		}
-		setup_lazy_bg(fs);
-		write_inode_tables(fs);
+		write_inode_tables(fs, lazy_itable_init);
 		create_root_dir(fs);
 		create_lost_and_found(fs);
 		reserve_inodes(fs);
 		create_bad_block_inode(fs, bb_list);
-		if (fs->super->s_feature_compat & 
+		if (fs->super->s_feature_compat &
 		    EXT2_FEATURE_COMPAT_RESIZE_INODE) {
 			retval = ext2fs_create_resize_inode(fs);
 			if (retval) {
@@ -1745,9 +2185,9 @@
 
 	if (journal_device) {
 		ext2_filsys	jfs;
-		
+
 		if (!force)
-			check_plausibility(journal_device); 
+			check_plausibility(journal_device);
 		check_mount(journal_device, force, _("journal"));
 
 		retval = ext2fs_open(journal_device, EXT2_FLAG_RW|
@@ -1760,14 +2200,14 @@
 			exit(1);
 		}
 		if (!quiet) {
-			printf(_("Adding journal to device %s: "), 
+			printf(_("Adding journal to device %s: "),
 			       journal_device);
 			fflush(stdout);
 		}
 		retval = ext2fs_add_journal_device(fs, jfs);
 		if(retval) {
-			com_err (program_name, retval, 
-				 _("\n\twhile trying to add journal to device %s"), 
+			com_err (program_name, retval,
+				 _("\n\twhile trying to add journal to device %s"),
 				 journal_device);
 			exit(1);
 		}
@@ -1776,17 +2216,23 @@
 		ext2fs_close(jfs);
 		free(journal_device);
 	} else if ((journal_size) ||
-		   (fs_param.s_feature_compat & 
+		   (fs_param.s_feature_compat &
 		    EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
 		journal_blocks = figure_journal_size(journal_size, fs);
 
+		if (super_only) {
+			printf(_("Skipping journal creation in super-only mode\n"));
+			fs->super->s_journal_inum = EXT2_JOURNAL_INO;
+			goto no_journal;
+		}
+
 		if (!journal_blocks) {
 			fs->super->s_feature_compat &=
 				~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
 			goto no_journal;
 		}
 		if (!quiet) {
-			printf(_("Creating journal (%d blocks): "),
+			printf(_("Creating journal (%u blocks): "),
 			       journal_blocks);
 			fflush(stdout);
 		}
@@ -1818,5 +2264,6 @@
 	val = ext2fs_close(fs);
 	remove_error_table(&et_ext2_error_table);
 	remove_error_table(&et_prof_error_table);
+	profile_release(profile);
 	return (retval || val) ? 1 : 0;
 }
diff --git a/misc/mke2fs.conf b/misc/mke2fs.conf
index d67593a..52fe58e 100644
--- a/misc/mke2fs.conf
+++ b/misc/mke2fs.conf
@@ -5,6 +5,18 @@
 	inode_ratio = 16384
 
 [fs_types]
+	ext3 = {
+		features = has_journal
+	}
+	ext4 = {
+		features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+		inode_size = 256
+	}
+	ext4dev = {
+		features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+		inode_size = 256
+		options = test_fs=1
+	}
 	small = {
 		blocksize = 1024
 		inode_size = 128
@@ -20,7 +32,13 @@
 	}
 	largefile = {
 		inode_ratio = 1048576
+		blocksize = -1
 	}
 	largefile4 = {
 		inode_ratio = 4194304
+		blocksize = -1
+	}
+	hurd = {
+	     blocksize = 4096
+	     inode_size = 128
 	}
diff --git a/misc/mke2fs.conf.5.in b/misc/mke2fs.conf.5.in
index 6089031..c1b54f7 100644
--- a/misc/mke2fs.conf.5.in
+++ b/misc/mke2fs.conf.5.in
@@ -79,20 +79,6 @@
 .B -T
 option to
 .BR mke2fs (8).
-If no filesystem type is specified, 
-.BR mke2fs (8)
-will use the filesystem type 
-.I floppy
-if the filesystem size is less than or equal to 3 megabytes.  
-If the filesystem size is greater than 3 but less than or equal to 
-512 megabytes, 
-.BR mke2fs (8)
-will use the filesystem
-.IR small .
-Otherwise, 
-.BR mke2fs (8)
-will use the default filesystem type
-.IR default .
 .SH THE [defaults] STANZA
 The following relations are defined in the 
 .I [defaults]
@@ -102,7 +88,7 @@
 This relation specifies the filesystems features which are enabled in
 newly created filesystems.  It may be overridden by the
 .I base_features
-relation found in the filesystem-type-specific subsection of
+relation found in the filesystem or usage type subsection of
 the
 .I [fs_types] 
 stanza.
@@ -113,7 +99,7 @@
 .I base_features
 relation.  It may be overridden by the filesystem-specific 
 .I default_features
-in the filesystem-type subsection of
+in the filesystem or usage type subsection of
 .IR [fs_types] ,
 and by the 
 .B -O
@@ -121,11 +107,44 @@
 to 
 .BR mke2fs (8).
 .TP
+.I force_undo
+This relation, if set to a boolean value of true, forces
+.B mke2fs
+to always try to create an undo file, even if the undo file might be
+huge and it might extend the time to create the filesystem image
+because the inode table isn't being initialized lazily.
+.TP
+.I fs_type
+This relation specifies the default filesystem type if the user does not
+specify it via the
+.B \-t
+option, or if
+.B mke2fs
+is not started using a program name of the form
+.BI mkfs. fs-type\fR.
+If both the user and the
+.B mke2fs.conf
+file does not specify a default filesystem type, mke2fs will use a
+default filesystem type of
+.IR ext3
+if a journal was requested via a command-line option, or
+.I ext2
+if not.
+.TP
 .I blocksize
 This relation specifies the default blocksize if the user does not
 specify a blocksize on the command line, and the filesystem-type
 specific section of the configuration file does not specify a blocksize.
 .TP
+.I hash_alg
+This relation specifies the default hash algorithm used for the
+new filesystems with hashed b-tree directories.  Valid algorithms
+accepted are:
+.IR legacy ,
+.IR half_md4 ,
+and
+.IR tea .
+.TP
 .I inode_ratio
 This relation specifies the default inode ratio if the user does not
 specify one on the command line, and the filesystem-type
@@ -137,19 +156,69 @@
 specify one on the command line, and the filesystem-type
 specific section of the configuration file does not specify a default
 inode size.
+.TP
+.I undo_dir
+This relation specifies the directory where the undo file should be
+stored.  It can be overridden via the
+.B E2FSPROGS_UNDO_DIR
+environment variable.  If the directory location is set to the value
+.IR none ,
+.B mke2fs
+will not create an undo file.
 .SH THE [fs_types] STANZA
 Each tag in the
 .I [fs_types] 
-stanza names a filesystem type which can be specified via the 
-.B -T
-option to
-.BR mke2fs (8).
-The value of the tag is a subsection where the relations in that
-subsection define the defaults for that filesystem type. For
-example:
+stanza names a filesystem type or usage type which can be specified via the
+.B \-t
+or
+.B \-T
+options to
+.BR mke2fs (8),
+respectively.
 .P
+The
+.B mke2fs
+program constructs a list of fs_types by concatenating the filesystem
+type (i.e., ext2, ext3, etc.) with the usage type list.  For most
+configuration options,
+.B mke2fs
+will look for a subsection in the
+.I [fs_types]
+stanza corresponding with each entry in the constructed list, with later
+entries overriding earlier filesystem or usage types.
+For
+example, consider the following
+.B mke2fs.conf
+fragment:
+.P
+[defaults]
+.br
+	base_features = sparse_super,filetype,resize_inode,dir_index
+.br
+	blocksize = 4096
+.br
+	inode_size = 256
+.br
+	inode_ratio = 16384
+.br
+
+.br
 [fs_types]
 .br
+	ext3 = {
+.br
+		features = has_journal
+.br
+	}
+.br
+	ext4 = {
+.br
+		features = extents,flex_bg
+.br
+		inode_size = 256
+.br
+	}
+.br
 	small = {
 .br
 		blocksize = 1024
@@ -160,22 +229,76 @@
 .br
 	floppy = {
 .br
+		features = ^resize_inode
+.br
 		blocksize = 1024
 .br
+		inode_size = 128
+.br
 	}
 .P
+If mke2fs started with a program name of
+.BR mke2fs.ext4 ,
+then the filesystem type of ext4 will be used.  If the filesystem is
+smaller than 3 megabytes, and no usage type is specified, then
+.B mke2fs
+will use a default
+usage type of
+.IR floppy .
+This results in an fs_types list of "ext4, floppy".   Both the ext4
+subsection and the floppy subsection define an
+.I inode_size
+relation, but since the later entries in the fs_types list supersede
+earlier ones, the configuration parameter for fs_types.floppy.inode_size
+will be used, so the filesystem  will have an inode size of 128.
+.P
+The exception to this resolution is the
+.I features
+tag, which is specifies a set of changes to the features used by the
+filesystem, and which is cumulative.  So in the above example, first
+the configuration relation defaults.base_features would enable an
+initial feature set with the sparse_super, filetype, resize_inode, and
+dir_index features enabled.  Then configuration relation
+fs_types.ext4.features would enable the extents and flex_bg
+features, and finally the configuration relation
+fs_types.floppy.features would remove
+the resize_inode feature, resulting in a filesystem feature set
+consisting of the sparse_super, filetype, resize_inode, dir_index,
+extents_and flex_bg features.
+.P
 For each filesystem type, the following tags may be used in that 
 fs_type's subsection:
 .TP
 .I base_features
-This relation specifies the features which are enabled for this
-filesystem type.
+This relation specifies the features which are initially enabled for this
+filesystem type.  Only one
+.I base_features
+will be used, so if there are multiple entries in the fs_types list
+whose subsections define the
+.I base_features
+relation, only the last will be used by
+.BR mke2fs (8).
+.TP
+.I features
+This relation specifies a comma-separated list of features edit
+requests which modify the feature set
+used by the newly constructed filesystem.  The syntax is the same as the
+.B -O
+command-line option to
+.BR mke2fs (8);
+that is, a feature can be prefixed by a caret ('^') symbol to disable
+a named feature.  Each
+.I feature
+relation specified in the fs_types list will be applied in the order
+found in the fs_types list.
 .TP
 .I default_features
 This relation specifies set of features which should be enabled or 
-disabled to the features listed in the
+disabled after applying the features listed in the
 .I base_features
-relation.  It may be overridden by the 
+and
+.I features
+relations.  It may be overridden by the
 .B -O
 command-line option to
 .BR mke2fs (8).
@@ -184,6 +307,18 @@
 This relation specifies the default blocksize if the user does not
 specify a blocksize on the command line.
 .TP
+.I lazy_itable_init
+This relation is a boolean which specifies whether the inode table should 
+be lazily initialized.  It only has meaning if the uninit_bg feature is
+enabled.  If lazy_itable_init is true and the uninit_bg feature is
+enabled,  the inode table will
+not fully initialized by 
+.BR mke2fs (8).
+This speeds up filesystem
+initialization noticeably, but it requires the kernel to finish
+initializing the filesystem in the background when the filesystem is
+first mounted.
+.TP
 .I inode_ratio
 This relation specifies the default inode ratio if the user does not
 specify one on the command line.
@@ -191,6 +326,32 @@
 .I inode_size
 This relation specifies the default inode size if the user does not
 specify one on the command line.
+.TP
+.I hash_alg
+This relation specifies the default hash algorithm used for the
+new filesystems with hashed b-tree directories.  Valid algorithms
+accepted are:
+.IR legacy ,
+.IR half_md4 ,
+and
+.IR tea .
+.TP
+.I flex_bg_size
+This relation specifies the number of block goups that will be packed
+together to create one large virtual block group on an ext4 filesystem.
+This improves meta-data locality and performance on meta-data heavy
+workloads.  The number of goups must be a power of 2 and may only be
+specified if the flex_bg filesystem feature is enabled.
+.I options
+This relation specifies additional extended options which should be
+treated by
+.BR mke2fs (8)
+as if they were prepended to the argument of the
+.B -E
+option.  This can be used to configure the default extended options used
+by
+.BR mke2fs (8)
+on a per-filesystem type basis.
 .SH FILES
 .TP
 .I /etc/mke2fs.conf
diff --git a/misc/mklost+found.c b/misc/mklost+found.c
index a0e71f0..8d5fa7b 100644
--- a/misc/mklost+found.c
+++ b/misc/mklost+found.c
@@ -53,7 +53,7 @@
 		perror ("mkdir");
 		exit(1);
 	}
-	
+
 	i = 0;
 	memset (name, 'x', 246);
 	do {
diff --git a/misc/partinfo.c b/misc/partinfo.c
index f1ec879..48b395f 100644
--- a/misc/partinfo.c
+++ b/misc/partinfo.c
@@ -4,7 +4,7 @@
  * Originally written by Alain Knaff, <alknaff@innet.lu>.
  *
  * Cleaned up by Theodore Ts'o, <tytso@mit.edu>.
- * 
+ *
  */
 
 #include <sys/types.h>
@@ -23,12 +23,6 @@
 #define BLKGETSIZE _IO(0x12,96)	/* return device size */
 #endif
 
-void print_error(char *operation, int error, char *device)
-{
-	fprintf(stderr, _("%s failed for %s: %s\n"), operation, device,
-		strerror(error));
-}
-
 int main(int argc, char **argv)
 {
 	struct hd_geometry loc;
@@ -42,35 +36,38 @@
 	textdomain(NLS_CAT_NAME);
 #endif
 	if (argc == 1) {
-		fprintf(stderr, _("Usage:  %s device...\n\nPrints out the"
-			"partition information for each given device.\n"),
-			"For example: %s /dev/hda\n\n", argv[0], argv[0]);
+		fprintf(stderr, _("Usage:  %s device...\n\nPrints out the "
+			"partition information for each given device.\n"
+			"For example: %s /dev/hda\n\n"), argv[0], argv[0]);
 		exit(1);
 	}
-    
+
 	for (i=1; i < argc; i++) {
 		fd = open(argv[i], O_RDONLY);
 
 		if (fd < 0) {
-			print_error(_("open"), errno, argv[i]);
+			fprintf(stderr, _("Cannot open %s: %s"),
+				argv[i], strerror(errno));
 			continue;
 		}
-    
+
 		if (ioctl(fd, HDIO_GETGEO, &loc) < 0) {
-			print_error(_("HDIO_GETGEO ioctl"), errno, argv[i]);
+			fprintf(stderr, _("Cannot get geometry of %s: %s"),
+				argv[i], strerror(errno));
 			close(fd);
 			continue;
 		}
-    
-    
+
+
 		if (ioctl(fd, BLKGETSIZE, &size) < 0) {
-			print_error(_("BLKGETSIZE ioctl"), errno, argv[i]);
+			fprintf(stderr, _("Cannot get size of %s: %s"),
+				argv[i], strerror(errno));
 			close(fd);
 			continue;
 		}
-    
-		printf("%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n",
-		       argv[i], 
+
+		printf(_("%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"),
+		       argv[i],
 		       loc.heads, (int)loc.sectors, loc.cylinders,
 		       (int)loc.start, size, (int) loc.start + size -1);
 		close(fd);
diff --git a/misc/tune2fs.8.in b/misc/tune2fs.8.in
index 8b59c17..62934f7 100644
--- a/misc/tune2fs.8.in
+++ b/misc/tune2fs.8.in
@@ -4,7 +4,7 @@
 .\"
 .TH TUNE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-tune2fs \- adjust tunable filesystem parameters on ext2/ext3 filesystems
+tune2fs \- adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
 .SH SYNOPSIS
 .B tune2fs
 [
@@ -88,7 +88,14 @@
 .SH DESCRIPTION
 .BI tune2fs
 allows the system administrator to adjust various tunable filesystem 
-parameters on Linux ext2/ext3 filesystems.
+parameters on Linux ext2, ext3, or ext4 filesystems.  The current values 
+of these options can be displayed by using the
+.B -l
+option to
+.BR tune2fs (8)
+program, or by using the
+.BR dumpe2fs (8)
+program.
 .SH OPTIONS
 .TP
 .BI \-c " max-mount-counts"
@@ -161,10 +168,10 @@
 before moving to next disk. This mostly affects placement of filesystem
 metadata like bitmaps at
 .BR mke2fs (2)
-time to avoid placing them on a single disk, which can hurt the performanace.
+time to avoid placing them on a single disk, which can hurt the performance.
 It may also be used by block allocator.
 .TP
-.BI stripe-width= stripe-width
+.BI stripe_width= stripe-width
 Configure the filesystem for a RAID array with
 .I stripe-width
 filesystem blocks per stripe. This is typically be stride-size * N, where
@@ -172,6 +179,14 @@
 This allows the block allocator to prevent read-modify-write of the
 parity in a RAID stripe if possible when the data is written.
 .TP
+.BI hash_alg= hash-alg
+Set the default hash algorithm used for filesystems with hashed b-tree
+directories.  Valid algorithms accepted are:
+.IR legacy ,
+.IR half_md4 ,
+and
+.IR tea .
+.TP
 .B test_fs
 Set a flag in the filesystem superblock indicating that it may be
 mounted using experimental kernel code, such as the ext4dev filesystem.
@@ -204,13 +219,15 @@
 .TP
 .B \-i " \fIinterval-between-checks\fR[\fBd\fR|\fBm\fR|\fBw\fR]"
 Adjust the maximal time between two filesystem checks. 
-No postfix or
+No suffix or
 .B d
-result in days,
+will interpret the number
+.I interval-between-checks
+as days,
 .B m
-in months, and
+as months, and
 .B w
-in weeks.  A value of zero will disable the time-dependent checking.
+as weeks.  A value of zero will disable the time-dependent checking.
 .sp
 It is strongly recommended that either
 .B \-c
@@ -311,7 +328,8 @@
 @JDEV@options can be given for a filesystem.
 .TP
 .B \-l
-List the contents of the filesystem superblock.
+List the contents of the filesystem superblock, including the current
+values of the parameters that can be set via this program.
 .TP
 .BI \-L " volume-label"
 Set the volume label of the filesystem.  
@@ -415,34 +433,52 @@
 .BR tune2fs :
 .RS 1.2i
 .TP
-.B large_file
-Filesystem can contain files that are greater than 2GB.  (Modern kernels
-set this feature automatically when a file > 2GB is created.)
-.TP
 .B dir_index
 Use hashed b-trees to speed up lookups in large directories.
 .TP
 .B filetype
 Store file type information in directory entries.
 .TP
+.B flex_bg
+Allow bitmaps and inode tables for a block group to be placed
+anywhere on the storage media.  \fBTune2fs\fR will not reorganize
+the location of the inode tables and allocation bitmaps, as
+.BR mke2fs (8)
+will do when it creates a freshly formated file system with
+.B flex_bg
+enabled.
+.TP
 .B has_journal
 Use a journal to ensure filesystem consistency even across unclean shutdowns.
 Setting the filesystem feature is equivalent to using the 
 .B \-j
 option.
 .TP
-.B sparse_super
-Limit the number of backup superblocks to save space on large filesystems.
+.B large_file
+Filesystem can contain files that are greater than 2GB.  (Modern kernels
+set this feature automatically when a file > 2GB is created.)
 .TP
 .B resize_inode
 Reserve space so the block group descriptor table may grow in the
 future.
 .B Tune2fs 
 only supports clearing this filesystem feature.
+.TP
+.B sparse_super
+Limit the number of backup superblocks to save space on large filesystems.
+.TP
+.B uninit_bg
+Allow the kernel to initialize bitmaps and inode tables and keep a high
+watermark for the unused inodes in a filesystem, to reduce
+.BR e2fsck (8)
+time.  This first e2fsck run after enabling this feature will take the
+full time, but subsequent e2fsck runs will take only a fraction of the
+original time, depending on how full the file system is.
 .RE
 .IP
 After setting or clearing 
 .BR sparse_super ,
+.BR uninit_bg ,
 .BR filetype ,
 or
 .B resize_inode
@@ -457,6 +493,12 @@
 feature, 
 .B e2fsck -D
 can be run to convert existing directories to the hashed B-tree format.
+Enabling certain filesystem features may prevent the filesystem from being
+mounted by kernels which do not support those features.  In particular, the
+.BR uninit_bg
+and
+.BR flex_bg
+features are only supported by the ext4 filesystem.
 .TP
 .BI \-r " reserved-blocks-count"
 Set the number of reserved filesystem blocks.
@@ -464,6 +506,7 @@
 .BI \-T " time-last-checked"
 Set the time the filesystem was last checked using
 .BR  e2fsck .
+The time is interpreted using the current (local) timezone.
 This can be useful in scripts which use a Logical Volume Manager to make
 a consistent snapshot of a filesystem, and then check the filesystem 
 during off hours to make sure it hasn't been corrupted due to 
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index 4f66d42..41a0638 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -25,7 +25,7 @@
  * 94/03/06	- Added the checks interval from Uwe Ohse (uwe@tirka.gun.de)
  */
 
-#define _XOPEN_SOURCE 500 /* for inclusion of strptime() */
+#define _XOPEN_SOURCE 600 /* for inclusion of strptime() */
 #define _BSD_SOURCE /* for inclusion of strcasecmp() */
 #include <fcntl.h>
 #include <grp.h>
@@ -37,11 +37,15 @@
 #endif
 #include <pwd.h>
 #include <stdio.h>
+#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <libgen.h>
+#include <limits.h>
 
 #include "ext2fs/ext2_fs.h"
 #include "ext2fs/ext2fs.h"
@@ -55,22 +59,13 @@
 #include "../version.h"
 #include "nls-enable.h"
 
-/* 
- * Tune2fs supports these features in addition to the standard features.
- */
-#define EXT2_TUNE2FS_INCOMPAT	(EXT3_FEATURE_INCOMPAT_EXTENTS)
-#define EXT2_TUNE2FS_RO_COMPAT	(EXT4_FEATURE_RO_COMPAT_HUGE_FILE|\
-				 EXT4_FEATURE_RO_COMPAT_GDT_CSUM|	\
-				 EXT4_FEATURE_RO_COMPAT_DIR_NLINK|	\
-				 EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)
-
-
-const char * program_name = "tune2fs";
-char * device_name;
-char * new_label, *new_last_mounted, *new_UUID;
-char * io_options;
+const char *program_name = "tune2fs";
+char *device_name;
+char *new_label, *new_last_mounted, *new_UUID;
+char *io_options;
 static int c_flag, C_flag, e_flag, f_flag, g_flag, i_flag, l_flag, L_flag;
 static int m_flag, M_flag, r_flag, s_flag = -1, u_flag, U_flag, T_flag;
+static int I_flag;
 static time_t last_check_time;
 static int print_label;
 static int max_mount_count, mount_count, mount_flags;
@@ -84,13 +79,25 @@
 static int stride, stripe_width;
 static int stride_set, stripe_width_set;
 static char *extended_cmd;
+static unsigned long new_inode_size;
 
 int journal_size, journal_flags;
 char *journal_device;
 
+static struct list_head blk_move_list;
+
+struct blk_move {
+	struct list_head list;
+	blk_t old_loc;
+	blk_t new_loc;
+};
+
+
 static const char *please_fsck = N_("Please run e2fsck on the filesystem.\n");
 
+#ifdef CONFIG_BUILD_FINDFS
 void do_findfs(int argc, char **argv);
+#endif
 
 static void usage(void)
 {
@@ -104,8 +111,8 @@
 		  "[-L volume_label]\n"
 		  "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 		  "\t[-E extended-option[,...]] [-T last_check_time] "
-		  "[-U UUID] device\n"), program_name);
-	exit (1);
+		  "[-U UUID]\n\t[ -I new_inode_size ] device\n"), program_name);
+	exit(1);
 }
 
 static __u32 ok_features[3] = {
@@ -113,9 +120,15 @@
 	EXT3_FEATURE_COMPAT_HAS_JOURNAL |
 		EXT2_FEATURE_COMPAT_DIR_INDEX,
 	/* Incompat */
-	EXT2_FEATURE_INCOMPAT_FILETYPE,
+	EXT2_FEATURE_INCOMPAT_FILETYPE |
+		EXT3_FEATURE_INCOMPAT_EXTENTS |
+		EXT4_FEATURE_INCOMPAT_FLEX_BG,
 	/* R/O compat */
 	EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+		EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+		EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
+		EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
+		EXT4_FEATURE_RO_COMPAT_GDT_CSUM |
 		EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
 };
 
@@ -125,9 +138,14 @@
 		EXT2_FEATURE_COMPAT_RESIZE_INODE |
 		EXT2_FEATURE_COMPAT_DIR_INDEX,
 	/* Incompat */
-	EXT2_FEATURE_INCOMPAT_FILETYPE,
+	EXT2_FEATURE_INCOMPAT_FILETYPE |
+		EXT4_FEATURE_INCOMPAT_FLEX_BG,
 	/* R/O compat */
-	EXT2_FEATURE_RO_COMPAT_LARGE_FILE
+	EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+		EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+		EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
+		EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
+		EXT4_FEATURE_RO_COMPAT_GDT_CSUM
 };
 
 /*
@@ -158,11 +176,12 @@
 	}
 
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
+		io_ptr = unix_io_manager;
 	retval = ext2fs_open(journal_path, EXT2_FLAG_RW|
 			     EXT2_FLAG_JOURNAL_DEV_OK, 0,
 			     fs->blocksize, io_ptr, &jfs);
@@ -193,19 +212,19 @@
 
 	/* Find the filesystem UUID */
 	nr_users = ntohl(jsb->s_nr_users);
-	for (i=0; i < nr_users; i++) {
+	for (i = 0; i < nr_users; i++) {
 		if (memcmp(fs->super->s_uuid,
 			   &jsb->s_users[i*16], 16) == 0)
 			break;
 	}
 	if (i >= nr_users) {
-		fputs(_("Filesystem's UUID not found on journal device.\n"), 
+		fputs(_("Filesystem's UUID not found on journal device.\n"),
 		      stderr);
 		commit_remove_journal = 1;
 		goto no_valid_journal;
 	}
 	nr_users--;
-	for (i=0; i < nr_users; i++)
+	for (i = 0; i < nr_users; i++)
 		memcpy(&jsb->s_users[i*16], &jsb->s_users[(i+1)*16], 16);
 	jsb->s_nr_users = htonl(nr_users);
 
@@ -232,16 +251,17 @@
 
 /* Helper function for remove_journal_inode */
 static int release_blocks_proc(ext2_filsys fs, blk_t *blocknr,
-			       int blockcnt EXT2FS_ATTR((unused)), 
+			       int blockcnt EXT2FS_ATTR((unused)),
 			       void *private EXT2FS_ATTR((unused)))
 {
 	blk_t	block;
 	int	group;
 
 	block = *blocknr;
-	ext2fs_unmark_block_bitmap(fs->block_map,block);
+	ext2fs_unmark_block_bitmap(fs->block_map, block);
 	group = ext2fs_group_of_blk(fs, block);
 	fs->group_desc[group].bg_free_blocks_count++;
+	ext2fs_group_desc_csum_set(fs, group);
 	fs->super->s_free_blocks_count++;
 	return 0;
 }
@@ -254,7 +274,7 @@
 	struct ext2_inode	inode;
 	errcode_t		retval;
 	ino_t			ino = fs->super->s_journal_inum;
-	
+
 	retval = ext2fs_read_inode(fs, ino,  &inode);
 	if (retval) {
 		com_err(program_name, retval,
@@ -268,7 +288,8 @@
 				_("while reading bitmaps"));
 			exit(1);
 		}
-		retval = ext2fs_block_iterate(fs, ino, 0, NULL,
+		retval = ext2fs_block_iterate(fs, ino,
+					      BLOCK_FLAG_READ_ONLY, NULL,
 					      release_blocks_proc, NULL);
 		if (retval) {
 			com_err(program_name, retval,
@@ -295,7 +316,7 @@
  */
 static void update_mntopts(ext2_filsys fs, char *mntopts)
 {
-	struct ext2_super_block *sb= fs->super;
+	struct ext2_super_block *sb = fs->super;
 
 	if (e2p_edit_mntopts(mntopts, &sb->s_default_mount_opts, ~0)) {
 		fprintf(stderr, _("Invalid mount option set: %s\n"),
@@ -310,8 +331,7 @@
  */
 static void update_feature_set(ext2_filsys fs, char *features)
 {
-	struct ext2_super_block *sb= fs->super;
-	__u32	old_compat, old_incompat, old_ro_compat;
+	struct ext2_super_block *sb = fs->super;
 	__u32		old_features[3];
 	int		type_err;
 	unsigned int	mask_err;
@@ -350,7 +370,7 @@
 	if (FEATURE_OFF(E2P_FEATURE_COMPAT, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
 		if ((mount_flags & EXT2_MF_MOUNTED) &&
 		    !(mount_flags & EXT2_MF_READONLY)) {
-			fputs(_("The has_journal flag may only be "
+			fputs(_("The has_journal feature may only be "
 				"cleared when the filesystem is\n"
 				"unmounted or mounted "
 				"read-only.\n"), stderr);
@@ -374,9 +394,8 @@
 	if (FEATURE_ON(E2P_FEATURE_COMPAT, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
 		/*
 		 * If adding a journal flag, let the create journal
-		 * code below handle creating setting the flag and
-		 * creating the journal.  We supply a default size if
-		 * necessary.
+		 * code below handle setting the flag and creating the
+		 * journal.  We supply a default size if necessary.
 		 */
 		if (!journal_size)
 			journal_size = -1;
@@ -385,11 +404,32 @@
 
 	if (FEATURE_ON(E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_DIR_INDEX)) {
 		if (!sb->s_def_hash_version)
-			sb->s_def_hash_version = EXT2_HASH_TEA;
+			sb->s_def_hash_version = EXT2_HASH_HALF_MD4;
 		if (uuid_is_null((unsigned char *) sb->s_hash_seed))
 			uuid_generate((unsigned char *) sb->s_hash_seed);
 	}
 
+	if (FEATURE_OFF(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+		if (ext2fs_check_desc(fs)) {
+			fputs(_("Clearing the flex_bg flag would "
+				"cause the the filesystem to be\n"
+				"inconsistent.\n"), stderr);
+			exit(1);
+		}
+	}
+
+	if (FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
+			    EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) {
+		if ((mount_flags & EXT2_MF_MOUNTED) &&
+		    !(mount_flags & EXT2_MF_READONLY)) {
+			fputs(_("The huge_file feature may only be "
+				"cleared when the filesystem is\n"
+				"unmounted or mounted "
+				"read-only.\n"), stderr);
+			exit(1);
+		}
+	}
+
 	if (sb->s_rev_level == EXT2_GOOD_OLD_REV &&
 	    (sb->s_feature_compat || sb->s_feature_ro_compat ||
 	     sb->s_feature_incompat))
@@ -397,6 +437,10 @@
 
 	if (FEATURE_CHANGED(E2P_FEATURE_RO_INCOMPAT,
 			    EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER) ||
+	    FEATURE_CHANGED(E2P_FEATURE_RO_INCOMPAT,
+			    EXT4_FEATURE_RO_COMPAT_GDT_CSUM) ||
+	    FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
+			EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
 	    FEATURE_CHANGED(E2P_FEATURE_INCOMPAT,
 			    EXT2_FEATURE_INCOMPAT_FILETYPE) ||
 	    FEATURE_CHANGED(E2P_FEATURE_COMPAT,
@@ -405,6 +449,8 @@
 			EXT2_FEATURE_RO_COMPAT_LARGE_FILE)) {
 		sb->s_state &= ~EXT2_VALID_FS;
 		printf("\n%s\n", _(please_fsck));
+		if (mount_flags & EXT2_MF_READONLY)
+			printf(_("(and reboot afterwards!)\n"));
 	}
 
 	if ((old_features[E2P_FEATURE_COMPAT] != sb->s_feature_compat) ||
@@ -432,11 +478,12 @@
 		check_plausibility(journal_device);
 		check_mount(journal_device, 0, _("journal"));
 #ifdef CONFIG_TESTIO_DEBUG
-		io_ptr = test_io_manager;
-		test_io_backing_manager = unix_io_manager;
-#else
-		io_ptr = unix_io_manager;
+		if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+			io_ptr = test_io_manager;
+			test_io_backing_manager = unix_io_manager;
+		} else
 #endif
+			io_ptr = unix_io_manager;
 		retval = ext2fs_open(journal_device, EXT2_FLAG_RW|
 				     EXT2_FLAG_JOURNAL_DEV_OK, 0,
 				     fs->blocksize, io_ptr, &jfs);
@@ -453,9 +500,9 @@
 		retval = ext2fs_add_journal_device(fs, jfs);
 		ext2fs_close(jfs);
 		if (retval) {
-			com_err (program_name, retval,
-				 _("while adding filesystem to journal on %s"),
-				 journal_device);
+			com_err(program_name, retval,
+				_("while adding filesystem to journal on %s"),
+				journal_device);
 			goto err;
 		}
 		fputs(_("done\n"), stdout);
@@ -484,8 +531,7 @@
 	return;
 
 err:
-	if (journal_device)
-		free(journal_device);
+	free(journal_device);
 	exit(1);
 }
 
@@ -501,16 +547,16 @@
 		*io_options++ = 0;
 	device_name = blkid_get_devname(NULL, argv[1], NULL);
 	if (!device_name) {
-		com_err("e2label", 0, _("Unable to resolve '%s'"), 
+		com_err("e2label", 0, _("Unable to resolve '%s'"),
 			argv[1]);
 		exit(1);
 	}
-	open_flag = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_JOURNAL_DEV_OK;
+	open_flag = EXT2_FLAG_JOURNAL_DEV_OK;
 	if (argc == 3) {
 		open_flag |= EXT2_FLAG_RW;
 		L_flag = 1;
 		new_label = argv[2];
-	} else 
+	} else
 		print_label++;
 }
 
@@ -540,198 +586,199 @@
 			str);
 		usage();
 	}
+	ts.tm_isdst = -1;
 	return (mktime(&ts));
 }
 
 static void parse_tune2fs_options(int argc, char **argv)
 {
 	int c;
-	char * tmp;
-	struct group * gr;
-	struct passwd * pw;
+	char *tmp;
+	struct group *gr;
+	struct passwd *pw;
 
-	open_flag = EXT2_FLAG_SOFTSUPP_FEATURES;
+	open_flag = 0;
 
 	printf("tune2fs %s (%s)\n", E2FSPROGS_VERSION, E2FSPROGS_DATE);
-	while ((c = getopt(argc, argv, "c:e:fg:i:jlm:o:r:s:u:C:E:J:L:M:O:T:U:")) != EOF)
-		switch (c)
-		{
-			case 'c':
-				max_mount_count = strtol (optarg, &tmp, 0);
-				if (*tmp || max_mount_count > 16000) {
-					com_err (program_name, 0,
-						 _("bad mounts count - %s"),
-						 optarg);
-					usage();
-				}
-				if (max_mount_count == 0)
-					max_mount_count = -1;
-				c_flag = 1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'C':
-				mount_count = strtoul (optarg, &tmp, 0);
-				if (*tmp || mount_count > 16000) {
-					com_err (program_name, 0,
-						 _("bad mounts count - %s"),
-						 optarg);
-					usage();
-				}
-				C_flag = 1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'e':
-				if (strcmp (optarg, "continue") == 0)
-					errors = EXT2_ERRORS_CONTINUE;
-				else if (strcmp (optarg, "remount-ro") == 0)
-					errors = EXT2_ERRORS_RO;
-				else if (strcmp (optarg, "panic") == 0)
-					errors = EXT2_ERRORS_PANIC;
+	while ((c = getopt(argc, argv, "c:e:fg:i:jlm:o:r:s:u:C:E:I:J:L:M:O:T:U:")) != EOF)
+		switch (c) {
+		case 'c':
+			max_mount_count = strtol(optarg, &tmp, 0);
+			if (*tmp || max_mount_count > 16000) {
+				com_err(program_name, 0,
+					_("bad mounts count - %s"),
+					optarg);
+				usage();
+			}
+			if (max_mount_count == 0)
+				max_mount_count = -1;
+			c_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'C':
+			mount_count = strtoul(optarg, &tmp, 0);
+			if (*tmp || mount_count > 16000) {
+				com_err(program_name, 0,
+					_("bad mounts count - %s"),
+					optarg);
+				usage();
+			}
+			C_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'e':
+			if (strcmp(optarg, "continue") == 0)
+				errors = EXT2_ERRORS_CONTINUE;
+			else if (strcmp(optarg, "remount-ro") == 0)
+				errors = EXT2_ERRORS_RO;
+			else if (strcmp(optarg, "panic") == 0)
+				errors = EXT2_ERRORS_PANIC;
+			else {
+				com_err(program_name, 0,
+					_("bad error behavior - %s"),
+					optarg);
+				usage();
+			}
+			e_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'E':
+			extended_cmd = optarg;
+			open_flag |= EXT2_FLAG_RW;
+			break;
+		case 'f': /* Force */
+			f_flag = 1;
+			break;
+		case 'g':
+			resgid = strtoul(optarg, &tmp, 0);
+			if (*tmp) {
+				gr = getgrnam(optarg);
+				if (gr == NULL)
+					tmp = optarg;
 				else {
-					com_err (program_name, 0,
-						 _("bad error behavior - %s"),
-						 optarg);
-					usage();
+					resgid = gr->gr_gid;
+					*tmp = 0;
 				}
-				e_flag = 1;
-				open_flag = EXT2_FLAG_RW;
+			}
+			if (*tmp) {
+				com_err(program_name, 0,
+					_("bad gid/group name - %s"),
+					optarg);
+				usage();
+			}
+			g_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'i':
+			interval = strtoul(optarg, &tmp, 0);
+			switch (*tmp) {
+			case 's':
+				tmp++;
 				break;
-			case 'E':
-				extended_cmd = optarg;
-				open_flag |= EXT2_FLAG_RW;
-				break;
-			case 'f': /* Force */
-				f_flag = 1;
-				break;
-			case 'g':
-				resgid = strtoul (optarg, &tmp, 0);
-				if (*tmp) {
-					gr = getgrnam (optarg);
-					if (gr == NULL)
-						tmp = optarg;
-					else {
-						resgid = gr->gr_gid;
-						*tmp =0;
-					}
-				}
-				if (*tmp) {
-					com_err (program_name, 0,
-						 _("bad gid/group name - %s"),
-						 optarg);
-					usage();
-				}
-				g_flag = 1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'i':
-				interval = strtoul (optarg, &tmp, 0);
-				switch (*tmp) {
-				case 's':
+			case '\0':
+			case 'd':
+			case 'D': /* days */
+				interval *= 86400;
+				if (*tmp != '\0')
 					tmp++;
-					break;
-				case '\0':
-				case 'd':
-				case 'D': /* days */
-					interval *= 86400;
-					if (*tmp != '\0')
-						tmp++;
-					break;
-				case 'm':
-				case 'M': /* months! */
-					interval *= 86400 * 30;
-					tmp++;
-					break;
-				case 'w':
-				case 'W': /* weeks */
-					interval *= 86400 * 7;
-					tmp++;
-					break;
-				}
-				if (*tmp) {
-					com_err (program_name, 0,
-						_("bad interval - %s"), optarg);
-					usage();
-				}
-				i_flag = 1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'j':
-				if (!journal_size)
-					journal_size = -1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'J':
-				parse_journal_opts(optarg);
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'l':
-				l_flag = 1;
-				break;
-			case 'L':
-				new_label = optarg;
-				L_flag = 1;
-				open_flag |= EXT2_FLAG_RW |
-					EXT2_FLAG_JOURNAL_DEV_OK;
 				break;
 			case 'm':
-				reserved_ratio = strtod(optarg, &tmp);
-				if (*tmp || reserved_ratio > 50) {
-					com_err (program_name, 0,
-						 _("bad reserved block ratio - %s"),
-						 optarg);
-					usage();
-				}
-				m_flag = 1;
-				open_flag = EXT2_FLAG_RW;
+			case 'M': /* months! */
+				interval *= 86400 * 30;
+				tmp++;
 				break;
-			case 'M':
-				new_last_mounted = optarg;
-				M_flag = 1;
-				open_flag = EXT2_FLAG_RW;
+			case 'w':
+			case 'W': /* weeks */
+				interval *= 86400 * 7;
+				tmp++;
 				break;
-			case 'o':
-				if (mntopts_cmd) {
-					com_err (program_name, 0,
-					 _("-o may only be specified once"));
-					usage();
-				}
-				mntopts_cmd = optarg;
-				open_flag = EXT2_FLAG_RW;
-				break;
-				
-			case 'O':
-				if (features_cmd) {
-					com_err (program_name, 0,
-					 _("-O may only be specified once"));
-					usage();
-				}
-				features_cmd = optarg;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'r':
-				reserved_blocks = strtoul (optarg, &tmp, 0);
+			}
+			if (*tmp) {
+				com_err(program_name, 0,
+					_("bad interval - %s"), optarg);
+				usage();
+			}
+			i_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'j':
+			if (!journal_size)
+				journal_size = -1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'J':
+			parse_journal_opts(optarg);
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'l':
+			l_flag = 1;
+			break;
+		case 'L':
+			new_label = optarg;
+			L_flag = 1;
+			open_flag |= EXT2_FLAG_RW |
+				EXT2_FLAG_JOURNAL_DEV_OK;
+			break;
+		case 'm':
+			reserved_ratio = strtod(optarg, &tmp);
+			if (*tmp || reserved_ratio > 50 ||
+			    reserved_ratio < 0) {
+				com_err(program_name, 0,
+					_("bad reserved block ratio - %s"),
+					optarg);
+				usage();
+			}
+			m_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'M':
+			new_last_mounted = optarg;
+			M_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'o':
+			if (mntopts_cmd) {
+				com_err(program_name, 0,
+					_("-o may only be specified once"));
+				usage();
+			}
+			mntopts_cmd = optarg;
+			open_flag = EXT2_FLAG_RW;
+			break;
+			
+		case 'O':
+			if (features_cmd) {
+				com_err(program_name, 0,
+					_("-O may only be specified once"));
+				usage();
+			}
+			features_cmd = optarg;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'r':
+			reserved_blocks = strtoul(optarg, &tmp, 0);
+			if (*tmp) {
+				com_err(program_name, 0,
+					_("bad reserved blocks count - %s"),
+					optarg);
+				usage();
+			}
+			r_flag = 1;
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 's': /* Deprecated */
+			s_flag = atoi(optarg);
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'T':
+			T_flag = 1;
+			last_check_time = parse_time(optarg);
+			open_flag = EXT2_FLAG_RW;
+			break;
+		case 'u':
+				resuid = strtoul(optarg, &tmp, 0);
 				if (*tmp) {
-					com_err (program_name, 0,
-						 _("bad reserved blocks count - %s"),
-						 optarg);
-					usage();
-				}
-				r_flag = 1;
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 's': /* Deprecated */
-				s_flag = atoi(optarg);
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'T':
-				T_flag = 1;
-				last_check_time = parse_time(optarg);
-				open_flag = EXT2_FLAG_RW;
-				break;
-			case 'u':
-				resuid = strtoul (optarg, &tmp, 0);
-				if (*tmp) {
-					pw = getpwnam (optarg);
+					pw = getpwnam(optarg);
 					if (pw == NULL)
 						tmp = optarg;
 					else {
@@ -740,22 +787,41 @@
 					}
 				}
 				if (*tmp) {
-					com_err (program_name, 0,
-						 _("bad uid/user name - %s"),
-						 optarg);
+					com_err(program_name, 0,
+						_("bad uid/user name - %s"),
+						optarg);
 					usage();
 				}
 				u_flag = 1;
 				open_flag = EXT2_FLAG_RW;
 				break;
-			case 'U':
-				new_UUID = optarg;
-				U_flag = 1;
-				open_flag = EXT2_FLAG_RW |
-					EXT2_FLAG_JOURNAL_DEV_OK;
-				break;
-			default:
+		case 'U':
+			new_UUID = optarg;
+			U_flag = 1;
+			open_flag = EXT2_FLAG_RW |
+				EXT2_FLAG_JOURNAL_DEV_OK;
+			break;
+		case 'I':
+			new_inode_size = strtoul(optarg, &tmp, 0);
+			if (*tmp) {
+				com_err(program_name, 0,
+					_("bad inode size - %s"),
+					optarg);
 				usage();
+			}
+			if (!((new_inode_size &
+			       (new_inode_size - 1)) == 0)) {
+				com_err(program_name, 0,
+					_("Inode size must be a "
+					  "power of two- %s"),
+					optarg);
+				usage();
+			}
+			open_flag = EXT2_FLAG_RW;
+			I_flag = 1;
+			break;
+		default:
+			usage();
 		}
 	if (optind < argc - 1 || optind == argc)
 		usage();
@@ -766,12 +832,13 @@
 		*io_options++ = 0;
 	device_name = blkid_get_devname(NULL, argv[optind], NULL);
 	if (!device_name) {
-		com_err("tune2fs", 0, _("Unable to resolve '%s'"), 
+		com_err("tune2fs", 0, _("Unable to resolve '%s'"),
 			argv[optind]);
 		exit(1);
 	}
 }
 
+#ifdef CONFIG_BUILD_FINDFS
 void do_findfs(int argc, char **argv)
 {
 	char	*dev;
@@ -783,24 +850,19 @@
 	}
 	dev = blkid_get_devname(NULL, argv[1], NULL);
 	if (!dev) {
-		com_err("findfs", 0, _("Unable to resolve '%s'"), 
+		com_err("findfs", 0, _("Unable to resolve '%s'"),
 			argv[1]);
 		exit(1);
 	}
 	puts(dev);
 	exit(0);
 }
+#endif
 
-/*
- * Note!  If any extended options are incompatible with the
- * intersection of the SOFTSUPP features and those features explicitly
- * enabled for tune2fs, there needs to be an explicit test for them
- * here.
- */
 static void parse_extended_opts(ext2_filsys fs, const char *opts)
 {
 	char	*buf, *token, *next, *p, *arg;
-	int	len;
+	int	len, hash_alg;
 	int	r_usage = 0;
 
 	len = strlen(opts);
@@ -860,7 +922,26 @@
 				continue;
 			}
 			stripe_width_set = 1;
-		} else 
+		} else if (strcmp(token, "hash_alg") == 0 ||
+			   strcmp(token, "hash-alg") == 0) {
+			if (!arg) {
+				r_usage++;
+				continue;
+			}
+			hash_alg = e2p_string2hash(arg);
+			if (hash_alg < 0) {
+				fprintf(stderr,
+					_("Invalid hash algorithm: %s\n"),
+					arg);
+				r_usage++;
+				continue;
+			}
+			fs->super->s_def_hash_version = hash_alg;
+			printf(_("Setting default hash algorithm "
+				 "to %s (%d)\n"),
+			       arg, hash_alg);
+			ext2fs_mark_super_dirty(fs);
+		} else
 			r_usage++;
 	}
 	if (r_usage) {
@@ -870,22 +951,592 @@
 			"\tis set off by an equals ('=') sign.\n\n"
 			"Valid extended options are:\n"
 			"\tstride=<RAID per-disk chunk size in blocks>\n"
-			"\tstripe-width=<RAID stride*data disks in blocks>\n"
+			"\tstripe_width=<RAID stride*data disks in blocks>\n"
+			"\thash_alg=<hash algorithm>\n"
 			"\ttest_fs\n"
 			"\t^test_fs\n"));
 		free(buf);
 		exit(1);
 	}
 	free(buf);
-}	
+}
+
+/*
+ * Fill in the block bitmap bmap with the information regarding the
+ * blocks to be moved
+ */
+static int get_move_bitmaps(ext2_filsys fs, int new_ino_blks_per_grp,
+			    ext2fs_block_bitmap bmap)
+{
+	dgrp_t i;
+	int retval;
+	ext2_badblocks_list bb_list = 0;
+	blk_t j, needed_blocks = 0;
+	blk_t start_blk, end_blk;
+
+	retval = ext2fs_read_bb_inode(fs, &bb_list);
+	if (retval)
+		return retval;
+
+	for (i = 0; i < fs->group_desc_count; i++) {
+		start_blk = fs->group_desc[i].bg_inode_table +
+					fs->inode_blocks_per_group;
+
+		end_blk = fs->group_desc[i].bg_inode_table +
+					new_ino_blks_per_grp;
+
+		for (j = start_blk; j < end_blk; j++) {
+			if (ext2fs_test_block_bitmap(fs->block_map, j)) {
+				/*
+				 * IF the block is a bad block we fail
+				 */
+				if (ext2fs_badblocks_list_test(bb_list, j)) {
+					ext2fs_badblocks_list_free(bb_list);
+					return ENOSPC;
+				}
+
+				ext2fs_mark_block_bitmap(bmap, j);
+			} else {
+				/*
+				 * We are going to use this block for
+				 * inode table. So mark them used.
+				 */
+				ext2fs_mark_block_bitmap(fs->block_map, j);
+			}
+		}
+		needed_blocks += end_blk - start_blk;
+	}
+
+	ext2fs_badblocks_list_free(bb_list);
+	if (needed_blocks > fs->super->s_free_blocks_count)
+		return ENOSPC;
+
+	return 0;
+}
+
+static int ext2fs_is_meta_block(ext2_filsys fs, blk_t blk)
+{
+	dgrp_t group;
+	group = ext2fs_group_of_blk(fs, blk);
+	if (fs->group_desc[group].bg_block_bitmap == blk)
+		return 1;
+	if (fs->group_desc[group].bg_inode_bitmap == blk)
+		return 1;
+	return 0;
+}
+
+static int ext2fs_is_block_in_group(ext2_filsys fs, dgrp_t group, blk_t blk)
+{
+	blk_t start_blk, end_blk;
+	start_blk = fs->super->s_first_data_block +
+			EXT2_BLOCKS_PER_GROUP(fs->super) * group;
+	/*
+	 * We cannot get new block beyond end_blk for for the last block group
+	 * so we can check with EXT2_BLOCKS_PER_GROUP even for last block group
+	 */
+	end_blk   = start_blk + EXT2_BLOCKS_PER_GROUP(fs->super);
+	if (blk >= start_blk && blk <= end_blk)
+		return 1;
+	return 0;
+}
+
+static int move_block(ext2_filsys fs, ext2fs_block_bitmap bmap)
+{
+
+	char *buf;
+	dgrp_t group;
+	errcode_t retval;
+	int meta_data = 0;
+	blk_t blk, new_blk, goal;
+	struct blk_move *bmv;
+
+	retval = ext2fs_get_mem(fs->blocksize, &buf);
+	if (retval)
+		return retval;
+
+	for (new_blk = blk = fs->super->s_first_data_block;
+	     blk < fs->super->s_blocks_count; blk++) {
+		if (!ext2fs_test_block_bitmap(bmap, blk))
+			continue;
+
+		if (ext2fs_is_meta_block(fs, blk)) {
+			/*
+			 * If the block is mapping a fs meta data block
+			 * like group desc/block bitmap/inode bitmap. We
+			 * should find a block in the same group and fix
+			 * the respective fs metadata pointers. Otherwise
+			 * fail
+			 */
+			group = ext2fs_group_of_blk(fs, blk);
+			goal = ext2fs_group_first_block(fs, group);
+			meta_data = 1;
+
+		} else {
+			goal = new_blk;
+		}
+		retval = ext2fs_new_block(fs, goal, NULL, &new_blk);
+		if (retval)
+			goto err_out;
+
+		/* new fs meta data block should be in the same group */
+		if (meta_data && !ext2fs_is_block_in_group(fs, group, new_blk)) {
+			retval = ENOSPC;
+			goto err_out;
+		}
+
+		/* Mark this block as allocated */
+		ext2fs_mark_block_bitmap(fs->block_map, new_blk);
+
+		/* Add it to block move list */
+		retval = ext2fs_get_mem(sizeof(struct blk_move), &bmv);
+		if (retval)
+			goto err_out;
+
+		bmv->old_loc = blk;
+		bmv->new_loc = new_blk;
+
+		list_add(&(bmv->list), &blk_move_list);
+
+		retval = io_channel_read_blk(fs->io, blk, 1, buf);
+		if (retval)
+			goto err_out;
+
+		retval = io_channel_write_blk(fs->io, new_blk, 1, buf);
+		if (retval)
+			goto err_out;
+	}
+
+err_out:
+	ext2fs_free_mem(&buf);
+	return retval;
+}
+
+static blk_t translate_block(blk_t blk)
+{
+	struct list_head *entry;
+	struct blk_move *bmv;
+
+	list_for_each(entry, &blk_move_list) {
+		bmv = list_entry(entry, struct blk_move, list);
+		if (bmv->old_loc == blk)
+			return bmv->new_loc;
+	}
+
+	return 0;
+}
+
+static int process_block(ext2_filsys fs EXT2FS_ATTR((unused)),
+			 blk_t *block_nr,
+			 e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)),
+			 blk_t ref_block EXT2FS_ATTR((unused)),
+			 int ref_offset EXT2FS_ATTR((unused)),
+			 void *priv_data)
+{
+	int ret = 0;
+	blk_t new_blk;
+	ext2fs_block_bitmap bmap = (ext2fs_block_bitmap) priv_data;
+
+	if (!ext2fs_test_block_bitmap(bmap, *block_nr))
+		return 0;
+	new_blk = translate_block(*block_nr);
+	if (new_blk) {
+		*block_nr = new_blk;
+		/*
+		 * This will force the ext2fs_write_inode in the iterator
+		 */
+		ret |= BLOCK_CHANGED;
+	}
+
+	return ret;
+}
+
+static int inode_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap)
+{
+	errcode_t retval = 0;
+	ext2_ino_t ino;
+	blk_t blk;
+	char *block_buf = 0;
+	struct ext2_inode inode;
+	ext2_inode_scan	scan = NULL;
+
+	retval = ext2fs_get_mem(fs->blocksize * 3, &block_buf);
+	if (retval)
+		return retval;
+
+	retval = ext2fs_open_inode_scan(fs, 0, &scan);
+	if (retval)
+		goto err_out;
+
+	while (1) {
+		retval = ext2fs_get_next_inode(scan, &ino, &inode);
+		if (retval)
+			goto err_out;
+
+		if (!ino)
+			break;
+
+		if (inode.i_links_count == 0)
+			continue; /* inode not in use */
+
+		/* FIXME!!
+		 * If we end up modifying the journal inode
+		 * the sb->s_jnl_blocks will differ. But a
+		 * subsequent e2fsck fixes that.
+		 * Do we need to fix this ??
+		 */
+
+		if (inode.i_file_acl &&
+		    ext2fs_test_block_bitmap(bmap, inode.i_file_acl)) {
+			blk = translate_block(inode.i_file_acl);
+			if (!blk)
+				continue;
+
+			inode.i_file_acl = blk;
+
+			/*
+			 * Write the inode to disk so that inode table
+			 * resizing can work
+			 */
+			retval = ext2fs_write_inode(fs, ino, &inode);
+			if (retval)
+				goto err_out;
+		}
+
+		if (!ext2fs_inode_has_valid_blocks(&inode))
+			continue;
+
+		retval = ext2fs_block_iterate2(fs, ino, 0, block_buf,
+					       process_block, bmap);
+		if (retval)
+			goto err_out;
+
+	}
+
+err_out:
+	ext2fs_free_mem(&block_buf);
+
+	return retval;
+}
+
+/*
+ * We need to scan for inode and block bitmaps that may need to be
+ * moved.  This can take place if the filesystem was formatted for
+ * RAID arrays using the mke2fs's extended option "stride".
+ */
+static int group_desc_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap)
+{
+	dgrp_t i;
+	blk_t blk, new_blk;
+
+	for (i = 0; i < fs->group_desc_count; i++) {
+		blk = fs->group_desc[i].bg_block_bitmap;
+		if (ext2fs_test_block_bitmap(bmap, blk)) {
+			new_blk = translate_block(blk);
+			if (!new_blk)
+				continue;
+			fs->group_desc[i].bg_block_bitmap = new_blk;
+		}
+
+		blk = fs->group_desc[i].bg_inode_bitmap;
+		if (ext2fs_test_block_bitmap(bmap, blk)) {
+			new_blk = translate_block(blk);
+			if (!new_blk)
+				continue;
+			fs->group_desc[i].bg_inode_bitmap = new_blk;
+		}
+	}
+	return 0;
+}
+
+static int expand_inode_table(ext2_filsys fs, unsigned long new_ino_size)
+{
+	dgrp_t i;
+	blk_t blk;
+	errcode_t retval;
+	int new_ino_blks_per_grp;
+	unsigned int j;
+	char *old_itable = NULL, *new_itable = NULL;
+	char *tmp_old_itable = NULL, *tmp_new_itable = NULL;
+	unsigned long old_ino_size;
+	int old_itable_size, new_itable_size;
+
+	old_itable_size = fs->inode_blocks_per_group * fs->blocksize;
+	old_ino_size = EXT2_INODE_SIZE(fs->super);
+
+	new_ino_blks_per_grp = ext2fs_div_ceil(
+					EXT2_INODES_PER_GROUP(fs->super) *
+					new_ino_size,
+					fs->blocksize);
+
+	new_itable_size = new_ino_blks_per_grp * fs->blocksize;
+
+	retval = ext2fs_get_mem(old_itable_size, &old_itable);
+	if (retval)
+		return retval;
+
+	retval = ext2fs_get_mem(new_itable_size, &new_itable);
+	if (retval)
+		goto err_out;
+
+	tmp_old_itable = old_itable;
+	tmp_new_itable = new_itable;
+
+	for (i = 0; i < fs->group_desc_count; i++) {
+		blk = fs->group_desc[i].bg_inode_table;
+		retval = io_channel_read_blk(fs->io, blk,
+				fs->inode_blocks_per_group, old_itable);
+		if (retval)
+			goto err_out;
+
+		for (j = 0; j < EXT2_INODES_PER_GROUP(fs->super); j++) {
+			memcpy(new_itable, old_itable, old_ino_size);
+
+			memset(new_itable+old_ino_size, 0,
+					new_ino_size - old_ino_size);
+
+			new_itable += new_ino_size;
+			old_itable += old_ino_size;
+		}
+
+		/* reset the pointer */
+		old_itable = tmp_old_itable;
+		new_itable = tmp_new_itable;
+
+		retval = io_channel_write_blk(fs->io, blk,
+					new_ino_blks_per_grp, new_itable);
+		if (retval)
+			goto err_out;
+	}
+
+	/* Update the meta data */
+	fs->inode_blocks_per_group = new_ino_blks_per_grp;
+	fs->super->s_inode_size = new_ino_size;
+
+err_out:
+	if (old_itable)
+		ext2fs_free_mem(&old_itable);
+
+	if (new_itable)
+		ext2fs_free_mem(&new_itable);
+
+	return retval;
+}
+
+static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
+{
+	blk_t		blk;
+	ext2_ino_t	ino;
+	unsigned int	group = 0;
+	unsigned int	count = 0;
+	int		total_free = 0;
+	int		group_free = 0;
+
+	/*
+	 * First calculate the block statistics
+	 */
+	for (blk = fs->super->s_first_data_block;
+	     blk < fs->super->s_blocks_count; blk++) {
+		if (!ext2fs_fast_test_block_bitmap(fs->block_map, blk)) {
+			group_free++;
+			total_free++;
+		}
+		count++;
+		if ((count == fs->super->s_blocks_per_group) ||
+		    (blk == fs->super->s_blocks_count-1)) {
+			fs->group_desc[group++].bg_free_blocks_count =
+				group_free;
+			count = 0;
+			group_free = 0;
+		}
+	}
+	fs->super->s_free_blocks_count = total_free;
+
+	/*
+	 * Next, calculate the inode statistics
+	 */
+	group_free = 0;
+	total_free = 0;
+	count = 0;
+	group = 0;
+
+	/* Protect loop from wrap-around if s_inodes_count maxed */
+	for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
+		if (!ext2fs_fast_test_inode_bitmap(fs->inode_map, ino)) {
+			group_free++;
+			total_free++;
+		}
+		count++;
+		if ((count == fs->super->s_inodes_per_group) ||
+		    (ino == fs->super->s_inodes_count)) {
+			fs->group_desc[group++].bg_free_inodes_count =
+				group_free;
+			count = 0;
+			group_free = 0;
+		}
+	}
+	fs->super->s_free_inodes_count = total_free;
+	ext2fs_mark_super_dirty(fs);
+	return 0;
+}
+
+#define list_for_each_safe(pos, pnext, head) \
+	for (pos = (head)->next, pnext = pos->next; pos != (head); \
+	     pos = pnext, pnext = pos->next)
+
+static void free_blk_move_list(void)
+{
+	struct list_head *entry, *tmp;
+	struct blk_move *bmv;
+
+	list_for_each_safe(entry, tmp, &blk_move_list) {
+		bmv = list_entry(entry, struct blk_move, list);
+		list_del(entry);
+		ext2fs_free_mem(&bmv);
+	}
+	return;
+}
+
+static int resize_inode(ext2_filsys fs, unsigned long new_size)
+{
+	errcode_t retval;
+	int new_ino_blks_per_grp;
+	ext2fs_block_bitmap bmap;
+
+	ext2fs_read_inode_bitmap(fs);
+	ext2fs_read_block_bitmap(fs);
+	INIT_LIST_HEAD(&blk_move_list);
 
 
-int main (int argc, char ** argv)
+	new_ino_blks_per_grp = ext2fs_div_ceil(
+					EXT2_INODES_PER_GROUP(fs->super)*
+					new_size,
+					fs->blocksize);
+
+	/* We may change the file system.
+	 * Mark the file system as invalid so that
+	 * the user is prompted to run fsck.
+	 */
+	fs->super->s_state &= ~EXT2_VALID_FS;
+
+	retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"),
+						&bmap);
+	if (retval) {
+		fputs(_("Failed to allocate block bitmap when "
+				"increasing inode size\n"), stderr);
+		return retval;
+	}
+	retval = get_move_bitmaps(fs, new_ino_blks_per_grp, bmap);
+	if (retval) {
+		fputs(_("Not enough space to increase inode size \n"), stderr);
+		goto err_out;
+	}
+	retval = move_block(fs, bmap);
+	if (retval) {
+		fputs(_("Failed to relocate blocks during inode resize \n"),
+		      stderr);
+		goto err_out;
+	}
+	retval = inode_scan_and_fix(fs, bmap);
+	if (retval)
+		goto err_out_undo;
+
+	retval = group_desc_scan_and_fix(fs, bmap);
+	if (retval)
+		goto err_out_undo;
+
+	retval = expand_inode_table(fs, new_size);
+	if (retval)
+		goto err_out_undo;
+
+	ext2fs_calculate_summary_stats(fs);
+
+	fs->super->s_state |= EXT2_VALID_FS;
+	/* mark super block and block bitmap as dirty */
+	ext2fs_mark_super_dirty(fs);
+	ext2fs_mark_bb_dirty(fs);
+
+err_out:
+	free_blk_move_list();
+	ext2fs_free_block_bitmap(bmap);
+
+	return retval;
+
+err_out_undo:
+	free_blk_move_list();
+	ext2fs_free_block_bitmap(bmap);
+	fputs(_("Error in resizing the inode size.\n"
+			"Run e2undo to undo the "
+			"file system changes. \n"), stderr);
+
+	return retval;
+}
+
+static int tune2fs_setup_tdb(const char *name, io_manager *io_ptr)
+{
+	errcode_t retval = 0;
+	const char *tdb_dir;
+	char *tdb_file;
+	char *dev_name, *tmp_name;
+
+#if 0 /* FIXME!! */
+	/*
+	 * Configuration via a conf file would be
+	 * nice
+	 */
+	profile_get_string(profile, "scratch_files",
+					"directory", 0, 0,
+					&tdb_dir);
+#endif
+	tmp_name = strdup(name);
+	if (!tmp_name) {
+	alloc_fn_fail:
+		com_err(program_name, ENOMEM, 
+			_("Couldn't allocate memory for tdb filename\n"));
+		return ENOMEM;
+	}
+	dev_name = basename(tmp_name);
+
+	tdb_dir = getenv("E2FSPROGS_UNDO_DIR");
+	if (!tdb_dir)
+		tdb_dir = "/var/lib/e2fsprogs";
+
+	if (!strcmp(tdb_dir, "none") || (tdb_dir[0] == 0) ||
+	    access(tdb_dir, W_OK))
+		return 0;
+
+	tdb_file = malloc(strlen(tdb_dir) + 9 + strlen(dev_name) + 7 + 1);
+	if (!tdb_file)
+		goto alloc_fn_fail;
+	sprintf(tdb_file, "%s/tune2fs-%s.e2undo", tdb_dir, dev_name);
+
+	if (!access(tdb_file, F_OK)) {
+		if (unlink(tdb_file) < 0) {
+			retval = errno;
+			com_err(program_name, retval,
+				_("while trying to delete %s"),
+				tdb_file);
+			free(tdb_file);
+			return retval;
+		}
+	}
+
+	set_undo_io_backing_manager(*io_ptr);
+	*io_ptr = undo_io_manager;
+	set_undo_io_backup_file(tdb_file);
+	printf(_("To undo the tune2fs operation please run "
+		 "the command\n    e2undo %s %s\n\n"),
+		 tdb_file, name);
+	free(tdb_file);
+	free(tmp_name);
+	return retval;
+}
+
+int main(int argc, char **argv)
 {
 	errcode_t retval;
 	ext2_filsys fs;
 	struct ext2_super_block *sb;
-	io_manager io_ptr;
+	io_manager io_ptr, io_ptr_orig = NULL;
 
 #ifdef ENABLE_NLS
 	setlocale(LC_MESSAGES, "");
@@ -897,37 +1548,69 @@
 		program_name = *argv;
 	add_error_table(&et_ext2_error_table);
 
+#ifdef CONFIG_BUILD_FINDFS
 	if (strcmp(get_progname(argv[0]), "findfs") == 0)
 		do_findfs(argc, argv);
+#endif
 	if (strcmp(get_progname(argv[0]), "e2label") == 0)
 		parse_e2label_options(argc, argv);
 	else
 		parse_tune2fs_options(argc, argv);
-	
+
 #ifdef CONFIG_TESTIO_DEBUG
-	io_ptr = test_io_manager;
-	test_io_backing_manager = unix_io_manager;
-#else
-	io_ptr = unix_io_manager;
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_DEBUG")) {
+		io_ptr = test_io_manager;
+		test_io_backing_manager = unix_io_manager;
+	} else
 #endif
-	retval = ext2fs_open2(device_name, io_options, open_flag, 
+		io_ptr = unix_io_manager;
+
+retry_open:
+	retval = ext2fs_open2(device_name, io_options, open_flag,
 			      0, 0, io_ptr, &fs);
-        if (retval) {
-		com_err (program_name, retval, _("while trying to open %s"),
-			 device_name);
+	if (retval) {
+			com_err(program_name, retval,
+				_("while trying to open %s"),
+			device_name);
 		fprintf(stderr,
 			_("Couldn't find valid filesystem superblock.\n"));
 		exit(1);
 	}
+
+	if (I_flag && !io_ptr_orig) {
+		/*
+		 * Check the inode size is right so we can issue an
+		 * error message and bail before setting up the tdb
+		 * file.
+		 */
+		if (new_inode_size == EXT2_INODE_SIZE(fs->super)) {
+			fprintf(stderr, _("The inode size is already %lu\n"),
+				new_inode_size);
+			exit(1);
+		}
+		if (new_inode_size < EXT2_INODE_SIZE(fs->super)) {
+			fprintf(stderr, _("Shrinking the inode size is "
+					  "not supported\n"));
+			exit(1);
+		}
+
+		/*
+		 * If inode resize is requested use the
+		 * Undo I/O manager
+		 */
+		io_ptr_orig = io_ptr;
+		retval = tune2fs_setup_tdb(device_name, &io_ptr);
+		if (retval)
+			exit(1);
+		if (io_ptr != io_ptr_orig) {
+			ext2fs_close(fs);
+			goto retry_open;
+		}
+	}
+
 	sb = fs->super;
 	fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
-	if ((sb->s_feature_incompat & !EXT2_TUNE2FS_INCOMPAT) ||
-	    (sb->s_feature_ro_compat & !EXT2_TUNE2FS_RO_COMPAT)) {
-		fprintf(stderr, 
-			_("Filesystem %s has unsupported features enabled.\n"),
-			device_name);
-		exit(1);
-	}
+
 	if (print_label) {
 		/* For e2label emulation */
 		printf("%.*s\n", (int) sizeof(sb->s_volume_name),
@@ -935,6 +1618,7 @@
 		remove_error_table(&et_ext2_error_table);
 		exit(0);
 	}
+
 	retval = ext2fs_check_if_mounted(device_name, &mount_flags);
 	if (retval) {
 		com_err("ext2fs_check_if_mount", retval,
@@ -948,47 +1632,49 @@
 	if (c_flag) {
 		sb->s_max_mnt_count = max_mount_count;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting maximal mount count to %d\n"),
-			max_mount_count);
+		printf(_("Setting maximal mount count to %d\n"),
+		       max_mount_count);
 	}
 	if (C_flag) {
 		sb->s_mnt_count = mount_count;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting current mount count to %d\n"), mount_count);
+		printf(_("Setting current mount count to %d\n"), mount_count);
 	}
 	if (e_flag) {
 		sb->s_errors = errors;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting error behavior to %d\n"), errors);
+		printf(_("Setting error behavior to %d\n"), errors);
 	}
 	if (g_flag) {
 		sb->s_def_resgid = resgid;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting reserved blocks gid to %lu\n"), resgid);
+		printf(_("Setting reserved blocks gid to %lu\n"), resgid);
 	}
 	if (i_flag) {
 		sb->s_checkinterval = interval;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting interval between checks to %lu seconds\n"), interval);
+		printf(_("Setting interval between checks to %lu seconds\n"),
+		       interval);
 	}
 	if (m_flag) {
-		sb->s_r_blocks_count = e2p_percent(reserved_ratio,
-						   sb->s_blocks_count);
+		sb->s_r_blocks_count = (unsigned int) (reserved_ratio *
+					sb->s_blocks_count / 100.0);
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting reserved blocks percentage to %g%% (%u blocks)\n"),
-			reserved_ratio, sb->s_r_blocks_count);
+		printf(_("Setting reserved blocks percentage to %g%% "
+			 "(%u blocks)\n"),
+		       reserved_ratio, sb->s_r_blocks_count);
 	}
 	if (r_flag) {
 		if (reserved_blocks >= sb->s_blocks_count/2) {
-			com_err (program_name, 0,
-				 _("reserved blocks count is too big (%lu)"),
-				 reserved_blocks);
-			exit (1);
+			com_err(program_name, 0,
+				_("reserved blocks count is too big (%lu)"),
+				reserved_blocks);
+			exit(1);
 		}
 		sb->s_r_blocks_count = reserved_blocks;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting reserved blocks count to %lu\n"),
-			reserved_blocks);
+		printf(_("Setting reserved blocks count to %lu\n"),
+		       reserved_blocks);
 	}
 	if (s_flag == 1) {
 		if (sb->s_feature_ro_compat &
@@ -1018,11 +1704,11 @@
 	if (u_flag) {
 		sb->s_def_resuid = resuid;
 		ext2fs_mark_super_dirty(fs);
-		printf (_("Setting reserved blocks uid to %lu\n"), resuid);
+		printf(_("Setting reserved blocks uid to %lu\n"), resuid);
 	}
 	if (L_flag) {
 		if (strlen(new_label) > sizeof(sb->s_volume_name))
-			fputs(_("Warning: label too long, truncating.\n"), 
+			fputs(_("Warning: label too long, truncating.\n"),
 			      stderr);
 		memset(sb->s_volume_name, 0, sizeof(sb->s_volume_name));
 		strncpy(sb->s_volume_name, new_label,
@@ -1043,8 +1729,24 @@
 		parse_extended_opts(fs, extended_cmd);
 	if (journal_size || journal_device)
 		add_journal(fs);
-	
+
 	if (U_flag) {
+		int set_csum = 0;
+		dgrp_t i;
+
+		if (sb->s_feature_ro_compat &
+		    EXT4_FEATURE_RO_COMPAT_GDT_CSUM) {
+			/*
+			 * Determine if the block group checksums are
+			 * correct so we know whether or not to set
+			 * them later on.
+			 */
+			for (i = 0; i < fs->group_desc_count; i++)
+				if (!ext2fs_group_desc_csum_verify(fs, i))
+					break;
+			if (i >= fs->group_desc_count)
+				set_csum = 1;
+		}
 		if ((strcasecmp(new_UUID, "null") == 0) ||
 		    (strcasecmp(new_UUID, "clear") == 0)) {
 			uuid_clear(sb->s_uuid);
@@ -1056,11 +1758,41 @@
 			com_err(program_name, 0, _("Invalid UUID format\n"));
 			exit(1);
 		}
+		if (set_csum) {
+			for (i = 0; i < fs->group_desc_count; i++)
+				ext2fs_group_desc_csum_set(fs, i);
+			fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
+		}
 		ext2fs_mark_super_dirty(fs);
 	}
+	if (I_flag) {
+		if (mount_flags & EXT2_MF_MOUNTED) {
+			fputs(_("The inode size may only be "
+				"changed when the filesystem is "
+				"unmounted.\n"), stderr);
+			exit(1);
+		}
+		if (fs->super->s_feature_incompat &
+		    EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+			fputs(_("Changing the inode size not supported for "
+				"filesystems with the flex_bg\n"
+				"feature enabled.\n"),
+			      stderr);
+			exit(1);
+		}
+		/*
+		 * We want to update group descriptor also
+		 * with the new free inode count
+		 */
+		fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
+		if (resize_inode(fs, new_inode_size) == 0) {
+			printf(_("Setting inode size %lu\n"),
+							new_inode_size);
+		}
+	}
 
 	if (l_flag)
-		list_super (sb);
+		list_super(sb);
 	if (stride_set) {
 		sb->s_raid_stride = stride;
 		ext2fs_mark_super_dirty(fs);
@@ -1071,6 +1803,7 @@
 		ext2fs_mark_super_dirty(fs);
 		printf(_("Setting stripe width to %d\n"), stripe_width);
 	}
+	free(device_name);
 	remove_error_table(&et_ext2_error_table);
-	return (ext2fs_close (fs) ? 1 : 0);
+	return (ext2fs_close(fs) ? 1 : 0);
 }
diff --git a/misc/util.c b/misc/util.c
index 7522e9b..837d60f 100644
--- a/misc/util.c
+++ b/misc/util.c
@@ -1,6 +1,6 @@
 /*
  * util.c --- helper functions used by tune2fs and mke2fs
- * 
+ *
  * Copyright 1995, 1996, 1997, 1998, 1999, 2000 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -71,8 +71,8 @@
 	fflush(stderr);
 	fputs(_("Proceed anyway? (y,n) "), stdout);
 	buf[0] = 0;
-	fgets(buf, sizeof(buf), stdin);
-	if (strchr(short_yes, buf[0]) == 0)
+	if (!fgets(buf, sizeof(buf), stdin) ||
+	    strchr(short_yes, buf[0]) == 0)
 		exit(1);
 }
 
@@ -81,14 +81,14 @@
 	int val;
 #ifdef HAVE_OPEN64
 	struct stat64 s;
-	
+
 	val = stat64(device, &s);
 #else
 	struct stat s;
-	
+
 	val = stat(device, &s);
 #endif
-	
+
 	if(val == -1) {
 		fprintf(stderr, _("Could not stat %s --- %s\n"),
 			device, error_message(errno));
@@ -194,7 +194,7 @@
 		if (p) {
 			*p = 0;
 			next = p+1;
-		} 
+		}
 		arg = strchr(token, '=');
 		if (arg) {
 			*arg = 0;
@@ -233,23 +233,23 @@
 			"\tsize=<journal size in megabytes>\n"
 			"\tdevice=<journal device>\n\n"
 			"The journal size must be between "
-			"1024 and 102400 filesystem blocks.\n\n"), stderr);
+			"1024 and 10240000 filesystem blocks.\n\n"), stderr);
 		free(buf);
 		exit(1);
 	}
 	free(buf);
-}	
+}
 
 /*
  * Determine the number of journal blocks to use, either via
  * user-specified # of megabytes, or via some intelligently selected
  * defaults.
- * 
+ *
  * Find a reasonable journal file size (in blocks) given the number of blocks
  * in the filesystem.  For very small filesystems, it is not reasonable to
  * have a journal that fills more than half of the filesystem.
  */
-int figure_journal_size(int size, ext2_filsys fs)
+unsigned int figure_journal_size(int size, ext2_filsys fs)
 {
 	int j_blocks;
 
@@ -258,7 +258,7 @@
 		fputs(_("\nFilesystem too small for a journal\n"), stderr);
 		return 0;
 	}
-	
+
 	if (size > 0) {
 		j_blocks = size * 1024 / (fs->blocksize	/ 1024);
 		if (j_blocks < 1024 || j_blocks > 10240000) {
@@ -269,7 +269,7 @@
 				j_blocks);
 			exit(1);
 		}
-		if (j_blocks > fs->super->s_free_blocks_count / 2) {
+		if ((unsigned) j_blocks > fs->super->s_free_blocks_count / 2) {
 			fputs(_("\nJournal size too big for filesystem.\n"),
 			      stderr);
 			exit(1);
diff --git a/misc/util.h b/misc/util.h
index 3b6a881..e0c99f6 100644
--- a/misc/util.h
+++ b/misc/util.h
@@ -1,7 +1,7 @@
 /*
  * util.h --- header file defining prototypes for helper functions
  * used by tune2fs and mke2fs
- * 
+ *
  * Copyright 2000 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -22,5 +22,5 @@
 extern void check_plausibility(const char *device);
 extern void parse_journal_opts(const char *opts);
 extern void check_mount(const char *device, int force, const char *type);
-extern int figure_journal_size(int size, ext2_filsys fs);
+extern unsigned int figure_journal_size(int size, ext2_filsys fs);
 extern void print_check_message(ext2_filsys fs);
diff --git a/misc/uuidd.c b/misc/uuidd.c
index 1b2dedd..89bff72 100644
--- a/misc/uuidd.c
+++ b/misc/uuidd.c
@@ -52,6 +52,12 @@
 	exit(1);
 }
 
+static void die(const char *msg)
+{
+	perror(msg);
+	exit(1);
+}
+
 static void create_daemon(void)
 {
 	pid_t pid;
@@ -72,20 +78,44 @@
 	open("/dev/null", O_RDWR);
 	open("/dev/null", O_RDWR);
 
-	chdir("/");
+	if (chdir("/")) {}	/* Silence warn_unused_result warning */
 	(void) setsid();
 	euid = geteuid();
-	(void) setreuid(euid, euid);
+	if (setreuid(euid, euid) < 0)
+		die("setreuid");
 }
 
-static int read_all(int fd, char *buf, size_t count)
+static ssize_t read_all(int fd, char *buf, size_t count)
 {
 	ssize_t ret;
-	int c = 0;
+	ssize_t c = 0;
+	int tries = 0;
 
 	memset(buf, 0, count);
 	while (count > 0) {
 		ret = read(fd, buf, count);
+		if (ret <= 0) {
+			if ((errno == EAGAIN || errno == EINTR || ret == 0) &&
+			    (tries++ < 5))
+				continue;
+			return c ? c : -1;
+		}
+		if (ret > 0)
+			tries = 0;
+		count -= ret;
+		buf += ret;
+		c += ret;
+	}
+	return c;
+}
+
+static int write_all(int fd, char *buf, size_t count)
+{
+	ssize_t ret;
+	int c = 0;
+
+	while (count > 0) {
+		ret = write(fd, buf, count);
 		if (ret < 0) {
 			if ((errno == EAGAIN) || (errno == EINTR))
 				continue;
@@ -132,7 +162,8 @@
 	}
 
 	srv_addr.sun_family = AF_UNIX;
-	strcpy(srv_addr.sun_path, socket_path);
+	strncpy(srv_addr.sun_path, socket_path, sizeof(srv_addr.sun_path));
+	srv_addr.sun_path[sizeof(srv_addr.sun_path)-1] = '\0';
 
 	if (connect(s, (const struct sockaddr *) &srv_addr,
 		    sizeof(struct sockaddr_un)) < 0) {
@@ -153,7 +184,7 @@
 		op_len += sizeof(int);
 	}
 
-	ret = write(s, op_buf, op_len);
+	ret = write_all(s, op_buf, op_len);
 	if (ret < op_len) {
 		if (err_context)
 			*err_context = _("write");
@@ -198,12 +229,12 @@
 			int debug, int timeout, int quiet)
 {
 	struct sockaddr_un	my_addr, from_addr;
-	unsigned char		reply_buf[1024], *cp;
 	struct flock		fl;
 	socklen_t		fromlen;
 	int32_t			reply_len = 0;
 	uuid_t			uu;
 	mode_t			save_umask;
+	char			reply_buf[1024], *cp;
 	char			op, str[37];
 	int			i, s, ns, len, num;
 	int			fd_pidfile, ret;
@@ -249,10 +280,23 @@
 	}
 
 	/*
+	 * Make sure the socket isn't using fd numbers 0-2 to avoid it
+	 * getting closed by create_daemon()
+	 */
+	while (!debug && s <= 2) {
+		s = dup(s);
+		if (s < 0) {
+			perror("dup");
+			exit(1);
+		}
+	}
+
+	/*
 	 * Create the address we will be binding to.
 	 */
 	my_addr.sun_family = AF_UNIX;
-	strcpy(my_addr.sun_path, socket_path);
+	strncpy(my_addr.sun_path, socket_path, sizeof(my_addr.sun_path));
+	my_addr.sun_path[sizeof(my_addr.sun_path)-1] = '\0';
 	(void) unlink(socket_path);
 	save_umask = umask(0);
 	if (bind(s, (const struct sockaddr *) &my_addr,
@@ -282,9 +326,9 @@
 	signal(SIGALRM, terminate_intr);
 	signal(SIGPIPE, SIG_IGN);
 
-	sprintf(reply_buf, "%d\n", getpid());
-	ftruncate(fd_pidfile, 0);
-	write(fd_pidfile, reply_buf, strlen(reply_buf));
+	sprintf(reply_buf, "%8d\n", getpid());
+	if (ftruncate(fd_pidfile, 0)) {} /* Silence warn_unused_result */
+	write_all(fd_pidfile, reply_buf, strlen(reply_buf));
 	if (fd_pidfile > 1)
 		close(fd_pidfile); /* Unlock the pid file */
 
@@ -320,12 +364,12 @@
 
 		switch(op) {
 		case UUIDD_OP_GETPID:
-			sprintf((char *) reply_buf, "%d", getpid());
-			reply_len = strlen((char *) reply_buf)+1;
+			sprintf(reply_buf, "%d", getpid());
+			reply_len = strlen(reply_buf)+1;
 			break;
 		case UUIDD_OP_GET_MAXOP:
-			sprintf((char *) reply_buf, "%d", UUIDD_MAX_OP);
-			reply_len = strlen((char *) reply_buf)+1;
+			sprintf(reply_buf, "%d", UUIDD_MAX_OP);
+			reply_len = strlen(reply_buf)+1;
 			break;
 		case UUIDD_OP_TIME_UUID:
 			num = 1;
@@ -366,12 +410,13 @@
 				num = 1000;
 			if (num*16 > (int) (sizeof(reply_buf)-sizeof(num)))
 				num = (sizeof(reply_buf)-sizeof(num)) / 16;
-			uuid__generate_random(reply_buf+sizeof(num), &num);
+			uuid__generate_random((unsigned char *) reply_buf +
+					      sizeof(num), &num);
 			if (debug) {
 				printf(_("Generated %d UUID's:\n"), num);
 				for (i=0, cp=reply_buf+sizeof(num);
 				     i < num; i++, cp+=16) {
-					uuid_unparse(cp, str);
+					uuid_unparse((unsigned char *)cp, str);
 					printf("\t%s\n", str);
 				}
 			}
@@ -383,8 +428,8 @@
 				printf(_("Invalid operation %d\n"), op);
 			goto shutdown_socket;
 		}
-		write(ns, &reply_len, sizeof(reply_len));
-		write(ns, reply_buf, reply_len);
+		write_all(ns, (char *) &reply_len, sizeof(reply_len));
+		write_all(ns, reply_buf, reply_len);
 	shutdown_socket:
 		close(ns);
 	}
@@ -415,11 +460,11 @@
 		switch (c) {
 		case 'd':
 			debug++;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		case 'k':
 			do_kill++;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		case 'n':
 			num = strtol(optarg, &tmp, 0);
@@ -429,18 +474,18 @@
 			}
 		case 'p':
 			pidfile_path = optarg;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		case 'q':
 			quiet++;
 			break;
 		case 's':
 			socket_path = optarg;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		case 't':
 			do_type = UUIDD_OP_TIME_UUID;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		case 'T':
 			timeout = strtol(optarg, &tmp, 0);
@@ -451,7 +496,7 @@
 			break;
 		case 'r':
 			do_type = UUIDD_OP_RANDOM_UUID;
-			drop_privs++;
+			drop_privs = 1;
 			break;
 		default:
 			usage(argv[0]);
@@ -460,15 +505,20 @@
 	uid = getuid();
 	if (uid && drop_privs) {
 		gid = getgid();
-#ifdef HAVE_SETRESUID
-		setresuid(uid, uid, uid);
-#else
-		setreuid(uid, uid);
-#endif
 #ifdef HAVE_SETRESGID
-		setresgid(gid, gid, gid);
+		if (setresgid(gid, gid, gid) < 0)
+			die("setresgid");
 #else
-		setregid(gid, gid);
+		if (setregid(gid, gid) < 0)
+			die("setregid");
+#endif
+
+#ifdef HAVE_SETRESUID
+		if (setresuid(uid, uid, uid) < 0)
+			die("setresuid");
+#else
+		if (setreuid(uid, uid) < 0)
+			die("setreuid");
 #endif
 	}
 	if (num && do_type) {
diff --git a/misc/uuidgen.c b/misc/uuidgen.c
index 5e7eef3..7385a5c 100644
--- a/misc/uuidgen.c
+++ b/misc/uuidgen.c
@@ -58,7 +58,7 @@
 		default:
 			usage(argv[0]);
 		}
-	
+
 	switch (do_type) {
 	case DO_TYPE_TIME:
 		uuid_generate_time(uu);
@@ -70,7 +70,7 @@
 		uuid_generate(uu);
 		break;
 	}
-	
+
 	uuid_unparse(uu, str);
 
 	printf("%s\n", str);
diff --git a/po/LINGUAS b/po/LINGUAS
index 155fa60..4307252 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1 +1 @@
-ca cs de es fr it nl pl sv tr vi
+ca cs de es fr id it nl pl sv tr vi zh_CN
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index 25032ac..843b021 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -61,8 +61,8 @@
 .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
 
 .po.mo:
-	@echo "$(MSGFMT) -c -o $@ $<"; \
-	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+	$(E) "$(MSGFMT) -c -o $@ $<"
+	$(Q) $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
 
 .po.gmo:
 	@lang=`echo $* | sed -e 's,.*/,,'`; \
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6c7043d..c3001a5 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -20,7 +20,6 @@
 e2fsck/region.c
 e2fsck/scantest.c
 e2fsck/super.c
-e2fsck/swapfs.c
 e2fsck/unix.c
 e2fsck/util.c
 misc/badblocks.c
@@ -30,15 +29,18 @@
 misc/dumpe2fs.c
 misc/e2image.c
 misc/e2label.c
+misc/e2undo.c
 misc/fsck.c
 misc/logsave.c
 misc/lsattr.c
 misc/mke2fs.c
 misc/mklost+found.c
+misc/partinfo.c
 misc/tune2fs.c
 misc/util.c
 misc/uuidgen.c
 resize/extent.c
 resize/main.c
+resize/online.c
 resize/resize2fs.c
 resize/sim_progress.c
diff --git a/po/at-expand.pl b/po/at-expand.pl
index 6bd441f..931c6a0 100644
--- a/po/at-expand.pl
+++ b/po/at-expand.pl
@@ -96,6 +96,7 @@
     $msg =~ s/\@S/superblock/g;
     $msg =~ s/\@u/unattached/g;
     $msg =~ s/\@v/device/g;
+    $msg =~ s/\@x/extent/g;
     $msg =~ s/\@z/zero-length/g;
     $msg =~ s/\@\@/@/g;
 }
diff --git a/po/ca.gmo b/po/ca.gmo
index e41cc5c..10be8ba 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index b09be13..e6ac38f 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -1,7 +1,7 @@
-# Translation of e2fsprogs-1.40.1 to Catalan.
-# Copyright (C) 2007 Free Software Foundation, Inc.
+# Translation of e2fsprogs-1.40.8 to Catalan.
+# Copyright (C) 2007, 2008 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# David Planella Molas <david.planella@gmail.com>, 2007.
+# David Planella Molas <david.planella@gmail.com>, 2007, 2008.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -63,17 +63,18 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.1\n"
+"Project-Id-Version: e2fsprogs 1.41.1\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2007-07-18 17:20+0200\n"
-"Last-Translator: David Planella Molas <david.planella@gmail.com>\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
+"PO-Revision-Date: 2008-11-09 23:52+0100\n"
+"Last-Translator: David Planella <david.planella@gmail.com>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Bookmarks: 434,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bloc erroni %u fora dels límits; s'ignorarà.\n"
@@ -87,10 +88,10 @@
 msgstr "en llegir el node-i de blocs erronis"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "en intentar obrir %s"
@@ -100,7 +101,7 @@
 msgid "while trying popen '%s'"
 msgstr "en intentar popen en «%s»"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "en llegir la llista de blocs erronis del fitxer"
 
@@ -115,30 +116,30 @@
 "Avís: s'ha trobat el bloc invàlid %u en el node-i de blocs erronis.  S'ha "
 "esborrat.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "S'ha produït un error en llegir el bloc %lu (%s) mentre %s.  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "S'ha produït un error en llegir el bloc %lu (%s).  "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignora l'error"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Força la rescriptura"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "S'ha produït un error en escriure el bloc %lu (%s) mentre %s.  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "S'ha produït un error en escriure el bloc %lu (%s).  "
@@ -187,367 +188,390 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Forma d'ús: %s [-F] [-I blocs_del_búfer_del_node_i] dispositiu\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "en obrir %s per a buidar-lo"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
 msgstr "en intentar buidar %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
-msgstr ""
+msgstr "en obrir l'escaneig de nodes-i"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
 msgstr "en obtenir el node-i següent"
 
 #: e2fsck/iscan.c:138
 #, c-format
 msgid "%u inodes scanned.\n"
-msgstr ""
+msgstr "%u nodes-i escanejats.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
-msgstr ""
+msgstr "s'està llegint el súperbloc del registre de transaccions\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
-msgstr ""
+msgstr "%s: no s'ha trobat cap súperbloc del registre de transaccions vàlid\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
-msgstr ""
+msgstr "%s: el registre de transaccions és massa curt\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
-msgstr ""
+msgstr "%s: recuperació del registre de transaccions\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
+"%s: no es recuperarà el registre de transaccions mentre sigui de només "
+"lectura\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "en intentar tornar a obrir %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aatribut ampliat"
 
-#: e2fsck/message.c:110
-msgid "Aerror allocating"
-msgstr "Aerror en l'assignació"
-
 #: e2fsck/message.c:111
+msgid "Aerror allocating"
+msgstr "Aerror en la ubicació"
+
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bbloc"
 
-#: e2fsck/message.c:112
-msgid "Bbitmap"
-msgstr "BMapa de bits"
-
 #: e2fsck/message.c:113
+msgid "Bbitmap"
+msgstr "Bmapa de bits"
+
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ccompressió"
 
-#: e2fsck/message.c:114
-msgid "Cconflicts with some other fs @b"
-msgstr "Centra en conflicte amb algun altre sistema de firxers @b"
-
 #: e2fsck/message.c:115
+msgid "Cconflicts with some other fs @b"
+msgstr "Centra en conflicte amb algun altre @b del sistema de fitxers"
+
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "inode-i"
 
-#: e2fsck/message.c:116
-msgid "Iillegal"
-msgstr "Iinvàlid"
-
 #: e2fsck/message.c:117
-msgid "jjournal"
-msgstr "jfitxer de transaccions"
+msgid "Iillegal"
+msgstr "Iil·legal"
 
 #: e2fsck/message.c:118
+msgid "jjournal"
+msgstr "jregistre de transaccions"
+
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dsuprimit"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "ddirectori"
 
-#: e2fsck/message.c:120
-msgid "eentry"
-msgstr ""
-
 #: e2fsck/message.c:121
-msgid "E@e '%Dn' in %p (%i)"
-msgstr ""
+msgid "eentry"
+msgstr "eentrada"
 
 #: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "E@e «%Dn» a %p (%i)"
+
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fsistema de fitxers"
 
-#: e2fsck/message.c:123
-msgid "Ffor @i %i (%Q) is"
-msgstr ""
-
 #: e2fsck/message.c:124
+msgid "Ffor @i %i (%Q) is"
+msgstr "Fper a l'@i %i (%Q) és"
+
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggrup"
 
-#: e2fsck/message.c:125
-msgid "hHTREE @d @i"
-msgstr ""
-
 #: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "h@i del @d HTREE"
+
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lés un enllaç"
 
-#: e2fsck/message.c:128
-msgid "mmultiply-claimed"
-msgstr ""
-
 #: e2fsck/message.c:129
-msgid "ninvalid"
-msgstr ""
+msgid "mmultiply-claimed"
+msgstr "mreclamat múltiplement"
 
 #: e2fsck/message.c:130
-msgid "oorphaned"
-msgstr ""
+msgid "ninvalid"
+msgstr "nno vàlid"
 
 #: e2fsck/message.c:131
-msgid "pproblem in"
-msgstr ""
+msgid "oorphaned"
+msgstr "oorfe"
 
 #: e2fsck/message.c:132
-msgid "rroot @i"
-msgstr ""
+msgid "pproblem in"
+msgstr "pproblema en"
 
 #: e2fsck/message.c:133
-msgid "sshould be"
-msgstr ""
+msgid "rroot @i"
+msgstr "r@i arrel"
 
 #: e2fsck/message.c:134
-msgid "Ssuper@b"
-msgstr ""
+msgid "sshould be"
+msgstr "shauria de ser"
 
 #: e2fsck/message.c:135
-msgid "uunattached"
-msgstr ""
+msgid "Ssuper@b"
+msgstr "Ssúper@b"
 
 #: e2fsck/message.c:136
-msgid "vdevice"
-msgstr ""
+msgid "uunattached"
+msgstr "udesacoblat(s)"
 
 #: e2fsck/message.c:137
-msgid "zzero-length"
-msgstr ""
+msgid "vdevice"
+msgstr "vdispositiu"
 
-#: e2fsck/message.c:148
+# http://en.wikipedia.org/wiki/Extent_(file_systems). Hi ha la ubicació basada en blocs i la ubicació basada en «extents» (dpm).
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xextensió"
+
+#: e2fsck/message.c:139
+msgid "zzero-length"
+msgstr "zmida zero"
+
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<El node-i NULL>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<El node-i de blocs erronis>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<El node-i de l'índex de les ACL>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<El node-i de les dades de les ACL>"
 
-#: e2fsck/message.c:153
-msgid "<The boot loader inode>"
-msgstr ""
-
-#: e2fsck/message.c:154
-msgid "<The undelete directory inode>"
-msgstr ""
-
 #: e2fsck/message.c:155
-msgid "<The group descriptor inode>"
-msgstr ""
+msgid "<The boot loader inode>"
+msgstr "<El node-i del carregador>"
 
 #: e2fsck/message.c:156
-msgid "<The journal inode>"
-msgstr ""
+msgid "<The undelete directory inode>"
+msgstr "<El node-i del directori de desfer les supressions>"
 
 #: e2fsck/message.c:157
+msgid "<The group descriptor inode>"
+msgstr "<El node-i del descriptor de grup>"
+
+#: e2fsck/message.c:158
+msgid "<The journal inode>"
+msgstr "<El node-i del registre de transaccions>"
+
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Node-i reservat 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Node-i reservat 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "fitxer normal"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "directori"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "dispositiu"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "dispositiu d'accés per bloc"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "conducte amb nom"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "enllaç simbòlic"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "sòcol"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "tips de fitxer desconegut amb mode 0%o"
 
 #: e2fsck/pass1b.c:215
 msgid "multiply claimed inode map"
-msgstr ""
+msgstr "mapa de nodes-i reclamat múltiplement"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
-msgstr ""
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "error intern: no s'ha trobat dup_blk per a %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
-msgstr ""
+msgstr "s'ha tornat de la funció clone_file_block"
 
-#: e2fsck/pass1b.c:765
+# FIXME (dpm)
+#: e2fsck/pass1b.c:762
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr ""
+"error intern: no s'ha pogut cercar el registre de bloc d'atributs ampliats "
+"(EA) per a %u"
 
-#: e2fsck/pass1b.c:777
+# FIXME (dpm)
+#: e2fsck/pass1b.c:774
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
+"error intern: no s'ha pogut cercar el registre de node-i d'atributs ampliats "
+"(EA) per a %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 msgid "reading directory block"
-msgstr ""
+msgstr "s'està llegint el bloc de directori"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
-msgstr ""
+msgstr "mapa de nodes-i en ús"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
-msgstr ""
+msgstr "mapa de nodes-i de directoris"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
-msgstr ""
+msgstr "mapa de nodes-i de fitxers normals"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
-msgstr ""
+msgstr "mapa de blocs en ús"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
-msgstr ""
+msgstr "s'està obring l'escaneig de nodes-i"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
-msgstr ""
+msgstr "s'està obtenint el node-i següent de l'escaneig"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "Pas 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
-msgstr ""
+msgstr "s'estan llegint els blocs indirectes del node-i %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
-msgstr ""
+msgstr "mapa de nodes-i malmesos"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
-msgstr ""
+msgstr "node-i en el mapa de nodes-i malmesos"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr ""
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "Pas 2"
 
+#: e2fsck/pass2.c:803
+msgid "Can not continue."
+msgstr "No es pot continuar."
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
 msgstr ""
 
+# FIXME: «Memòria màxima»? (dpm)
 #: e2fsck/pass3.c:90
 msgid "Peak memory"
-msgstr ""
+msgstr "Pic de memòria"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "Pas 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 msgid "inode loop detection bitmap"
 msgstr ""
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "Pas 4"
 
@@ -557,23 +581,23 @@
 
 #: e2fsck/problem.c:50
 msgid "(no prompt)"
-msgstr ""
+msgstr "(sense pregunta)"
 
 #: e2fsck/problem.c:51
 msgid "Fix"
-msgstr ""
+msgstr "Arregla"
 
 #: e2fsck/problem.c:52
 msgid "Clear"
-msgstr ""
+msgstr "Esborra"
 
 #: e2fsck/problem.c:53
 msgid "Relocate"
-msgstr ""
+msgstr "Reubica"
 
 #: e2fsck/problem.c:54
 msgid "Allocate"
-msgstr "Assigna"
+msgstr "Ubica"
 
 #: e2fsck/problem.c:55
 msgid "Expand"
@@ -581,7 +605,7 @@
 
 #: e2fsck/problem.c:56
 msgid "Connect to /lost+found"
-msgstr ""
+msgstr "Connecta amb /lost+found"
 
 #: e2fsck/problem.c:57
 msgid "Create"
@@ -589,7 +613,7 @@
 
 #: e2fsck/problem.c:58
 msgid "Salvage"
-msgstr ""
+msgstr "Salva"
 
 #: e2fsck/problem.c:59
 msgid "Truncate"
@@ -597,7 +621,7 @@
 
 #: e2fsck/problem.c:60
 msgid "Clear inode"
-msgstr ""
+msgstr "Esborra el node-i"
 
 #: e2fsck/problem.c:61
 msgid "Abort"
@@ -605,7 +629,7 @@
 
 #: e2fsck/problem.c:62
 msgid "Split"
-msgstr ""
+msgstr "Divideix"
 
 #: e2fsck/problem.c:63
 msgid "Continue"
@@ -613,7 +637,7 @@
 
 #: e2fsck/problem.c:64
 msgid "Clone multiply-claimed blocks"
-msgstr ""
+msgstr "Clona els blocs reclamats múltiplement"
 
 #: e2fsck/problem.c:65
 msgid "Delete file"
@@ -625,15 +649,15 @@
 
 #: e2fsck/problem.c:67
 msgid "Unlink"
-msgstr ""
+msgstr "Desfés l'enllaç"
 
 #: e2fsck/problem.c:68
 msgid "Clear HTree index"
-msgstr ""
+msgstr "Esborra l'índex HTree"
 
 #: e2fsck/problem.c:69
 msgid "Recreate"
-msgstr ""
+msgstr "Torna a crear"
 
 #: e2fsck/problem.c:78
 msgid "(NONE)"
@@ -641,15 +665,15 @@
 
 #: e2fsck/problem.c:79
 msgid "FIXED"
-msgstr ""
+msgstr "ARREGLAT"
 
 #: e2fsck/problem.c:80
 msgid "CLEARED"
-msgstr ""
+msgstr "ESBORRAT"
 
 #: e2fsck/problem.c:81
 msgid "RELOCATED"
-msgstr ""
+msgstr "REUBICAT"
 
 #: e2fsck/problem.c:82
 msgid "ALLOCATED"
@@ -661,7 +685,7 @@
 
 #: e2fsck/problem.c:84
 msgid "RECONNECTED"
-msgstr ""
+msgstr "RECONNECTAT"
 
 #: e2fsck/problem.c:85
 msgid "CREATED"
@@ -669,7 +693,7 @@
 
 #: e2fsck/problem.c:86
 msgid "SALVAGED"
-msgstr ""
+msgstr "SALVAT"
 
 #: e2fsck/problem.c:87
 msgid "TRUNCATED"
@@ -677,7 +701,7 @@
 
 #: e2fsck/problem.c:88
 msgid "INODE CLEARED"
-msgstr ""
+msgstr "NODE-I ESBORRAT"
 
 #: e2fsck/problem.c:89
 msgid "ABORTED"
@@ -685,15 +709,16 @@
 
 #: e2fsck/problem.c:90
 msgid "SPLIT"
-msgstr ""
+msgstr "DIVIDIT"
 
+# FIXME
 #: e2fsck/problem.c:91
 msgid "CONTINUING"
-msgstr ""
+msgstr "CONTINUAT"
 
 #: e2fsck/problem.c:92
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
-msgstr ""
+msgstr "CLONATS ELS BLOCS RECLAMATS MÚLTIPLEMENT"
 
 #: e2fsck/problem.c:93
 msgid "FILE DELETED"
@@ -701,29 +726,29 @@
 
 #: e2fsck/problem.c:94
 msgid "SUPPRESSED"
-msgstr ""
+msgstr "SUPRIMIT"
 
 #: e2fsck/problem.c:95
 msgid "UNLINKED"
-msgstr ""
+msgstr "ENLLAÇ DESFET"
 
 #: e2fsck/problem.c:96
 msgid "HTREE INDEX CLEARED"
-msgstr ""
+msgstr "ÍNDEX HTREE ESBORRAT"
 
 #: e2fsck/problem.c:97
 msgid "WILL RECREATE"
-msgstr ""
+msgstr "ES TORNARÀ A CREAR"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:106
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr ""
+msgstr "El @b @B per al @g %g no és a @g.  (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:110
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr ""
+msgstr "El @i @B per al @g %g no és a @g.  (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
@@ -732,6 +757,8 @@
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
+"La taula de nodes-i per al @g %g no és al @g. (@b %b)\n"
+"AVÍS: POSSIBLE PÈRDUA DE DADES GREU.\n"
 
 #. @-expanded: \n
 #. @-expanded: The superblock could not be read or does not describe a correct ext2\n
@@ -751,6 +778,14 @@
 "    e2fsck -b %S <@v>\n"
 "\n"
 msgstr ""
+"\n"
+"No s'ha pogut llegir el @S, o bé no descriu un @f\n"
+"ext2 correcte. Si el @v és vàlid i realment conté un @f\n"
+"ext2 (i no pas d'intercanvi, ufs o algun altre), llavors el @S\n"
+"està malmès, per la qual cosa podeu provar d'executar l'e2fsck amb\n"
+"un @S alternatiu:\n"
+"    e2fsck -b %S <@v>\n"
+"\n"
 
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
@@ -761,6 +796,9 @@
 "The physical size of the @v is %c @bs\n"
 "Either the @S or the partition table is likely to be corrupt!\n"
 msgstr ""
+"La mida del @f (segons el @S) és de %b @bs\n"
+"La mida física del @v és de %c @bs\n"
+"Segurament el @S o bé la taula de particions estan malmesos.\n"
 
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
@@ -771,16 +809,19 @@
 "This version of e2fsck does not support fragment sizes different\n"
 "from the @b size.\n"
 msgstr ""
+"mida_del_@b del @S = %b, mida dels fragments = %c.\n"
+"Aquesta versió de l'e2fsck no funciona amb mides de fragment que no\n"
+"coincideixen amb la mida del @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
 #: e2fsck/problem.c:144
 msgid "@S @bs_per_group = %b, should have been %c\n"
-msgstr ""
+msgstr "@bs_per_grup del @S = %b, hauria d'haver estat %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
 #: e2fsck/problem.c:149
 msgid "@S first_data_@b = %b, should have been %c\n"
-msgstr ""
+msgstr "primer_@b_de_dades del @S = %b, hauria d'haver estat %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
@@ -788,7 +829,7 @@
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
-msgstr ""
+msgstr "El @f no té cap UUID; se li'n generarà un.\n"
 
 #: e2fsck/problem.c:159
 #, c-format
@@ -804,143 +845,158 @@
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
 #: e2fsck/problem.c:168
 msgid "Corruption found in @S.  (%s = %N).\n"
-msgstr ""
+msgstr "El @S està malmès. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
 #: e2fsck/problem.c:173
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
-msgstr ""
+msgstr "S'ha produït un error en determinar la mida del @v físic: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
 #: e2fsck/problem.c:178
 msgid "@i count in @S is %i, @s %j.\n"
-msgstr ""
+msgstr "El nombre de nodes-i en el @S és %i (@s %j).\n"
 
 #: e2fsck/problem.c:182
 msgid "The Hurd does not support the filetype feature.\n"
-msgstr ""
+msgstr "El Hurd no és compatible amb la funcionalitat de tipus de fitxer.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
-#, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr ""
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "El @S té un @j ext3 @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr ""
+msgstr "El @j extern té múltiples usuaris del @f (no compatible).\n"
 
 #. @-expanded: Can't find external journal\n
 #: e2fsck/problem.c:197
 msgid "Can't find external @j\n"
-msgstr ""
+msgstr "No s'ha trobat el @j extern\n"
 
 #. @-expanded: External journal has bad superblock\n
 #: e2fsck/problem.c:202
 msgid "External @j has bad @S\n"
-msgstr ""
+msgstr "El @j extern té un @S malmès\n"
 
 #. @-expanded: External journal does not support this filesystem\n
 #: e2fsck/problem.c:207
 msgid "External @j does not support this @f\n"
-msgstr ""
+msgstr "El @j extern no és compatible amb aquest @f\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr ""
+#, fuzzy
+msgid "@j @S is corrupt.\n"
+msgstr "El @S del @j ext3 està malmès.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr ""
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "El senyalador de recuperació està buit, però el @j té dades.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
+"El @S té el senyalador ext3 «needs_recovery» (recuperació_necessària) "
+"activat, però no té cap @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr ""
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "El senyalador de recuperació està buit, però el @j té dades.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
-msgstr ""
+msgstr "Esborra el @j"
 
 #. @-expanded: Run journal anyway
 #: e2fsck/problem.c:245
 msgid "Run @j anyway"
-msgstr ""
+msgstr "Executa el @j de totes maneres"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 #: e2fsck/problem.c:250
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
+"El senyalador de recuperació no està definit en la còpia del @S, per la qual "
+"cosa s'executarà el @j de totes maneres.\n"
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:255
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
-msgstr ""
+msgstr "%s @i @o %i (uid=%Iu, gid=%Ig, mode=%Im, mida=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:260
 msgid "@I @b #%B (%b) found in @o @i %i.\n"
-msgstr ""
+msgstr "@b @I #%B (%b) trobat a l'@i @o %i.\n"
 
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:265
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
-msgstr ""
+msgstr "@b ja esborrat #%B (%b) trobat a l'@i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 #: e2fsck/problem.c:270
 #, c-format
 msgid "@I @o @i %i in @S.\n"
-msgstr ""
+msgstr "@i @o @I %i en el @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
 #: e2fsck/problem.c:275
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
-msgstr ""
+msgstr "@i @o @I %i a la llista de nodes-i @os.\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
+"El @f té els senyaladors de funcionalitat (feature) definits, però és un @f "
+"de revisió 0.  "
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
+"El @S del @j ext3 té un senyalador desconegut de funcionalitat de només "
+"lectura definit.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
+"El @S del @j ext3 té un senyalador desconegut de funcionalitat de només "
+"lectura definit.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:295
 msgid "@j version not supported by this e2fsck.\n"
-msgstr ""
+msgstr "La versió del @j no funciona amb aquest e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
@@ -950,6 +1006,8 @@
 "Moving @j from /%s to hidden @i.\n"
 "\n"
 msgstr ""
+"S'està traslladant el @j de /%s al @i ocult.\n"
+"\n"
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
@@ -959,6 +1017,8 @@
 "Error moving @j: %m\n"
 "\n"
 msgstr ""
+"S'ha produït un error en traslladar el @j: %m\n"
+"\n"
 
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
@@ -969,6 +1029,9 @@
 "Clearing fields beyond the V1 @j @S...\n"
 "\n"
 msgstr ""
+"S'han trobat camps de @S d'un @j de V2 (en un @j de V1).\n"
+"S'estan esborrant els camps més enllà del @S del @j de V1...\n"
+"\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -977,6 +1040,9 @@
 "Backing up @j @i @b information.\n"
 "\n"
 msgstr ""
+"S'està fent una còpia de seguretat de la informació del @b de nodes-i del "
+"@j.\n"
+"\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
 #. @-expanded: is %N; should be zero.  
@@ -999,12 +1065,12 @@
 #. @-expanded: superblock last mount time is in the future.  
 #: e2fsck/problem.c:337
 msgid "@S last mount time is in the future.  "
-msgstr ""
+msgstr "La darrera hora de muntatge del @S és en el futur.  "
 
 #. @-expanded: superblock last write time is in the future.  
 #: e2fsck/problem.c:342
 msgid "@S last write time is in the future.  "
-msgstr ""
+msgstr "La darrera hora d'escriptura del @S és en el futur.  "
 
 #. @-expanded: superblock hint for external superblock should be %X.  
 #: e2fsck/problem.c:346
@@ -1020,118 +1086,158 @@
 "\n"
 msgstr ""
 
-#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
-msgid "Pass 1: Checking @is, @bs, and sizes\n"
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
 msgstr ""
 
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr ""
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+"La transacció del registre de transaccions %i està malmesa, se n'ha "
+"interromput la repetició\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
+#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
+#: e2fsck/problem.c:392
+msgid "Pass 1: Checking @is, @bs, and sizes\n"
+msgstr "Pas 1: comprovació de nodes-i, @bs i mides\n"
+
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "el @r no és un @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
+msgstr "el @r té el dtime definit (segurament degut a un mke2fs antic)."
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
-msgstr ""
+msgstr "El @i %i (%Q) té un mode @n.  "
 
+# FIXME dtime (dpm)
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
-msgstr ""
+msgstr "El @i %i @D té un dtime zero.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr ""
+msgstr "El @i %i s'està utilitzant, però té dtime definit."
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr ""
+msgstr "El @i %i és un @d de @z.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr ""
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr ""
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr ""
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr ""
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr ""
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
-msgstr ""
+msgstr "El @i %i té @bs no vàlids.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
-msgstr ""
+msgstr "Hi ha massa @b no vàlids al @i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
-msgstr ""
+msgstr "Hi ha un número (%B) de @b no vàlid (%b) al @i de @b erronis.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
-msgstr ""
+msgstr "El @i de @b erronis té @bs no vàlids.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
-msgstr ""
+msgstr "S'està utilitzant el @b duplicat o erroni\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
@@ -1139,7 +1245,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1149,16 +1255,18 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
+"\n"
+"Si el @b està realment malmès, el @f no es podrà reparar.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1166,121 +1274,128 @@
 msgstr ""
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
-msgstr ""
+msgstr "El @S primary (%b) és a la llista de @bs erronis.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
-msgstr ""
+msgstr "Avís: el @S (%b) del grup %s és erroni.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
+"Avís: la còpia dels descriptors de @g del grup %g té un @b erroni (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
+"Es probable que s'hagi produït un error de programació: el @b #%b ha estat "
+"reclamat sense motiu a process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
-msgstr ""
+msgstr "@A de la memòria intermèdia del @b per a reubicar %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
-msgstr ""
+msgstr "S'està reubicant %g del @g %s de %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
-msgstr ""
+msgstr "S'està reubicant %g del @g %s a %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
-msgstr ""
+msgstr "Avís: no s'ha pogut llegir el @b %b de %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
-msgstr ""
+msgstr "Avís: no s'ha pogut escriure el @b %b per a %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
-msgstr ""
+msgstr "S'ha produït un @A del @B del @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
-msgstr ""
+msgstr "S'ha produït un @A del @B del @b (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr ""
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr ""
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en escanejar els nodes-i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
-msgstr ""
+msgstr "S'ha produït un error en iterar a través dels @bs del @i (%i): %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
+"S'ha produït un error en desar la informació del nombre de nodes-i (@i=%i, "
+"nombre=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
+"S'ha produït un error en desar la informació del @b de @d (@i=%i, @b=%b, núm="
+"%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
-msgstr ""
+msgstr "S'ha produït un error en llegir el @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1288,201 +1403,274 @@
 msgstr ""
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
+"El @i %i té el senyalador de @c definit en un @f que no és compatible amb la "
+"@c.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
-msgstr ""
+msgstr "El @i del @j no s'utilitza, però conté dades.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
-msgstr ""
+msgstr "El @j no és un fitxer normal.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
-msgstr ""
+msgstr "El @i %i és part de la llista de nodes-i @os.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
+"S'han trobat nodes-i que són part d'una llista enllaçada d'orfes malmesa.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr ""
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr ""
+msgstr "S'ha produït un error en llegir el @b d'@a del @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
-msgstr ""
+msgstr "El @i %i té un @b d'@a %b malmès.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
-msgstr ""
+msgstr "S'ha produït un error en llegir el @b d'@a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr ""
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
-msgstr ""
+msgstr "S'ha produït un error en escriure el @b d'@a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr ""
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
-msgstr ""
+msgstr "S'ha produït un @A del @b d'@a %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr ""
+msgstr "El @b d'@a està malmès (col·lisió en la ubicació).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
-msgstr ""
+msgstr "El @b d'@a està malmès (nom @n).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
-msgstr ""
+msgstr "El @b d'@a està malmès (valor @n).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
-msgstr ""
+msgstr "El @i %i és massa gran.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
-msgstr ""
+msgstr "El @b #%B (%b) fa que el @d sigui massa gran.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
-msgstr ""
+msgstr "El @b #%B (%b) fa que el fitxer sigui massa gran.  "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
-msgstr ""
+msgstr "El @b #%B (%b) fa que l'enllaç simbòlic sigui massa gran.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
+"El @i %i té el senyalador INDEX_FL definit en un @f que no és compatble amb "
+"l'htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr ""
+msgstr "El @i %i té el senyalador INDEX_FL definit però no és un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr ""
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
-msgstr ""
+msgstr "El @i té una mida addicional (%IS) què no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr ""
+msgstr "La llargada del nom (%N) de l'@a del @i %i no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
+msgstr "La mida del valor (%N) de l'@a del @i %i no és vàlida\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr ""
+msgstr "El desplaçament del valor (%N) de l'@a del @i %i no és vàlid\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
+msgstr "El @b del valor (%N) de l'@a del @i %i no és vàlid (hauria de ser 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr ""
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "L'@a del @i %i té un resum (%N) que no és vàlid\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "El @i %i és un %It, però sembla ser un directori en realitat.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "S'ha produït un error en llegir l'arbre d'@x al @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"El @i %i té el senyalador EXTENTS_FL definit en un @f que no és compatible "
+"amb l'extensió.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1490,674 +1678,735 @@
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
-msgstr ""
+msgstr "@b(s) reclamat(s) múltiplement del @i %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en escanejar els nodes-i (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr ""
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en iterar pels @bs al @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
+"S'ha produït un error en ajustar el nombre de referències del @b d'@a %b (@i "
+"%i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
+"Pas 1C: escaneig dels directoris dels nodes-i amb @bs reclamats "
+"múltiplement\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
-msgstr ""
+msgstr "Pas 1D: conciliació dels @bs reclamats múltiplement\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
 msgstr ""
+"El fitxer %Q (@i #%i, hora de mod %IM) \n"
+"  té %B @b(s) @m, compartits amb %N fitxer(s):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
-msgstr ""
+msgstr "\t%Q (@i #%i, hora de modificació %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadades del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
-msgstr ""
+msgstr "(Hi ha %N nodes-i que contenen @bs múltiplement reclamats.)\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
+"@bs reclamats múltiplement ja reassignats o clonats.\n"
+"\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "No s'ha pogut clonar el fitxer: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Pas 2: comprovació de l'estructura del @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
-msgstr ""
+msgstr "L'@E @L a «.»"
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr ""
+msgstr "L'@E apunta al @i (%Di) ubicat en un @b malmès.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
-msgstr ""
+msgstr "L'@E @L al @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
-msgstr ""
+msgstr "L'@E @L al @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
-msgstr ""
+msgstr "El nom de l'@E conté caràcters no vàlids.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
-msgstr ""
+msgstr "Manca el «.» en el @i de @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
-msgstr ""
+msgstr "Manca el «..» en el @i de @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr ""
+msgstr "La primera @e «%Dn» (@i=%Di) en el @i de @d %i (%p) @s «.»\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr ""
+msgstr "La segona @e «%Dn» (@i=%Di) en el @i de @d %i (%p) @s «..»\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr ""
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
-msgstr ""
+msgstr "El @i %i (%Q) té un mode @n (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr ""
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
-msgstr ""
+msgstr "@i de @d %i, @b %B, desplaçament %N: el nom de fitxer és massa llarg\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
-msgstr ""
+msgstr "El @i de @d %i té un @b #%B no ubicat.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
+msgstr "L'@e de @d «.» en el @i de @d %i no acaba en NUL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
+msgstr "L'@e de @d «..» en el @i de @d %i no acaba en NUL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
-msgstr ""
+msgstr "El @i %i (%Q) és un @v de caràcters @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
-msgstr ""
+msgstr "El @i %i (%Q) és un @v de blocs @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
-msgstr ""
+msgstr "L'@E és un duplicat de l'@e «.»\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
-msgstr ""
+msgstr "L'@E és un duplicat de l'@e «..»\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
-msgstr ""
+msgstr "S'ha produït un error intern: no s'ha trobat dir_info per a %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
-msgstr ""
+msgstr "@A de l'estructura icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
-msgstr ""
+msgstr "S'ha produït en iterar pels @bs de @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en llegir el @b de @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en escriure el @b de @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr ""
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
-msgstr ""
+msgstr "S'ha produït un error en desubicar el @i %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr ""
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "L'@e de @d per a «.» a %p (%i) és gran. \n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
-msgstr ""
+msgstr "El @i %i (%Q) és una FIFO no vàlida.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr ""
+msgstr "El @i %i (%Q) és un sòcol @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
-msgstr ""
+msgstr "S'està establint el tipus de fitxer per a l'@E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
-msgstr ""
+msgstr "El tipus de fitxer de l'@E és incorrecte (és %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
-msgstr ""
+msgstr "El tipus de fitxer de l@E està definit.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
-msgstr ""
+msgstr "El nom de l'@E és de @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
-msgstr ""
+msgstr "L'enllaç simbòlic %Q (@i #%i) és @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
-msgstr ""
+msgstr "El @b d'@a @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
+"El @f conté fitxers grans, però li manca el senyalador LARGE_FILE al @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
-msgstr ""
+msgstr "S'ha produït un @p al @h %d: el node (%B) no està referenciat\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr ""
+"S'ha produït un @p al @h %d: el node (%B) està referenciat dues vegades\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr ""
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
-msgstr ""
+msgstr "el @h %d (%q) és @n.  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr ""
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr ""
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr ""
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p en el @h %d: el node (%B) té una profunditat (%N) @na\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
-msgstr ""
+msgstr "S'ha trobat una @E duplicada.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
 "Rename to %s"
 msgstr ""
+"L'@E té un nom de fitxer que no és únic.\n"
+"Li hauríeu de canviar el nom a %s"
 
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
 "\n"
 msgstr ""
+"S'ha trobat una @e «%Dn».\n"
+"\tEs marcarà %p (%i) per a ésser reconstruït.\n"
+"\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr ""
 
-#. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
-msgid "Pass 3: Checking @d connectivity\n"
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "No s'esperava el @b al @h %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+
+#. @-expanded: Pass 3: Checking directory connectivity\n
+#: e2fsck/problem.c:1293
+msgid "Pass 3: Checking @d connectivity\n"
+msgstr "Pas 3: comprovació de la connectivitat dels @ds\n"
+
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
-msgstr ""
+msgstr "El @r no està ubicat.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
-msgstr ""
+msgstr "No hi ha prou espai en el @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
-msgstr ""
+msgstr "@i de @d %i desconnectat (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
-msgstr ""
+msgstr "No s'ha trobat /@l.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr ""
+msgstr "«..» a %Q (%i) és %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr ""
+msgstr "El directori /@l no existeix o està malmès.  No es pot reconnectar.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
-msgstr ""
+msgstr "No s'ha pogut expandir el directori /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not reconnect %i: %m\n"
-msgstr ""
+msgstr "No s'ha pogut reconnectar %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
-msgstr ""
+msgstr "S'ha produït un error en cercar el directori /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
-msgstr ""
+msgstr "ext2fs_new_block: %m en intentar crear el @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
-msgstr ""
+msgstr "ext2fs_new_inode: %m en intentar crear el @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
+msgstr "ext2fs_new_dir_block: %m en crear el @b de @d nou\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
+msgstr "ext2fs_new_dir_block: %m en crear el @b de @d nou per a /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
-msgstr ""
+msgstr "S'ha produït un error en ajustar el nombre de nodes-i al @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
 msgstr ""
+"No s'ha pogut reparar el pare del @i %i: %m\n"
+"\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
+"No s'ha pogut reparar el pare del @i %i: no s'ha trobat l'@e de @d pare\n"
+"\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en crear el @d arrel (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
-msgstr ""
+msgstr "S'ha produït un error en crear el @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 msgid "@r is not a @d; aborting.\n"
-msgstr ""
+msgstr "el @r no és un @d; s'interromprà.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
-msgstr ""
+msgstr "No es pot continuar sense un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
-msgstr ""
+msgstr "/@l no és un @d (node-i=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
-msgstr ""
+msgstr "Pas 3A: optimització dels directoris\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr ""
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "No s'ha pogut crear l'iterador dirs_to_hash: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr ""
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "No s'ha pogut optimitzar el directori %q (%d): %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "S'estan optimitzant els directoris: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
-msgstr ""
+msgstr "Pas 4: comprovació dels nombres de referències\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, c-format
 msgid "@u @z @i %i.  "
-msgstr ""
+msgstr "@i de @z %i @u.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
-msgstr ""
+msgstr "@i %i @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr ""
+msgstr "el nombre de referències del @i %s és %Il, @s %N."
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
+"AVÍS: S'HA PRODUÏT UN ERROR DE PROGRAMACIÓ EN EL E2FSCK!\n"
+"\tO BÉ ALGUN CAP DE PARDAL (O SIGUI, TU) ESTÀ COMPROVANT UN SISTEMA\n"
+"\tDE FITXERS MUNTAT (EN VIU).\n"
+"inode_link_info[%i] és %N, inode.i_links_count és %Il.  Haurien de "
+"coincidir!\n"
 
+# FIXME
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 msgid "Pass 5: Checking @g summary information\n"
-msgstr ""
+msgstr "Pas 5: comprovació del resum de la informació del @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr ""
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr ""
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
+"El nombre de nodes-i lliures no es correcte per al @g núm. %g (%i, recompte=%"
+"j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
+"El nombre de directoris no es correcte per al @g núm. %g (%i, recompte=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
-msgstr ""
+msgstr "El nombre de nodes-i lliures no es correcte (%i, recompte=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
+"El nombre de @bs lliures no es correcte per al @g núm. %g (%i, recompte=%"
+"j).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
-msgstr ""
+msgstr "El nombre de @bs lliures no es correcte (%i, recompte=%j).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1556
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr ""
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Torna a crear"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
-msgstr ""
+msgstr "S'ha produït un error amb un codi no gestionat (0x%x)\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "IGNORAT"
 
 #: e2fsck/scantest.c:81
 #, c-format
 msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
-msgstr ""
+msgstr "Memòria utilitzada: %d, temps transcorregut: %6.3f/%6.3f/%6.3f\n"
 
 #: e2fsck/scantest.c:100
 #, c-format
@@ -2175,69 +2424,35 @@
 #: e2fsck/super.c:187
 #, c-format
 msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr ""
+msgstr "en fer la crida a ext2fs_block_iterate per al node-i %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
-msgstr ""
+msgstr "en fer la crida a ext2fs_adjust_ea_refcount per al node-i %d"
+
+#: e2fsck/super.c:267
+msgid "Truncating"
+msgstr "Truncament"
 
 #: e2fsck/super.c:268
-msgid "Truncating"
-msgstr ""
-
-#: e2fsck/super.c:269
 msgid "Clearing"
-msgstr ""
+msgstr "Neteja"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr ""
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr ""
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr ""
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr ""
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr ""
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr ""
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr ""
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
+"Forma d'ús: %s [-panyrcdfvtDFV] [-b súperbloc] [-B midadebloc]\n"
+"\t\t[-I blocs_de_mem_interm_del_node-i] [-P process_inode_size]\n"
+"\t\t[-l|-L fitxer_de_blocs_erronis] [-C fd] [-j reg_de_trans_extern]\n"
+"\t\t[-E opcions_ampliades] dispositiu\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2249,8 +2464,17 @@
 "list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
+"\n"
+"Ajuda d'emergència:\n"
+" -p                   Reparació automàtica (sense preguntes)\n"
+" -n                   No facis cap canvi al sistema de fitxers\n"
+" -y                   Assumeix «sí» per a totes les preguntes\n"
+" -c                   Comprova si hi ha blocs erronis i afegeix-los a la "
+"llista de blocs erronis\n"
+" -f                   Força la comprovació encara que el sistema de fitxers "
+"s'hagi marcat com a net\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2261,33 +2485,39 @@
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
-msgstr ""
+msgstr "%s: %u/%u fitxers (%0d.%d%% no contigus), %u/%u blocs\n"
 
-#: e2fsck/unix.c:133
+# ind: indirect, dind: double indirect, tind: triple indirect (dpm)
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "     nombre de nodes-i amb blocs ind/dind/tind: %u/%u/%u\n"
+
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
 msgstr ""
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "en determinar si %s està muntat."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Avís!  %s està muntat.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s està muntat.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2295,7 +2525,7 @@
 "No es pot continuar, s'interromprà.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2304,410 +2534,435 @@
 "SEVERE filesystem damage.\a\a\a\n"
 "\n"
 msgstr ""
+"\n"
+"\n"
+"\a\a\a\aAVÍS!!!  L'execució de l'e2fsck en un sistema de fitxers muntat\n"
+"pot causar-li danys GREUS.\a\a\a\n"
+"\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Esteu segur que voleu continuar?"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "s'ha interromput la comprovació.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " conté un sistema de fitxers amb errors"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " no es va desmuntar correctament"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr ""
+" les característiques del superbloc primari són diferents de les del de la "
+"còpia de seguretat"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " s'ha muntat %u vegades sense haver estat comprovat"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr ""
+"té la darrera hora de comprovació del sistema de fitxers és en el futur"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
-msgstr " ha estat %u sense haver estat comprovat"
+msgstr " no s'ha comprovat des de fa %u dies"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", es forçarà la comprovació.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
-msgstr ""
+msgstr "%s: net, %u/%u fitxers, %u/%u blocs"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
-msgstr ""
+msgstr " (s'ha ajornat la comprovació; s'està utilitzant la bateria)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
-msgstr ""
+msgstr " (es comprovarà després del muntatge següent)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
-msgstr " (comprovació en %ld mesos)"
+msgstr " (es comprovarà en %ld mesos)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERROR: no s'ha pogut obrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
-msgstr ""
+msgstr "La versió dels atributs ampliats no és vàlida.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
-msgstr ""
+msgstr "Es desconeix l'opció ampliada: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Hi ha un error de sintaxi al fitxer de configuració de l'e2fsck (%s, línia #%"
+"d)\n"
+"\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "S'ha produït un error en validar el descriptor de fitxer %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 "Només es pot especificar una de les opcions -p/-a, -n o -y a la vegada."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'opció -t no està implementada en aquesta versió de l'e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
-msgstr ""
+msgstr "No s'ha pogut resoldre «%s»"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr ""
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr ""
+msgstr "No es poden utilitzar les opcions -c i -l/-L al mateix temps.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
+"E2FSCK_JBD_DEBUG «%s» no és un enter\n"
+"\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
 "Invalid non-numeric argument to -%c (\"%s\")\n"
 "\n"
 msgstr ""
+"\n"
+"L'argument no numèric de -%c no és vàlid («%s»)\n"
+"\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
-msgstr ""
+msgstr "Error: la versió de la biblioteca de l'ext2fs és massa antiga.\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "en intentar inicialitzar el programa"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
-msgstr ""
+msgstr "\tS'utilitza %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
-msgstr ""
+msgstr "cal un terminal per a les reparacions interactives"
 
-#: e2fsck/unix.c:983
-#, fuzzy, c-format
+#: e2fsck/unix.c:1010
+#, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s: %s fitxer nblocs midadelbloc\n"
+msgstr "%s: %s provant els blocs de còpia de seguretat...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
-msgstr ""
-
-#: e2fsck/unix.c:986
-msgid "Group descriptors look bad..."
-msgstr ""
+msgstr "Súperbloc no vàlid,"
 
 #: e2fsck/unix.c:1013
+msgid "Group descriptors look bad..."
+msgstr "Els descriptors de grup no estan en bon estat..."
+
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
 "\n"
 msgstr ""
+"La versió del sistema de fitxers és massa recent per a aquesta versió de "
+"l'e2fsck.\n"
+"(O bé el superbloc del sistema de fitxers està malmès)\n"
+"\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
-msgstr ""
+msgstr "Pot ser que això sigui una partició de mida zero?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
+"Cal que tingueu accés de %s al sistema de fitxers o bé que sigueu l'usuari "
+"primari\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
-msgstr ""
+msgstr "Pot ser que no existeixi el dispositiu o bé que sigui d'intercanvi?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
+"Pot ser que el sistema de fitxers l'hagi muntat o obert un altre programa de "
+"manera exclusiva?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
+"El disc està protegit contra escriptura; utilitzeu l'opció\n"
+"-n per a fer una comprovació de només-lectura del dispositiu.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
-msgstr ""
+msgstr "Hauríeu d'obtenir una versió més recent de l'e2fsck"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
-msgstr ""
+msgstr "en comprovar el registre de transaccions per a %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
-
-#: e2fsck/unix.c:1141
-#, c-format
-msgid "unable to set superblock flags on %s\n"
-msgstr ""
-
-#: e2fsck/unix.c:1147
-#, c-format
-msgid "while recovering ext3 journal of %s"
-msgstr ""
+"Avís: s'ometrà la recuperació del registre de canvis perquè s'està "
+"comprovant el sistema de fitxers en mode de només-lectura.\n"
 
 #: e2fsck/unix.c:1171
 #, c-format
+msgid "unable to set superblock flags on %s\n"
+msgstr "no s'han pogut definir els senyaladors del superbloc a %s\n"
+
+#: e2fsck/unix.c:1177
+#, c-format
+msgid "while recovering ext3 journal of %s"
+msgstr "en recuperar el registre de canvis ext3 de %s"
+
+#: e2fsck/unix.c:1201
+#, c-format
 msgid "%s has unsupported feature(s):"
-msgstr ""
+msgstr "%s té funcionalitats no implementades:"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
-msgstr ""
+msgstr "Avís: el funcionament amb compressió és experimentat.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr ""
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
-msgstr ""
+msgstr "en llegir el node-i dels blocs erronis"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
-msgstr ""
+msgstr "Això no és un bon presagi, però s'intentarà continuar...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
-msgstr ""
+msgstr "No s'ha pogut determinar la mida del registre de canvis"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
-msgstr ""
+msgstr "Creació del registre de canvis (%d blocs): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
+"\n"
+"\ten intentar crear el registre de canvis"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1317
 #, c-format
 msgid " Done.\n"
 msgstr " Fet.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
+"\n"
+"*** registre de canvis recreat - el sist. de fitxers torna a ser ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
-msgstr ""
+msgstr "S'està tornant a iniciar l'e2fsck des del començament...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "en reiniciar el context"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
-msgstr "%s: s'a cancel·lat l'e2fsck.\n"
+msgstr "%s: s'ha cancel·lat l'e2fsck.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
-msgstr ""
+msgstr "s'ha interromput"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
 "%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
 msgstr ""
+"\n"
+"%s: ***** S'HA MODIFICAT EL SISTEMA DE FITXERS *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
-msgstr ""
+msgstr "%s: ***** REINICIEU EL LINUX *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
 "%s: ********** WARNING: Filesystem still has errors **********\n"
 "\n"
 msgstr ""
+"\n"
+"%s: ********** AVÍS: el sistema de fitxers encara té errors **********\n"
+"\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1400
+msgid "while setting block group checksum info"
+msgstr "en establir la informació de suma de verificació del grup de blocs"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
-msgstr ""
+msgstr "sS"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
-msgstr ""
+msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
-msgstr ""
+msgstr "<s>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
-msgstr ""
+msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
-msgstr ""
+msgstr " (s/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
-msgstr ""
+msgstr "s'ha cancel·lat\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
-msgstr ""
+msgstr "sí\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
-msgstr ""
+msgstr "no\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
 "\n"
 msgstr ""
+"%s? no\n"
+"\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
+"%s? sí\n"
+"\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
-msgstr ""
+msgstr "sí"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
-msgstr ""
+msgstr "no"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
-msgstr ""
+msgstr "en tornar a intentar la lectura dels mapes de bits per a %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr ""
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "escriptura dels mapes de bits de bloc i de node-i"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr ""
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "en tornar a escriure els mapes de bits de bloc i de node-i per de %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr ""
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr ""
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2715,362 +2970,418 @@
 "%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n"
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
-
-#: e2fsck/util.c:332
-#, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr ""
+"\n"
+"\n"
+"%s: INCONSISTÈNCIA INESPERADA; EXECUTEU fsck MANUALMENT.\n"
+"\t(és a dir, sense les opcions -a o -p)\n"
 
 #: e2fsck/util.c:336
 #, c-format
-msgid "Memory used: %d, "
-msgstr ""
+msgid "Memory used: %dk/%dk (%dk/%dk), "
+msgstr "Memòria utilitzada: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:340
+#, c-format
+msgid "Memory used: %d, "
+msgstr "Memòria utilitzada: %d, "
+
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
-msgstr ""
+msgstr "temps: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
-msgstr ""
+msgstr "temps transcorregut: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
-msgstr ""
+msgstr "en llegir el node-i %ld a %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
+msgstr "en escriure el node-i %ld a %s"
+
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
 msgstr ""
 
-#: misc/badblocks.c:61
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr "fet                                \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
+"Forma d'ús: %s [-b mida_del_bloc] [-i fitxer_d'entrada] [-o "
+"fitxer_de_sortida] [-svwnf]\n"
+"       [-c blocs_a_la_vegada] [-d factor_de_retard_entre_lectures] [-e "
+"blocs_erronis_màx]\n"
+"       [-p nombre_de_passos] [-t patró_de_prova [-t patró_de_prova [...]]]\n"
+"       dispositiu [darrer_bloc [bloc_d'inici]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
+"%s: les opcions -n i -w són mutualment exclusives.\n"
+"\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
-msgstr ""
+msgstr "Comprovació amb un patró arbitrari: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
-msgstr ""
+msgstr "Comprovació amb el patró 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
-msgstr ""
+msgstr "durant la cerca"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
-msgstr ""
+msgstr "Valor estrany (%ld) a do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
-msgstr ""
+msgstr "durant l'execució de ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
-msgstr ""
+msgstr "en iniciar la iteració per la llista de blocs erronis"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
-msgstr ""
+msgstr "en ubicar els búfers"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
-msgstr ""
+msgstr "Comprovació dels blocs %lu a %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
-msgstr ""
+msgstr "S'està comprovant si hi ha blocs erronis en mode de només-lectura\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
-msgstr ""
+msgstr "S'està comprovant si hi ha blocs erronis (prova de només-lectura): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Hi ha massa blocs erronis, s'interromprà la comprovació\n"
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
+"S'està comprovant si hi ha blocs erronis en mode de lectura-escriptura\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
-msgstr ""
+msgstr "Dels blocs %lu a %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
-msgstr ""
+msgstr "Lectura i comparació: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
+"S'està comprovant si hi ha blocs erronis en mode de lectura-escriptura no "
+"destructiu\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
+"S'està comprovant si hi ha blocs erronis (prova en mode de lectura-"
+"escriptura no destructiu)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
+"\n"
+"S'ha interceptat una interrupció; s'iniciaran les tasques de neteja\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
-msgstr ""
+msgstr "durant l'escriptura de les dades de prova, bloc %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s està muntat; "
 
-#: misc/badblocks.c:796
+# FIXME: Hope - esperem ? (dpm)
+#: misc/badblocks.c:923
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
-
-#: misc/badblocks.c:801
-msgid "it's not safe to run badblocks!\n"
-msgstr ""
-
-#: misc/badblocks.c:806 misc/util.c:167
-#, c-format
-msgid "%s is apparently in use by the system; "
-msgstr ""
-
-#: misc/badblocks.c:809
-msgid "badblocks forced anyway.\n"
-msgstr ""
-
-#: misc/badblocks.c:871
-#, c-format
-msgid "bad block size - %s"
-msgstr ""
+"s'ha forçat badblocks de totes maneres.  Segurament /etc/mtab sigui "
+"incorrecte.\n"
 
 #: misc/badblocks.c:928
+msgid "it's not safe to run badblocks!\n"
+msgstr "l'execució de badblocks no és segura!\n"
+
+#: misc/badblocks.c:933 misc/util.c:167
+#, c-format
+msgid "%s is apparently in use by the system; "
+msgstr "%s està essent utilitzat pel sistema; "
+
+#: misc/badblocks.c:936
+msgid "badblocks forced anyway.\n"
+msgstr "s'ha forçat badblocks de totes maneres.\n"
+
+#: misc/badblocks.c:956
+#, c-format
+msgid "invalid %s - %s"
+msgstr "%s no vàlid - %s"
+
+#: misc/badblocks.c:1015
+#, c-format
+msgid "bad block size - %s"
+msgstr "mida del bloc erroni - %s"
+
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
-msgstr ""
+msgstr "no es pot assignar memòria per al patró_de_prova - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr ""
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
+"Només es pot especificar un patró_de_prova com a màxim en mode de només-"
+"lectura"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
+"No es pot utilitzar un patró_de_prova arbitrari en mode de només-lectura"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
+"No s'ha pogut determinar la mida del dispositiu;\n"
+"l'haureu d'especificar manualment\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
-msgstr ""
+msgstr "en intentar determinar la mida del dispositiu"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
+#: misc/badblocks.c:1128
+msgid "last block"
+msgstr "últim bloc"
+
+#: misc/badblocks.c:1134
+msgid "first block"
+msgstr "primer bloc"
+
+#: misc/badblocks.c:1137
 #, c-format
-msgid "invalid blocks count - %s"
-msgstr ""
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "bloc d'inici no vàlid (%lu): hauria de ser menor de %lu"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr ""
-
-#: misc/badblocks.c:1015
-#, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr ""
-
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 msgid "while creating in-memory bad blocks list"
-msgstr ""
+msgstr "en crear la llista de blocs erronis en memòria"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 msgid "while adding to in-memory bad block list"
-msgstr ""
+msgstr "en afegir a la llista de blocs erronis en memòria"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
-msgstr ""
+msgstr "Pas completat; s'han trobat %u blocs erronis.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr ""
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
+msgstr "Forma d'ús: %s [-RVf] [-+=AacDdijsSu] [-v versió] fitxers...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
-msgstr ""
+msgstr "versió no vàlida - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
-msgstr ""
+msgstr "en intentar mostrar la informació de %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
-msgstr ""
+msgstr "S'han establert els senyaladors de %s com a "
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
-msgstr ""
+msgstr "en llegir els senyaladors a %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
-msgstr ""
+msgstr "en establir els senyaladors a %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
-msgstr ""
+msgstr "S'ha establert la versió de %s a %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
-msgstr ""
+msgstr "en establir la versió a %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
-msgstr ""
+msgstr "No s'ha pogut assignar la variable del camí a chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
-msgstr ""
+msgstr "= no és compatible amb - i +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
-msgstr ""
+msgstr "Cal utilitzar «-v», =, - o +\n"
 
 #: misc/dumpe2fs.c:53
 #, c-format
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr ""
-
-#: misc/dumpe2fs.c:162
-#, c-format
-msgid "Group %lu: (Blocks "
-msgstr ""
+"Forma d'ús: %s [-bfhixV] [-ob superbloc] [-oB midadelbloc] dispositiu\n"
 
 #: misc/dumpe2fs.c:168
 #, c-format
+msgid "Group %lu: (Blocks "
+msgstr "Grup %lu: (blocs "
+
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "Suma de verificació 0x%04x, nodes-i no utilitzats %d\n"
+
+#: misc/dumpe2fs.c:178
+#, c-format
 msgid "  %s superblock at "
 msgstr " superbloc %s a "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
-msgstr ""
+msgstr "Primari"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
-msgstr ""
+msgstr "Còpia de seguretat"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
-msgstr ""
+msgstr ", descriptors de grup a "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
 "  Reserved GDT blocks at "
 msgstr ""
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
-msgstr ""
-
-#: misc/dumpe2fs.c:190
-msgid "  Block bitmap at "
-msgstr ""
-
-#: misc/dumpe2fs.c:195
-msgid ", Inode bitmap at "
-msgstr ""
+msgstr " descriptor de grup a "
 
 #: misc/dumpe2fs.c:200
+msgid "  Block bitmap at "
+msgstr " Mapa de bits del bloc a "
+
+#: misc/dumpe2fs.c:205
+msgid ", Inode bitmap at "
+msgstr ", mapa de bits del node-i a "
+
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
 msgstr ""
+"\n"
+"  taula de nodes-i a "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
+"\n"
+"  %u blocs lliures, %u nodes-i lliures, %u directoris %s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u nodes-i no utilitzats\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Blocs liures: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Nodes-i lliures: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
-msgstr ""
+msgstr "en imprimir la llista de blocs erronis"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:270
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Blocs erronis: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
-msgstr ""
+msgstr "en llegir el node-i del registre de transaccions"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
-msgstr ""
+msgstr "Mida del registre de canvis:              "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
-msgstr ""
+msgstr "en llegir el superbloc del registre de transaccions"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
+"No s'han trobat els números màgics del superbloc del registre de transaccions"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:331
 #, c-format
 msgid ""
 "\n"
@@ -3081,28 +3392,35 @@
 "Journal start:            %u\n"
 "Journal number of users:  %u\n"
 msgstr ""
+"\n"
+"Mida de bloc del reg. de canvis:      %u\n"
+"Llargada del reg. de canvis:          %u\n"
+"Primer bloc del reg. de canvis:       %u\n"
+"Seqüència del reg. de canvis:         0x%08x\n"
+"Inici del registre de canvis:         %u\n"
+"Nombre d'usuaris del reg. de canvis:  %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
-msgstr ""
+msgstr "Usuaris del registre de canvis:       %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr ""
+msgstr "No s'ha pogut assignar memòria per a analitzar les opcions\n"
 
-#: misc/dumpe2fs.c:363
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:386
+#, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr "mida de bloc invàlida - %s"
+msgstr "Paràmetre del superbloc no vàlid: %s\n"
 
-#: misc/dumpe2fs.c:378
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:401
+#, c-format
 msgid "Invalid blocksize parameter: %s\n"
-msgstr "mida de bloc invàlida - %s"
+msgstr "Paràmetre de mida de bloc no vàlida: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:412
 #, c-format
 msgid ""
 "\n"
@@ -3116,79 +3434,77 @@
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
-msgstr ""
+msgstr "\tEn utilitzar %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
-msgstr ""
+msgstr "No s'ha trobat un súperbloc del sistema de fitxers vàlid.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
 "%s: %s: error reading bitmaps: %s\n"
 msgstr ""
+"\n"
+"%s: %s: s'ha produït un error en llegir els mapes de bits: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
-msgstr ""
+msgstr "Forma d'ús: %s [-rsI] dispositiu fitxer_imatge\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr ""
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
-msgstr ""
+msgstr "en escriure el superbloc"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
-msgstr ""
+msgstr "en escriure la taula de nodes-i"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
-msgstr ""
+msgstr "en escriure el mapa de bits dels blocs"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
-msgstr ""
+msgstr "en escriure el mapa de bits dels nodes-i"
 
 #: misc/e2label.c:57
 #, c-format
 msgid "e2label: cannot open %s\n"
-msgstr ""
+msgstr "e2label: no es pot obrir %s\n"
 
 #: misc/e2label.c:62
 #, c-format
 msgid "e2label: cannot seek to superblock\n"
-msgstr ""
+msgstr "e2label: no es pot anar al súperbloc\n"
 
 #: misc/e2label.c:67
 #, c-format
 msgid "e2label: error reading superblock\n"
-msgstr ""
+msgstr "e2label: s'ha produït un error en llegir el súperbloc\n"
 
 #: misc/e2label.c:71
 #, c-format
 msgid "e2label: not an ext2 filesystem\n"
-msgstr ""
+msgstr "e2label: aquest no és un sistema de fitxers ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Avís: l'etiqueta és massa llarga, es truncarà.\n"
@@ -3196,108 +3512,171 @@
 #: misc/e2label.c:99
 #, c-format
 msgid "e2label: cannot seek to superblock again\n"
-msgstr ""
+msgstr "e2label: no es pot tornar a anar al súperbloc\n"
 
 #: misc/e2label.c:104
 #, c-format
 msgid "e2label: error writing superblock\n"
 msgstr "e2lable: s'ha produït un error en escriure el superbloc\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Forma d'ús: e2label dispositiu [etiquetanova]\n"
 
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Forma d'ús: %s <fitxer de transaccions> <sistema de fitxers>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "No s'han pogut llegir les dades del sistema de fitxers \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Ha fallat la tdb_fetch %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "L'hora de muntatge del sistema de fitxers no concorda amb %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "L'UUID del sistema de fitxers no concorda \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "Ha fallat la tdb_open %s\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "S'ha produït un error en determinar si %s està muntat.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+"e2undo només s'hauria d'executar en un sistema de fitxers sense muntar\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "No s'ha pogut obrir %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+"S'ha tornat a dur a terme la transacció de mida %zd a la ubicació %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Ha fallat l'escriptura %s\n"
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
 msgstr "AVÍS: no s'ha pogut obrir %s: %s\n"
 
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
 msgstr "AVÍS: format erroni a la línia %d de %s\n"
 
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
 "\tshould fix your /etc/fstab file as soon as you can.\n"
 "\n"
 msgstr ""
+"\a\a\aAVÍS: El fitxer /etc/fstab no conté el camp passno de l'fsck.\n"
+"\tS'intentarà areglar-ho temporalment, però ho hauríeu de\n"
+"\tsolucionar arreglant el fitxer /etc/fstab com més aviat millor.\n"
+"\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: no s'ha trobat\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
-msgstr ""
+msgstr "%s: wait: no hi ha cap més procés fill!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr ""
+msgstr "Avís... %s per al dispositiu %s ha sortit amb el senyal %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
-msgstr ""
+msgstr "%s %s: l'estat és %x, cosa que no hauria de succeir mai.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
-msgstr ""
+msgstr "S'ha finalitzat amb %s (estat de sortida %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
-msgstr ""
+msgstr "%s: s'ha produït l'error %d en executar l'fsck.%s per a %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
+"O bé tots o cap dels sistemes de fitxers passats a l'opció -t s'han de "
+"prefixar\n"
+"amb «no» o «!».\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
-msgstr ""
+msgstr "No s'ha pogut assignar memòria per al sistema de fitxers\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
-msgstr ""
+msgstr "fsck: no es pot comprovar %s: no s'ha trobat el fsck.%s\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
-msgstr ""
+msgstr "S'estan comprovant tots els sistemes de fitxers.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
-msgstr ""
+msgstr "--en espera-- (pas %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1081
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
+"Forma d'ús: fsck [-AMNPRTV] [ -C [ fd ] ] [-t tipusdesistdefitxers] [opcions-"
+"delsistdefitxers] [sistdefitxers ...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: s'han especificat massa dispositius\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: s'han especificat massa arguments\n"
@@ -3317,233 +3696,246 @@
 msgid "While reading version on %s"
 msgstr "En llegir la versió a %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "S'està executant l'ordre: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "en intentar executar «%s»"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "en processar la llista de blocs erronis des del programa"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
+"Els blocs %u fins a %u han d'ésser correctes per a poder crear un sistema de "
+"fitxers.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "S'està interrompent...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
 "\tbad blocks.\n"
 "\n"
 msgstr ""
+"Avís: el súperbloc o descriptors de grup de còpia de seguretat al bloc %u\n"
+"\tcontenen blocs erronis.\n"
+"\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "en marcar els blocs erronis com a utilitzats"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "fet                            \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr ""
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
-msgstr ""
+msgstr "Escriptura de les taules de nodes-i:"
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %u: %s\n"
 msgstr ""
+"\n"
+"No s'han pogut escriure %d blocs a la taula de nodes-i amb inici a %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "en crear el directori arrel"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
-msgstr ""
+msgstr "en llegir el node arrel"
+
+#: misc/mke2fs.c:428
+msgid "while setting root inode ownership"
+msgstr "en establir la propietat del node-i arrel"
+
+#: misc/mke2fs.c:446
+msgid "while creating /lost+found"
+msgstr "en crear /lost+found"
+
+#: misc/mke2fs.c:453
+msgid "while looking up /lost+found"
+msgstr "en cercar el /lost+found"
+
+#: misc/mke2fs.c:466
+msgid "while expanding /lost+found"
+msgstr "en expandir el /lost+found"
+
+#: misc/mke2fs.c:481
+msgid "while setting bad block inode"
+msgstr "en establir el node-i de blocs erronis"
 
 #: misc/mke2fs.c:508
-msgid "while setting root inode ownership"
-msgstr ""
-
-#: misc/mke2fs.c:526
-msgid "while creating /lost+found"
-msgstr ""
-
-#: misc/mke2fs.c:533
-msgid "while looking up /lost+found"
-msgstr ""
-
-#: misc/mke2fs.c:543
-msgid "while expanding /lost+found"
-msgstr ""
-
-#: misc/mke2fs.c:559
-msgid "while setting bad block inode"
-msgstr ""
-
-#: misc/mke2fs.c:591
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
-msgstr ""
+msgstr "S'ha exhaurit la memòria en esborrar els sectors %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Avís: no s'ha pogut llegir el bloc 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Avís: no s'ha pogut esborrar el sector %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
-msgstr ""
+msgstr "en inicialitzar el súperbloc del registre de transaccions"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
-msgstr ""
+msgstr "S'estan escrivint zeros al dispositiu de registre de transaccions:"
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr ""
+"en escriure zeros al dispositiu de registre de transaccions (bloc %u, "
+"recompte %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
-msgstr ""
+msgstr "en escriure el súperbloc del registre de transaccions"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
 "\n"
 msgstr ""
+"avís: %u blocs no utilitzats.\n"
+"\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etiqueta del sistema de fitxers=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Tipus de sistema operatiu: "
 
-#: misc/mke2fs.c:684
+# FIXME: log
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
-msgstr ""
+msgstr "Mida del bloc=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
-msgstr ""
+msgstr "Mida del fragment=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
-msgstr ""
+msgstr "%u nodes-i, %u blocs\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blocs (%2.2f%%) reservats per al superusuari\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Bloc de dades inicial=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
-msgstr ""
+msgstr "Màxim de blocs del sistema de fitxers=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
-msgstr ""
+msgstr "%u grups de blocs\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
-msgstr ""
+msgstr "%u grup de blocs\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocs per grup, %u fragments per grup\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u nodes-i per grup\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
-msgstr ""
+msgstr "Còpies de seguretat del superbloc desades en els blocs: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
-msgstr ""
+msgstr "Paràmetre de canvi de mida no vàlid: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
+"El màxim del canvi de mida ha de ser més gran que la mida del sistema de "
+"fitxers.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
+"El canvi de mida en línia no és compatible amb sistemes de fitxers de "
+"revisió 0\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3556,11 +3948,12 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3568,248 +3961,350 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Error de sintaxi en el fitxer de configuració del mke2fs (%s, línia no. %d)\n"
+"\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
-msgstr ""
+msgstr "S'ha definit una opció del sistema de fitxers no vàlida: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Avís: no s'ha definit el sistema de fitxers %s al fitxer mke2fs.conf.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Segurament cal que instal·leu un fitxer mke2fs.conf actualitzat.\n"
+"\n"
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid "invalid block size - %s"
 msgstr "mida de bloc invàlida - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
+"Avís: la mida de bloc %d no es pot utilitzar a la majoria dels sistemes.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "mida de fragment invàlida - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
-msgstr ""
+msgstr "Avís: els fragments no són compatibles. S'ignorarà l'opció -f\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
-msgstr ""
+msgstr "Nombre no vàlid per als blocs per grup"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
-msgstr ""
+msgstr "el nombre de blocs per grup ha de ser múltiple de 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+msgid "Illegal number for flex_bg size"
+msgstr "Número no vàlid per a la mida de flex_bg"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr "la mida de flex_bg ha de ser una potència de 2"
+
+#: misc/mke2fs.c:1239
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
-msgstr ""
+msgstr "ràtio de nodes-i %s no vàlida (mín %d/màx %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
-msgstr ""
+msgstr "percentatge de blocs reservats no vàlid - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
-msgstr ""
+msgstr "nivell de revisió erroni - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
-msgstr ""
+msgstr "mida de node-i errònia - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
-msgstr ""
+msgstr "nombre de nodes-i no vàlid - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
-msgstr ""
+msgstr "en intentar obrir el dispositiu de registre de transaccions %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
+"La mida de bloc del dispositiu de registre de transaccions (%d) és menor que "
+"la mida mínima de bloc %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr ""
+"Mida de bloc del dispositiu de registre de transaccions a utilitzar: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "nombre de blocs no vàlid - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "sistema de fitxers"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: la mida del dispositiu %s és massa gran per a expressar-la en 32 bits\n"
+"\ts'utilitzarà una mida de bloc de %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:371
 msgid "while trying to determine filesystem size"
 msgstr "en intentar determinar la mida del sistema de fitxers"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
+"No s'ha pogut determinar la mida del dispositiu; hau d'especificar\n"
+"la mida del sistema de fitxers\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
 "\ta modified partition being busy and in use.  You may need to reboot\n"
 "\tto re-read your partition table.\n"
 msgstr ""
+"La mida del dispositiu s'ha llegit com a zero. O bé heu especificat una\n"
+"\tpartició no vàlida, o bé la taula de particions no s'ha tornat a llegir\n"
+"\tdesprés d'executar l'fdisk degut a una partició ocupada i en ús. Pot\n"
+"\tser que hàgiu de reiniciar perquè es pugui tornar a llegir la taula de.\n"
+"\tparticions.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr ""
+"La mida del sistema de fitxers és més gran que la mida aparent del "
+"dispositiu."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "No s'ha pogut analitzar la llista de sistemes de fitxers\n"
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
+"Les funcions del sistema de fitxers no són compatibles amb sistemes de "
+"fitxers de revisió 0\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
+"Els súperblocs dispersos no són compatibles amb sistemes de fitxers de "
+"revisió 0\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1568
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
+"Els registres de canvis no són compatibles amb sistemes de fitxers de "
+"revisió 0\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Les funcions resize_inode i meta_bg no són compatibles.\n"
+"No es poden activar de manera simultània.\n"
+
+#: misc/mke2fs.c:1603
 msgid "while trying to determine hardware sector size"
 msgstr "en intentar determinar la mida del sector del maquinari"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
-msgstr ""
+msgstr "el nombre de blocs per grup està fora de l'interval permès"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
+"La funció flex_bg no està habilitada, per la qual cosa no és permès "
+"especificar la mida de flex_bg"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
-msgstr ""
+msgstr "mida de node-i no vàlida (%d) (mín %d/màx %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
-msgstr ""
+msgstr "hi ha massa nodes-i (%llu), voleu incrementar-ne la ràtio?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
+"hi ha massa nodes-i (%llu), hauríeu d'especificar-ne un nombre menor a 2^32"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
 "\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
 "\tor lower inode count (-N).\n"
 msgstr ""
+"El producte inode_size (%u) * inodes_count (%u) és massa gran per a\n"
+"\tun sistema de fitxers amb %lu blocs. Especifiqueu una inode_ratio (-i)\n"
+"\tmajor o bé un nombre menor de nodes-i (-N).\n"
 
-#: misc/mke2fs.c:1591
-msgid "while setting up superblock"
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, c-format
+msgid "while trying to delete %s"
+msgstr "en intentar suprimir %s"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
 msgstr ""
+"S'està sobreescrivint el sistema de fitxers existent; la qual cosa es pot "
+"desfer si escriviu:\n"
+"    e2undo %s %s\n"
+"\n"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1885
+msgid "while setting up superblock"
+msgstr "en configurar el súperbloc"
+
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "sistema operatiu desconegut - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "en intentar assignar les taules del sistema de fitxers"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
-msgstr ""
+msgstr "en escriure zeros al bloc %u al final del sistema de fitxers"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 msgid "while reserving blocks for online resize"
-msgstr ""
+msgstr "en reservar blocs per al canvi de mida en línia"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
-msgstr ""
+msgstr "registre de transaccions"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
-msgstr ""
+msgstr "Addició d'un registre de transaccions al dispositiu %s:"
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
+"\n"
+"\ten intentar afegir un registre de canvis al dispositiu %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
-msgstr ""
+msgstr "fet\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Creació del registre de transaccions (%u blocs): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
+"Escriptura de la informació dels súperblocs i de comptabilitat del sistema "
+"de fitxers:"
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
 "Warning, had trouble writing out superblocks."
 msgstr ""
+"\n"
+"Avís: hi ha hagut problemes en escriure els súperblocs."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -3823,11 +4318,46 @@
 msgid "Usage: mklost+found\n"
 msgstr "Forma d'ús: mklost+found\n"
 
-#: misc/tune2fs.c:91
-msgid "Please run e2fsck on the filesystem.\n"
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
 msgstr ""
+"Forma d'ús:  %s dispositiu...\n"
+"\n"
+"Mostra la informació de particionament per a cada dispositiu especificat.\n"
+"Per exemple: %s /dev/hda\n"
+"\n"
 
-#: misc/tune2fs.c:98
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "No es pot obrir %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "No es pot obtenir la geometria de %s: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "No es pot obtenir la mida de %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   inici=%8d mida=%8lu final=%8d\n"
+
+#: misc/tune2fs.c:96
+msgid "Please run e2fsck on the filesystem.\n"
+msgstr "Hauríeu d'executar l'e2fsck en el sistema de fitxers.\n"
+
+#: misc/tune2fs.c:103
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -3835,163 +4365,214 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
-msgstr ""
+msgstr "en intentar obrir el registre de transaccions extern"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
-msgstr ""
+msgstr "%s no és un dispositiu de registre de transaccions.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
-msgstr ""
+msgstr "No s'ha trobat el súperbloc del registre de transaccions\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
+"No s'ha trobat l'UUID del sistema de fitxers en el dispositiu del registre "
+"de transaccions.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
-msgstr ""
+msgstr "NO s'ha suprimit el registre de transaccions\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
-msgstr ""
-
-#: misc/tune2fs.c:268
-msgid "while reading bitmaps"
-msgstr ""
-
-#: misc/tune2fs.c:275
-msgid "while clearing journal inode"
-msgstr ""
+msgstr "S'ha suprimit el registre de transaccions\n"
 
 #: misc/tune2fs.c:286
-msgid "while writing journal inode"
-msgstr ""
+msgid "while reading bitmaps"
+msgstr "en llegir els mapes de bits"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:294
+msgid "while clearing journal inode"
+msgstr "en netejar el node-i del registre de transaccions"
+
+#: misc/tune2fs.c:305
+msgid "while writing journal inode"
+msgstr "en escriure al node-i del registre de transaccions"
+
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
-msgstr ""
+msgstr "S'ha establert una opció de muntatge no vàlida: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr ""
+msgstr "La funció de neteja del sistema de fitxers «%s» no està implementada.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:362
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
+"L'establiment de la funció del sistema de fitxers «%s» no està implementada.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
+"La funció has_journal només es pot esborrar si el sistema de fitxers no\n"
+"està muntat, o bé està muntat en mode de només lectura.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
+"El senyalador needs_recovery està establert. Hauríeu d'executar l'e2fsck\n"
+"abans de netejar el senyalador has_journal.\n"
 
-#: misc/tune2fs.c:428
-msgid "The filesystem already has a journal.\n"
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:423
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"La funció huge_file només es pot esborrar si el sistema de fitxers no\n"
+"està muntat, o bé està muntat en mode de només lectura.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(i reinicieu després)\n"
+
+#: misc/tune2fs.c:472
+msgid "The filesystem already has a journal.\n"
+msgstr "El sistema de fitxers ja té un registre de transaccions.\n"
+
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr ""
+"\n"
+"\ten intentar obrir el registre de transaccions a %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
-msgstr ""
+msgstr "Creació del registre de transaccions al dispositiu %s:"
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
-msgstr ""
+msgstr "en afegir un sistema de fitxers al registre de transaccions a %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
-msgstr ""
+msgstr "Creació del node-i del registre de transaccions:"
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
 msgstr ""
+"\n"
+"\ten intentar crear el fitxer del registre de transaccions"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
-msgstr ""
+msgstr "No s'ha pogut analitzar l'especificador de data/hora: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
-msgstr ""
+msgstr "nombre de muntatges erroni - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, c-format
 msgid "bad error behavior - %s"
-msgstr ""
+msgstr "comportament d'error erroni - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
-msgstr ""
+msgstr "nom de grup/gid erroni - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
-msgstr ""
+msgstr "interval erroni - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
-msgstr ""
+msgstr "ràtio de blocs reservats errònia - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
-msgstr ""
+msgstr "-o només es pot especificar una vegada"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
-msgstr ""
+msgstr "-O només es pot especificar una vegada"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
-msgstr ""
+msgstr "número de blocs reservats erroni - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
-msgstr ""
+msgstr "nom d'usuari/uid erroni - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:806
+#, c-format
+msgid "bad inode size - %s"
+msgstr "mida del node-i errònia - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "La mida del node-i ha de ser una potència de 2 - %s"
+
+#: misc/tune2fs.c:900
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:915
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:930
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Algorisme de resum no vàlid: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Establiment de l'algorisme de resum predeterminat a %s (%d)\n"
+
+#: misc/tune2fs.c:944
 #, c-format
 msgid ""
 "\n"
@@ -4002,140 +4583,199 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr ""
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "blocs a moure"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1471
+#, fuzzy, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Si voleu desfer les operacions del tune2fs executeu l'ordre\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr "La mida del node-i ja és %d\n"
+
+#: misc/tune2fs.c:1534
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "La reducció de la mida del node-i no està implementada\n"
+
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
-msgstr ""
+msgstr "Establiment del nombre màxim de muntatges a %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
-msgstr ""
+msgstr "Establiment del nombre de muntatges actual a %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, c-format
 msgid "Setting error behavior to %d\n"
-msgstr ""
+msgstr "Establiment del comportament d'error a %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
-msgstr ""
+msgstr "Establiment del GID dels blocs reservats a %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
-msgstr ""
+msgstr "Establiment de l'interval entre comprovacions a %lu segons\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
-msgstr ""
+msgstr "el nombre de blocs reservats és massa gran (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
-msgstr ""
+msgstr "Establiment del nombre de blocs reservats a %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
+"\n"
+"El sitema de fitxers ja té súperblocs dispersos.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
+"\n"
+"S'ha establert el senyalador de súperbloc dispers. %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
+"\n"
+"La neteja del senyalador de súperbloc dispers no està implementada.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
-msgstr ""
+msgstr "Establiment de la darrera comprovació del sistema de fitxers a %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
-msgstr ""
+msgstr "Establiment de l'UID dels blocs reservats a %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
+msgstr "El format de l'UUID no és vàlid\n"
+
+#: misc/tune2fs.c:1712
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"La mida del node-i només es pot canviar quan el sistema de fitxers està "
+"desmuntat.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"S'ha produït un error en canviar la mida del node-i.\n"
+"Executeu l'e2undo per a desfer els canvis al sistema de fitxers. \n"
+
+#: misc/tune2fs.c:1735
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Establiment de la mida de node-i a %lu\n"
+
+#: misc/tune2fs.c:1745
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1750
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
 #: misc/util.c:72
 msgid "Proceed anyway? (y,n) "
-msgstr ""
+msgstr "Voleu continuar de totes maneres? (s,n)"
 
 #: misc/util.c:93
 #, c-format
 msgid "Could not stat %s --- %s\n"
-msgstr ""
+msgstr "No s'ha pogut fer al crida stat %s --%s\n"
 
 #: misc/util.c:96
 msgid ""
 "\n"
 "The device apparently does not exist; did you specify it correctly?\n"
 msgstr ""
+"\n"
+"Sembla que el dispositiu no existeix. Assegureu-vos que l'heu especificat "
+"correctament\n"
 
 #: misc/util.c:107
 #, c-format
 msgid "%s is not a block special device.\n"
-msgstr ""
+msgstr "el %s no és un dispositiu especial de blocs.\n"
 
 #: misc/util.c:136
 #, c-format
 msgid "%s is entire device, not just one partition!\n"
-msgstr ""
+msgstr "%s és el dispositiu complet, no pas només una partició\n"
 
 #: misc/util.c:158
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
+"s'ha forçat el mke2fs de totes maneres. Amb una mica de sort el fitxer /etc/"
+"mtab és incorrecte.\n"
 
 #: misc/util.c:163
 #, c-format
 msgid "will not make a %s here!\n"
-msgstr ""
+msgstr "no es farà un %s aquí\n"
 
 #: misc/util.c:170
 msgid "mke2fs forced anyway.\n"
-msgstr ""
+msgstr "s'ha forçat el mke2fs de totes maneres.\n"
 
 #: misc/util.c:186
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr ""
+"No s'ha pogut ubicat memòria per a analitzar les opcions del registre de "
+"transaccions\n"
 
 #: misc/util.c:228
 msgid ""
@@ -4149,7 +4789,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 
@@ -4158,6 +4798,8 @@
 "\n"
 "Filesystem too small for a journal\n"
 msgstr ""
+"\n"
+"El sistema de fitxers és massa petit per a un registre de transaccions\n"
 
 #: misc/util.c:265
 #, c-format
@@ -4172,6 +4814,9 @@
 "\n"
 "Journal size too big for filesystem.\n"
 msgstr ""
+"\n"
+"La mida del registre de transaccions és massa gran per al sistema de "
+"fitxers.\n"
 
 #: misc/util.c:283
 #, c-format
@@ -4183,129 +4828,245 @@
 #: misc/uuidgen.c:31
 #, c-format
 msgid "Usage: %s [-r] [-t]\n"
-msgstr ""
+msgstr "Forma d'ús: %s [-r] [-t]\n"
 
 #: resize/extent.c:196
 msgid "# Extent dump:\n"
-msgstr ""
+msgstr "# Bolcat de l'extensió:\n"
 
+# FIXME: «Sorted» (dpm)
 #: resize/extent.c:197
 #, c-format
 msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
-msgstr ""
+msgstr "#\tNúm=%d, Mida=%d, Cursor=%d, Ordenat=%d\n"
 
 #: resize/extent.c:200
 #, c-format
 msgid "#\t\t %u -> %u (%d)\n"
-msgstr ""
+msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-
-#: resize/main.c:61
-msgid "Extending the inode table"
-msgstr ""
+"Forma d'ús: %s [-d senyaladors_de_depuració] [-f] [-F] [-M] [-P] [-p] "
+"dispositiu [mida nova]\n"
+"\n"
 
 #: resize/main.c:64
-msgid "Relocating blocks"
-msgstr ""
+msgid "Extending the inode table"
+msgstr "Ampliació de la taula de nodes-i"
 
 #: resize/main.c:67
-msgid "Scanning inode table"
-msgstr ""
+msgid "Relocating blocks"
+msgstr "Reubicació dels blocs"
 
 #: resize/main.c:70
-msgid "Updating inode references"
-msgstr ""
+msgid "Scanning inode table"
+msgstr "Escaneig de la taula de nodes-i"
 
 #: resize/main.c:73
-msgid "Moving inode table"
-msgstr ""
+msgid "Updating inode references"
+msgstr "Actualització de les referències dels nodes-i"
 
 #: resize/main.c:76
-msgid "Unknown pass?!?"
-msgstr ""
+msgid "Moving inode table"
+msgstr "Trasllat de la taula de nodes-i"
 
 #: resize/main.c:79
+msgid "Unknown pass?!?"
+msgstr "Pas desconegut!?"
+
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
-msgstr ""
+msgstr "Inici del pas %d (màx = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:264
 #, c-format
 msgid "while opening %s"
-msgstr ""
+msgstr "en obrir %s"
 
-#: resize/main.c:265
+#: resize/main.c:276
 #, c-format
 msgid "while getting stat information for %s"
-msgstr ""
+msgstr "eon obtenir la informació d'«stat» per a %s"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
 msgstr ""
+"%s: la combinació de les funcions flex_bg i\n"
+"\t!resize_inode no és compatible amb el resize2fs.\n"
 
-#: resize/main.c:353
+#: resize/main.c:345
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Mida mínima estimada del sistema de fitxers: %u\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "mida de node-i errònia - %s"
+
+#: resize/main.c:394
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:377
+#: resize/main.c:418
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
 "You requested a new size of %u blocks.\n"
 "\n"
 msgstr ""
+"La partició (o dispositiu) contenidora té una mida de només %u (%dk) blocs.\n"
+"N'heu requerit una mida nova de %u blocs.\n"
+"\n"
 
-#: resize/main.c:384
+#: resize/main.c:425
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
+"El sistema de fitxer ja té %u blocs. No cal fer res\n"
+"\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
+"Executeu «e2fsck -f %s» primer.\n"
+"\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
 msgstr "en intentar redimensionar %s"
 
-#: resize/main.c:411
+#: resize/main.c:452
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
 "\n"
 msgstr ""
+"El sistema de fitxers a %s té ara una mida de %u blocs.\n"
+"\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+"El sistema de fitxers a %s està muntat a %s; cal un canvi de mida en línia\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "La reducció de mida en línia de %u a %u no és compatible.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "El sistema de fitxers no és compatible amb el canvi de mida en línia"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "en intentar obrir el punt de muntatge %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "S'ha denegat el permís per a canviar la mida del sistema de fitxers"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "El nucli no és compatible amb el canvi de mida en línia"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "En comprovar la compatibilitat amb el canvi de mida en línia"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Canvi de mida en línia de %s a %u (%dk) blocs.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "En intentar ampliar el darrer grup"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "En intentar afegir el grup #%d"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+"El sistema de fitxers a %s està muntat a %s, i aquest sistema no és "
+"compatible amb el canvi de mida en línia.\n"
+
+#: resize/resize2fs.c:322
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "el nombre de nodes-i (%llu) ha de ser menor que %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "blocs reservats"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "blocs a moure"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr "blocs de metadades"
 
-#: resize/resize2fs.c:1550
+# FIXME: (dpm)
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr ""
+msgstr "Això no hauria de passar mai: canvi de mida del node-i malmesa\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr ""
+#~ "El @S no té un senyalador «has_journal» (té_@j), però té el @j ext3 %s.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "S'ha produït un error suprimir l'extensió: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr ""
+#~ "Voleu tornar a crear el jornal per a fer que el sistema de fitxers torni "
+#~ "a ser ext3?\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "en fer la crida a ext2fs_block_iterate"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "en fer la crida a la funció d'iteració"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "en ubicar la memòria intermèdia per al node-i"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "en llegir la taula dels nodes-i (grup %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "en escriure la taula dels nodes-i (grup %d)"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr ""
+#~ "%s: l'ordre dels bytes del sistema de fitxers ja està normalitzat.\n"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "el patró_de_prova no és vàlid: %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "bloc d'inici no vàlid - %s"
diff --git a/po/cs.gmo b/po/cs.gmo
index 8301d7c..13d9bb5 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index bddb9f2..cdfde75 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -2,7 +2,7 @@
 # Copyright (C) 2008 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
 # Miloslav Trmac <mitr@volny.cz>, 2003.
-# Petr Pisar <petr.pisar@atlas.cz>, 2008.
+# Petr Pisar <petr.pisar@atlas.cz>, 2008, 2009.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -64,34 +64,34 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.7\n"
+"Project-Id-Version: e2fsprogs 1.41.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-11 09:32+0100\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-11-24 21:32+0100\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Špatný blok %u mimo rozsah; ignorován.\n"
 
 #: e2fsck/badblocks.c:45
 msgid "while sanity checking the bad blocks inode"
-msgstr "při kontrole správnosti inode špatných bloků"
+msgstr "při kontrole správnosti iuzlu špatných bloků"
 
 #: e2fsck/badblocks.c:57
 msgid "while reading the bad blocks inode"
-msgstr "při čtení inode špatných bloků"
+msgstr "při čtení iuzlu špatných bloků"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr "při pokusu otevřít %s"
@@ -101,43 +101,43 @@
 msgid "while trying popen '%s'"
 msgstr "při pokusu popen „%s“"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "při načítání seznamu špatných bloků ze souboru"
 
 #: e2fsck/badblocks.c:104
 msgid "while updating bad block inode"
-msgstr "při aktualizaci inode špatných bloků"
+msgstr "při aktualizaci iuzlu špatných bloků"
 
 #: e2fsck/badblocks.c:130
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Varování: v iuzlu špatných bloků nalezen nepovolený blok %u. Vymazán.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Chyba při čtení bloku %lu (%s) při %s. "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Chyba při čtení bloku %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignorovat chybu"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Vynutit přepsání"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Chyba při zápisu bloku %lu (%s) při %s. "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Chyba při zápisu bloku %lu (%s). "
@@ -187,372 +187,385 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Použití: %s [-F] [-I bloky_inode_bufferů] zařízení\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "při otevírání %s pro synchronizaci"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr "při pokusu synchronizovat %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
-msgstr "při otevírání průchodu inode"
+msgstr "při zahájení průchodu iuzly"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
-msgstr "při získávání další inode"
+msgstr "při získávání dalšího iuzlu"
 
 #: e2fsck/iscan.c:138
 #, c-format
 msgid "%u inodes scanned.\n"
 msgstr "prozkoumáno %u iuzlů.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "čtení superbloku žurnálu\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: nenalezen platný superblok žurnálu\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: žurnál příliš krátký\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: obnovuji žurnál\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: nebudu obnovovat žurnál v režimu jen pro čtení\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "při pokusu znovu otevřít %s"
 
 # These shortcuts are a nightmare.
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "arozšířený atribut"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Achyba při alokaci"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:113
-msgid "ccompress"
-msgstr "ckomprimace"
-
 #: e2fsck/message.c:114
+msgid "ccompress"
+msgstr "ckomprimovat"
+
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckoliduje s jiným blokem systému souborů"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Inepovolen"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jžurnál"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dodstraněn"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "dadresář"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "epoložka"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Epoložka „%Dn“ v %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fsystém souborů"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpro inode %i (%Q) je"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "gskupin"
 
-#: e2fsck/message.c:125
-msgid "hHTREE @d @i"
-msgstr "hinode HTREE adresáře"
-
 #: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "hiuzel HTREE adresáře"
+
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lje odkaz"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mvíce krát alokováno"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "nneplatný"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oosiřel"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblém v"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "rkořenový iuzel"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "smělo by být"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuperblok"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "unepřipojen"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vzařízení"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xrozsah"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "znulové délky"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
-msgstr "<Inode NULL>"
-
-#: e2fsck/message.c:149
-msgid "<The bad blocks inode>"
-msgstr "<Inode špatných bloků>"
+msgstr "<Iuzel NULL>"
 
 #: e2fsck/message.c:151
-msgid "<The ACL index inode>"
-msgstr "<Inode indexu ACL>"
-
-#: e2fsck/message.c:152
-msgid "<The ACL data inode>"
-msgstr "<Inode dat ACL>"
+msgid "<The bad blocks inode>"
+msgstr "<Iuzel špatných bloků>"
 
 #: e2fsck/message.c:153
-msgid "<The boot loader inode>"
-msgstr "<Inode zavaděče systému>"
+msgid "<The ACL index inode>"
+msgstr "<Iuzel indexu ACL>"
 
 #: e2fsck/message.c:154
-msgid "<The undelete directory inode>"
-msgstr "<Inode adresáře undelete>"
+msgid "<The ACL data inode>"
+msgstr "<Iuzel dat ACL>"
 
 #: e2fsck/message.c:155
-msgid "<The group descriptor inode>"
-msgstr "<Inode deskriptoru skupiny>"
+msgid "<The boot loader inode>"
+msgstr "<Iuzel zavaděče systému>"
 
 #: e2fsck/message.c:156
-msgid "<The journal inode>"
-msgstr "<Inode žurnálu>"
+msgid "<The undelete directory inode>"
+msgstr "<Iuzel adresáře undelete>"
 
 #: e2fsck/message.c:157
-msgid "<Reserved inode 9>"
-msgstr "<Rezervovaná inode 9>"
+msgid "<The group descriptor inode>"
+msgstr "<Iuzel deskriptoru skupiny>"
 
 #: e2fsck/message.c:158
-msgid "<Reserved inode 10>"
-msgstr "<Rezervovaná inode 10>"
+msgid "<The journal inode>"
+msgstr "<Iuzel žurnálu>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:159
+msgid "<Reserved inode 9>"
+msgstr "<Rezervovaný iuzel 9>"
+
+#: e2fsck/message.c:160
+msgid "<Reserved inode 10>"
+msgstr "<Rezervovaný iuzel 10>"
+
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "obyčejný soubor"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "adresář"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "znakové zařízení"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "blokové zařízení"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "pojmenovaná roura"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "symbolický odkaz"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "soket"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "neznámý druh souboru o módu 0%o"
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr "mapa několikrát alokovaných iuzlů"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
-msgstr "vnitřní chyba, nemohu najít dup_blk pro %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "vnitřní chyba: nemohu najít dup_blk pro %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr "vrácený z clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:776
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "Vnitřní chyba: nemohu najít záznam EA bloku pro %u"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:788
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr "Vnitřní chyba: nemohu najít záznam EA iuzlu pro %u"
+msgstr "Vnitřní chyba: nemohu najít záznam EA iuzlu pro %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
 msgid "reading directory block"
 msgstr "čtení adresářového bloku"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "mapa používaných iuzlů"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
-msgstr "mapa inode adresářů"
+msgstr "mapa iuzlů adresářů"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
-msgstr "mapa inode obyčejných souborů"
+msgstr "mapa iuzlů obyčejných souborů"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "mapa používaných bloků"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
 msgstr "otevírání průzkumu iuzlů"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
 msgstr "získávání dalšího iuzlu z průzkumu"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1123
 msgid "Pass 1"
 msgstr "Průchod 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1180
 #, c-format
 msgid "reading indirect blocks of inode %u"
-msgstr "čtu nepřímé bloky inode %u"
+msgstr "čtu nepřímé bloky iuzlu %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1224
 msgid "bad inode map"
-msgstr "mapa špatných inode"
+msgstr "mapa špatných iuzlů"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1246
 msgid "inode in bad block map"
-msgstr "inode v mapě špatných bloků"
+msgstr "iuzel v mapě špatných bloků"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1266
 msgid "imagic inode map"
-msgstr "mapa imagic inode"
+msgstr "mapa imagic iuzlů"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1293
 msgid "multiply claimed block map"
 msgstr "mapa několikrát alokovaných bloků"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1392
 msgid "ext attr block map"
 msgstr "mapa bloků rozšířených atributů"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): očekáváno %6lu, obdrženo fyz. %6lu (bloků %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "bitmapa bloků"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
-msgstr "bitmapa inode"
+msgstr "bitmapa iuzlů"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
-msgstr "tabulka inode"
+msgstr "tabulka iuzlů"
 
 #: e2fsck/pass2.c:283
 msgid "Pass 2"
 msgstr "Průchod 2"
 
-#: e2fsck/pass3.c:79
-msgid "inode done bitmap"
-msgstr "bitmapa hotových inode"
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Nemohu pokračovat."
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:76
+msgid "inode done bitmap"
+msgstr "bitmapa hotových iuzlů"
+
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr "Maximum paměti"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr "Průchod 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
-msgstr "bitmapa detekce cyklů inode"
+msgstr "bitmapa detekce cyklů iuzlů"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr "Průchod 4"
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr "Průchod 5"
 
@@ -598,7 +611,7 @@
 
 #: e2fsck/problem.c:60
 msgid "Clear inode"
-msgstr "Vymazat inode"
+msgstr "Vyčistit iuzel"
 
 #: e2fsck/problem.c:61
 msgid "Abort"
@@ -724,7 +737,7 @@
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:110
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "Bitmapa inode pro skupinu %g není ve skupině. (blok %b)\n"
+msgstr "Bitmapa iuzlů pro skupinu %g není ve skupině. (blok %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
@@ -733,7 +746,7 @@
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
-"Tabulka inode pro skupinu %g není ve skupině. (blok %b)\n"
+"Tabulka iuzlů pro skupinu %g není ve skupině. (blok %b)\n"
 "VAROVÁNÍ: MOŽNÁ VÁŽNÁ ZTRÁTA DAT.\n"
 
 #. @-expanded: \n
@@ -846,11 +859,11 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd nepodporuje vlastnost filetype.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr "Superblok má špatný žurnál ext3 (iuzel %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "Superblok má neplatný žurnál (iuzel %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
@@ -872,106 +885,96 @@
 msgid "External @j does not support this @f\n"
 msgstr "Externí žurnál nepodporuje tento systém souborů\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Superblok žurnálu ext3 má neznámý typ %N (nepodporováno).\n"
+"Superblok žurnálu systému souborů je neznámého typu %N (nepodporováno).\n"
 "Je pravděpodobné, že vaše kopie e2fsck je stará a/nebo nepodporuje tento formát žurnálu.\n"
 "Je také možné, že superblok žurnálu je poškozen.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "Superblok žurnálu ext3 je poškozen.\n"
+msgid "@j @S is corrupt.\n"
+msgstr "Superblok žurnálu je poškozen.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
 #, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "Superblok nemá příznak has_journal, ale má žurnál ext3 %s.\n"
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "Příznak superbloku has_journal (má_žurnál) není nastaven, avšak žurnálový %s je přítomen.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr "Superblok má nastaven příznak ext3 needs_recovery, ale žádný žurnál.\n"
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "Superblok má nastaven příznak needs_recovery (potřebuje_obnovit), avšak žádný žurnál neexistuje.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr "příznak obnovení ext3 nenastaven, ale žurnál obsahuje data.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "Příznak superbloku needs_recovery (potřebuje_obnovit) není nastaven, avšak žurnál obsahuje data.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
 msgstr "Vymazat žurnál"
 
-#. @-expanded: Run journal anyway
-#: e2fsck/problem.c:245
-msgid "Run @j anyway"
-msgstr "Přesto spustit žurnál"
-
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:250
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr "Příznak obnovení není nastaven v záložním superbloku, takže přesto spouštím žurnál.\n"
-
-#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:255
-msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
-msgstr "%s osiřelé inode %i (uid=%Iu, gid=%Ig, režim=%Im, velikost=%Is)\n"
-
-#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:260
-msgid "@I @b #%B (%b) found in @o @i %i.\n"
-msgstr "Neplatný blok #%B (%b) nalezen v osiřelé inode %i.\n"
-
-#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:265
-msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
-msgstr "Již vymazaný blok #%B (%b) nalezen v osiřelé inode %f.\n"
-
-#. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:270
-#, c-format
-msgid "@I @o @i %i in @S.\n"
-msgstr "Neplatná osiřelá inode %i v superbloku.\n"
-
-#. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:275
-#, c-format
-msgid "@I @i %i in @o @i list.\n"
-msgstr "Neplatná inode %i v seznamu osiřelých inode.\n"
-
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "Systém souborů má příznak(y) vlastností nastaveny, ačkoliv se jedná o revizi 0. "
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr "Superblok žurnálu ext3 má nastaven příznak neznámé vlastnosti jen pro čtení.\n"
+#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
+#: e2fsck/problem.c:250
+msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+msgstr "%s osiřelý iuzel %i (uid=%Iu, gid=%Ig, režim=%Im, velikost=%Is)\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr "Superblok žurnálu ext3 má nastaven příznak neznámé nekompatibilní vlastnosti.\n"
+#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:255
+msgid "@I @b #%B (%b) found in @o @i %i.\n"
+msgstr "Neplatný blok #%B (%b) nalezen v osiřelém iuzlu %i.\n"
+
+#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:260
+msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
+msgstr "Již vymazaný blok #%B (%b) nalezen v osiřelém iuzlu %f.\n"
+
+#. @-expanded: illegal orphaned inode %i in superblock.\n
+#: e2fsck/problem.c:265
+#, c-format
+msgid "@I @o @i %i in @S.\n"
+msgstr "V superbloku neplatný osiřelý iuzel %i.\n"
+
+#. @-expanded: illegal inode %i in orphaned inode list.\n
+#: e2fsck/problem.c:270
+#, c-format
+msgid "@I @i %i in @o @i list.\n"
+msgstr "Neplatný iuzel %i v seznamu osiřelých iuzlů.\n"
+
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "Superblok žurnálu má nastaven příznak neznámé vlastnosti „jen pro čtení“.\n"
+
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "Superblok žurnálu má nastaven příznak neznámé vlastnosti „nekompatibilní“.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:295
+#: e2fsck/problem.c:285
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Verze žurnálu nepodporována tímto e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -982,7 +985,7 @@
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -994,7 +997,7 @@
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1004,6 +1007,16 @@
 "Mažu pole za superblokem žurnálu V1…\n"
 "\n"
 
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Přesto spustit žurnál"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Příznak obnovení není nastaven v záložním superbloku, takže přesto spouštím žurnál.\n"
+
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 #: e2fsck/problem.c:316
@@ -1027,7 +1040,7 @@
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:327
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr "Resize_inodu není zapnuto, avšak iuzel pro měnění velikosti není nula."
+msgstr "Resize_inode není zapnuto, avšak iuzel pro měnění velikosti není nula."
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:332
@@ -1060,118 +1073,155 @@
 "Do souborového systému přidávám nápovědu pro dirhash.\n"
 "\n"
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Kontrolní součet deskriptoru skupiny %g je chybný.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "Deskriptor skupiny %g označen jako neinicializovaný bez sady vlastností.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "Bitmapa bloků skupiny %g neinicializována, ačkoliv bitmapa iuzlů je použita.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "Deskriptor skupiny %g má neplatný počet nepoužitých bloků %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Poslední bitmapa bloků skupiny není inicializována.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Transakce žurnálu %i byla poškozena, přehrání bylo zrušeno.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Příznak test_fs je nastaven (a ext4 je dostupný). "
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
-msgstr "Průchod 1: Kontroluji inode, bloky a velikosti\n"
+msgstr "Průchod 1: Kontroluji iuzly, bloky a velikosti\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
-msgstr "Kořenová inode není adresář. "
+msgstr "Kořenový iuzel není adresář. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr "Kořenová inode má nastaven dtime (možná kvůli starém mke2fs). "
+msgstr "Kořenový iuzel má nastaven dtime (možná kvůli starém mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Rezervovaný iuzel %i (%Q) má špatný mód. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
-msgstr "Odstraněná inode %i má nulový dtime. "
+msgstr "Odstraněný iuzel %i má nulový dtime. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr "Inode %i se používá, ale má nastaven dtime. "
+msgstr "Iuzel %i se používá, ale má nastaven dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr "Inode %i je adresář nulové délky. "
+msgstr "Iuzel %i je adresář nulové délky. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "Bitmapa bloků skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr "Bitmapa inode skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
+msgstr "Bitmapa iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
-msgstr "Tabulka inode skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
+msgstr "Tabulka iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "Bitmapa bloků skupiny %g (%b) je špatná. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "Bitmapa inode skupiny %g (%b) je špatná. "
+msgstr "Bitmapa iuzlů skupiny %g (%b) je špatná. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
-msgstr "V inode %i je i_size %Is, měla by být %N. "
+msgstr "V iuzlu %i je i_size %Is, měla by být %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
-msgstr "V inode %i je i_blocks %Ib, mělo by být %N. "
+msgstr "V iuzlu %i je i_blocks %Ib, mělo by být %N. "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
-msgstr "Neplatný blok #%B (%b) v inode %i. "
+msgstr "Neplatný blok #%B (%b) v iuzlu %i. "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
-msgstr "Blok #%B (%b) se překrývá s metadaty systému souborů v inode %i. "
+msgstr "Blok #%B (%b) se překrývá s metadaty systému souborů v iuzlu %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
-msgstr "Inode %i má neplatný blok(y). "
+msgstr "Iuzel %i má neplatný blok(y). "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
-msgstr "Příliš mnoho neplatných bloků v inode %i.\n"
+msgstr "Příliš mnoho neplatných bloků v iuzlu %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
-msgstr "Neplatný blok #%B (%b) v inode špatných bloků. "
+msgstr "Neplatný blok #%B (%b) v iuzlu špatných bloků. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
-msgstr "Inode špatných bloků má neplatný blok(y). "
+msgstr "Iuzel špatných bloků má neplatný blok(y). "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Používá se duplikátní nebo špatný blok!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Špatný blok %b používán jako nepřímý blok špatných bloků. "
 
@@ -1179,7 +1229,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1192,7 +1242,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1203,7 +1253,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1214,276 +1264,276 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Primární superblok (%b) je na seznamu špatných bloků.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Blok %b v primárních deskriptorech skupin je na seznamu špatných bloků\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Varování: superblok skupiny %g (%b) je špatný.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Varování: Kopie deskriptorů skupin ve skupině %g má špatný blok (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "Chyba při programování? Blok #%b bezdůvodně použit v process_bad_blocks.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "Chyba při alokaci %N souvislých bloků ve skupině bloků %g pro %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Chyba při alokaci vyrovnávací paměti bloků pro přemístění %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Přemísťuji %s skupiny %g z %b do %c…\n"
 
 # FIXME: no-c-format so that I can reorder it properly
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Přemísťuji skupiny %g %s do %c…\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Varování: nemohu načíst blok %s %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Varování: nemohu zapsat blok %b pro %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
 msgid "@A @i @B (%N): %m\n"
-msgstr "Chyba při alokaci bitmapy inode (%N): %m\n"
+msgstr "Chyba při alokaci bitmapy iuzlů (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "Chyba při alokaci bitmapy bloků (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "Chyba při alokaci informací odkazů icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Chyba při alokaci pole bloků adresáře: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
-msgstr "Chyba při zkoumání inode (%i): %m\n"
+msgstr "Chyba při zkoumání iuzlů (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
-msgstr "Chyba při iteraci přes bloky v inode %i: %m\n"
+msgstr "Chyba při iteraci přes bloky v iuzlu %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr "Chyba při ukládání informace o počtu inode (inode=%i, počet=%N): %m\n"
+msgstr "Chyba při ukládání informace o četnosti iuzlu (iuzel=%i, počet=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr "Chyba při ukládání informace o bloku adresáře (inode=%i, blok=%b, čís=%N): %m\n"
+msgstr "Chyba při ukládání informace o bloku adresáře (iuzel=%i, blok=%b, čís=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
-msgstr "Chyba při čtení inode %i: %m\n"
+msgstr "Chyba při čtení iuzlu %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
-msgstr "Inode %i má nastaven příznak imagic. "
+msgstr "Iuzel %i má nastaven příznak imagic. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Speciální (zařízení/socket/fifo/symbolický odkaz) soubor (inode %i) má nastaven\n"
+"Speciální (zařízení/socket/fifo/symbolický odkaz) soubor (iuzel %i) má nastaven\n"
 "příznak immutable nebo append-only. "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr "Inode %i má nastaven příznak komprimace na systému souborů bez podpory komprimace. "
+msgstr "Iuzel %i má nastaven příznak komprimace na systému souborů bez podpory komprimace. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Speciální (zařízení/socket/fifo) iuzel %i má nenulovou délku. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Iuzel žurnálu se nepoužívá, ale obsahuje data. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "Žurnál není obyčejný soubor. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Iuzel %i byl součástí seznamu osiřelých iuzlů. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr "Nalezeny inode, které byly součástí poškozeného spojového seznamu osiřelých. "
+msgstr "Nalezeny iuzly, které byly součástí poškozeného spojového seznamu osiřelých. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Chyba při alokaci struktury refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr "Chyba při čtení bloku rozšířených atributů %b pro inode %i. "
+msgstr "Chyba při čtení bloku rozšířených atributů %b pro iuzel %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
-msgstr "Inode %i má špatný blok rozšířených atributů %b. "
+msgstr "Iuzel %i má špatný blok rozšířených atributů %b. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Chyba při čtení bloku rozšířených atributů %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "Blok rozšířených atributů %b má počet odkazů %B, měl by být %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Chyba při zápisu bloku rozšířených atributů %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Blok rozšířených atributů %b má h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "Chyba při alokaci bloku rozšířených atributů %b. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Blok rozšířených atributů %b je poškozen (kolize alokace). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Blok rozšířených atributů %b je poškozen (neplatný název). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Blok rozšířených atributů %b je poškozen (neplatná hodnota). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
-msgstr "Inode %i je příliš velká. "
+msgstr "Iuzel %i je příliš velká. "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "Blok #%B (%b) působí, že adresář je příliš velký. "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "Blok #%B (%b) působí, že soubor je příliš velký. "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "Blok #%B (%b) působí, že symbolický odkaz je příliš velký. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr "Inode %i má nastaven příznak INDEX_FL na systému souborů bez podpory htree.\n"
+msgstr "Iuzel %i má nastaven příznak INDEX_FL na systému souborů bez podpory htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr "Inode %i má nastaven příznak INDEX_FL, ale není adresář.\n"
+msgstr "Iuzel %i má nastaven příznak INDEX_FL, ale není adresář.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "Iuzel HTREE adresáře %i má neplatný kořenový uzel.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr "Inode HTREE adresáře %i má nepodporovanou verzi hashe (%N)\n"
+msgstr "Iuzel HTREE adresáře %i má nepodporovanou verzi hashe (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr "Inode HTREE adresáře %i používá nekompatibilní příznak kořenového uzlu htree.\n"
+msgstr "Iuzel HTREE adresáře %i používá nekompatibilní příznak kořenového uzlu htree.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
-msgstr "Inode HTREE adresáře %i má hloubku stromu (%N), která je příliš velká\n"
+msgstr "Iuzel HTREE adresáře %i má hloubku stromu (%N), která je příliš velká\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1492,50 +1542,124 @@
 "souborového systému. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
-msgstr "(Znovu) vytvoření iuzlu pro změny velikosti selhalo: %m."
+msgstr "(Znovu) vytvoření iuzlu pro změny velikosti selhalo: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "Iuzel %i má velikost navíc (%IS), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "Rozšířený atribut v iuzlu %i má délku jména (%N), která není platná\n"
 
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "Rozšířený atribut v iuzlu %i má velikost hodnoty (%N), která není platná\n"
-
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "Rozšířený atribut v iuzlu %i má pozici hodnoty (%N), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "Rozšířený atribut v iuzlu %i má blok hodnot (%N), který není platný (musí být 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "Rozšířený atribut v iuzlu %i má hash (%N), který není platný (musí být 0)\n"
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "Rozšířený atribut v iuzlu %i má velikost hodnoty (%N), která není platná\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "Rozšířený atribut v iuzlu %i má hash (%N), který není platný\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "Iuzel %i je %It, ale ve skutečnosti vypadá na adresář.\n"
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Chyba při pročítání stromu @x v iuzlu %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Průchod rozsahy iuzlu %i selhal\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"Iuzel %i má neplatný rozsah\n"
+"\t(logický blok %c, neplatný fyzický blok %b, délka %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"Iuzel %i má neplatný rozsah\n"
+"\t(logický blok %c, fyzický blok %b, neplatná délka %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "Iuzel %i má nastaven příznak EXTENTS_FL na systému souborů bez podpory rozsahů.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "Iuzel %i rozsahový formát, ale superbloku chybí vlastnost EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "Iuzlu %i chybí EXTENT_FL, ale je v rozsahovém formátu\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Rychlý symbolický odkaz %i na nastaveno EXTENT_FL.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"Iuzel %i má zpřeházené rozsahy\n"
+"\t(neplatný logický blok %c, fyzický blok %b, délka %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "Iuzel %i má neplatný uzel rozsahů (op %s, blk %b, lblk %c): %m\n"
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1544,69 +1668,69 @@
 "\n"
 "Spouštím dodatečné průchody, abych vyřešil bloky, ke kterým se hlásí\n"
 "více iuzlů…\n"
-"Průchod 1B: Znovu vyšetřuji více krát alokované bloky\n"
+"Průchod 1B: Znovu vyšetřuji více krát alokované bloky\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Více krát alokovaný(é) blok(y) v iuzlu %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
-msgstr "Chyba při zkoumání inode (%i): %m\n"
+msgstr "Chyba při zkoumání iuzlů (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Chyba při alokaci bitmapy iuzlů (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
-msgstr "Chyba při iteraci přes bloky v inode %i (%s): %m\n"
+msgstr "Chyba při iteraci přes bloky v iuzlu %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Chyba při úpravě počtu odkazů bloku rozšířených atributů %b (iuzel %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Průchod 1C: Hledání iuzlů s duplikovanými bloky v adresářích.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Průchod 1D: Opravuji duplikátní bloky\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
 msgstr ""
-"Soubor %Q (inode #%i, čas změny %IM) \n"
+"Soubor %Q (iuzel %i, čas změny %IM) \n"
 "  má %B duplikovaných bloků sdílených mezi %N soubory:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
-msgstr "        %Q (inode #%i, čas změny %IM)\n"
+msgstr "        %Q (iuzel %i, čas změny %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadata systému souborů>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1616,7 +1740,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1624,316 +1748,317 @@
 "Duplikátní bloky již přiřazeny nebo naklonovány.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Nemohu klonovat soubor: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Průchod 2: Kontroluji strukturu adresářů\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Špatné číslo iuzlu pro „.“ v iuzlu adresáře %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "Položka „%Dn“ v %p (%i) má špatné číslo iuzlu: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
-msgstr "Položka „%Dn“ v %p (%i) má odstraněnou/nepoužívanou inode %Di. "
+msgstr "Položka „%Dn“ v %p (%i) má odstraněný/nepoužívaný iuzel %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "Položka „%Dn“ v %p (%i) je odkaz na „.“ "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr "Položka „%Dn“ v %p (%i) ukazuje na inode (%Di) umístěnou ve špatném bloku.\n"
+msgstr "Položka „%Dn“ v %p (%i) ukazuje na iuzel (%Di) umístěný ve špatném bloku.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "Položka „%Dn“ v %p (%i) je odkaz na adresář %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
-msgstr "Položka „%Dn“ v %p (%i) je odkaz na kořenovou inode.\n"
+msgstr "Položka „%Dn“ v %p (%i) je odkaz na kořenový iuzel.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "Položka „%Dn“ v %p (%i) má ve svém jméně neplatné znaky.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
-msgstr "Chybí „.“ v inode adresáře %i.\n"
+msgstr "Chybí „.“ v iuzlu adresáře %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
-msgstr "Chybí „..“ v inode adresáře %i.\n"
+msgstr "Chybí „..“ v iuzlu adresáře %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr "První položka „%Dn“ (inode=%Di) v iuzlu adresáře %i (%p) by měla být „.“\n"
+msgstr "První položka „%Dn“ (iuzel=%Di) v iuzlu adresáře %i (%p) by měla být „.“\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr "Druhá položka „%Dn“ (inode=%Di) v iuzlu adresáře %i by měla být „..“\n"
+msgstr "Druhá položka „%Dn“ (iuzel=%Di) v iuzlu adresáře %i by měla být „..“\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
-msgstr "i_faddr pro inode %i (%Q) je %IF, měla by být nula.\n"
+msgstr "i_faddr pro iuzel %i (%Q) je %IF, měla by být nula.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
-msgstr "i_file_acl pro inode %i (%Q) je %If, mělo by být nula.\n"
+msgstr "i_file_acl pro iuzel %i (%Q) je %If, mělo by být nula.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl pro inode %i (%Q) je %N, mělo by být nula.\n"
+msgstr "i_dir_acl pro iuzel %i (%Q) je %N, mělo by být nula.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
-msgstr "i_frag pro inode %i (%Q) je %N, mělo by být nula.\n"
+msgstr "i_frag pro iuzel %i (%Q) je %N, mělo by být nula.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
-msgstr "i_fsize pro inode %i (%Q) je %N, měla by být nula.\n"
+msgstr "i_fsize pro iuzel %i (%Q) je %N, měla by být nula.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Iuzel %i (%Q) má špatný mód (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
-msgstr "inode adresáře %i, blok %B, posun %N: adresář poškozen\n"
+msgstr "Iuzel adresáře %i, blok %B, posun %N: adresář poškozen\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
-msgstr "inode adresáře %i, blok %B, posun %N: název souboru příliš dlouhý\n"
+msgstr "Iuzel adresáře %i, blok %B, posun %N: název souboru příliš dlouhý\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
-msgstr "inode adresáře %i má nealokovaný blok #%B. "
+msgstr "Iuzel adresáře %i má nealokovaný blok #%B. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "Položka adresáře „.“ v inode adresáře %i není ukončena NULL\n"
+msgstr "Položka adresáře „.“ v iuzlu adresáře %i není ukončena NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "Položka adresáře „..“ v inode adresáře %i není ukončena NULL\n"
+msgstr "Položka adresáře „..“ v iuzlu adresáře %i není ukončena NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
-msgstr "Inode %i (%q) je neplatné znakové zařízení.\n"
+msgstr "Iuzel %i (%q) je neplatné znakové zařízení.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
-msgstr "Inode %i (%Q) je neplatné blokové zařízení.\n"
+msgstr "Iuzel %i (%Q) je neplatné blokové zařízení.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "Položka „%Dn“ v %p (%i) je duplikátní položka „.“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "Položka „%Dn“ v %p (%i) je duplikátní položka „..“.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Interní chyba: nemohu najít dir_info pro %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "Položka „%Dn“ v %p (%i) má rec_len %Dr, měla by být %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "Chyba při alokaci struktury icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Chyba při iterování přes bloky adresáře: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
-msgstr "Chyba při čtení bloku adresáře %b (inode %i): %m\n"
+msgstr "Chyba při čtení bloku adresáře %b (iuzel %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
-msgstr "Chyba při zápisu bloku adresáře %b (inode %i): %m\n"
+msgstr "Chyba při zápisu bloku adresáře %b (iuzel %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
-msgstr "Chyba při alokaci nového bloku adresáře pro inode %i (%s): %m\n"
+msgstr "Chyba při alokaci nového bloku adresáře pro iuzel %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
-msgstr "Chyba při dealokaci inode %i: %m\n"
+msgstr "Chyba při dealokaci iuzlu %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "Položka adresáře pro „.“ je velká. "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Položka adresáře pro „.“ v %p (%i) je velká.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
-msgstr "Inode %i (%Q) je neplatná FIFO.\n"
+msgstr "Iuzel %i (%Q) je neplatná FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr "Inode %i (%Q) je neplatný socket.\n"
+msgstr "Iuzel %i (%Q) je neplatný socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Nastavuji filetype pro položku „%Dn“ v %p (%i) na %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "Položka „%Dn“ v %p (%i) má chybný filetype (byl %Dt, měl by být %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "Položka „%Dn“ v %p (%i) má nastaven filetype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "Položka „%Dn“ v %p (%i) má název nulové délky.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symbolický odkaz %Q (iuzel #%i) není platný.\n"
 
 # FIXME: @F already ends with 'is'
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "Blok rozšířených atributů pro iuzel %i (%Q) není platný (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "Systém souborů obsahuje velké soubory, ale v superbloku nemá příznak LARGE_FILE.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
-msgstr "Problém v inode HTREE adresáře %d: na uzel (%B) neexistuje odkaz\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: na uzel (%B) neexistuje odkaz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
-msgstr "Problém v inode HTREE adresáře %d: na uzel (%B) existují dva odkazy\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: na uzel (%B) existují dva odkazy\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
-msgstr "Problém v inode HTREE adresáře %d: uzel (%B) má špatný min hash\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatný min hash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
-msgstr "Problém v inode HTREE adresáře %d: uzel (%B) má špatný max hash\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatný max hash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "Neplatný iuzel HTREE adresáře %d (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
-msgstr "Problém v inode HTREE adresáře %d (%q): špatné číslo bloku %b.\n"
+msgstr "Problém v iuzlu HTREE adresáře %d (%q): špatné číslo bloku %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: kořenový uzel není platný\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatný limit (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatný počet (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
-msgstr "Problém v inode HTREE adresáře %d: uzel (%B) má nesetříděnou hash tabulku\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má nesetříděnou hash tabulku\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatnou hloubku\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "Problém v iuzlu HTREE adresáře %d: uzel (%B) má špatnou hloubku (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Nalezena duplikátní položka „%Dn“ v %p (%i). "
 
 # FIXME: no-c-format
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1945,7 +2070,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1956,107 +2081,127 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi pro iuzel %i (%Q) je %N, měl by být nula.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Neočekávaný blok v iuzlu HTREE adresáře %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "Položka „%Di“ v %p (%i) odkazuje na iuzel %Di ve skupině %g, kde je nastaveno _INODE_UNINIT.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "Položka „%Dn“ v %p (%i) odkazuje na iuzel %Di nalezený ve skupině %g oblasti nepoužitých iuzlů.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi pro iuzel %i (%Q) je %N, mělo by být nula.\n"
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1298
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Průchod 3: Kontroluji dosažitelnost adresářů\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1303
 msgid "@r not allocated.  "
-msgstr "Kořenová inode nealokována. "
+msgstr "Kořenový iuzel nealokován. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1308
 msgid "No room in @l @d.  "
 msgstr "Není místo v adresáři lost+found. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1313
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
-msgstr "Nepřipojený adresář inode %i (%p)\n"
+msgstr "Nepřipojený adresářový iuzel %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1318
 msgid "/@l not found.  "
 msgstr "/lost+found nenalezeno. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1323
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "„..“ v %Q (%i) je %P (%j), mělo by být %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1328
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Špatné nebo neexistující /lost+found. Nemohu znovu připojit.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Nemohu zvětšit /lost+found: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Nemohu znovu připojit %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Chyba při pokusu najít /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m při pokusu vytvořit adresář /lost+found\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m při pokusu vytvořit adresář /lost+found\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m při pokusu vytváření nového adresáře /lost+found\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m při zápisu bloku adresáře pro /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1368
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
-msgstr "Chyba při úpravě počtu inode v inode %i\n"
+msgstr "Chyba při úpravě četnosti iuzlu v iuzlu %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
 msgstr ""
-"Nemohu opravit rodiče inode %i: %m\n"
+"Nemohu opravit rodiče iuzlu %i: %m\n"
 "\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1378
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2066,75 +2211,75 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Chyba při vytváření kořenového adresáře (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Chyba při vytváření adresáře /lost+found (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1398
 msgid "@r is not a @d; aborting.\n"
-msgstr "Kořenová inode není adresář; končím.\n"
+msgstr "Kořenový iuzel není adresář; končím.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1403
 msgid "Cannot proceed without a @r.\n"
-msgstr "Nemohu pokračovat bez kořenové inode.\n"
+msgstr "Nemohu pokračovat bez kořenového iuzlu.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1413
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found není adresář (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1420
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Průchod 3A: Optimalizuji adresáře\n"
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1425
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr "Nemohu vytvořit iterátor dirs_to_hash: %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Nemohu vytvořit iterátor dirs_to_hash: %m\n"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr "Nemohu optimalizovat adresář %q (%d): %m"
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Nemohu optimalizovat adresář %q (%d): %m\n"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1435
 msgid "Optimizing directories: "
 msgstr "Optimalizuji adresáře: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1452
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Průchod 4: Kontroluji počty odkazů\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "Osiřelý iuzel %i s nulovou délkou. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1462
 #, c-format
 msgid "@u @i %i\n"
 msgstr "Osiřelý iuzel %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1467
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr "Počet odkazů inode %i je %Il, měl by být %N. "
+msgstr "Počet odkazů na iuzel %i je %Il, měl by být %N. "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1471
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2146,87 +2291,100 @@
 "inode_link_info[%i] je %N, inode.i_links_count je %Il. Měly by být stejné!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1481
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Průchod 5: Kontroluji souhrnné informace skupin\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @i @B is not set. "
-msgstr "Výplň na konci bitmapy inode není nastavena. "
+msgstr "Výplň na konci bitmapy iuzlů není nastavena. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1491
 msgid "Padding at end of @b @B is not set. "
 msgstr "Výplň na konci bitmapy bloků není nastavena. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1496
 msgid "@b @B differences: "
 msgstr "Rozdíly v bitmapě bloků: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1516
 msgid "@i @B differences: "
-msgstr "Rozdíly v bitmapě inode: "
+msgstr "Rozdíly v bitmapě iuzlů: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1536
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Počet volných inode špatný ve skupině #%g (%i, spočteno=%j).\n"
+msgstr "Počet volných iuzlů ve skupině #%g špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1541
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Počet adresářů špatný ve skupině #%g (%i, spočteno=%j).\n"
+msgstr "Počet adresářů ve skupině #%g špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1546
 msgid "Free @is count wrong (%i, counted=%j).\n"
-msgstr "Počet volných inode špatný (%i, spočteno=%j).\n"
+msgstr "Počet volných iuzlů špatně (%i, spočteno=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr "Počet volných bloků špatný ve skupině #%g (%b, spočteno=%c).\n"
+msgstr "Počet volných bloků ve skupině #%g špatně (%b, spočteno=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1556
 msgid "Free @bs count wrong (%b, counted=%c).\n"
-msgstr "Počet volných bloků špatný (%b, spočteno=%c).\n"
+msgstr "Počet volných bloků špatně (%b, spočteno=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1561
 msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr "CHYBA PŘI PROGRAMOVÁNÍ: hranice (%b, %c) bitmapy systému souborů (#%N) neodpovídají vypočteným hranicím bitmapy (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1567
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Interní chyba: pokažený konec bitmapy (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Chyba při kopírování do náhradní bitmapy iuzlů: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1577
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Chyba při kopírování do náhradní bitmapy bloků: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr "Znovu vytvořit žurnál, aby se získal zpět souborový systém ext3?\n"
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "Blok(y) skupiny %g je/jsou používán(y), ale skupina je označena jako BLOCK_UNINIT\n"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "Iuzel/iuzly skupiny %g je/jsou používán(y), ale skupina je označena jako INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Znovu vytvořit žurnál"
+
+#: e2fsck/problem.c:1732
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Neobsloužený kód chyby (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1827
 msgid "IGNORED"
 msgstr "IGNOROVÁNO"
 
@@ -2238,88 +2396,48 @@
 #: e2fsck/scantest.c:100
 #, c-format
 msgid "size of inode=%d\n"
-msgstr "velikost inode=%d\n"
+msgstr "velikost iuzlu=%d\n"
 
 #: e2fsck/scantest.c:121
 msgid "while starting inode scan"
-msgstr "při spouštění průchodu inode"
+msgstr "při spouštění prohlídky iuzlů"
 
 #: e2fsck/scantest.c:132
 msgid "while doing inode scan"
-msgstr "při provádění průchodu inode"
+msgstr "při provádění prohlídky iuzlů"
 
 #: e2fsck/super.c:187
 #, c-format
 msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "při volání ext2fs_block_iterate pro inode %d"
+msgstr "při volání ext2fs_block_iterate pro iuzel %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "při volání ext2fs_adjust_ea_refcount pro iuzel %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Usekávám"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Mažu"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "při volání ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "při volání funkce iterátoru"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "při alokaci vyrovnávací paměti inode"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "při čtení tabulky inode (skupina %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "při zápisu tabulky inode (skupina %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Průchod 0: Provádím přehození bajtů systému souborů\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: systém souborů musí být před pokusem přehodit bajty\n"
-"čerstvě otestován pomocí fsck a nesmí být připojen.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Přehození bajtů"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Použití: %s [-panyrcdfvstDFSV] [-b superblok] [-B velikost_bloku]\n"
+"Použití: %s [-panyrcdfvtDFV] [-b superblok] [-B velikost_bloku]\n"
 "\t\t[-I bloky_iuzlových_bufferů] [-P velikost_zpracovávaných_iuzlů]\n"
 "\t\t[-l|-L soubor_špatných_bloků] [-C fd] [-j externí_žurnál]\n"
 "\t\t[-E rozšířené-přepínače] zařízení\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2338,7 +2456,7 @@
 " -c                   Hledat špatné bloky a přidat je do seznamu špatných bloků\n"
 " -f                   Vynutit kontrolu, i když je systém souborů označen čistý\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2357,33 +2475,38 @@
 " -L soubor_špatných_bloků\n"
 "                      Nastavit seznam špatných bloků\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %'u/%'u souborů (%0d,%d %% nesouvislých), %'u/%'u bloků\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         Počet iuzlů s ind/dind/tind bloky: %'u/%'u/%'u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Histogram hloubky rozsahu: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "při zjišťování, jestli je %s připojen."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Varování! %s je připojen.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s je připojen. "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2391,7 +2514,7 @@
 "Nemohu pokračovat, končím.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2406,75 +2529,79 @@
 "způsobit VÁŽNÉ poškození systému souborů.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Chcete opravdu pokračovat"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "kontrola přerušena.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " obsahuje systém souborů s chybami"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " nebyl čistě odpojen"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr " vlastnosti primárního superbloku se liší od záložního"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " byl připojen %ukrát bez kontroly"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " má čas poslední kontroly systému souborů v budoucnosti"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " nebyl kontrolován %u dní"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", kontrola vynucena.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: čistý, %'u/%'u souborů, %'u/%'u bloků"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (kontrola odložena, běžím na baterii)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (kontrola po příštím připojení)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrola za %ld připojení)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "CHYBA: Nemohu otevřít /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Neplatná verze EA.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Neznámý rozšířený přepínač: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2483,45 +2610,35 @@
 "Syntaktická chyba v konfiguračním souboru e2fsck (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Chyba při ověřování platnosti deskriptoru souboru %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Neplatný deskriptor souborů informace o dokončení"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Může být zadán jen jeden z přepínačů -p/-a, -n nebo -y."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Přepínač -t není v této verzi e2fsck podporován.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr "Přehození bajtů systémů souborů není zabudováno v této verzi e2fsck\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nelze vyřešit „%s“"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Při přehození bajtů nejsou dovoleny nekompatibilní přepínače.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Přepínače -c a -l/-L nemohou být použity zároveň.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:878
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2530,7 +2647,7 @@
 "E2FSCK_JBD_DEBUG „%s“ není celým číslem\n"
 "\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:887
 #, c-format
 msgid ""
 "\n"
@@ -2541,38 +2658,43 @@
 "Neplatný nečíselný argument u -%c („%s“)\n"
 "\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:961
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Chyba: stará verze knihovny ext2fs!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:969
 msgid "while trying to initialize program"
 msgstr "při pokusu inicializovat program"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:980
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tPoužívám %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:992
 msgid "need terminal for interactive repairs"
 msgstr "pro interaktivní opravy potřebuji terminál"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1021
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s zkouším záložní bloky…\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1023
 msgid "Superblock invalid,"
 msgstr "Neplatný superblok,"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1024
 msgid "Group descriptors look bad..."
 msgstr "Deskriptory skupin vypadají špatně…"
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: návrat k původnímu superbloku\n"
+
+#: e2fsck/unix.c:1060
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2583,27 +2705,27 @@
 "(Nebo je superblok systému souborů poškozen)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1066
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Mohl by toto být oddíl nulové délky?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1068
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Musíte mít přístup %s k systému souborů nebo být root\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1073
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Pravděpodobně neexistující nebo odkládací zařízení?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1075
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Systém souborů připojen nebo otevřen výlučně jiným programem?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1079
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2612,42 +2734,42 @@
 "Disk chráněn proti zápisu; použijte přepínač -n pro provedení\n"
 "kontroly zařízení jen pro čtení.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1143
 msgid "Get a newer version of e2fsck!"
 msgstr "Sežeňte novější verzi e2fsck!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1173
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "při kontrole žurnálu ext3 pro %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1184
 #, c-format
 msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Varování: přeskakuji obnovu žurnálu, protože provádím kontrolu systému\n"
 "souborů jen pro čtení.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1197
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nemohu nastavit příznaky superbloku na %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1203
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "při obnově žurnálu ext3 %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1228
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s má nepodporovanou vlastnost(i):"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1244
 msgid "Warning: compression support is experimental.\n"
 msgstr "Varování: podpora komprese je experimentální.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1249
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2656,30 +2778,25 @@
 "E2fsck nepřeložen s podporou HTREE,\n"
 "\tale systém souborů %s má adresáře HTREE.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: Pořadí bajtů systému souborů již normalizováno.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1302
 msgid "while reading bad blocks inode"
-msgstr "při čtení inode špatných bloků"
+msgstr "při čtení iuzlu špatných bloků"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1304
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Toto nevypadá dobře, ale zkusíme pokračovat…\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1330
 msgid "Couldn't determine journal size"
 msgstr "Velikost žurnálu nelze určit"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1333
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Vytvářím žurnál (%d bloků): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2687,12 +2804,12 @@
 "\n"
 "\tpři pokusu vytvořit žurnál"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1343
 #, c-format
 msgid " Done.\n"
 msgstr " Hotovo.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1344
 #, c-format
 msgid ""
 "\n"
@@ -2701,25 +2818,25 @@
 "\n"
 "*** žurnál by znovu vytvořen – souborový systém se opět stal ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1351
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Spouštím e2fsck od začátku…\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1355
 msgid "while resetting context"
 msgstr "při nulování kontextu"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1362
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck přerušen.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1367
 msgid "aborted"
 msgstr "přerušen"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1379
 #, c-format
 msgid ""
 "\n"
@@ -2728,12 +2845,12 @@
 "\n"
 "%s: ***** SYSTÉM SOUBORŮ BYL ZMĚNĚN *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** ZNOVU ZAVEĎTE LINUX *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1390
 #, c-format
 msgid ""
 "\n"
@@ -2744,39 +2861,43 @@
 "%s: ********** VAROVÁNÍ: Systém souborů má stále chyby **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "při nastavování informace o kontrolním součtu skupiny bloků"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "aA"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<a>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (a/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "přerušeno!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "ano\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "ne\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2785,7 +2906,7 @@
 "%s? ne\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2794,47 +2915,38 @@
 "%s? ano\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "ano"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "ne"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: neplatný blok(y) bitmapy pro %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
-msgstr "čtení bitmap inode a bloků"
+msgstr "čtení bitmap iuzlů a bloků"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "při opakovaném pokusu načíst bitmapy pro %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "zápisu bitmap bloků"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "zápisu bitmap bloků a iuzlů"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "při opakovaném pokusu zapsat bitmapy bloků pro %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "při přepisu bitmap bloků a iuzlů pro %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "zápisu bitmap inode"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "při opakovaném pokusu zapsat bitmapy inode pro %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2847,53 +2959,59 @@
 "%s: NEOČEKÁVANÁ NEKONZISTENCE; SPUSŤTE fsck RUČNĚ.\n"
 "\t(tj. bez přepínačů -a nebo -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr "Použitá paměť: %dk/%dk (%dk/%dk), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Použitá paměť: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
-msgstr "Použitá paměť: %d, "
+msgid "Memory used: %lu, "
+msgstr "Použitá paměť: %lu, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "čas: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "strávený čas: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
-msgstr "při čtení inode %ld v %s"
+msgid "while reading inode %lu in %s"
+msgstr "při čtení iuzlu %lu v %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
-msgstr "při zápisu inode %ld v %s"
+msgid "while writing inode %lu in %s"
+msgstr "při zápisu iuzlu %lu v %s"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "Při alokaci nulovací vyrovnávací paměti"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr "hotovo                                \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Použití: %s [-b velikost_bloku] [-i vstupní_soubor] [-o výstupní_soubor]\n"
-"   [-svwnf] [-c bloků_najednou] [-p počet_průchodů]\n"
+"   [-svwnf] [-c bloků_najednou] [-d činitel_zpoždění_mezi_čteními]\n"
+"   [-e max_špatných_bloků] [-p počet_průchodů]\n"
 "   [-t zkušební_vzorek [-t zkušební_vzorek […]]]\n"
-"   zařízení [poslední_blok [počáteční_počet]]\n"
+"   zařízení [poslední_blok [první_blok]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -2902,70 +3020,80 @@
 "%s: Přepínače „-n“ a „-w“ se vzájemně vylučují.\n"
 "\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "%6.2f %% hotovo, %s uplynulo"
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr "Zkouším s náhodným vzorkem: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr "Zkouším se vzorkem 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr "při posunu"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Divná hodnota (%ld) v do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr "při ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr "při začátku iterace v seznamu špatných bloků"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr "při alokaci vyrovnávacích paměti"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Ověřuji bloky %lu až %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Hledám špatné bloky v režimu jen pro čtení\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Hledám špatné bloky (test jen pro čtení): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Příliš mnoho špatných bloků, přerušuji test\n"
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Hledám špatné bloky v režimu čtení i zápis\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Od bloku %lu do %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr "Čtu a porovnávám: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Hledám špatné bloky v nedestruktivním režimu čtení i zápis\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Hledám špatné bloky (nedestruktivní test čtení i zápisu)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2973,57 +3101,52 @@
 "\n"
 "Zachyceno přerušení, uklízím\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "při testovacím zápisu dat, blok %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s je připojen; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks přesto vynucen. Doufám, že /etc/mtab je nesprávná.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr "není bezpečné spouštět badblocks!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s je zjevně systémem právě používán; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks přesto vynucen.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
-msgstr "špatná velikost bloku – %s"
+msgid "invalid %s - %s"
+msgstr "neplatný %s – %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "Nemohu alokovat paměť pro zkušební_vzorek – %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "neplatný zkušební_vzorek: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "V režimu pouhého čtení lze zadat nejvýše jeden zkušební_vzorek"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "V režimu pouhého čtení není náhodný zkušební_vzorek přípustný"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3031,88 +3154,91 @@
 "Nemohu zjistit velikost zařízení; musíte velikost\n"
 "zadat ručně\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr "při pokusu zjistit velikost zařízení"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "špatný počet bloků - %s"
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "poslední blok"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "špatný počáteční blok – %s"
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "první blok"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "špatný počáteční blok (%d): musí být menší než %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "špatný počáteční blok (%lu): musí být menší než %lu"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr "při vytváření seznam špatných bloků v paměti"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr "při přidávání do seznamu špatných bloků v paměti"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Průchod dokončen, nalezeno %u špatných bloků.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Použití: %s [-RV] [-+=AacDdijsSu] [-v verze] soubory…\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Použití: %s [-RVf] [-+=AacDdeijsSu] [-v verze] soubory…\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr "špatná verze – %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr "při pokusu stat %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr "Příznaky %s nastaveny na "
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr "při čtení příznaků %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "Odstranění příznaku rozsahu není na %s podporováno"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Příznaky %s nastaveny na "
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr "při nastavování příznaků %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Verze %s nastavena na %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr "při nastavování verze %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nemohu alokovat proměnou path v chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr "= je neslučitelné s - a +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr "Musíte použít '-v', =, - nebo +\n"
 
@@ -3121,30 +3247,35 @@
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr "Použití: %s [-bfhixV] [-ob superblok] [-oB velikost_bloku] zařízení\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Skupina %lu: (Bloky "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Kontrolní součet 0x%04x, nepoužitých iuzlů %d\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %s superblok v "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primární"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Záložní"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Deskriptory skupin v "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3153,70 +3284,75 @@
 "\n"
 " Rezervované GDT bloky na "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Deskriptor skupiny v "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Bitmapa bloků v "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
-msgstr ", Bitmapa inode v "
+msgstr ", Bitmapa iuzlů v "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
 msgstr ""
 "\n"
-"  Tabulka inode v "
+"  Tabulka iuzlů v "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d volných bloků, %d volných inode, %d adresářů\n"
+"  %u volných bloků, %u volných iuzlů, %u adresářů%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u nepoužitých iuzlů\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Volné bloky: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
-msgstr "  Volné inode: "
+msgstr "  Volné iuzly: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr "při tisku seznamu špatných bloků"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:274
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Špatné bloky: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
 msgid "while reading journal inode"
-msgstr "při čtení inode žurnálu"
+msgstr "při čtení iuzlu žurnálu"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:300
 msgid "Journal size:             "
 msgstr "Velikost žurnálu          "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr "při čtení superbloku žurnálu"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:332
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Nemohu najít magická čísla superbloku žurnálu"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:336
 #, c-format
 msgid ""
 "\n"
@@ -3235,27 +3371,27 @@
 "Začátek žurnálu:          %u\n"
 "Počet uživatelů žurnálu:  %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:349
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Uživatelé žurnálu:        %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nemohu alokovat paměť pro zpracování přepínačů!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:391
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr "Neplatný parametr superblock (superblok): %s\n"
+msgstr "Neplatný parametr superblok: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:406
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Neplatný parametr blocksize (velikost_bloku): %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:417
 #, c-format
 msgid ""
 "\n"
@@ -3278,22 +3414,18 @@
 "\tsuperblock=<číslo superbloku>\n"
 "\tblocksize=<velikost bloku>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tPoužívám %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Nemohu najít platný superblok systému souborů.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Poznámka: Tento systém souborů má přehozené bajty\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid ""
 "\n"
@@ -3302,35 +3434,35 @@
 "\n"
 "%s: %s: chyba při čtení bitmap: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Použití: %s [-rSI] zařízení soubor_s_obrazem\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Nemohu alokovat vyrovnávací paměť hlavičky\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "krátký zápis (jen %d bajtů) při zápisu hlavičky obrazu"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "při zápisu superbloku"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
-msgstr "při zápisu tabulky inode"
+msgstr "při zápisu tabulky iuzlů"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "při zápisu bitmapy bloků"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
-msgstr "při zápisu bitmapy inode"
+msgstr "při zápisu bitmapy iuzlů"
 
 #: misc/e2label.c:57
 #, c-format
@@ -3352,7 +3484,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: není systém souborů ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1670
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varování: jmenovka příliš dlouhá, zkracuji.\n"
@@ -3367,11 +3499,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: chyba při zápisu superbloku\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Použití: e2label zařízení [novájmenovka]\n"
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Použití: %s <TRANSAKČNÍ_SOUBOR> <SOUBOROVÝ_SYSTÉM>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Nemohu načíst data souborového systému \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "tdb_fetch %s selhalo\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Čas připojení systému souborů se neshoduje s %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "UUID systému souborů se neshoduje \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open %s selhalo\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Chyba při zjišťování, jestli je %s připojen.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo by měl být pouštěn jen na nepřipojeném systému souborů\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Selhalo otevření %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Přehraná transakce o velikosti %zd na pozici %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Selhal zápis %s\n"
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3394,37 +3578,37 @@
 "\tsvou /etc/fstab, jak nejdřív budete moci.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nenalezen\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Žádný další synovský proces?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Varování… %s pro zařízení %s skončil se signálem %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: stav je %x, nemělo by se nikdy stát.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Dokončen s %s (stav ukončení %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Chyba %d při spouštění fsck.%s pro %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3432,41 +3616,41 @@
 "Buď všechny nebo žádný typ systému souborů předaný -t musí mít předponu\n"
 "„no“ nebo „!“.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Nemohu alokovat paměť pro typy systému souborů\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
 msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr ""
 "%s: přeskakuji chybný řádek v /etc/fstab: připojení typu bind s nenulovým\n"
 "pořadím průchodu skrze fsck\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: nemohu zkontrolovat %s: fsck.%s nenalezen\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr "Kontroluji všechny systémy souborů.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--čekám-- (průchod %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1077
 msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr "Použití: fsck [-AMNPRTV] [-C [fd]] [-t typss] [přepínače-ss] [systémsouborů…]\n"
+msgstr "Použití: fsck [-AMNPRTV] [-C [fd]] [-t typss] [přepínače-ss] [systémsouborů…]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: příliš mnoho zařízení\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: příliš mnoho argumentů\n"
@@ -3486,52 +3670,55 @@
 msgid "While reading version on %s"
 msgstr "Při čtení verze %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Použití: %s [-c|-l názevsouboru] [-b velikost-bloku] [-f velkost-fragmentu]\n"
 "\t[-i bajtů-na-iuzel] [-I velikost-iuzlu] [-J přepínače-žurnálu]\n"
-"\t[-N počet-iuzlů] [-m procenta-rezervovaných-bloků] [-o tvořící-os]\n"
+"\t[-G velikost meta skupiny] [-N počet-iuzlů]\n"
+"\t[-m procenta-rezervovaných-bloků] [-o tvořící-os]\n"
 "\t[-g bloků-ve-skupině] [-L jmenovka-svazku]\n"
 "\t[-M adresář-posledního-připojení] [-O vlastnost[,…]] [-r revize-ss]\n"
-"\t[-E rozšířené-přepínače[,…]] [-T druh-ss] [-jnqvFSV] zařízení [počet-bloků]\n"
+"\t[-E rozšířený-přepínač[,…]] [-T druh-ss] [-U UUID] [-jnqvFSV]\n"
+"\tzařízení [počet-bloků]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Spouštím příkaz: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "při pokusu spustit „%s“"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "při zpracovávání seznamu špatných bloků z programu"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Blok %d v oblasti primárního superbloku/deskriptorů skupin špatný.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Bloky %u až %u musí být pro vytvoření systému souborů v pořádku.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Končím…\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3542,23 +3729,19 @@
 "\tšpatné bloky.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "při označování špatných bloků jako použité"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "hotovo                          \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "Při alokaci nulovací vyrovnávací paměti"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
-msgstr "Zapisuji tabulky inode: "
+msgstr "Zapisuji tabulky iuzlů: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3567,67 +3750,67 @@
 "\n"
 "Nemohu zapsat %d bloků do tabulky iuzlů začínající v %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "při vytváření kořenového adresáře"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
-msgstr "při čtení kořenové inode"
+msgstr "při čtení kořenového iuzlu"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
-msgstr "při nastavování vlastnictví kořenové inode"
+msgstr "při nastavování vlastnictví kořenového iuzlu"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "při vytváření /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "při vyhledávání /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "při zvětšování /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
-msgstr "při nastavování inode špatných bloků"
+msgstr "při nastavování iuzlu špatných bloků"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Nedostatek paměti při mazání sektorů %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varování: nemohu načíst blok 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varování: nemohu vymazat sektor %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "při inicializaci superbloku žurnálu"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Nuluji zařízení žurnálu: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "při nulování zařízení žurnálu (blok %u, počet %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "při zápisu superbloku žurnálu"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3636,96 +3819,96 @@
 "varování: nepoužito %u bloků.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Jmenovka systému souborů=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Typ OS: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Velikost bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Velikost fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
-msgstr "%u inode, %u bloků\n"
+msgstr "%u iuzlů, %u bloků\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u bloků (%2.2f %%) rezervováno pro superuživatele\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "První blok dat=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum bloků v systému souborů=%'lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u skupin bloků\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u skupina bloků\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloků ve skupině, %u fragmentů ve skupině\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u iuzlů ve skupině\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Zálohy superbloku uloženy v blocích: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Neplatný parametr kroku (stride): %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Neplatný parametr šířka-pásu (stripe-width): %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Neplatný parametr změny velikosti: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Maximum změny velkosti musí být větší než velikost systému souborů.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Revize 0 souborového systému nepodporuje změnu velikosti za běhu\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3738,8 +3921,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Zadán(y) špatný(é) přepínač(e): %s\n"
@@ -3751,10 +3935,11 @@
 "\tstride=<shluk (chunk) dat na jednom raidovém disku v blocích>\n"
 "\tstripe-width=<krok (stride) RAIDu * datových disků v blocích>\n"
 "\tresize=<maximální velikost změny velikosti v blocích>\n"
-"\n"
+"\tlazy_itable_init=<líná inicializace itabulky: 0 zakázáno, 1 povoleno>\n"
 "\ttest_fs\n"
+"\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3765,7 +3950,7 @@
 "Varování: šířka pruhu RAIDu %u není sudý násobek kroku (stride) %u.\n"
 "\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3774,97 +3959,142 @@
 "Chyba syntaxe v konfiguračním souboru mke2fs (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Neplatný sada přepínačů systému souborů: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Varování! Váš soubor mke2fs.conf nedefinuje druh souborového systému %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Pravděpodobně potřebujete nainstalovat aktualizovaný soubor mke2fs.conf.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
 #, c-format
 msgid "invalid block size - %s"
 msgstr "špatná velikost bloku – %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1180
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Varování: velikost bloku %d není na většině systémů použitelná.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1196
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "špatná velikost fragmentu – %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1202
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Varování: fragmenty nepodporovány. Ignoruji přepínač -f\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1209
 msgid "Illegal number for blocks per group"
 msgstr "Neplatný počet bloků ve skupině"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1214
 msgid "blocks per group must be multiple of 8"
 msgstr "bloky ve skupině musí být násobek 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Neplatné číslo pro velikost flex_bg"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "Velikost flex_bg musí být mocninou 2"
+
+#: misc/mke2fs.c:1238
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "špatný podíl iuzlů %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1255
 msgid "in malloc for bad_blocks_filename"
 msgstr "v malloc pro bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "špatné procento rezervovaných bloků – %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "špatné číslo revize – %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "špatná velikost iuzlu – %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "chybný počet iuzlů – %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "při pokusu otevřít zařízení žurnálu %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Velikost bloku zařízení žurnálu (%d) menší než minimální velikost bloku %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Použiji velikost bloku žurnálovacího zařízení: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-bajtové bloky příliš velké pro systém (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr "Varování: %d-bajtové bloky příliš velké pro systém (max %d), donucen pokračovat\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "špatný počet bloků - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "systém souborů"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Velikost zařízení %s je příliš velká na reprezentaci v 32 bitech\n"
+"\tpoužiji velikost bloku %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:374
 msgid "while trying to determine filesystem size"
 msgstr "při pokusu zjistit velikost systému souborů"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3872,7 +4102,7 @@
 "Nemohu zjistit velikost zařízení; musíte zadat\n"
 "velikost systému souborů\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3884,81 +4114,77 @@
 "         oddíl se používá. Možná budete muset pro opětovné načtení\n"
 "         své tabulky oddílů znovu zavést systém.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Systém souborů větší než velikost zařízení."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Seznam druhů souborových systému se nezdařilo rozebrat\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types (druhy SS) pro řešení v mke2fs.conf: "
+
+#: misc/mke2fs.c:1547
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Vlastnosti systému souborů nejsou v revizi 0 podporovány\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1554
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Řídké superbloky systému souborů nejsou v revizi 0 podporovány\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1566
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Revize 0 systému souborů žurnály nepodporuje\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Vlastnosti resize_inode a meta_bg nejsou slučitelné.\n"
+"Obě nemohou být zapnuty současně.\n"
+
+#: misc/mke2fs.c:1601
 msgid "while trying to determine hardware sector size"
 msgstr "při pokusu zjistit velikost hardwarového sektoru"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1658
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "bloky vyhrazené pro změnu velikosti za běhu nejsou podporovány na neřídkém\n"
 "\tsystému souborů"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1667
 msgid "blocks per group count out of range"
 msgstr "počet bloků ve skupině mimo rozsah"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
-msgstr ""
-"Souborový systém je příliš velký. V současnosti není podporováno více jak\n"
-"\t2**31-1 bloků (8 TB při 4k blocích)."
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Vlastnost flex_bg není povolena, takže její velikost nemůže být zadána"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Varování: některá jádra z řady 2.4 nepodporují na ext3 bloky větší než 4096\n"
-"\tJe-li to váš případ, použijte „-b 4096“.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1694
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "špatná velikost iuzlu %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Varování: %dbajtové iuzly nejsou na starších systémech použitelné\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1708
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "příliš mnoho iuzlů (%'llu), zvýšit poměr iuzlu?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1713
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "příliš mnoho iuzlů (%'llu), zadejte < 2^32 iuzlů"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1728
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3969,38 +4195,57 @@
 "\tsystém souborů s %'lu bloky, zadejte vyšší poměr_iuzlu (-i)\n"
 "\tnebo snižte počet iuzlů (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Nemohu alokovat paměť pro název souboru TDB\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "při pokusu smazat %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Přepisuji existující systém souborů, toto může být odčiněno příkazem:\n"
+"   e2undo %s %s\n"
+
+#: misc/mke2fs.c:1893
 msgid "while setting up superblock"
 msgstr "při nastavování superbloku"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1952
 #, c-format
 msgid "unknown os - %s"
 msgstr "neznámý os – %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2006
 msgid "while trying to allocate filesystem tables"
 msgstr "při pokusu alokovat tabulky systému souborů"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2037
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "při nulování bloku %u na konci systému souborů"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2050
 msgid "while reserving blocks for online resize"
 msgstr "při rezervaci bloků pro změnu velikosti za běhu"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
 msgid "journal"
 msgstr "žurnál"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2073
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Přidávám žurnál k zařízení %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2080
 #, c-format
 msgid ""
 "\n"
@@ -4009,17 +4254,27 @@
 "\n"
 "\tpři pokusu přidat žurnál k zařízení %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr "hotovo\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "V režimu jen-superdata bude vynechána tvorba žurnálu\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Vytvářím žurnál (%'u bloků): "
+
+#: misc/mke2fs.c:2122
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapisuji superbloky a účtovací informace systému souborů: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2127
 #, c-format
 msgid ""
 "\n"
@@ -4028,7 +4283,7 @@
 "\n"
 "Varování, měl jsem problémy při zápisu superbloků."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2130
 #, c-format
 msgid ""
 "done\n"
@@ -4042,11 +4297,46 @@
 msgid "Usage: mklost+found\n"
 msgstr "Použití: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Použití:  %s ZAŘÍZENÍ…\n"
+"\n"
+"Vypíše informace o oddílech na každém zadaném ZAŘÍZENÍ.\n"
+"Na příklad: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Nelze otevřít %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Nelze získat geometrii %s: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Nelze získat velikost %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   začátek=%8d velikost=%8lu konec=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Spusťte prosím na tomto systému souborů e2fsck.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:105
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4054,7 +4344,8 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Použití: %s [-c max_počet_připojení] [-e chování_při_chybách]\n"
 "\t[-g skupina] [-i interval[d|m|w]] [-j] [-J přepínače_žurnálu] [-l]\n"
@@ -4062,69 +4353,70 @@
 "\t[-r počet_rezervovaných_bloků] [-u uživatel] [-C počet_připojení]\n"
 "\t[-L jmenovka_svazku] [-M poslední_adresář_připojení]\n"
 "\t[-O [^]vlastnost[,…]] [-E rozšířený-přepínač[,…]]\n"
-"\t[-T čas_poslední_kontroly] [-U UUID] zařízení\n"
+"\t[-T čas_poslední_kontroly] [-U UUID]\n"
+"\t[-I nová_velikost_iuzlu] zařízení\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr "při pokusu otevřít externí žurnál"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s není zařízení žurnálu.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
 msgstr "Superblok žurnálu nenalezen!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID systému souborů nenalezeno na zařízení žurnálu.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr "Žurnál NEODSTRANĚN\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr "Žurnál odstraněn\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr "při čtení bitmap"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
-msgstr "při mazání inode žurnálu"
+msgstr "při čištění iuzlu žurnálu"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
-msgstr "při zápisu inode žurnálu"
+msgstr "při zápisu iuzlu žurnálu"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Nastaven neplatný přepínač připojení: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:358
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Odstranění vlastnosti systému souborů „%s“ není podporováno.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:364
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Nastavená vlastnosti systému souborů „%s“ není podporováno.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Příznak has_journal může být vymazán jen když je systém souborů\n"
+"Příznak has_journal může být vymazán jen, když je systém souborů\n"
 "odpojen nebo připojen jen pro čtení.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4132,11 +4424,32 @@
 "Příznak needs_recovery je nastaven. Před vymazáním příznaku has_journal\n"
 "prosím spusťte e2fsck.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Odstranění příznaku flex_bg by mohlo způsobit nekonzistenci systému\n"
+"souborů.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Příznak huge_file může být vymazán jen, když je systém souborů\n"
+"odpojen nebo připojen jen pro čtení.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(a po té rebootujte!)\n"
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr "Systém souborů již žurnál má.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
@@ -4145,21 +4458,21 @@
 "\n"
 "\tpři pokusu otevřít žurnál na %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Vytvářím žurnál na zařízení %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "při přidávání systému souborů do žurnálu na %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
-msgstr "Vytvářím inode žurnálu: "
+msgstr "Vytvářím iuzel žurnálu: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4167,65 +4480,85 @@
 "\n"
 "\tpři pokusu vytvořit soubor žurnálu"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nemohu zpracovat určení data/času: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "špatný počet připojení - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "špatné chování při chybách - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "špatné gid/jméno skupiny - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr "Špatný interval - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "špatný podíl rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr "-o může být zadáno jen jednou"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr "-O může být zadáno jen jednou"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "špatný počet rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "špatné uid/jméno uživatele - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "špatná velikost iuzlu – %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Velikost iuzlu musí být mocnina dvou – %s"
+
+#: misc/tune2fs.c:904
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Neplatný kroku (stride) RAIDu: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:919
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Neplatná šířka pruhu RAIDu (stripe-width): %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Neplatný hashovací algoritmus: %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Nastavuji implicitní hashovací algoritmus na %s (%d)\n"
+
+#: misc/tune2fs.c:948
 #, c-format
 msgid ""
 "\n"
@@ -4236,68 +4569,90 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 "\n"
 "Zadány špatné přepínače.\n"
 "\n"
-"Rozšířené přepínače jsou odděleny čárkami a mohou mít argument, který je\n"
+"Rozšířené přepínače se oddělují čárkami a mohou mít argument, který je\n"
 "\toddělen znaménkem rovná se („=“).\n"
 "\n"
-"Platné přepínače jsou:\n"
+"Platné rozšířené přepínače jsou:\n"
 "\tstride=<velikost shluku (chunk) na jednom raidovém disku v blocích>\n"
-"\tstripe-width=<krok RAIDu * datových disků v blocích>\n"
+"\tstripe_width=<krok (stride) RAIDu * datových disků v blocích>\n"
+"\thash_alg=<hashovací algoritmus>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr "Systém souborů %s má zapnuté nepodporované vlastnosti.\n"
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "bloky pro přesun"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Změny způsobené tune2fs lze zvrátit tímto příkazem\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "Velikost iuzlu již je %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Zmenšování velikosti iuzlu není podporováno\n"
+
+#: misc/tune2fs.c:1594
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Nastavuji maximální počet připojení na %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1600
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Nastavuji aktuální počet připojení na %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Nastavuji chování při chybách na %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1610
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Nastavuji gid rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1615
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Nastavuji interval mezi kontrolami na %'lu sekund\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1622
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Nastavuji procento rezervovaných bloků na %g %% (%'u bloků)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "počet rezervovaných bloků je příliš velký (%'lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Nastavuji počet rezervovaných bloků na %'lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1641
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4305,7 +4660,7 @@
 "\n"
 "Systém souborů již má řídké superbloky.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1648
 #, c-format
 msgid ""
 "\n"
@@ -4314,7 +4669,7 @@
 "\n"
 "Příznak řídkých superbloků nastaven.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1653
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -4322,26 +4677,51 @@
 "\n"
 "Odstranění superpříznaku řídkosti není podporováno.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1660
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Nastavuji čas poslední kontroly systému souborů na %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1666
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Nastavuji uid rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1717
 msgid "Invalid UUID format\n"
 msgstr "Neplatný formát UUID\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "Velikost iuzlu smí být změněna, jen když je systém souborů odpojen.\n"
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Na souborových systémech se zapnutou vlastností flex_bg není změna velikosti\n"
+"iuzlu podporována.\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Chyba při měnění velikost iuzlu.\n"
+"Spusťte e2undo, abyste vrátili změny provedené na systému souborů.\n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Nastavuji velikost iuzlu %lu\n"
+
+#: misc/tune2fs.c:1762
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Nastavuji velikost kroku (stride) na %d\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1767
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Nastavuji šířku pruhu (stripe width) na %d\n"
@@ -4402,20 +4782,20 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
 "Zadány špatné přepínače žurnálu.\n"
 "\n"
-"Přepínače žurnálu jsou odděleny čárkami a mohou mít argument, který je\n"
+"Přepínače žurnálu se oddělují čárkami a mohou mít argument, který je\n"
 "\toddělen znaménkem rovná se („=“).\n"
 "\n"
 "Platné přepínače žurnálu jsou:\n"
 "\tsize=<velikost žurnálu v megabajtech>\n"
 "\tdevice=<zařízení žurnálu>\n"
 "\n"
-"Velikost žurnálu musí být mezi 1024 a 102400 bloky systému souborů.\n"
+"Velikost žurnálu musí být mezi 1024 a 10240000 bloky systému souborů.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4452,7 +4832,7 @@
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
 "Tento systém souborů bude automaticky kontrolován každých %d připojení nebo\n"
-"%g dní, podle toho, co bude dříve. Pro změnu použijte tune2fs -c nebo -i.\n"
+"%g dní, podle toho, co nastane dříve. Pro změnu použijte tune2fs -c nebo -i.\n"
 
 #: misc/uuidgen.c:31
 #, c-format
@@ -4461,7 +4841,7 @@
 
 #: resize/extent.c:196
 msgid "# Extent dump:\n"
-msgstr "# Výpis rozsahú:\n"
+msgstr "# Výpis rozsahu:\n"
 
 #: resize/extent.c:197
 #, c-format
@@ -4473,75 +4853,95 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Použití: %s [-d ladicí_přepínače] [-f] [-F] [-p] zařízení [nová_velikost]\n"
+"Použití: %s [-d ladicí_přepínače] [-f] [-F] [-M] [-P] [-p]\n"
+"         zařízení [nová_velikost]\n"
 "\n"
 
-#: resize/main.c:61
-msgid "Extending the inode table"
-msgstr "Zvětšuji tabulku inode"
-
 #: resize/main.c:64
+msgid "Extending the inode table"
+msgstr "Zvětšuji tabulku iuzlů"
+
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Přesouvám bloky"
 
-#: resize/main.c:67
-msgid "Scanning inode table"
-msgstr "Procházím tabulku inode"
-
 #: resize/main.c:70
-msgid "Updating inode references"
-msgstr "Aktualizuji odkazy na inode"
+msgid "Scanning inode table"
+msgstr "Procházím tabulku iuzlů"
 
 #: resize/main.c:73
-msgid "Moving inode table"
-msgstr "Přesouvám tabulku inode"
+msgid "Updating inode references"
+msgstr "Aktualizuji odkazy na iuzly"
 
 #: resize/main.c:76
+msgid "Moving inode table"
+msgstr "Přesouvám tabulku iuzlů"
+
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Neznámý průchod?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Začátek průchodu %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr "při otevírání %s"
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "při zjišťování stat informací o %s"
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "špatná velikost systému souborů – %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinace vlastností flex_bg a\n"
+"\t!resize_inode není podporována nástrojem resize2fs.\n"
 
-#: resize/main.c:353
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Odhadovaná minimální velikost systému souborů: %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Chybná nová velikost: %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "Nová velikost je menší než minimum (%u)\n"
+
+#: resize/main.c:402
 msgid "Invalid stride length"
 msgstr "Neplatná délka kroku"
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
 "You requested a new size of %u blocks.\n"
 "\n"
 msgstr ""
-"Dotčený oddíl (nebo zařízení) je jen %'u (%'d k) bloků velké.\n"
+"Dotčený oddíl (nebo zařízení) je jen %'u (%dk) bloků velké.\n"
 "Požadovali jste novou velikost %'u bloků.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4550,7 +4950,7 @@
 "Souborový systém již je dlouhý %'u bloků. Není co dělat!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4559,12 +4959,26 @@
 "Spusťte prosím nejdříve „e2fsck -f %s“.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "Velikost systému souborů %s se mění na %'u (%dk) bloků.\n"
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
 msgstr "při pokusu změnit velikost %s"
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Po přerušené změně velikosti, prosím, opravte souborový systém pomocí\n"
+"„e2fsck -fy %s“\n"
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4573,27 +4987,187 @@
 "Systém souborů na %s je nyní %'u bloků dlouhý.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "při pokusu zkrátit %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+"Systém souborů v %s je připojen do %s,\n"
+"požadována změna velikosti za běhu.\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Zmenšení z %u na %u není podporováno.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Systém souborů nepodporuje změnu velikosti za běhu"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "při pokusu otevřít přípojný bod %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Povolení ke změně velikosti systému souborů zamítnuto"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Jádro nepodporuje změnu velikost za běhu"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Při zjišťování podpory změny velikosti za běhu"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Provádím změnu velikosti za běhu %s na %'u (%dk) bloků.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Při pokusu rozšířit poslední skupinu"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Při pokusu přidat skupinu č. %d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Systém souborů v %s je připojen do %s a změna velikost za běhu není na tomto systému podporována.\n"
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "iuzlů (%'llu) musí být méně než %'u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "rezervované bloky"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "bloky pro přesun"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr "bloky meta-dat"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr "Toto by se nikdy nemělo stát: iuzly pro změnu velikosti jsou poškozeny!\n"
+msgstr "Toto by se nikdy nemělo stát: iuzly pro změnu velikosti jsou poškozeny!\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "Superblok nemá příznak has_journal, ale má žurnál ext3 %s.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Chyba při mazání rozsahu: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr "Znovu vytvořit žurnál, aby se získal zpět souborový systém ext3?\n"
+
+#~ msgid "bad block size - %s"
+#~ msgstr "špatná velikost bloku – %s"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "při opakovaném pokusu zapsat bitmapy bloků pro %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "zápisu bitmap inode"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s selhalo pro %s: %s\n"
+
+# Toto je open(2) použitý jako titulek chybového hlášení
+#~ msgid "open"
+#~ msgstr "otevírání"
+
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "ioctl HDIO_GETGEO"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "ioctl BLKGETSIZE"
+
+#~ msgid "Filesystem %s has unsupported features enabled.\n"
+#~ msgstr "Systém souborů %s má zapnuté nepodporované vlastnosti.\n"
+
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr "Rozšířený atribut v iuzlu %i má hash (%N), který není platný (musí být 0)\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "při volání ext2fs_block_iterate"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "při volání funkce iterátoru"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "při alokaci vyrovnávací paměti inode"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "při čtení tabulky inode (skupina %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "při zápisu tabulky inode (skupina %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr "Průchod 0: Provádím přehození bajtů systému souborů\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s: systém souborů musí být před pokusem přehodit bajty\n"
+#~ "čerstvě otestován pomocí fsck a nesmí být připojen.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Přehození bajtů"
+
+#~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#~ msgstr "Přehození bajtů systémů souborů není zabudováno v této verzi e2fsck\n"
+
+#~ msgid "Incompatible options not allowed when byte-swapping.\n"
+#~ msgstr "Při přehození bajtů nejsou dovoleny nekompatibilní přepínače.\n"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr "%s: Pořadí bajtů systému souborů již normalizováno.\n"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "neplatný zkušební_vzorek: %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "špatný počáteční blok – %s"
+
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Poznámka: Tento systém souborů má přehozené bajty\n"
+
+#~ msgid ""
+#~ "Filesystem too large.  No more than 2**31-1 blocks\n"
+#~ "\t (8TB using a blocksize of 4k) are currently supported."
+#~ msgstr ""
+#~ "Souborový systém je příliš velký. V současnosti není podporováno více jak\n"
+#~ "\t2**31-1 bloků (8 TB při 4k blocích)."
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
+#~ "\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Varování: některá jádra z řady 2.4 nepodporují na ext3 bloky větší než 4096\n"
+#~ "\tJe-li to váš případ, použijte „-b 4096“.\n"
+#~ "\n"
+
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr "Varování: %dbajtové iuzly nejsou na starších systémech použitelné\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "špatná velikost systému souborů – %s"
 
 #~ msgid ""
 #~ "\n"
@@ -4741,9 +5315,6 @@
 #~ msgid "(unknown os)"
 #~ msgstr "(neznámý os)"
 
-#~ msgid "%s failed for %s: %s\n"
-#~ msgstr "%s selhalo pro %s: %s\n"
-
 #~ msgid ""
 #~ "Usage: %s <dev1> <dev2> <dev3>\n"
 #~ "\n"
@@ -4761,19 +5332,6 @@
 #~ "\t%s /dev/hda?\n"
 #~ "\n"
 
-#~ msgid "HDIO_GETGEO ioctl"
-#~ msgstr "ioctl HDIO_GETGEO"
-
-#~ msgid "BLKGETSIZE ioctl"
-#~ msgstr "ioctl BLKGETSIZE"
-
-#~ msgid ""
-#~ "%s is mounted; can't resize a mounted filesystem!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "%s je připojen; nemohu měnit velikost připojeného systému souborů!\n"
-#~ "\n"
-
 #~ msgid "resize2fs %s (%s)\n"
 #~ msgstr "resize2fs %s (%s)\n"
 
@@ -4790,7 +5348,7 @@
 #~ msgstr "ino=%u, početbloků=%lld, %u->%u\n"
 
 #~ msgid "Inode moved %u->%u\n"
-#~ msgstr "Inode přesunuta %u->%u\n"
+#~ msgstr "Iuzel přesunut %u->%u\n"
 
 #~ msgid "Inode translate (dir=%u, name=%.*s, %u->%u)\n"
 #~ msgstr "Překlad inode (adr=%u, název=%.*s, %u->%u)\n"
diff --git a/po/de.gmo b/po/de.gmo
index 9fc5d26..30afc04 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 66454c9..5cd3268 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,8 +1,9 @@
-# Übertragung von e2fsprogs ins Deutsche.
-# Copyright (C) 2008 Theodore Tso (msgids)
-# Olaf Klemke <olke@users.sourceforge.net>, 2002.
-# Marc Langer <marc@marclanger.de>, 2003.
-# Philipp Thomas <pth@suse.de>, 2007, 2008.
+# Deutsche Übersetzungen für e2fsprogs
+# Copyright (C) 1996 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
+# Olaf Klemke <olke@users.sourceforge.net>,2002
+# Marc Langer <marc@marclanger.de>,2003
+# Philipp Thomas <pth@suse.de>, 2007, 2008
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -64,10 +65,10 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.40.7\n"
+"Project-Id-Version: e2fsprogs-1.41.1\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-12 19:47+0100\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
+"PO-Revision-Date: 2008-09-03 12:39+0200\n"
 "Last-Translator: Philipp Thomas <pth@suse.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -75,24 +76,24 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bad block %u außerhalb des gültigen Bereichs; ignoriert.\n"
 
 #: e2fsck/badblocks.c:45
 msgid "while sanity checking the bad blocks inode"
-msgstr "während der logischen Prüfung des 'Bad Block'-Inodes"
+msgstr "während der logischen Prüfung des »Bad Block«-Inodes"
 
 #: e2fsck/badblocks.c:57
 msgid "while reading the bad blocks inode"
-msgstr "während des Lesens des 'Bad Block'-Inodes"
+msgstr "während des Lesens des »Bad Block«-Inodes"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "beim Versuch, %s zu öffnen"
@@ -100,50 +101,50 @@
 #: e2fsck/badblocks.c:82
 #, c-format
 msgid "while trying popen '%s'"
-msgstr "beim Versuch, '%s' mittels 'popen' zu öffnen"
+msgstr "beim Versuch, »%s« mittels »popen« zu öffnen"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
-msgstr "beim Lesen der 'Bad Block'-Liste aus der Datei"
+msgstr "beim Lesen der »Bad Block«-Liste aus der Datei"
 
 #: e2fsck/badblocks.c:104
 msgid "while updating bad block inode"
-msgstr "beim Updaten des 'Bad Block'-Inodes"
+msgstr "beim Updaten des »Bad Block«-Inodes"
 
 #: e2fsck/badblocks.c:130
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
-"Warnung! Nicht zulässigen Block %u im 'Bad Blocks'-Inode gefunden! "
+"Warnung: Nicht zulässiger Block %u im »Bad Blocks«-Inode gefunden! "
 "Bereinigt.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
-msgstr "Lesefehler - Block %lu (%s) während %s  "
+msgstr "Lesefehler - Block %lu (%s) während %s. "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
-msgstr "Lesefehler - Block %lu (%s)  "
+msgstr "Lesefehler - Block %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignoriere Fehler"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Rückschreiben erzwingen"
 
-#: e2fsck/ehandler.c:100
-#, c-format
-msgid "Error writing block %lu (%s) while %s.  "
-msgstr "Schreibfehler - Block %lu (%s) während %s  "
-
 #: e2fsck/ehandler.c:103
 #, c-format
+msgid "Error writing block %lu (%s) while %s.  "
+msgstr "Schreibfehler - Block %lu (%s) während %s. "
+
+#: e2fsck/ehandler.c:106
+#, c-format
 msgid "Error writing block %lu (%s).  "
-msgstr "Schreibfehler - Block %lu (%s)  "
+msgstr "Schreibfehler - Block %lu (%s). "
 
 #: e2fsck/emptydir.c:56
 msgid "empty dirblocks"
@@ -176,7 +177,7 @@
 #: e2fsck/flushb.c:34
 #, c-format
 msgid "Usage: %s disk\n"
-msgstr "Verwendung: %s Laufwerk\n"
+msgstr "Aufruf: %s Laufwerk\n"
 
 #: e2fsck/flushb.c:63
 #, c-format
@@ -186,23 +187,23 @@
 #: e2fsck/iscan.c:46
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
-msgstr "Verwendung: %s [-F] [-I inode_buffer_blocks] Gerät\n"
+msgstr "Aufruf: %s [-F] [-I inode_buffer_blocks] Gerät\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "beim Öffnen von %s für die Puffer-Leerung."
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
-msgstr "während des Rückschreibeversuches auf %s."
+msgstr "während des Rückschreibeversuches auf %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
 msgstr "beim Start des Inode-Scans"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
 msgstr "beim Laden des nächsten Inodes"
 
@@ -211,346 +212,357 @@
 msgid "%u inodes scanned.\n"
 msgstr "%u Inodes untersucht.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "Lese Journal-Superblock\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: keinen gültigen Journal-Superblock gefunden\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
-msgstr "%s: Das Journal ist zu kurz.\n"
+msgstr "%s: Das Journal ist zu kurz\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: stelle das Journal wieder her\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: Das Journal ist nur lesbar - Keine Wiederherstellung\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "beim Versuch, %s erneut zu öffnen"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aerweiterte Eigenschaft"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "AFehler beim Zuweisen"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bBlock"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "BBitmap"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ckomprimieren"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "CKonflikte mit anderen Dateisystemen @b"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "iInode"
 
-#: e2fsck/message.c:116
-msgid "Iillegal"
-msgstr "Inicht zulässig"
-
 #: e2fsck/message.c:117
+msgid "Iillegal"
+msgstr "Iillegal(er)"
+
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jJournal"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dgelöscht"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "dVerzeichnis"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "eEintrag"
 
-#: e2fsck/message.c:121
-msgid "E@e '%Dn' in %p (%i)"
-msgstr "E@e '%Dn' in %p (%i)"
-
 #: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "E@e »%Dn« in %p (%i)"
+
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fDateisystem"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Ffür @i %i (%Q) ist"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "gGruppe"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "hHTREE @d @i"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "List ein Link"
 
-#: e2fsck/message.c:128
-msgid "mmultiply-claimed"
-msgstr "mehrfach beanspruchte Inode-Liste"
-
 #: e2fsck/message.c:129
+msgid "mmultiply-claimed"
+msgstr "mmehrfach beansprucht"
+
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "nungültig"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "overwaist"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pProblem in"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "rRoot @i"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "ssollte sein"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "SSuper@b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "unicht verbunden"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vGerät"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xErweiterung"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zNull-Länge"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<Der NULL Inode>"
 
-#: e2fsck/message.c:149
-msgid "<The bad blocks inode>"
-msgstr "<Der 'Bad Blocks'-Inode>"
-
 #: e2fsck/message.c:151
-msgid "<The ACL index inode>"
-msgstr "<Der 'ACL Index'-Inode>"
-
-#: e2fsck/message.c:152
-msgid "<The ACL data inode>"
-msgstr "<Der 'ACL Data'-Inode>"
+msgid "<The bad blocks inode>"
+msgstr "<Der »Bad Blocks«-Inode>"
 
 #: e2fsck/message.c:153
-msgid "<The boot loader inode>"
-msgstr "<Der 'Boot Loader'-Inode>"
+msgid "<The ACL index inode>"
+msgstr "<Der »ACL Index«-Inode>"
 
 #: e2fsck/message.c:154
-msgid "<The undelete directory inode>"
-msgstr "<Der 'undelete directory'-Inode>"
+msgid "<The ACL data inode>"
+msgstr "<Der »ACL Data«-Inode>"
 
 #: e2fsck/message.c:155
-msgid "<The group descriptor inode>"
-msgstr "<Des 'group descriptor'-Inode>"
+msgid "<The boot loader inode>"
+msgstr "<Der »Boot Loader«-Inode>"
 
 #: e2fsck/message.c:156
+msgid "<The undelete directory inode>"
+msgstr "<Der »undelete directory«-Inode>"
+
+#: e2fsck/message.c:157
+msgid "<The group descriptor inode>"
+msgstr "<Des »group descriptor«-Inode>"
+
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<Der Journal-Inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Der reservierte Inode 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Der reservierte Inode 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "'reguläre Datei"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "Verzeichnis"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "zeichenorientiertes Gerät"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "Blockgerät"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
-msgstr ""
+msgstr "named pipe"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "symbolische Verknüpfung"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr " Socket"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
-msgstr ""
+msgstr "unbekannter Dateityp mit Modus 0%o"
 
 #: e2fsck/pass1b.c:215
 msgid "multiply claimed inode map"
 msgstr "mehrfach beanspruchte Inode-Liste"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "interner Fehler; dup_blk für %u nicht gefunden\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
 msgstr "zurückgegeben von clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:762
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "interner Fehler: EA Blockliste für %u wurde nicht gefunden"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:774
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Interner Fehler: EA Inodeliste für %u wurde nicht gefunden"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 msgid "reading directory block"
 msgstr "lese Verzeichnisblock"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
-msgstr "'in-use inode'-Liste"
+msgstr "»in-use inode«-Liste"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
-msgstr "'directory inode'-Liste"
+msgstr "»directory inode«-Liste"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
-msgstr "'regular file inode'-Liste"
+msgstr "»regular file inode«-Liste"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
-msgstr "'in-use block'-Liste"
+msgstr "»in-use block«-Liste"
 
-#: e2fsck/pass1.c:599
-#, fuzzy
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
-msgstr "Inode-Scan"
+msgstr "Starte Inode-Scan"
 
-#: e2fsck/pass1.c:623
-#, fuzzy
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
-msgstr "beim Laden des nächsten Inodes"
+msgstr "beim Lesen des nächsten Inodes"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "Durchgang 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lese indirekte Blöcke von Inode %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
 msgstr "fehlerhafte Inode-Liste"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
-msgstr "Inode in 'Bad Blocks'-Liste"
+msgstr "Inode in »Bad Blocks«-Liste"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
-msgstr "i'magic inode'-Liste"
+msgstr "i»magic inode«-Liste"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
-msgstr "multiply claimed block map"
+msgstr "Den Eintrag in der Liste belegter Blöcke verdoppeln"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr "ext attr block map"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, fuzzy, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu: erwartete %6lu erhielt phys %6lu (Blockanzahl %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
-msgstr "block bitmap"
+msgstr "Block Bitmap"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
-msgstr "inode bitmap"
+msgstr "Inode Bitmap"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "Inode-Tabelle"
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "Durchgang 2"
 
+#: e2fsck/pass2.c:803
+msgid "Can not continue."
+msgstr "Fortsetzung nicht möglich."
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
-msgstr "'inode done'-Bitmap"
+msgstr "»inode done«-Bitmap"
 
 #: e2fsck/pass3.c:90
 msgid "Peak memory"
 msgstr "Peak-Memory"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "Durchgang 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 msgid "inode loop detection bitmap"
-msgstr "'inode loop detection'-Bitmap"
+msgstr "»inode loop detection«-Bitmap"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "Durchgang 4"
 
@@ -823,7 +835,7 @@
 "Hinweis: Wenn mehrere Inodes oder Bitmap-Blöcke\n"
 "neu geordnet werden müssen, oder ein Teil der Inode-Tabelle\n"
 "verschoben werden muss, könnte es helfen, e2fsck erst einmal\n"
-"mit der Option '-b %S' zu starten. Das Problem könnte\n"
+"mit der Option »-b %S« zu starten. Das Problem könnte\n"
 "im primären Blockgruppenbezeichner liegen, und seine\n"
 "Sicherungskopie in Ordnung sein.\n"
 "\n"
@@ -848,10 +860,10 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd unterstützt das Dateityp-Feature nicht.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
-#, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S hat einen defekten ext3 @j (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
@@ -874,13 +886,14 @@
 msgid "External @j does not support this @f\n"
 msgstr "Externes @j unterstützt nicht @f\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
+#, fuzzy
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
@@ -890,25 +903,28 @@
 "unterstützt.\n"
 "Es ist ebenso möglich, dass @j @S defekt ist.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
+#, fuzzy
+msgid "@j @S is corrupt.\n"
 msgstr "Ext3 @j @S ist defekt.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "@S hat kein has_@j Flag, aber ein ext3 @j %s.\n"
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "ext3 Recovery-Flag sauber, aber das @j enthält Daten.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr "@S hat das ext3 'needs_recovery'-Flag gesetzt, aber kein @j.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "@S hat das ext3 »needs_recovery«-Flag gesetzt, aber kein @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "ext3 Recovery-Flag sauber, aber das @j enthält Daten.\n"
 
 #. @-expanded: Clear journal
@@ -925,7 +941,8 @@
 #: e2fsck/problem.c:250
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
-"Recovery-Flag in Backup @S nicht gesetzt, @j wird trotzdem gestartet.\n"
+"Recovery-Kennzeichen in Backup @S nicht gesetzt, @j wird trotzdem "
+"gestartet.\n"
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:255
@@ -955,18 +972,20 @@
 msgstr "@I @i %i in @o @i Liste.\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
+msgstr "@f hat Eigenschfts-Kennzeichen gesetzt, ist aber ein Revision 0 @f. "
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr "Ext3 @j @S hat ein unbekanntes Nur-Lesen-Flag gesetzt.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr "Ext3 @j @S hat ein unbekanntes Inkompatibel-Flag gesetzt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
@@ -1063,119 +1082,163 @@
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
+"Füge Verzeinishash-Hilfe zu @f hinzu.\n"
+"\n"
+
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Prüfsumme von @g -Deskriptor %g ist ungültig.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+"@g -Deskriptor %g ist als nicht initialisiert gekennzeichnet ohne eine "
+"gesetzte Eigenschaft.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+"Die @b @B von @g %g ist nicht initialisiert aber @i @B wird verwendet.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+"@g Deskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Die letzte @g @b @B ist nicht initialisiert.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+"Journaltransaktion %i war beschädigt, die Wiederholung wurde abgegrochen.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Durchgang 1: Prüfe @is, @bs, und Größen\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "@r ist kein @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r hat dtime gesetzt (vielleicht durch ein zu altes mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Reservierte @i %i %Q hat einen falschen Modus.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D @i %i hat \"zero dtime\".  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i ist ein @z @d.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@g %g's @b @B auf %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@g %g's @i @B auf %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "@g %g's @i Tabelle auf %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@g %g's @b @B (%b) ist ungültig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@g %g's @i @B (%b) ist ungültig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size ist %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs ist %Ib, @s %N.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@I @b #%B (%b) in @i %i.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "@b #%B (%b) überlappt @f metadata in @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i hat unzulässigen @b(s).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Zu viele unzulässige @bs in @i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "@I @b #%B (%b) in bad @b @i.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Bad @b @i hat unzulässigen @b(s).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Doppelter oder unzulässiger @b in Gebrauch!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Bad @b %b benutzt als bad @b @i indirekt @b.  "
 
@@ -1183,7 +1246,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1197,7 +1260,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1208,7 +1271,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1220,122 +1283,122 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Der primäre @S (%b) ist auf der bad @b Liste.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Block %b im primären Deskriptor @g ist auf der bad @b Liste\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Warnung: Gruppe %g's @S (%b) ist ungültig.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Warnung: Gruppe %g's Kopie vom Deskriptor @g hat einen bad @b (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "Programmfehler?  @b #%b verlangt ohne Grund in process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N grenzt an @b(s) in @b @g %g for %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A @b Puffer zum Verschieben %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Verschiebe @g %g's %s von %b nach %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Verschiebe @g %g's %s nach %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Warnung: kann  @b %b von %s: %m nicht lesen\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Warnung: kann  @b %b von %s: %m nicht schreiben\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A @i @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A icount link information: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A @d @b array: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Fehler während der Suche @is (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Fehler beim Iterieren über @bs in @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Fehler beim Speichern von @i count Informationen (@i=%i, count=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "Fehler beim Speichern @d @b Informationen (@i=%i, @b=%b, num=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fehler beim Lesen von @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i hat Imagic-Flag gesetzt.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1345,13 +1408,13 @@
 "oder append-only Flag gesetzt.  "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr "@i %i hat @cion Flag gesetzt auf @f ohne @cion Unterstützung.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
@@ -1359,139 +1422,139 @@
 "oder append-only Flag gesetzt.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "@j ist keine reguläre Datei.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i war Teil der orphaned @i Liste.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "@is,  die Teile einer defekten Liste mit verwaisten Links waren.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A icount structure: %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Fehler beim Lesen @a @b %b for @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i hat defekten @a @b %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Fehler beim Lesen @a @b %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "@a @b %b hat den Referenzzähler %B, richtig wäre %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Fehler beim Schreiben @a @b %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@a @b %b hat h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "@A @a @b %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@a @b %b ist defekt (allocation collision).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@a @b %b ist defekt (ungültiger Name).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@a @b %b ist defekt (ungültiger Wert).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i ist zu groß.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "@b #%B (%b) macht @d zu groß.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "@b #%B (%b) macht die Datei zu groß.  "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "@b #%B (%b) macht den Symlink zu groß.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i hat INDEX_FL Flag auf @f gesetzt ohne HTREE-Unterstützung.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i hat INDEX_FL flag gesetzt, ist aber kein @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i hat einen unvollständigen root node.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i hat eine nicht unterstützte hash-Version (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i benutzt einen nicht unterstützten htree root node flag.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1500,50 +1563,128 @@
 "den @f Metadaten in Konflikt steht.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Erzeugung von Vergrösserungs-@i scheiterte: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "@a in %i hat einen @n Hashwert von (%N)\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
+"@i ist ein %It aber es sieht so aus, als ob es tatsächlich ein Verzeichnis "
+"ist.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Fehler beim Iterieren über Baum @x in @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"@i %i hat eine @n Erweiterung\n"
+"\t(logischer @b %c, @n physischer @b %b, Länge %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"@i %i hat eine @n Erweiterung\n"
+"\t(logischer @b %c, physischer @b %b, @n Länge %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"@i %i hat  EXTENTS_FL Kennung auf einem @f ohne Unterstützung für "
+"Erweiterungen.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+"@i %i besitzt das Erweiterungsformat, aber dem @S fehlt die Eigenschaft "
+"EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "@i %i fehlt EXTENT_FL, aber hat das Format einer Erweiterungs-@i\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Schneller Symlink %i hat EXTENT_FL gesetzt.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"@i %i hat unregelmässige Erweitertungen\n"
+"\t(@n logischer @b %c, physischer @b %b, Länge %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1554,46 +1695,46 @@
 "Durchgang 1B: Suche nach doppelten/defekten @bs\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
-#, fuzzy, c-format
+#: e2fsck/problem.c:881
+#, c-format
 msgid "@m @b(s) in @i %i:"
-msgstr "@I @b #%B (%b) in @i %i.  "
+msgstr "@m @b(s) in @i %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Fehlen beim Prüfen von Inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A @i @B (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Fehler beim Durchlaufen der @bs in @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Fehler bei der Anpassung des refcount für @a @b %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Durchgang 1C: Prüfe Verzeichnisse nach @is mit doppelten @bs.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Durchgang 1D: Gleiche doppelte @bs ab\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1602,18 +1743,18 @@
 "  hat %B doppelte @b(s), geteilt mit %N Datei(en):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, mod time %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<@f metadata>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1623,7 +1764,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1631,315 +1772,316 @@
 "Duplizierte @bs bereits neu zugeordnet bzw. geklont.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kann die Datei %m nicht klonen.\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Durchgang 2: Prüfe @d Struktur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Falsche @i Nummer für '.' in @d @i %i.\n"
+msgstr "Falsche @i Nummer für ».« in @d @i %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E hat falsche @i #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E hat @D/unbenutzt @i %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
-msgstr "@E @L nach '.'  "
+msgstr "@E @L nach ».«  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E zeigt auf @i (%Di) in einem defekten @b.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L nach @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "@E @L zur @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E hat ein unzulässiges Zeichen im Namen.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
-msgstr "Fehlende '.' in @d @i %i.\n"
+msgstr "Fehlende ».« in @d @i %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
-msgstr "Fehlende '..' in @d @i %i.\n"
+msgstr "Fehlende »..« in @d @i %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr "Erster @e '%Dn' (inode=%Di) in @d @i %i (%p) @s '.'\n"
+msgstr "Erster @e »%Dn« (inode=%Di) in @d @i %i (%p) @s ».«\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr "Zweiter @e '%Dn' (inode=%Di) in @d @i %i @s '..'\n"
+msgstr "Zweiter @e »%Dn« (inode=%Di) in @d @i %i @s »..«\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s null.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s null.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl @F %Id, @s null.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s null.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s null.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) hat einen falschen Modus (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "@d @i %i, @b %B, offset %N: @d defekt\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "@d @i %i, @b %B, offset %N: Dateiname zu lang\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "@d @i %i hat einen nicht zugewiesenen @b #%B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "'.' @d @e in @d @i %i ist nicht NULL-terminiert\n"
+msgstr "».« @d @e in @d @i %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "'..' @d @e in @d @i %i ist nicht NULL-terminiert\n"
+msgstr "»..« @d @e in @d @i %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) ist ein @I Zeichen @v.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) ist ein @I @b @v.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
-msgstr "@E ist ein doppelter '.' @e.\n"
+msgstr "@E ist ein doppelter ».« @e.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
-msgstr "@E ist ein doppelter '..' @e.\n"
+msgstr "@E ist ein doppelter »..« @e.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Interner Fehler: kann dir_info für %i nicht finden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E hat rec_len von %Dr, sollte %N sein.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A icount structure: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fehler beim Durchlaufen der @d @bs: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Lesefehler @d @b %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Schreibfehler @d @b %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A neu @d @b for @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fehler bei der Freigabe von @i %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "@d @e für '.' ist groß.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Verzeichniseintrag für ».« in %p (%i) ist gross.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) ist ein @I FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) ist ein @I Socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Setze Dateitype für @E auf %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E hat einen falschen Dateityp (war %Dt, sollte %N sein).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "@E hat Dateityp gesetzt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "@E hat einen Namen der Länge Null..\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symlink %Q (@i #%i) is invalid.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "@a @b @F ist falsch (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "@f enthält große Dateien, aber das LARGE_FILE Flag in @S ist nicht gesetzt.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "@p @h %d: Node (%B) nicht referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "@p @h %d: Node (%B) doppelt referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "@p @h %d: node (%B) has bad min hash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "@p @h %d: node (%B) has bad max hash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "Invalid @h %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): bad @b number %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: root node is invalid\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "@p @h %d: node (%B) has bad limit (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "@p @h %d: node (%B) has bad count (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "@p @h %d: node (%B) has an unordered hash table\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "@p @h %d: node (%B) has bad depth\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p @h %d: Knoten (%B) has @n Tiefe (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Doppelte @E gefunden.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1951,7 +2093,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1962,97 +2104,113 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
-#, fuzzy
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
-msgstr "i_fsize @F %N, @s null.\n"
+msgstr "i_blocks_hi @F %N, @s zero.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Unerwarteter @b in @h %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+#, fuzzy
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@i %i wurde in @g %g gefunden, für die _INODE_UNINIT gesetzt ist.  "
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+#, fuzzy
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@i %i wurde im Bereich ungenutzter Inodes von @g %g gefunden.  "
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1293
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Durchgang 3: Prüfe @d Verknüpfungen\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
 msgstr "@r nicht zugeordnet. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
 msgstr "Kein Platz in @l @d.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nicht verbundene @d @i %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
 msgstr "/@l nicht gefunden.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "'..' in %Q (%i) ist %P (%j), @s %q (%d).\n"
+msgstr "»..« in %Q (%i) ist %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Falscher oder fehlender /@l.  Wiederverbinden nicht möglich.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Erweitern nicht möglich /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Wiederverbinden nicht möglich %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Fehler während der Suche nach /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b: %m während des Versuches /@l @d zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m während des Versuches /@l @d zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_@b: %m während des Versuches /@l @d zu erzeugen.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_@b: %m während des Schreibens von @d @b für /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fehler während der Einstellung von @i count auf @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2063,7 +2221,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2073,138 +2231,139 @@
 "parent @d nicht gefunden.\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Fehler beim Erzeugen des root @d (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fehler beim Erzeugen des /@l @d (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r ist kein @d; breche ab.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
 msgstr "Kann ohne @r nicht fortsetzen.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l ist kein @d (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Durchgang 3A: Optimiere Verzeichnisse\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "dirs_to_hash iterator konnte nicht erzeugt werden: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Verzeichnis %q (%d) konnte nicht optimiert werden: %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "Optimiere Verzeichnisse: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Durchgang 4: Überprüfe die Referenzzähler\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@I @o @i %i in @S.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
-msgstr ""
+msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr "@i %i Prüfsumme ist %Il, @s %N.  "
+msgstr "@i %i Referenzzähler ist %Il, @s %N.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 "WARNUNG: PROGRAMMIERFEHLER IN E2FSCK!\n"
-"\tODER EIN TROTTEL (SIE) PRÜFT EIN EINGEHÄNGTES (LIVE) DATEISYSTEM.\n"
-"@i_link_info[%i] ist %N, @i.i_links_count ist %Il.  Sie sollten gleich "
+"\tODER EIN TROTTEL (SIE) PRÜFT EIN EINGEHÄNGTES (AKTIVES) DATEISYSTEM.\n"
+"@i_link_info[%i] ist %N, @i.i_links_count ist %Il.  Sie sollten identisch "
 "sein!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Durchgang 5: Überprüfe @g Zusammenfassung\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 msgid "Padding at end of @i @B is not set. "
 msgstr "Auffüllbyte am Ende von @i @B ist nicht gesetzt. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @b @B is not set. "
 msgstr "Auffüllbyte am Ende von @b @B ist nicht gesetzt. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr "@b @B differieren: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr "@i @B differieren: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Freie @is Anzahl ist falsch für @g #%g (%i, counted=%j).\n"
+msgstr "Die Anzahl freier @is ist falsch für @g #%g (%i, gezählt=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Verzeichnisanzahl ist falsch für @g #%g (%i, counted=%j).\n"
+msgstr "Die Anzahl Verzeichnisse ist falsch für @g #%g (%i, gezählt=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
-msgstr "Freie @is Anzahl ist falsch (%i, counted=%j).\n"
+msgstr "Die Anzahl freier @is ist falsch (%i, gezählt=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr "Freie @bs Anzahl ist falsch @g #%g (%b, counted=%c).\n"
+msgstr "Die Anzahl freier Blöcke in @g #%g ist falsch (%b, gezählt=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
-msgstr "Freie @bs Anzahl ist falsch (%b, counted=%c).\n"
+msgstr "Die Anzahl freier Blöcke ist falsch (%b, gezählt=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1556
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2212,32 +2371,48 @@
 "PROGRAMMIERFEHLER: @f (#%N) @B Endpunkte (%b, %c) passen nicht zu den "
 "berechneten @B Endpunkten (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Interner Fehler: fudging end of bitmap (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fehler beim hineinkopieren von @i @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Fehler beim hineinkopieren von @b @B: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr ""
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Zurücksetzen"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr ""
+"Blöcke von @g %g sind in Beutzung obwohl @g als BLOCK_UNINIT markiert ist\n"
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+"@g %g @i(s) sind in Benutzung obwohl @g als INODE_UNINIT markiert ist\n"
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Unbenutzter Fehlercode (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "IGNORIERT"
 
@@ -2264,73 +2439,33 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "während des Aufrufs von ext2fs_block_iterate für Inode %d"
 
-#: e2fsck/super.c:210
-#, fuzzy, c-format
+#: e2fsck/super.c:209
+#, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
-msgstr "while calling ext2fs_adjust_ea_refocunt for inode %d"
+msgstr "während des Aufrufs von ext2fs_adjust_ea_refcount für Inode %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Kürze"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Bereinige"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "während des Aufrufs von ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "während des Aufrufs der Iterator-Funktion"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "beim Zuweisen des Inode-Puffers"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "beim Lesen der Inode-Tabelle (Gruppe %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "beim Schreiben der Inode-Tabelle (Gruppe %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Durchgang 0: Byte-Swap des Dateisystems\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: Das Dateisystem muss mit fsck neu überprüft werden\n"
-"und darf vor dem Byte-Swap nicht mehr eingehängt werden.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Byte Swap"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Verwendung: %s [-panyrcdfvstFSV] [-b Superblock] [-B Blockgröße]\n"
-"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
-"\t\t[-l|-L bad_blocks_file] [-C fd] [-j ext-journal]\n"
+"Aufruf: %s [-panyrcdfvtDFV] [-b Superblock] [-B Blockgröße]\n"
+"\t\t[-I Inode_Puffer_Blöcke] [-P Prozess_Inodegröße]\n"
+"\t\t[-l|-L Bad_Blocks_Datei] [-C Dateideskriptor] [-j externes_Journal]\n"
 "\t\t[-E erweiterte_Optionen] Gerät\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2350,7 +2485,7 @@
 " -c        suche nach defekten Blöcken\n"
 " -f        erzwinge die Überprüfung auch wenn alles i.O. erscheint\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2367,33 +2502,38 @@
 " -l bad_blocks_file   zur Liste der defekten Blöcke hinzufügen\n"
 " -L bad_blocks_file   Liste der defekten Blöcke definieren\n"
 
-#: e2fsck/unix.c:121
-#, fuzzy, c-format
+#: e2fsck/unix.c:132
+#, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
-msgstr "%s: %d/%d Dateien (%0d.%d%% nicht zusammenhängend), %u/%u Blöcke\n"
+msgstr "%s: %u/%u Dateien (%0d.%d%% nicht zusammenhängend), %u/%u Blöcke\n"
 
-#: e2fsck/unix.c:133
-#, fuzzy, c-format
+#: e2fsck/unix.c:150
+#, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         # von Inodes mit ind/dind/tind Blöcken: %d/%d/%d\n"
+msgstr "         # von Inodes mit ind/dind/tind Blöcken: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Erweiterungstiefe Histogramm: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "bei der Prüfung, ob %s eingehängt ist."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Warnung!  %s ist eingehängt.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s ist eingehängt.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2401,7 +2541,7 @@
 "Fortsetzung nicht möglich, breche ab.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2416,168 +2556,168 @@
 "Dateisystem kann das Dateisystem STARK BESCHÄDIGEN.\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Wirklich fortfahren"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "Prüfung abgebrochen.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " enthält ein fehlerhaftes Dateisystem"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " wurde nicht ordnungsgemäß ausgehängt"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
-msgstr ""
+msgstr "Eigenschaften des primären Superblocks unterscheiden sich vom Backup"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " wurde %u mal ohne Überprüfung eingehängt"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr ""
+" hat einen in der Zukunft liegenden Zeitpunkt der letzten Püfung des "
+"Dateisystems"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " wurde %u Tage ohne Überprüfung genutzt"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", Prüfung erzwungen.\n"
 
-#: e2fsck/unix.c:307
-#, fuzzy, c-format
+#: e2fsck/unix.c:342
+#, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
-msgstr "%s: i.O., %d/%d Dateien, %u/%u Blöcke"
+msgstr "%s: sauber, %u/%u Dateien, %u/%u Blöcke"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (Prüfung nach %ld Einhängevorgängen)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "Fehler: Kann /dev/null (%s) nicht öffnen\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Invalid EA version.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
-msgstr ""
+msgstr "Unbekannte erweiterte Option: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Syntaxfehler in der Konfigurationsdatei von e2fsck (%s, Zeile %d)\n"
+"\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fehler bei Überprüfung des Datei-Deskriptors %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
-msgstr "Ungültiger 'completion information'-Datei-Deskriptor"
+msgstr "Ungültiger »completion information«-Datei-Deskriptor"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Nur eine der Optionen -p/-a, -n oder -y darf angegeben werden."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Die -t Option wird von dieser e2fsck-Version nicht unterstützt.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-"Das Byte-Swapping wurde in diese Version von e2fsck nicht einkompiliert.\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nicht möglich »%s« aufzulösen"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Inkompatible Optionen sind beim Byte-Swapping nicht erlaubt.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 "Die -c und -l/-L Optionen dürfen nicht gleichzeitig verwendet werden.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
-msgstr ""
+msgstr "2FSCK_JBD_DEBUG \"%s\" ist keine Ganzzahl\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
 "Invalid non-numeric argument to -%c (\"%s\")\n"
 "\n"
 msgstr ""
+"\n"
+"Ungültiges nicht-numerisches Argument für -%c (\"%s\")\n"
+"\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fehler: ext2fs-Bibliotheks-Version ist zu alt!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "bei der Programminitialisierung"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tBenutze %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
 msgstr "Benötige ein Terminal für interaktive Reparaturen"
 
-#: e2fsck/unix.c:983
-#, fuzzy, c-format
+#: e2fsck/unix.c:1010
+#, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s versuche Backup-Blöcke...\n"
+msgstr "%s: %s versuche es mit Backup-Blöcken...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
-msgstr ""
+msgstr "Superblock ungültig"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1013
 msgid "Group descriptors look bad..."
 msgstr "Gruppen-Deskriptoren scheinen defekt zu sein..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2588,28 +2728,31 @@
 "von e2fsck (oder der Dateisystem-Superblock ist defekt).\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Könnte es eine Partion der Länge Null sein?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Sie benötigen %s- oder root-Rechte für das Dateisystem.\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 "Möglicherweise ist die Partition nicht vorhanden oder eine Swap-Partition?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
+"Ist das Dateisystem eingehängt or exklusiv von einem anderen Programm\n"
+"\n"
+"geöffnet worden?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2618,16 +2761,16 @@
 "Laufwerk ist schreibgeschützt, nutzen Sie die -n Option\n"
 "um es im Nur-Lesen-Modus zu prüfen.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
 msgstr "Neuere Version von e2fsck benötigt!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "während der Prüfung des ext3-Journals für %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
@@ -2636,26 +2779,26 @@
 "Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur-"
 "Lesen-Modus ist.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1171
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Superblock-Flags konntan auf %s nicht gesetzt werden\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1177
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "bei der Wiederherstellung des ext3-Journals von %s"
 
-#: e2fsck/unix.c:1171
-#, fuzzy, c-format
+#: e2fsck/unix.c:1201
+#, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "@h %i hat eine nicht unterstützte hash-Version (%N)\n"
+msgstr "%s besitzt nicht unterstützte Eigenschaft(en):"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
 msgstr "Warnung: Die Kompressionsunterstützung ist experimentell.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2664,30 +2807,25 @@
 "Die Unterstützung für HTREE wurde in e2fsck nicht aktiviert,\n"
 "\taber das Dateisystem %s besitzt HTREE Verzeichnisse.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: die Byte-Reihenfolge des Dateisystems wurde schon normalisiert.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
 msgstr "beim Lesen des Bad-Block-Inodes"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Das verheißt nichts gutes, aber wir versuchen es trotzdem ..\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
-msgstr ""
+msgstr "Konnte die Größe des Dateisystems nicht ermitteln"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Erstelle Journal (%d Blöcke): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2695,37 +2833,39 @@
 "\n"
 "\tbeim Erstellen des Journals"
 
-#: e2fsck/unix.c:1302
-#, fuzzy, c-format
+#: e2fsck/unix.c:1317
+#, c-format
 msgid " Done.\n"
-msgstr "erledigt\n"
+msgstr " Erledigt.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
+"\n"
+"*** Journal wurde wiederhergestellt - Dateisystem ist nun wieder ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Beginne e2fsck neu ...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "beim Rücksetzen des Kontexts"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck abgebrochhen.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
 msgstr "abgebrochen"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -2734,12 +2874,12 @@
 "\n"
 "%s: ***** DATEISYSTEM WURDE VERÄNDERT *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** LINUX MUSS NEU GESTARTET WERDEN *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
@@ -2750,39 +2890,43 @@
 "%s: ********** WARNUNG: Noch Fehler im Dateisystem  **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
-msgid "yY"
-msgstr "yJ"
+#: e2fsck/unix.c:1400
+msgid "while setting block group checksum info"
+msgstr "beim Setzen der Blockgruppen-Prüfsummeninfo"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:138 misc/util.c:68
+msgid "yY"
+msgstr "jJ"
+
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "abgebrochen!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "ja\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "nein\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2791,7 +2935,7 @@
 "%s? nein\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2800,47 +2944,40 @@
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "nein"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: illegal bitmap block(s) für %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "lese Inode und Block bitmaps"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "während des wiederholten Versuches, Bitmaps für %s einzulesen"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "Schreibe Block-Bitmaps"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "Schreibe Block- und Inode-Bitmaps"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "während des wiederholten Versuches, Block-Bitmaps für %s zu schreiben."
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr ""
+"während des wiederholten Versuches, Block- und Inode-Bitmaps für %s zu "
+"schreiben."
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "Schreibe Inoden-Bitmaps"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "während des wiederholten Versuches, Inode-Bitmaps für %s zu schreiben."
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2853,127 +2990,145 @@
 "%s: UNERWARTETE INKONSISTENZ; fsck MANUELL AUSFÜHREN\n"
 "\t(d.h. ohne -a oder -p Option)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:336
 #, c-format
 msgid "Memory used: %dk/%dk (%dk/%dk), "
 msgstr "benutzter Speicher: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:340
 #, c-format
 msgid "Memory used: %d, "
 msgstr "benutzter Speicher: %d, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "Zeit: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "abgelaufende Zeit: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
 msgstr "beim Lesen von Inode %ld in %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
 msgstr "beim Schreiben von Inode %ld in %s"
 
-#: misc/badblocks.c:61
-#, fuzzy
-msgid "done                                \n"
-msgstr "erledigt                           \n"
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "beim reservieren eines Puffers zum Nullen"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:66
+msgid "done                                \n"
+msgstr "erledigt                            \n"
+
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
-"Verwendung: %s [-b Blockgröße] [-i Eingabedatei] [-o Ausgabedatei] [-svwnf]\n"
-" [-c Blöcke_auf_einmal] [-p Durchgänge ] [-t Testpattern [-t Testpattern "
-"[...]]]\n"
-" Gerät [letzter_Block [Startblock]]\n"
+"Aufruf: %s [-b Blockgröße] [-i Eingabedatei] [-o Ausgabedatei] [-svwnf]\n"
+"        [-c Blöcke_auf_einmal] [-d "
+"Verzögerungsfaktor_zwischen_Lesedurchgängen]\n"
+"        [-e maximale_Bad_Blocks] [-p Anzahl_Durchgänge]\n"
+"        [-t Testmuster [-t Testmuster [...]]]\n"
+"        Gerät [letzter_Block [Startblock]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
+"%s: Die Optionen -n und -w schliessen sich gegenseitig aus.\n"
+"\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
 msgstr "Teste mit zufälligen Mustern: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
 msgstr "Teste mit Muster 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
 msgstr "beim Suchen"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Merkwürdiger Wert (%ld) in do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
 msgstr "während ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
-msgstr "beim Beginn des 'Bad Block'-Listendurchlaufs"
+msgstr "beim Beginn des »Bad Block«-Listendurchlaufs"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
 msgstr "beim Zuweisen von Puffern"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Prüfe von Block %lu bis %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Suche nach defekten Blöcken im Nur-Lesen-Modus\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Suche nach defekten Blöcken (Nur-Lesen-Modus):"
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Zu viele defekte Blöcke - Test wird abgebrochen\n"
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Suche nach defekten Blöcken (Lesen+Schreiben-Modus)\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Von Block %lu bis %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
 msgstr "Lesen und Vergleichen:"
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "Suche nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 "Suche nach defekten Blöcken (zerstörungsfreier Lesen+Schreiben-Modus)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2981,179 +3136,182 @@
 "\n"
 "Unterbrochen, räume auf\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "beim Schreiben der Test-Daten; Block %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s ist eingehängt; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:923
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:928
 msgid "it's not safe to run badblocks!\n"
 msgstr "es ist zu unsicher, Badblocks zu starten!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:933 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
-msgstr ""
+msgstr "%s wird offensichtlich vom System genutzt; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:936
 msgid "badblocks forced anyway.\n"
 msgstr ""
 "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:956
+#, c-format
+msgid "invalid %s - %s"
+msgstr "ungültige %s - %s"
+
+#: misc/badblocks.c:1015
 #, c-format
 msgid "bad block size - %s"
 msgstr "bad block Größe - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
-msgstr "Kann keinen Speicher für Testpattern reservieren - %s"
+msgstr "Kann keinen Speicher für Testmuster reservieren - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "Ungültiges Testpattern: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
-msgstr "Es darf im Nur-Lesen-Modus nur ein Testpattern angegeben werden"
+msgstr "Es darf im Nur-Lesen-Modus nur ein Testmuster angegeben werden"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
-msgstr "Zufälliges Testpattern ist im Nur-Lesen-Modus nicht erlaubt"
+msgstr "Zufälliges Testmuster ist im Nur-Lesen-Modus nicht erlaubt"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
-"Größe des Gerätes nicht feststellbar. Sie müssen sie manuell angeben.\n"
+"Größe des Gerätes ist nicht feststellbar. Sie müssen sie manuell angeben.\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
 msgstr "beim Versuch, die Gerätegröße festzustellen"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
+#: misc/badblocks.c:1128
+msgid "last block"
+msgstr "letzter Block"
+
+#: misc/badblocks.c:1134
+msgid "first block"
+msgstr "erster Block"
+
+#: misc/badblocks.c:1137
 #, c-format
-msgid "invalid blocks count - %s"
-msgstr "Bad Blocks Anzahl - %s"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "Ungültiger Startblock (%lu): er muss kleiner als %lu sein"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "Defekter Startblock - %s"
-
-#: misc/badblocks.c:1015
-#, fuzzy, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "Defekter Startblock - %s"
-
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 msgid "while creating in-memory bad blocks list"
 msgstr "erstelle Bad-Block-Liste im Speicher"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 msgid "while adding to in-memory bad block list"
 msgstr "füge zur Bad-Block-Liste im Speicher hinzu"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Durchgang beendet, %u defekte Blöcke gefunden.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Verwendung: %s [-RV] [-+=AacDdijsSu] [-v Version] Dateien...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
+msgstr "Aufruf: %s [-RVf] [-+=AacDdijsSu] [-v Version] Dateien...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
 msgstr "falsche Version - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
 msgstr "beim Auslesen des Status von %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flags von %s wie folgt gesetzt: "
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
 msgstr "beim Lesens der Flags in %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
 msgstr "beim Setzen der Flags in %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version von %s gesetzt auf %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
 msgstr "beim Setzen der Version in %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Konnte Pfad-Variable in chattr_dir_proc nicht reservieren"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
 msgstr "= ist inkompatibel mit - und +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
-msgstr "Benutze '-v', =, - oder +\n"
+msgstr "Benutze »-v«, =, - oder +\n"
 
 #: misc/dumpe2fs.c:53
 #, c-format
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
-msgstr "Verwendung: %s [-bfhixV] [-ob Superblock] [-oB Blockgröße] Gerät\n"
+msgstr "Aufruf: %s [-bfhixV] [-ob Superblock] [-oB Blockgröße] Gerät\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Gruppe %lu: (Blöcke "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr " Prüfsumme 0x%04x, %d ungenutzte Inodes\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %s Superblock in "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primary"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Backup"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Gruppendeskriptoren in "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3162,20 +3320,20 @@
 "\n"
 "  reservierte GDT Blöcke bei "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr ", Gruppendeskriptor in "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Block bitmap in "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", Inode Bitmap in "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3183,50 +3341,55 @@
 "\n"
 "  Inode-Tabelle in "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d freie Blöcke, %d freie Inodes, %d Verzeichnisse\n"
+"  %u freie Blöcke, %u freie Inodes, %u Verzeichnisse%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u ungenutzte Inodes\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Freie Blöcke: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Freie Inodes: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
-msgstr "beim Ausgeben der 'Bad Block'-Liste"
+msgstr "beim Ausgeben der »Bad Block«-Liste"
 
-#: misc/dumpe2fs.c:252
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:270
+#, c-format
 msgid "Bad blocks: %u"
-msgstr "Bad Blocks: %d"
+msgstr "Bad Blocks: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
 msgstr "beim Lesen des Journal-Inodes"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
-msgstr ""
+msgstr "Journalgrösse:            "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
 msgstr "beim Lesen des Journal-Superblocks"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Konnte die magische Nummer des Journal-Superblocks nicht finden"
 
-#: misc/dumpe2fs.c:308
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:331
+#, c-format
 msgid ""
 "\n"
 "Journal block size:       %u\n"
@@ -3242,31 +3405,30 @@
 "Journal Startblock:       %u\n"
 "Journal Sequenz:          0x%08x\n"
 "Journal Start:            %u\n"
-"Journal Nutzeranzahl:     %lu\n"
+"Journal Anzahl Nutzer:    %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
-msgstr ""
+msgstr "Jounalnutzer:            %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr ""
-"Speicher zum Parsen der RAID-Optionen konnte nicht reserviert werden!\n"
+msgstr "Speicher zum Parsen der Optionen konnte nicht reserviert werden!\n"
 
-#: misc/dumpe2fs.c:363
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:386
+#, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+msgstr "Ungültiger Superblock-Parameter: %s\n"
 
-#: misc/dumpe2fs.c:378
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:401
+#, c-format
 msgid "Invalid blocksize parameter: %s\n"
-msgstr "Ungültiger \"resize\"-Parameter: %s\n"
+msgstr "Ungültiger Blockgrössen-Parameter: %s\n"
 
-#: misc/dumpe2fs.c:389
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:412
+#, c-format
 msgid ""
 "\n"
 "Bad extended option(s) specified: %s\n"
@@ -3279,32 +3441,28 @@
 "\tblocksize=<blocksize>\n"
 msgstr ""
 "\n"
-"falsche Raid-Optionen angegeben.\n"
+"Falsche erweiterte Optionen angegeben: %s\n"
 "\n"
-"Raid-Optionen werden mit Kommatas getrennt angegeben, sie können ein "
-"Argument\n"
-"\terhalten welches mit Gleichheitszeichen ('=') zugewiesen wird.\n"
+"Erweiterte Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
 "\n"
-"gültige Raid-Optionen sind:\n"
-"\tstride=<stride length in blocks>\n"
+"Gültige erweiterte Optionen sind:\n"
+"\tsuperblock=<Nummer des Spuperblocks>\n"
+"\tblocksize=<Blockgrösse>\n"
 "\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tBenutze %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Kann keinen gültigen Dateisystem-Superblock finden.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Anmerkung: Dieses ist ein Byte-Swapped Dateisystem.\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
@@ -3313,33 +3471,33 @@
 "\n"
 "%s: %s: Fehler beim Lesen von Bitmaps: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
-msgstr "Verwendung: %s [-r] Gerätedatei\n"
+msgstr "Aufruf: %s [-r] Gerätedatei\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Header-Puffer konnte nicht zugewiesen werden\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "short write (only %d bytes) for writing image header"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "beim Schreiben des Superblocks"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "beim Schreiben der Inode-Tabelle"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "beim Schreiben der Block-Bitmap"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "beim Schreiben der Inode-Bitmap"
 
@@ -3363,7 +3521,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: Kein ext2 Dateisystem\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Warnung: Name zu lang, kürze ihn.\n"
@@ -3378,110 +3536,163 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: Fehler beim Schreiben des Superblocks\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
-msgstr "Verwendung: e2label Gerät [neuer_Name]\n"
+msgstr "Aufruf: e2label Gerät [neuer_Name]\n"
 
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Aufruf: %s <Transaktionsdatei> <Dateisystem>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Die Dateisystemdaten konnten nicht gelesenb werden \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "tdb_fetch von %s ist misslungen\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Die Zeit des letzten Einhängens des Dateisystems war nicht %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "Die UUID des Dateisystems stimmte nicht überein \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open von %s ist misslungen\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Fehler beim Überprüfen, ob %s eingehängt ist.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo sollte nur auf nicht-eingehängten Dateisystemen laufen\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "%s konnte nicht geöffnet werden\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Zurückgespielte Transaktion der Größe %zd an Position %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Gescheitertes Schreiben von %s\n"
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
 msgstr "WARNUNG: Konnte %s nicht öffnen: %s\n"
 
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
 msgstr "WARNUNG: falsches Format in Zeile %d von %s\n"
 
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
 "\tshould fix your /etc/fstab file as soon as you can.\n"
 "\n"
 msgstr ""
-"\a\a\aWARNUNG: Ihre /etc/fstab enthält kein 'fsck passno'\n"
+"\a\a\aWARNUNG: Ihre /etc/fstab enthält kein »fsck passno«\n"
 "\tFeld.  Ich werde dieses ignorieren, aber Sie\n"
 "\tsollten ihre /etc/fstab so schnell wie möglich korrigieren.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nicht gefunden\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: kein Kindprozess mehr?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Warnung... %s für Gerät %s wurde mit Signal %d beendet.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: Status ist %x, sollte nie vorkommen.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Beendet mit %s (exit status %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fehler %d bei Ausführung von fsck.%s für %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
-"Bei -t müssen entweder allen oder keinem Dateisystem ein 'no' bzw. '!'\n"
+"Bei -t müssen entweder allen oder keinem Dateisystem ein »no« bzw. »!«\n"
 "vorangestellt werden.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kann keinen Speicher für Dateisystemtypen reservieren.\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
+"%s: überspringe die ungültige Zeile in /etc/fstab: bind mount mit\n"
+" Durchgangsnummer für fsck, die nicht Null ist\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kann %s nicht überprüfen: fsck.%s nicht gefunden\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
 msgstr "Überprüfe alle Dateisysteme.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--warten-- (Durchgang %d)\n"
 
-#: misc/fsck.c:1066
-#, fuzzy
+#: misc/fsck.c:1081
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
-"Verwendung: fsck [-ACNPRTV] [-t Datesystemtyp] [fs-Optionen] "
+"Aufruf: fsck [-AMNPRTV] [ -C [ fd ] ] [-t Datesystemtyp] [FS-Optionen] "
 "[Dateisystem...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: zu viele Geräte\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: zu viele Argumente\n"
@@ -3489,7 +3700,7 @@
 #: misc/lsattr.c:73
 #, c-format
 msgid "Usage: %s [-RVadlv] [files...]\n"
-msgstr "Verwendung: %s [-RVadlv] [Dateien...]\n"
+msgstr "Aufruf: %s [-RVadlv] [Dateien...]\n"
 
 #: misc/lsattr.c:83
 #, c-format
@@ -3501,53 +3712,57 @@
 msgid "While reading version on %s"
 msgstr "Beim Lesen der Version von %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
-"Verwendung: %s [-c|-t|-l Dateiname] [-b Blockgröße] [-f Fragmentgröße]\n"
-"\t[-i Bytes-pro-Inode] [-j] [-J Journal-Optionen] [-N Anzahl_der_Inoden]\n"
-"\t[-m Reservierte-Blöcke-Prozent] [-o creator-os] [-g Blöcke-pro-Gruppe]\n"
-"\t[-L volume-label] [-M last-mounted-directory] [-O feature[,...]]\n"
-"\t[-r fs-revision] [-R raid_opts] [-qvSV] Gerät [Blockanzahl]\n"
+"Aufruf: %s [-c|-l Dateiname] [-b Blockgröße] [-f Fragmentgröße]\n"
+"\t[-i Bytes-pro-Inode] [-I Inodegrösse] [-J Journal-Optionen]\n"
+"\t[-G Größe_der_Metagruppe] [-N Anzahl_der_Inodes]\n"
+"\t[-m Reservierte-Blöcke-Prozent] [-o Erzeuger-OS]\n"
+"\t[-g Blöcke-pro-Gruppe] [-L Volume-Label]\n"
+"\t[-M letztes-eingehängtes-Verzeichnis] [-O feature[,...]]\n"
+"\t[-r fs-revision] [-E erweiterte-Option[,...]]\n"
+"\t[-T Fs-Typ] [-jnqvFSV] Gerät [Block-Anzahl]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Führe aus: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
-msgstr "während des Ausführungsversuchs von '%s'"
+msgstr "während des Versuchs, »%s« auszuführen"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
-msgstr "beim Auswerten der 'Bad Block'-Liste vom Programm"
+msgstr "beim Auswerten der »Bad Block«-Liste vom Programm"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Block %d im primären Superblock/Gruppendeskriptorbereich defekt.\n"
 
-#: misc/mke2fs.c:238
-#, fuzzy, c-format
+#: misc/mke2fs.c:246
+#, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
-"Die Blöcke %u bis einschließlich %d müssen i.O. sein um ein Dateisystem zu "
-"erstellen.\n"
+"Die Blöcke %u bis einschließlich %u müssen in Ordung sein, um ein\n"
+"\tDateisystem zu erstellen.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Breche ab...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3559,23 +3774,19 @@
 "\tdefekte Blöcke.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
-msgstr "beim Markieren von defekten Blöcken als 'belegt'"
+msgstr "beim Markieren von defekten Blöcken als »belegt«"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
-msgstr "erledigt                           \n"
+msgstr "erledigt                        \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "while allocating zeroizing buffer"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Schreibe Inode-Tabellen: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3584,67 +3795,67 @@
 "\n"
 "Konnte %d Blöcke nicht in Inoden-Tabelle schreiben, beginnend bei %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "beim Erstellen des Wurzelverzeichnisses"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "beim Lesen des Root-Inode"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "beim Setzen des Root-Inode-Eigentümers"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "beim Erstellen von /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "beim Suchen von /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "beim Expandieren von /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
-msgstr "beim Setzen des 'Bad Block'-Inodes"
+msgstr "beim Setzen des »Bad Block«-Inodes"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Speicher voll beim Löschen der Sektoren %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Warnung: konnte Block %s nicht lesen\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Warnung: konnte Sektor %d: %s nicht löschen\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "beim Initialisieren des Journal-Superblocks"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Überschreibe Journal-Device mit Nullen: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "beim Überschreiben des Journal-Device mit Nullen (Block %u, Nr. %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "beim Schreiben des Journal-Superblocks"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3653,99 +3864,101 @@
 "Warnung: %u Blöcke unbenutzt.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dateisystem-Label=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "OS-Typ: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u Inodes, %u Blöcke\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u Blöcke (%2.2f%%) reserviert für den Superuser\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Erster Datenblock=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximale Dateisystem-Blöcke=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u Blockgruppen\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u Blockgruppe\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u Blöcke pro Gruppe, %u Fragmente pro Gruppe\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u Inodes pro Gruppe\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblock-Sicherungskopien gespeichert in den Blöcken: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ungültiger \"stride\"-Parameter: %s\n"
 
-#: misc/mke2fs.c:808
-#, fuzzy, c-format
+#: misc/mke2fs.c:733
+#, c-format
 msgid "Invalid stripe-width parameter: %s\n"
-msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+msgstr "Ungültiger Stripebreite-Parameter: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ungültiger \"resize\"-Parameter: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "Das Maximum der Vergrösserung muss oberhalb als der Dateisystem-Grösse "
 "liegen.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
+"Online-Grössenänderungen werden bei Revison 0 Dateisystemen nicht\n"
+"\tunterstützt\n"
 
-#: misc/mke2fs.c:878
-#, fuzzy, c-format
+#: misc/mke2fs.c:808
+#, c-format
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -3757,128 +3970,188 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
-"falsche Raid-Optionen angegeben.\n"
+"Ungültige Option(en) angegeben: %s\n"
 "\n"
-"Raid-Optionen werden mit Kommatas getrennt angegeben, sie können ein "
-"Argument\n"
-"\terhalten welches mit Gleichheitszeichen ('=') zugewiesen wird.\n"
+"Erweiterte Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
 "\n"
-"gültige Raid-Optionen sind:\n"
-"\tstride=<stride length in blocks>\n"
+"\terhalten welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
+"\n"
+"gültige erweiterte Optionen sind:\n"
+"\tstride=<RAID Segmentgrösse in Blöcken>\n"
+"\tstripe-width=<RAID Stride * Datenplatten in Blöcken>\n"
+"\tresize=<Obergrenze für Grössenänderung in Blöcken>\n"
+"\tlazy_itable_init=<0 für Ab-, 1 für Einschalten>\n"
+"\ttest_fs\n"
 "\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
 "Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
 "\n"
 msgstr ""
+"\n"
+"Warnung: RAID Stripe-Breite %u ist kein ganzzahliges Vielfaches von\n"
+"\tStride %u.\n"
+"\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Syntax Fehler in der Konfigurationsdatei von mkefs (%s, Zeile %d)\n"
+"\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Unvollständige Dateisystem-Option gesetzt: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Warnung: Ihre mke2fs.conf Datei definiert den Typ des Dateisystems auf %s "
+"nicht.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Sie müssen wahrscheinlich eine aktualisierte mke2fs.conf Datei "
+"installieren.\n"
+"\n"
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid "invalid block size - %s"
 msgstr "bad block Größe - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Warnung: Blockgröße %d ist auf den meisten Systemen unbrauchbar.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "falsche Fragmentgröße - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Warnung: Fragmente werden nicht unterstützt. Ignoriere -f Option\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
 msgstr "unzulässige Angabe für Blöcke pro Gruppe"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
 msgstr "Anzahl der Blöcke pro Gruppe muss ein Vielfaches von 8 sein"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+msgid "Illegal number for flex_bg size"
+msgstr "Illegale Zahl für flex_bg Größe"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr "flex_bg Größe muss eine Zweierpotenz sein"
+
+#: misc/mke2fs.c:1239
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "Unzulässiges Inode-Verhältnis %s (Min %d/Max %d"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
 msgstr "in malloc for bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "Unzulässige \"Reservierte Blöcke\"-Prozentangabe - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "Unzulässige Inode-Größe - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "beim Versuch, das Journal-Device %s zu öffnen\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Journal-Device Blockgröße (%d) kleiner als Minimum-Blockgröße %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Verwende die Blockgrösse des Geräts: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-Byte Blöcke zu groß für das System (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
-"Warnung: %d-byte Blöcke zu groß für das System (max %d), fahre dennoch fort\n"
+"Warnung: %d-byte Blöcke sind zu groß für das System (max %d), fahre dennoch "
+"fort\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "ungültige Anzahl Blöcke - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "Dateisystem"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Größe von Gerät %s lässt sich in 32 Bits nicht darstellen\n"
+"\teine Blockgröße von %d wird verwendet.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:371
 msgid "while trying to determine filesystem size"
 msgstr "beim Bestimmen der Dateisystemgröße"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3886,7 +4159,7 @@
 "Konnte die Gerätegröße nicht ermitteln. Geben\n"
 "Sie die Größe des Dateisystems an\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3899,115 +4172,143 @@
 "\tund gesperrt ist. Sie könnten gezwungen sein, neu zu booten, um die\n"
 "\tPartitionstabelle neu einzulesen.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Dateisystem ist größer als augenscheinlich das Gerät selbst."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Analyse der Liste von Dateisystemen war nicht möglich\n"
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types für mke2fs.conf Lösung: "
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
+"Dateisystem-Eigenschaften werden für Dateisysteme der Revision 0 nicht\n"
+"\tunterstützt\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
+"Verteilte Superblöcke werden für Dateisysteme der Revision 0 nicht\n"
+"\tunterstützt\n"
 
-#: misc/mke2fs.c:1386
-#, fuzzy, c-format
+#: misc/mke2fs.c:1568
+#, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
-msgstr ""
-"\n"
-"Das Journal ist zu groß für dieses Dateisystem.\n"
+msgstr "Journale werden für Dateisysteme der Revision 0 nicht unterstützt\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Die Eigenschaften resize_inode und meta_bg sind nicht kompatibel.\n"
+"Sie können nicht gleichzeitig aktiviert werden.\n"
+
+#: misc/mke2fs.c:1603
 msgid "while trying to determine hardware sector size"
 msgstr "beim Ermitteln der Hardware-Sektorgröße"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
+"Für Online-Grössenänderungen reservierte Blöcke werden auf Dateisystemen\n"
+"\tohne Unterstützung für Lückenkompression  nicht unterstützt"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
-msgstr "Anzahl der Blöcke pro Gruppe nicht im gültigen Bereich"
+msgstr "Anzahl der Blöcke pro Gruppe ausserhaalb des gültigen Bereichs"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
+"Eigenschaft flex_bg wurde nicht aktiviert, daher darf flex_bg Grösse nicht "
+"angegeben werden"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ungültige Inode-Größe %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, fuzzy, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-"Warnung: %d-Byte Inodes sind auf den meisten Systemen nicht benutzbar\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
-msgstr ""
+msgstr "zu viele Inodes (%llu), Inode-Verhältnis erhöhen?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
-msgstr ""
+msgstr "zu viele Inodes (%llu), sie müssen weniger als 2^32 Inodes angeben"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
 "\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
 "\tor lower inode count (-N).\n"
 msgstr ""
+"inode_size (%u) * inodes_count (%u) is zu gross für ein\n"
+"\tDateisystem mit %lu Blöcken, geben Sie bitte entweder ein höheres\n"
+"\tinode_ratio (-i) oder eine niedrigere Anzahl an Inodes (-N) an.\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, c-format
+msgid "while trying to delete %s"
+msgstr "beim Versuch, %s zu löschen"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Überschreibe das bestehende Dateisystem; dies kann rückgängig gemacht "
+"werden\n"
+"durch den Befehl:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1885
 msgid "while setting up superblock"
 msgstr "beim Erstellen des Superblocks"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "unbekanntes OS - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "beim Zuordnen von Dateisystemtabellen"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "beim Nullen von Block %u am Ende des Dateisystems"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 msgid "while reserving blocks for online resize"
 msgstr "beim Lesen des Bad-Block-Inodes"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
 msgstr "Journal"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Erstelle Journal auf Gerät %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
@@ -4016,17 +4317,22 @@
 "\n"
 "\tbeim Erstellen des Journals auf Gerät %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
 msgstr "erledigt\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Erstelle Journal (%u Blöcke): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Schreibe Superblöcke und Dateisystem-Accountinginformationen: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
@@ -4035,7 +4341,7 @@
 "\n"
 "Warnung: Probleme beim Schreiben der Superblöcke."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -4047,102 +4353,161 @@
 #: misc/mklost+found.c:49
 #, c-format
 msgid "Usage: mklost+found\n"
-msgstr "Verwendung: mklost+found\n"
+msgstr "Aufruf: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Aufruf: %s Gerät...\n"
+"\n"
+"Gibt Informationen über die Partitionen jedes angegebenen Gerätes aus.\n"
+"Zum Beispiel: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Kann %s nicht öffnen: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Geometrie von %s kann nicht ermittelt werden: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Grösse von %s kann nicht gelesen werden: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   Start=%8d Grösse=%8lu Ende=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
-msgstr "Bitte e2fsck über das Dateisystem laufen lassen.\n"
+msgstr "Lassen Sie bitte e2fsck über das Dateisystem laufen.\n"
 
-#: misc/tune2fs.c:98
-#, fuzzy, c-format
+#: misc/tune2fs.c:103
+#, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Verwendung: %s [-c max-mounts-count] [-e errors-behavior] [-g group]\n"
-"\t[-i interval[d|m|w]] [-j] [-J journal-options]\n"
-"\t[-l] [-s sparse-flag] [-m reserved-blocks-percent]\n"
-"\t[-o [^]mount-options[,...]] [-r reserved-blocks-count]\n"
-"\t[-u user] [-C mount-count] [-L volume-label] [-M last-mounted-dir]\n"
-"\t[-O [^]feature[,...]] [-T last-check-time] [-U UUID] Gerät\n"
+"Aufruf: %s [-c max-Anzahl-Mounts] [-e Fehler-Verhalten] [-g Gruppe]\n"
+"\t[-i Intervall[d|m|w]] [-j] [-J Journal-Optionen] [-l]\n"
+"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhäng_Optionen[,...]]\n"
+"\t[-r Anzahl_reservierte_Blöcke] [-u Benutzer] [-C Anzahl_Einhängen]\n"
+"\t[-L Volume_Label] [-M letztes_eingehängtes_Verzeichnis]\n"
+"\t[-O [^]Eigenschaft[,...]] [-E erweiterte-Option[,...]]\n"
+"\t[-T letzter_Prüfzeitpunkt] [-U UUID] [-I neue_Inodegrösse] Gerät\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
 msgstr "beim Öffnen des externen Journals"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s ist kein Journal-Gerät.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
 msgstr "Journal-Superblock nicht gefunden!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID des Dateisystems auf Journal-Gerät nicht gefunden.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
 msgstr "Journal NICHT gelöscht\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
 msgstr "Journal gelöscht\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:286
 msgid "while reading bitmaps"
 msgstr "beim Lesen von Bitmaps"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:294
 msgid "while clearing journal inode"
 msgstr "beim Bereinigen des Journal-Inodes"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:305
 msgid "while writing journal inode"
 msgstr "beim Schreiben des Journal-Inodes"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ungültige Einhänge-Option gesetzt: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
+"Das Zurücksetzen von Dateisystem-Eigenschaft »%s« wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:344
-#, fuzzy, c-format
+#: misc/tune2fs.c:362
+#, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr "Setze Zeit des letzten Dateisystemchecks auf %s\n"
+msgstr "Das Setzen der Dateisystem-Eigenschaft »%s« wird nicht unterstützt.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Das has_jounal Flag kann nur gelöscht werden, wenn das Dateisystem\n"
-"nicht eingehängt oder im Nur-Lesen-Modus ist.\n"
+"Die has_jounal Eigenschaft kann nur zurückgesetzt werden, wenn das\n"
+"Dateisystem nicht oder im Nur-Lesen-Modus eingehängt ist.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 "Das needs_recovery Flag ist gesetzt. Bitte starten sie e2fsck vor\n"
-"der Löschung des has_journal Flags.\n"
+"der Zurücksetzung des has_journal Flags.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Das Zurücksetzen der Kennung flex_bg würde das Dateisystem inkonsistent\n"
+"machen.\n"
+
+#: misc/tune2fs.c:423
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Die huge_file Eigenschaft kann nur zurückgesetzt werden, wenn das\n"
+"Dateisystem nicht oder im Nur-Lesen-Modus eingehängt ist.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(und hinterher das System neu starten!)\n"
+
+#: misc/tune2fs.c:472
 msgid "The filesystem already has a journal.\n"
 msgstr "Das Dateisystem hat schon ein Journal.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
@@ -4151,21 +4516,21 @@
 "\n"
 "\tbeim Öffnen des Journals auf %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Erstelle Journal auf Gerät %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "beim Hinzufügen des Dateisystems zum Journal auf %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
 msgstr "Erstelle Journal-Inode: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4173,66 +4538,86 @@
 "\n"
 "\tbeim Erstellen der Journaldatei"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Konnte Datum/Zeit nicht parsen: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "Ungültiger Mounts-Zähler - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ungültiges Fehler-Verhalten - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "ungültige(r) GID oder Gruppenname - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "ungültiges Reservierte-Blöcke-Verhältnis - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
 msgstr "-o darf nur eimal angegeben werden"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
 msgstr "-O darf nur eimal angegeben werden"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "ungültige Anzahl von reservierten Blöcken - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "ungültige(r) UID/Benutzername - %s"
 
-#: misc/tune2fs.c:842
-#, fuzzy, c-format
+#: misc/tune2fs.c:806
+#, c-format
+msgid "bad inode size - %s"
+msgstr "Unzulässige Inodegröße - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Inodegrösse muss eine Zweierpotenz sein- %s"
+
+#: misc/tune2fs.c:900
+#, c-format
 msgid "Invalid RAID stride: %s\n"
-msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+msgstr "Ungültiger RAID Stride: %s\n"
 
-#: misc/tune2fs.c:857
-#, fuzzy, c-format
+#: misc/tune2fs.c:915
+#, c-format
 msgid "Invalid RAID stripe-width: %s\n"
-msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+msgstr "Ungültige RAID Stripe-Breite: %s\n"
 
-#: misc/tune2fs.c:867
-#, fuzzy, c-format
+#: misc/tune2fs.c:930
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Ungültiger Hashalgorithmus: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Der standard Hashalgorithmus wird auf %s (%d) gesetzt\n"
+
+#: misc/tune2fs.c:944
+#, c-format
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -4242,121 +4627,174 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 "\n"
-"falsche Raid-Optionen angegeben.\n"
+"Ungültige Optionen wurden angegeben.\n"
 "\n"
-"Raid-Optionen werden mit Kommatas getrennt angegeben, sie können ein "
-"Argument\n"
-"\terhalten welches mit Gleichheitszeichen ('=') zugewiesen wird.\n"
+"Erweiterte Optionen werden mit Kommatas getrennt angegeben und erwarten\n"
+"\teventuell ein Argument, welches mit Gleichheitszeichen (»=«)\n"
+"\tzugewiesenwird.\n"
 "\n"
-"gültige Raid-Optionen sind:\n"
-"\tstride=<stride length in blocks>\n"
-"\n"
+"Gültige erweiterte Optionen sind:\n"
+"\tstride=<RAID Segmentgrösse pro PLatte in Blöcken>\n"
+"\tstripe-width=<RAID Stride*Datenplatten in Blöcken>\n"
+"\thash_alg=<Hashalgorithmus>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "zu verschiebende Blöcke"
+
+#: misc/tune2fs.c:1471
+#, fuzzy, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
 msgstr ""
+"Um die Aktionen von tune2fs rückgängig zu machen, starten Sie bitte den\n"
+"Befehl\n"
+"    e2undo %s %s\n"
+"\n"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr "Die Inodegrösse ist bereits %d\n"
+
+#: misc/tune2fs.c:1534
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Das Schrumpfen der Inodegrösse wird nicht unterstützt\n"
+
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
-msgstr "Setze maximale Mount-Anzahl auf %d\n"
+msgstr "Setze die maximale Mount-Anzahl auf %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
-msgstr "Setze derzeitige Mount-Anzahl auf %d\n"
+msgstr "Setze die derzeitige Mount-Anzahl auf %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, c-format
 msgid "Setting error behavior to %d\n"
-msgstr "Setze Fehler-Verhalten auf %d\n"
+msgstr "Setze das Fehler-Verhalten auf %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
-msgstr "Setze GID für reservierte Blöcke auf %lu\n"
+msgstr "Setze die GID für reservierte Blöcke auf %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
-msgstr "Setze Intervall zwischen Checks auf %lu Sekunden\n"
+msgstr "Setze das Intervall zwischen Checks auf %lu Sekunden\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Setze den Prozentsatz reservierter Böcke auf %g%% (%u Blöcke)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
-msgstr "Anzahl der reservierten Blöcke zu groß (%lu)"
+msgstr "Anzahl der reservierten Blöcke ist zu gross (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
-msgstr "Setze Anzahl der reservierten Blöcke auf %lu\n"
+msgstr "Setze die Anzahl der reservierten Blöcke auf %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 "\n"
-"Das Dateisystem hat bereits einen \"sparse superblock\".\n"
+"Das Dateisystem hat bereits verteilte Superblöcke.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 "\n"
-"Sparse superblock Flag gesetzt.  %s"
+"Kennzeichen für verteilten Superblock gesetzt. %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
+"\n"
+"Das Zurücksetzen des Kennzeichens für »verteilter Superblock« wird nicht\n"
+"\tunterstützt.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
-msgstr "Setze Zeit des letzten Dateisystemchecks auf %s\n"
+msgstr "Setze die Zeit des letzten Dateisystemchecks auf %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
-msgstr "Setze UID für reservierte Blöcke auf %lu\n"
+msgstr "Setze die UID für reservierte Blöcke auf %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
 msgstr "Ungültiges UUID Format\n"
 
-#: misc/tune2fs.c:1067
-#, fuzzy, c-format
-msgid "Setting stride size to %d\n"
-msgstr "Setze GID für reservierte Blöcke auf %lu\n"
+#: misc/tune2fs.c:1712
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"Die Grösse der Inodes kann nur geändert werden, wenn das Dateisystem\n"
+"nicht eingehängt ist.\n"
 
-#: misc/tune2fs.c:1072
-#, fuzzy, c-format
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Fehler beim Verändern der Inodegrösse.\n"
+"Starten Sie e2undo um die Änderungen am Dateisystem rückgängig zu machen. \n"
+
+#: misc/tune2fs.c:1735
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Setze Inode-Größe auf %lu\n"
+
+#: misc/tune2fs.c:1745
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr "Setze Stride-Größe auf %d\n"
+
+#: misc/tune2fs.c:1750
+#, c-format
 msgid "Setting stripe width to %d\n"
-msgstr "Setze GID für reservierte Blöcke auf %lu\n"
+msgstr "Setze die Stripe-Breite auf %d\n"
 
 #: misc/util.c:72
 msgid "Proceed anyway? (y,n) "
-msgstr "Trotzdem fortsetzen? (y,n) "
+msgstr "Trotzdem fortsetzen? (j,n) "
 
 #: misc/util.c:93
 #, c-format
 msgid "Could not stat %s --- %s\n"
-msgstr "Could not stat %s --- %s\n"
+msgstr "Status für %s konnte nicht ermittelt werden --- %s\n"
 
 #: misc/util.c:96
 msgid ""
@@ -4364,7 +4802,7 @@
 "The device apparently does not exist; did you specify it correctly?\n"
 msgstr ""
 "\n"
-"Das Gerät scheint nicht zu existieren, haben Sie es richtig angegeben?\n"
+"Das Gerät existiert offensichtlich nicht; haben Sie es richtig angegeben?\n"
 
 #: misc/util.c:107
 #, c-format
@@ -4374,11 +4812,11 @@
 #: misc/util.c:136
 #, c-format
 msgid "%s is entire device, not just one partition!\n"
-msgstr "%s ist ein vollständiges Gerät, nicht nur eine Partition!\n"
+msgstr "%s ist das ganze Gerät, nicht nur eine Partition!\n"
 
 #: misc/util.c:158
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr "mke2fs trotzdem erzwungen. Hoffentlich stimmt /etc/mtab nicht.\n"
+msgstr "mke2fs trotzdem erzwungen. Hoffentlich ist /etc/mtab ungültig.\n"
 
 #: misc/util.c:163
 #, c-format
@@ -4391,7 +4829,7 @@
 
 #: misc/util.c:186
 msgid "Couldn't allocate memory to parse journal options!\n"
-msgstr "Konnte keinen Speicher zuweisen, um Journal-Optionen zu parsen!\n"
+msgstr "Konnte keinen Speicher zur Analyse der Journal-Optionen anfordern!\n"
 
 #: misc/util.c:228
 msgid ""
@@ -4405,21 +4843,21 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
-"Ungültioge Journal-Optionen angegeben.\n"
+"Ungültige Journal-Optionen wurden angegeben.\n"
 "\n"
-"Journal-Optionen werden mit Kommata getrennt angegeben, sie können ein "
-"Argument\n"
-"\terhalten welches mit Gleichheitszeichen ('=') zugewiesen wird.\n"
+"Journal-Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
 "\n"
 "Gültige Journal-Optionen sind:\n"
 "\tsize=<Journalgröße in Megabytes>\n"
 "\tdevice=<Journal-Gerät>\n"
 "\n"
-"Die Journalgröße muss zwischen 1024 und 102400 Dateisystem-Blöcken liegen.\n"
+"Die Grösse des Journals muss zwischen 1024 und 10240000 Dateisystem-Blöcken\n"
+"\tliegen.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4428,18 +4866,18 @@
 "Filesystem too small for a journal\n"
 msgstr ""
 "\n"
-"Dateisystem zu klein für ein Journal\n"
+"Das Dateisystem ist zu klein für ein Journal\n"
 
 #: misc/util.c:265
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "\n"
 "The requested journal size is %d blocks; it must be\n"
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
 "\n"
-"Die angegebene Journalgröße ist %d Blöcke. Sie muss aber zwischen\n"
-"1024 und 102400 Dateisystem-Blöcken liegen. Breche ab! \n"
+"Die angegebene Journalgröße beträgt %d Blöcke. Sie muss aber zwischen\n"
+"1024 und 102400 Dateisystem-Blöcken liegen. Abbruch! \n"
 
 #: misc/util.c:273
 msgid ""
@@ -4455,14 +4893,14 @@
 "This filesystem will be automatically checked every %d mounts or\n"
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
-"Das Dateisystem wird automatisch alle %d Mounts bzw. alle %g Tage "
-"überprüft,\n"
-"je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t .\n"
+"Das Dateisystem wird automatisch nach jeweils %d Einhäng-Vorgängen bzw.\n"
+"alle %g Tage überprüft, je nachdem, was zuerst eintritt. Veränderbar mit\n"
+"tune2fs -c oder -t .\n"
 
 #: misc/uuidgen.c:31
 #, c-format
 msgid "Usage: %s [-r] [-t]\n"
-msgstr "Verwendung: %s [-r] [-t]\n"
+msgstr "Aufruf: %s [-r] [-t]\n"
 
 #: resize/extent.c:196
 msgid "# Extent dump:\n"
@@ -4478,77 +4916,90 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Verwendung: %s [-d debug_flags] [-f] [-F] [-p] Gerät [neue_Größe]\n"
+"Aufruf: %s [-d Debug_Optionen] [-f] [-F] [-M] [-P] [-p] Gerät [neue_Größe]\n"
 "\n"
 
-#: resize/main.c:61
-msgid "Extending the inode table"
-msgstr "Vergrößere Inode-Tabelle"
-
 #: resize/main.c:64
-msgid "Relocating blocks"
-msgstr "Verteile Blöcke neu"
+msgid "Extending the inode table"
+msgstr "Vergrößere die Inode-Tabelle"
 
 #: resize/main.c:67
-msgid "Scanning inode table"
-msgstr "Scanne Inode-Tabelle"
+msgid "Relocating blocks"
+msgstr "Verteile die Blöcke neu"
 
 #: resize/main.c:70
-msgid "Updating inode references"
-msgstr "Aktualisiere Inode-Referenzen"
+msgid "Scanning inode table"
+msgstr "Prüfe die Inode-Tabelle"
 
 #: resize/main.c:73
-msgid "Moving inode table"
-msgstr "Verschiebe Inode-Tabelle"
+msgid "Updating inode references"
+msgstr "Aktualisiere die Inode-Referenzen"
 
 #: resize/main.c:76
+msgid "Moving inode table"
+msgstr "Verschiebe die Inode-Tabelle"
+
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Unbekannter Durchgang?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
-msgstr "Beginne Durchgang %d (max = %lu)\n"
+msgstr "Start von Durchgang %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:264
 #, c-format
 msgid "while opening %s"
 msgstr "beim Öffnen von %s"
 
 # c-format
-#: resize/main.c:265
+#: resize/main.c:276
 #, c-format
 msgid "while getting stat information for %s"
-msgstr "beim Setzen der Version in %s"
+msgstr "beim Ermitteln der Statusinformation für %s"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "ungültige Dateisystemgröße - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Die Kombination der Eigenschaften flex_bg und\n"
+"t!resize_inode wird von resize2fs nicht unterestützt.\n"
 
-#: resize/main.c:353
-#, fuzzy
+#: resize/main.c:345
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Geschätzte minimale Grösse des Dateisystems: %u\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Unzulässige Inode-Größe - %s"
+
+#: resize/main.c:394
 msgid "Invalid stride length"
-msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+msgstr "Ungültige Stride-Länge"
 
-#: resize/main.c:377
+#: resize/main.c:418
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
 "You requested a new size of %u blocks.\n"
 "\n"
 msgstr ""
-"Die Partition (oder das Gerät) enthält nur %u (%dk) Blöcke.\n"
-"Die geforderte neue Größe ist %u Blöcke.\n"
+"Die Partition (oder das Gerät) ist nur %u (%dk) Blöcke groß.\n"
+"Die gewünschte Größe war %u Blöcke.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:425
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4557,21 +5008,21 @@
 "Das Dateisystem ist schon %u Blöcke groß. Nichts zu tun!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
-"Bitte zuerst 'e2fsck -f %s ' laufen lassen.\n"
+"Bitte zuerst »e2fsck -f %s« laufen lassen.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
 msgstr "beim Versuch, die Größe von %s zu ändern"
 
-#: resize/main.c:411
+#: resize/main.c:452
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4580,24 +5031,106 @@
 "Das Dateisystem auf %s ist nun %u Blöcke groß.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+"Das Dateisystem auf %s ist auf %s eingehängt; Online-Grössenveränderung "
+"nötig\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Die Online-Verkleinerung von %u auf %u wird nicht unterstützt.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Das Dateisystem unterstützt keine Online-Grössenveränderung"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "beim Versuch, Einhängpunkt %s zu öffnen"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Zugriff verweigert für die Grössenänderung des Dateisystems"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Der Kernel unterstützt die Online-Vergrösserung nicht"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Beim Überprüfen, ob Online-Vergrösserung unterstützt wird"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Führe eine Online-Grössenänderung von %s auf %u (%dk) Blöcke durch.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Beim Versuch, die letzte Gruppe zu erweitern"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Beim Versuch, Gruppe %d hinzu zu fügen"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+"Dateisystem auf %s ist auf %s eingehängt und Online-Grössenänderung wird auf "
+"diesem System nicht unterstützt.\n"
+
+#: resize/resize2fs.c:322
 #, c-format
 msgid "inodes (%llu) must be less than %u"
-msgstr ""
+msgstr "Die Anzahl der Indoes (%llu) muss unter %u liegen"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "reservierte Blöcke"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "zu verschiebene Blöcke"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr "Metadaten-Blöcke"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr "Sollte niemals passieren: Die zu verändernde Inode ist defekt!\n"
+msgstr "Das sollte niemals passieren: Die zu verändernde Inode ist defekt!\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "@S hat kein has_@j Flag, aber ein ext3 @j %s.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Fehler während des Löschens der Erweiterung: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr ""
+#~ "Soll das Journal wiederhergestellt werden, damit das Dateisystem\n"
+#~ "\twieder ext3 ist?\n"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr ""
+#~ "während des wiederholten Versuches, Block-Bitmaps für %s zu schreiben."
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "Schreibe Inoden-Bitmaps"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s ist für %s gescheitert: %s\n"
+
+#~ msgid "open"
+#~ msgstr "offen"
+
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "HDIO_GETGEO Ioctl"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "BLKGETSIZE Ioctl"
diff --git a/po/e2fsprogs.pot b/po/e2fsprogs.pot
index 1baf6e5..fd472df 100644
--- a/po/e2fsprogs.pot
+++ b/po/e2fsprogs.pot
@@ -1,7 +1,8 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Theodore Tso
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# E2fsprogs translation template file
+# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 
+#     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by Theodore Ts'o
+# This file is distributed under the same license as the e2fsprogs package.
+# Theodore Ts'o <tytso@mit.edu>, 2010.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -64,9 +65,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: e2fsprogs 1.41.11\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
+"POT-Creation-Date: 2010-03-15 00:18-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -74,7 +75,7 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:169
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr ""
@@ -88,10 +89,10 @@
 msgstr ""
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1077 e2fsck/unix.c:1160 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:552 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:185 misc/tune2fs.c:1573 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr ""
@@ -101,7 +102,7 @@
 msgid "while trying popen '%s'"
 msgstr ""
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:192
 msgid "while reading in list of bad blocks from file"
 msgstr ""
 
@@ -114,30 +115,30 @@
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr ""
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr ""
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr ""
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr ""
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr ""
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr ""
@@ -185,21 +186,21 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:832
 #, c-format
 msgid "while opening %s for flushing"
 msgstr ""
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:838 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr ""
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
 msgstr ""
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
 msgstr ""
 
@@ -208,348 +209,381 @@
 msgid "%u inodes scanned.\n"
 msgstr ""
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr ""
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr ""
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr ""
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr ""
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr ""
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:111
 msgid "aextended attribute"
 msgstr ""
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:112
 msgid "Aerror allocating"
 msgstr ""
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:113
 msgid "bblock"
 msgstr ""
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:114
 msgid "Bbitmap"
 msgstr ""
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:115
 msgid "ccompress"
 msgstr ""
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:116
 msgid "Cconflicts with some other fs @b"
 msgstr ""
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:117
 msgid "iinode"
 msgstr ""
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:118
 msgid "Iillegal"
 msgstr ""
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:119
 msgid "jjournal"
 msgstr ""
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:120
 msgid "Ddeleted"
 msgstr ""
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:121
 msgid "ddirectory"
 msgstr ""
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:122
 msgid "eentry"
 msgstr ""
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:123
 msgid "E@e '%Dn' in %p (%i)"
 msgstr ""
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:124
 msgid "ffilesystem"
 msgstr ""
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:125
 msgid "Ffor @i %i (%Q) is"
 msgstr ""
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:126
 msgid "ggroup"
 msgstr ""
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:127
 msgid "hHTREE @d @i"
 msgstr ""
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:128
 msgid "llost+found"
 msgstr ""
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:129
 msgid "Lis a link"
 msgstr ""
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:130
 msgid "mmultiply-claimed"
 msgstr ""
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:131
 msgid "ninvalid"
 msgstr ""
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:132
 msgid "oorphaned"
 msgstr ""
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:133
 msgid "pproblem in"
 msgstr ""
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:134
 msgid "rroot @i"
 msgstr ""
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:135
 msgid "sshould be"
 msgstr ""
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:136
 msgid "Ssuper@b"
 msgstr ""
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:137
 msgid "uunattached"
 msgstr ""
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:138
 msgid "vdevice"
 msgstr ""
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:139
+msgid "xextent"
+msgstr ""
+
+#: e2fsck/message.c:140
 msgid "zzero-length"
 msgstr ""
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:151
 msgid "<The NULL inode>"
 msgstr ""
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:152
 msgid "<The bad blocks inode>"
 msgstr ""
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:154
 msgid "<The ACL index inode>"
 msgstr ""
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:155
 msgid "<The ACL data inode>"
 msgstr ""
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:156
 msgid "<The boot loader inode>"
 msgstr ""
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:157
 msgid "<The undelete directory inode>"
 msgstr ""
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:158
 msgid "<The group descriptor inode>"
 msgstr ""
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:159
 msgid "<The journal inode>"
 msgstr ""
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:160
 msgid "<Reserved inode 9>"
 msgstr ""
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:161
 msgid "<Reserved inode 10>"
 msgstr ""
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:330
 #, c-format
 msgid "regular file"
 msgstr ""
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:332
 #, c-format
 msgid "directory"
 msgstr ""
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:334
 #, c-format
 msgid "character device"
 msgstr ""
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:336
 #, c-format
 msgid "block device"
 msgstr ""
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:338
 #, c-format
 msgid "named pipe"
 msgstr ""
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:340
 #, c-format
 msgid "symbolic link"
 msgstr ""
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:342
 #, c-format
 msgid "socket"
 msgstr ""
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:344
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/message.c:422
+msgid "indirect block"
+msgstr ""
+
+#: e2fsck/message.c:424
+msgid "double indirect block"
+msgstr ""
+
+#: e2fsck/message.c:426
+msgid "triple indirect block"
+msgstr ""
+
+#: e2fsck/message.c:428
+msgid "translator block"
+msgstr ""
+
+#: e2fsck/message.c:430
+msgid "block #"
+msgstr ""
+
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr ""
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr ""
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:776
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr ""
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:788
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:475 e2fsck/pass2.c:776
 msgid "reading directory block"
 msgstr ""
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:597
 msgid "in-use inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:606
 msgid "directory inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:614
 msgid "regular file inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:621
 msgid "in-use block map"
 msgstr ""
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:675
 msgid "opening inode scan"
 msgstr ""
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:699
 msgid "getting next inode from scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1169
 msgid "Pass 1"
 msgstr ""
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1226
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr ""
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1270
 msgid "bad inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1292
 msgid "inode in bad block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1312
 msgid "imagic inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1339
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1438
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2163
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2515
 msgid "block bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2519
 msgid "inode bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2523
 msgid "inode table"
 msgstr ""
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:277
 msgid "Pass 2"
 msgstr ""
 
-#: e2fsck/pass3.c:79
+#: e2fsck/pass2.c:799
+msgid "Can not continue."
+msgstr ""
+
+#: e2fsck/pass3.c:76
 msgid "inode done bitmap"
 msgstr ""
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr ""
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr ""
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
 msgstr ""
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr ""
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr ""
 
@@ -821,8 +855,8 @@
 
 #: e2fsck/problem.c:187
 #, c-format
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
-msgid "@S has an @n ext3 @j (@i %i).\n"
+#. @-expanded: superblock has an invalid journal (inode %i).\n
+msgid "@S has an @n @j (@i %i).\n"
 msgstr ""
 
 #: e2fsck/problem.c:192
@@ -846,36 +880,36 @@
 msgstr ""
 
 #: e2fsck/problem.c:212
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 
 #: e2fsck/problem.c:220
-#. @-expanded: Ext3 journal superblock is corrupt.\n
-msgid "Ext3 @j @S is corrupt.\n"
+#. @-expanded: journal superblock is corrupt.\n
+msgid "@j @S is corrupt.\n"
 msgstr ""
 
 #: e2fsck/problem.c:225
 #, c-format
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
 msgstr ""
 
 #: e2fsck/problem.c:230
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
 
 #: e2fsck/problem.c:235
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
-msgid "ext3 recovery flag is clear, but @j has data.\n"
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
 
 #: e2fsck/problem.c:240
@@ -883,64 +917,54 @@
 msgid "Clear @j"
 msgstr ""
 
-#: e2fsck/problem.c:245
-#. @-expanded: Run journal anyway
-msgid "Run @j anyway"
+#: e2fsck/problem.c:245 e2fsck/problem.c:664
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
 #: e2fsck/problem.c:250
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-
-#: e2fsck/problem.c:255
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr ""
 
+#: e2fsck/problem.c:255
+#. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
+msgid "@I %B (%b) found in @o @i %i.\n"
+msgstr ""
+
 #: e2fsck/problem.c:260
-#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-msgid "@I @b #%B (%b) found in @o @i %i.\n"
+#. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
+msgid "Already cleared %B (%b) found in @o @i %i.\n"
 msgstr ""
 
 #: e2fsck/problem.c:265
-#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
-msgstr ""
-
-#: e2fsck/problem.c:270
 #, c-format
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 msgid "@I @o @i %i in @S.\n"
 msgstr ""
 
-#: e2fsck/problem.c:275
+#: e2fsck/problem.c:270
 #, c-format
 #. @-expanded: illegal inode %i in orphaned inode list.\n
 msgid "@I @i %i in @o @i list.\n"
 msgstr ""
 
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
-#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+#: e2fsck/problem.c:275
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr ""
+
+#: e2fsck/problem.c:280
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 
 #: e2fsck/problem.c:285
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-
-#: e2fsck/problem.c:290
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-
-#: e2fsck/problem.c:295
 #. @-expanded: journal version not supported by this e2fsck.\n
 msgid "@j version not supported by this e2fsck.\n"
 msgstr ""
 
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
@@ -949,7 +973,7 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
@@ -958,7 +982,7 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
@@ -968,6 +992,16 @@
 "\n"
 msgstr ""
 
+#: e2fsck/problem.c:306
+#. @-expanded: Run journal anyway
+msgid "Run @j anyway"
+msgstr ""
+
+#: e2fsck/problem.c:311
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr ""
+
 #: e2fsck/problem.c:316
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -995,13 +1029,19 @@
 msgstr ""
 
 #: e2fsck/problem.c:337
-#. @-expanded: superblock last mount time is in the future.  
-msgid "@S last mount time is in the future.  "
+#. @-expanded: superblock last mount time (%t,\n
+#. @-expanded: \tnow = %T) is in the future.\n
+msgid ""
+"@S last mount time (%t,\n"
+"\tnow = %T) is in the future.\n"
 msgstr ""
 
 #: e2fsck/problem.c:342
-#. @-expanded: superblock last write time is in the future.  
-msgid "@S last write time is in the future.  "
+#. @-expanded: superblock last write time (%t,\n
+#. @-expanded: \tnow = %T) is in the future.\n
+msgid ""
+"@S last write time (%t,\n"
+"\tnow = %T) is in the future.\n"
 msgstr ""
 
 #: e2fsck/problem.c:346
@@ -1018,122 +1058,184 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:356
+#, c-format
+#. @-expanded: group descriptor %g checksum is invalid.  
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr ""
+
+#: e2fsck/problem.c:361
+#, c-format
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#: e2fsck/problem.c:366
+#, c-format
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#: e2fsck/problem.c:371
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#: e2fsck/problem.c:376
+#. @-expanded: Last group block bitmap uninitialized.  
+msgid "Last @g @b @B uninitialized.  "
+msgstr ""
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
+#: e2fsck/problem.c:390
+#. @-expanded: superblock last mount time is in the future.\n
+#. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
+#. @-expanded: set)  
+msgid ""
+"@S last mount time is in the future.\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly "
+"set)  "
+msgstr ""
+
+#: e2fsck/problem.c:396
+#. @-expanded: superblock last write time is in the future.\n
+#. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
+#. @-expanded: set).  
+msgid ""
+"@S last write time is in the future.\n"
+"\t(by less than a day, probably due to the hardware clock being incorrectly "
+"set).  "
+msgstr ""
+
+#: e2fsck/problem.c:402
+#. @-expanded: One or more block group descriptor checksums are invalid.  
+msgid "One or more @b @g descriptor checksums are invalid.  "
+msgstr ""
+
+#: e2fsck/problem.c:409
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr ""
 
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:413
 #. @-expanded: root inode is not a directory.  
 msgid "@r is not a @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:418
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:423
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr ""
 
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:428
 #, c-format
 #. @-expanded: deleted inode %i has zero dtime.  
 msgid "@D @i %i has zero dtime.  "
 msgstr ""
 
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:433
 #, c-format
 #. @-expanded: inode %i is in use, but has dtime set.  
 msgid "@i %i is in use, but has dtime set.  "
 msgstr ""
 
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:438
 #, c-format
 #. @-expanded: inode %i is a zero-length directory.  
 msgid "@i %i is a @z @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:443
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:448
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:453
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:458
 #. @-expanded: group %g's block bitmap (%b) is bad.  
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr ""
 
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:463
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr ""
 
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:468
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:473
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:427
-#. @-expanded: illegal block #%B (%b) in inode %i.  
-msgid "@I @b #%B (%b) in @i %i.  "
+#: e2fsck/problem.c:478
+#. @-expanded: illegal %B (%b) in inode %i.  
+msgid "@I %B (%b) in @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:432
-#. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
+#: e2fsck/problem.c:483
+#. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
+msgid "%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:488
 #, c-format
 #. @-expanded: inode %i has illegal block(s).  
 msgid "@i %i has illegal @b(s).  "
 msgstr ""
 
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:493
 #, c-format
 #. @-expanded: Too many illegal blocks in inode %i.\n
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:447
-#. @-expanded: illegal block #%B (%b) in bad block inode.  
-msgid "@I @b #%B (%b) in bad @b @i.  "
+#: e2fsck/problem.c:498
+#. @-expanded: illegal %B (%b) in bad block inode.  
+msgid "@I %B (%b) in bad @b @i.  "
 msgstr ""
 
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:503
 #. @-expanded: Bad block inode has illegal block(s).  
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr ""
 
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:508
 #. @-expanded: Duplicate or bad block in use!\n
 msgid "Duplicate or bad @b in use!\n"
 msgstr ""
 
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:513
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr ""
 
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:518
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
@@ -1145,7 +1247,7 @@
 "in the @f.\n"
 msgstr ""
 
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:525
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
 msgid ""
@@ -1153,7 +1255,7 @@
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:530
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
@@ -1163,120 +1265,120 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:536
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr ""
 
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:541
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:547
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr ""
 
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:552
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:558
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:564
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:569
 #, c-format
 #. @-expanded: error allocating block buffer for relocating %s\n
 msgid "@A @b buffer for relocating %s\n"
 msgstr ""
 
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:574
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr ""
 
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:579
 #, c-format
 #. @-expanded: Relocating group %g's %s to %c...\n
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr ""
 
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:584
 #. @-expanded: Warning: could not read block %b of %s: %m\n
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:589
 #. @-expanded: Warning: could not write block %b for %s: %m\n
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:594 e2fsck/problem.c:1400
 #. @-expanded: error allocating inode bitmap (%N): %m\n
 msgid "@A @i @B (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:599
 #. @-expanded: error allocating block bitmap (%N): %m\n
 msgid "@A @b @B (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:604
 #, c-format
 #. @-expanded: error allocating icount link information: %m\n
 msgid "@A icount link information: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:609
 #, c-format
 #. @-expanded: error allocating directory block array: %m\n
 msgid "@A @d @b array: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:614
 #, c-format
 #. @-expanded: Error while scanning inodes (%i): %m\n
 msgid "Error while scanning @is (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:619
 #, c-format
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:624
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:629
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:635
 #, c-format
 #. @-expanded: Error reading inode %i: %m\n
 msgid "Error reading @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:643
 #, c-format
 #. @-expanded: inode %i has imagic flag set.  
 msgid "@i %i has imagic flag set.  "
 msgstr ""
 
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:648
 #, c-format
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
@@ -1285,150 +1387,148 @@
 "or append-only flag set.  "
 msgstr ""
 
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:654
 #, c-format
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
 
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:659
 #, c-format
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
 
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:669
 #. @-expanded: journal inode is not in use, but contains data.  
 msgid "@j @i is not in use, but contains data.  "
 msgstr ""
 
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:674
 #. @-expanded: journal is not regular file.  
 msgid "@j is not regular file.  "
 msgstr ""
 
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:679
 #, c-format
 #. @-expanded: inode %i was part of the orphaned inode list.  
 msgid "@i %i was part of the @o @i list.  "
 msgstr ""
 
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:685
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:690
 #. @-expanded: error allocating refcount structure (%N): %m\n
 msgid "@A refcount structure (%N): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:695
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:700
 #. @-expanded: inode %i has a bad extended attribute block %b.  
 msgid "@i %i has a bad @a @b %b.  "
 msgstr ""
 
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:705
 #. @-expanded: Error reading extended attribute block %b (%m).  
 msgid "Error reading @a @b %b (%m).  "
 msgstr ""
 
-#: e2fsck/problem.c:659
-#. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-msgid "@a @b %b has reference count %B, @s %N.  "
+#: e2fsck/problem.c:710
+#. @-expanded: extended attribute block %b has reference count %r, should be %N.  
+msgid "@a @b %b has reference count %r, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:715
 #. @-expanded: Error writing extended attribute block %b (%m).  
 msgid "Error writing @a @b %b (%m).  "
 msgstr ""
 
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:720
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr ""
 
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:725
 #. @-expanded: error allocating extended attribute block %b.  
 msgid "@A @a @b %b.  "
 msgstr ""
 
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:730
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr ""
 
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:735
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr ""
 
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:740
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr ""
 
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:745
 #, c-format
 #. @-expanded: inode %i is too big.  
 msgid "@i %i is too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:698
-#. @-expanded: block #%B (%b) causes directory to be too big.  
-msgid "@b #%B (%b) causes @d to be too big.  "
+#: e2fsck/problem.c:749
+#. @-expanded: %B (%b) causes directory to be too big.  
+msgid "%B (%b) causes @d to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:703
-#. @-expanded: block #%B (%b) causes file to be too big.  
-msgid "@b #%B (%b) causes file to be too big.  "
+#: e2fsck/problem.c:754
+msgid "%B (%b) causes file to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:708
-#. @-expanded: block #%B (%b) causes symlink to be too big.  
-msgid "@b #%B (%b) causes symlink to be too big.  "
+#: e2fsck/problem.c:759
+msgid "%B (%b) causes symlink to be too big.  "
 msgstr ""
 
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:764
 #, c-format
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:769
 #, c-format
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr ""
 
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:774
 #, c-format
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
 msgid "@h %i has an @n root node.\n"
 msgstr ""
 
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:779
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:784
 #, c-format
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:789
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr ""
 
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:794
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
 msgid ""
@@ -1436,48 +1536,114 @@
 "@f metadata.  "
 msgstr ""
 
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:800
 #, c-format
 #. @-expanded: Resize inode (re)creation failed: %m.
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:805
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:810
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:764
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
-
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:815
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:820
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 
-#: e2fsck/problem.c:779
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#: e2fsck/problem.c:825
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:830
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr ""
+
+#: e2fsck/problem.c:835
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:840
+#, c-format
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr ""
+
+#: e2fsck/problem.c:845
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#: e2fsck/problem.c:851
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#: e2fsck/problem.c:856
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#: e2fsck/problem.c:861
+#, c-format
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+
+#: e2fsck/problem.c:866
+#, c-format
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#: e2fsck/problem.c:871
+#, c-format
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:876
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#: e2fsck/problem.c:881
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#: e2fsck/problem.c:885
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
+
+#: e2fsck/problem.c:892
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
@@ -1487,63 +1653,63 @@
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:898
 #, c-format
 #. @-expanded: multiply-claimed block(s) in inode %i:
 msgid "@m @b(s) in @i %i:"
 msgstr ""
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:913
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:918
 #, c-format
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:923
 #, c-format
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:928 e2fsck/problem.c:1244
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:934
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:940
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:945
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
-#. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
+#. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
-"  has %B @m @b(s), shared with %N file(s):\n"
+"  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:951
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:956
 #. @-expanded: \t<filesystem metadata>\n
 msgid "\t<@f metadata>\n"
 msgstr ""
 
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:961
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
 msgid ""
@@ -1551,7 +1717,7 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:966
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
 msgid ""
@@ -1559,312 +1725,313 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:979
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:985
 #. @-expanded: Pass 2: Checking directory structure\n
 msgid "Pass 2: Checking @d structure\n"
 msgstr ""
 
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:990
 #, c-format
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:995
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:1000
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:1005
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 msgid "@E @L to '.'  "
 msgstr ""
 
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:1010
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:1015
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
 msgid "@E @L to @d %P (%Di).\n"
 msgstr ""
 
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1020
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
 msgid "@E @L to the @r.\n"
 msgstr ""
 
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1025
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
 msgid "@E has illegal characters in its name.\n"
 msgstr ""
 
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1030
 #, c-format
 #. @-expanded: Missing '.' in directory inode %i.\n
 msgid "Missing '.' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1035
 #, c-format
 #. @-expanded: Missing '..' in directory inode %i.\n
 msgid "Missing '..' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1040
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1045
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1050
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1055
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1060
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1065
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
 msgid "i_frag @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1070
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1075
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr ""
 
-#: e2fsck/problem.c:979
-#. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
+#: e2fsck/problem.c:1080
+#. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
+msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr ""
 
-#: e2fsck/problem.c:984
-#. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-msgid "@d @i %i, @b %B, offset %N: filename too long\n"
+#: e2fsck/problem.c:1085
+#. @-expanded: directory inode %i, %B, offset %N: filename too long\n
+msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr ""
 
-#: e2fsck/problem.c:989
-#. @-expanded: directory inode %i has an unallocated block #%B.  
-msgid "@d @i %i has an unallocated @b #%B.  "
+#: e2fsck/problem.c:1090
+#. @-expanded: directory inode %i has an unallocated %B.  
+msgid "@d @i %i has an unallocated %B.  "
 msgstr ""
 
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1095
 #, c-format
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1100
 #, c-format
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1105
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1110
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1115
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 msgid "@E is duplicate '.' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1120
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 msgid "@E is duplicate '..' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1125 e2fsck/problem.c:1425
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1130
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1135
 #, c-format
 #. @-expanded: error allocating icount structure: %m\n
 msgid "@A icount structure: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1140
 #, c-format
 #. @-expanded: Error iterating over directory blocks: %m\n
 msgid "Error iterating over @d @bs: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1145
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1150
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1155
 #, c-format
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1160
 #, c-format
 #. @-expanded: Error deallocating inode %i: %m\n
 msgid "Error deallocating @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1064
-#. @-expanded: directory entry for '.' is big.  
-msgid "@d @e for '.' is big.  "
+#: e2fsck/problem.c:1165
+#, c-format
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1170
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1175
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1180
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
 msgid "Setting filetype for @E to %N.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1185
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1190
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
 msgid "@E has filetype set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1195
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
 msgid "@E has a @z name.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1200
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1205
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1210
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1114
-#. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-msgid "@p @h %d: node (%B) not referenced\n"
+#: e2fsck/problem.c:1215
+#. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
+msgid "@p @h %d: %B not referenced\n"
 msgstr ""
 
-#: e2fsck/problem.c:1119
-#. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-msgid "@p @h %d: node (%B) referenced twice\n"
+#: e2fsck/problem.c:1220
+#. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
+msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 
-#: e2fsck/problem.c:1124
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-msgid "@p @h %d: node (%B) has bad min hash\n"
+#: e2fsck/problem.c:1225
+#. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
+msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 
-#: e2fsck/problem.c:1129
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-msgid "@p @h %d: node (%B) has bad max hash\n"
+#: e2fsck/problem.c:1230
+#. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
+msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1235
 #. @-expanded: invalid HTREE directory inode %d (%q).  
 msgid "@n @h %d (%q).  "
 msgstr ""
 
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1239
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1249
 #, c-format
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:1153
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-msgid "@p @h %d: node (%B) has @n limit (%N)\n"
+#: e2fsck/problem.c:1254
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
+msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1158
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-msgid "@p @h %d: node (%B) has @n count (%N)\n"
+#: e2fsck/problem.c:1259
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
+msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1163
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-msgid "@p @h %d: node (%B) has an unordered hash table\n"
+#: e2fsck/problem.c:1264
+#. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
+msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr ""
 
-#: e2fsck/problem.c:1168
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-msgid "@p @h %d: node (%B) has @n depth\n"
+#: e2fsck/problem.c:1269
+#. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
+msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1274
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
 msgid "Duplicate @E found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1279
 #, no-c-format
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
@@ -1873,7 +2040,7 @@
 "Rename to %s"
 msgstr ""
 
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1284
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
@@ -1883,95 +2050,115 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1289
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1294
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr ""
+
+#: e2fsck/problem.c:1298
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1303
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1308
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1315
 #. @-expanded: Pass 3: Checking directory connectivity\n
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr ""
 
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1320
 #. @-expanded: root inode not allocated.  
 msgid "@r not allocated.  "
 msgstr ""
 
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1325
 #. @-expanded: No room in lost+found directory.  
 msgid "No room in @l @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1330
 #, c-format
 #. @-expanded: Unconnected directory inode %i (%p)\n
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1335
 #. @-expanded: /lost+found not found.  
 msgid "/@l not found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1340
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1345
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1350
 #, c-format
 #. @-expanded: Could not expand /lost+found: %m\n
 msgid "Could not expand /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1355
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1360
 #, c-format
 #. @-expanded: Error while trying to find /lost+found: %m\n
 msgid "Error while trying to find /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1365
 #, c-format
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
 
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1370
 #, c-format
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
 
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1375
 #, c-format
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
 
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1380
 #, c-format
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1385
 #, c-format
 #. @-expanded: Error while adjusting inode count on inode %i\n
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr ""
 
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1390
 #, c-format
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
@@ -1980,7 +2167,7 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1395
 #, c-format
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
@@ -1989,73 +2176,73 @@
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1405
 #, c-format
 #. @-expanded: Error creating root directory (%s): %m\n
 msgid "Error creating root @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1410
 #, c-format
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1415
 #. @-expanded: root inode is not a directory; aborting.\n
 msgid "@r is not a @d; aborting.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1420
 #. @-expanded: Cannot proceed without a root inode.\n
 msgid "Cannot proceed without a @r.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1430
 #, c-format
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1437
 msgid "Pass 3A: Optimizing directories\n"
 msgstr ""
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1442
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1447
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1452
 msgid "Optimizing directories: "
 msgstr ""
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1469
 msgid "Pass 4: Checking reference counts\n"
 msgstr ""
 
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1474
 #, c-format
 #. @-expanded: unattached zero-length inode %i.  
 msgid "@u @z @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1479
 #, c-format
 #. @-expanded: unattached inode %i\n
 msgid "@u @i %i\n"
 msgstr ""
 
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1484
 #. @-expanded: inode %i ref count is %Il, should be %N.  
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1488
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
@@ -2065,57 +2252,57 @@
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1498
 #. @-expanded: Pass 5: Checking group summary information\n
 msgid "Pass 5: Checking @g summary information\n"
 msgstr ""
 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1503
 #. @-expanded: Padding at end of inode bitmap is not set. 
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1508
 #. @-expanded: Padding at end of block bitmap is not set. 
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1513
 #. @-expanded: block bitmap differences: 
 msgid "@b @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1533
 #. @-expanded: inode bitmap differences: 
 msgid "@i @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1553
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1558
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1563
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1568
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1573
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1578
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 msgid ""
@@ -2123,32 +2310,45 @@
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1584
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1589
 #, c-format
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1594
 #, c-format
 #. @-expanded: Error copying in replacement block bitmap: %m\n
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
+#: e2fsck/problem.c:1619
+#, c-format
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1617
+#: e2fsck/problem.c:1624
+#, c-format
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#: e2fsck/problem.c:1631
+#. @-expanded: Recreate journal
+msgid "Recreate @j"
+msgstr ""
+
+#: e2fsck/problem.c:1750
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr ""
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1854
 msgid "IGNORED"
 msgstr ""
 
@@ -2175,67 +2375,29 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr ""
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr ""
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr ""
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr ""
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr ""
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr ""
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr ""
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr ""
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr ""
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr ""
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2248,7 +2410,7 @@
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2259,169 +2421,181 @@
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr ""
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr ""
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr ""
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1625 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr ""
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr ""
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
 "\n"
-"\a\a\a\aWARNING!!!  Running e2fsck on a mounted filesystem may cause\n"
-"SEVERE filesystem damage.\a\a\a\n"
+"\a\a\a\aWARNING!!!  The filesystem is mounted.   If you continue you "
+"***WILL***\n"
+"cause ***SEVERE*** filesystem damage.\a\a\a\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr ""
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr ""
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr ""
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr ""
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ""
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr ""
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr ""
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr ""
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr ""
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr ""
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr ""
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#: e2fsck/unix.c:795
+msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:800
+msgid "The -n and -c options are incompatible."
+msgstr ""
+
+#: e2fsck/unix.c:805
+msgid "The -n and -l/-L options are incompatible."
+msgstr ""
+
+#: e2fsck/unix.c:816 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr ""
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr ""
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:845
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:893
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:902
 #, c-format
 msgid ""
 "\n"
@@ -2429,38 +2603,43 @@
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:976
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:984
 msgid "while trying to initialize program"
 msgstr ""
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:995
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:1007
 msgid "need terminal for interactive repairs"
 msgstr ""
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1040
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr ""
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1042
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1043
 msgid "Group descriptors look bad..."
 msgstr ""
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1053
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr ""
+
+#: e2fsck/unix.c:1080
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2468,147 +2647,142 @@
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1086
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1088
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1093
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1095
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1099
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1163
 msgid "Get a newer version of e2fsck!"
 msgstr ""
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1193
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr ""
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1204
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1217
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1223
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr ""
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1248
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr ""
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1264
 msgid "Warning: compression support is experimental.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1269
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr ""
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1322
 msgid "while reading bad blocks inode"
 msgstr ""
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1324
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1350
 msgid "Couldn't determine journal size"
 msgstr ""
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1353
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr ""
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1360 misc/mke2fs.c:2225
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1363
 #, c-format
 msgid " Done.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1371
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1375
 msgid "while resetting context"
 msgstr ""
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1387
 msgid "aborted"
 msgstr ""
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1399
 #, c-format
 msgid ""
 "\n"
 "%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1402
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1410
 #, c-format
 msgid ""
 "\n"
@@ -2616,93 +2790,88 @@
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1446
+msgid "while setting block group checksum info"
+msgstr ""
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr ""
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr ""
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr ""
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr ""
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr ""
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr ""
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr ""
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr ""
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr ""
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr ""
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
+msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr ""
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr ""
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2711,361 +2880,405 @@
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr ""
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
+msgid "Memory used: %lu, "
 msgstr ""
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr ""
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr ""
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
+msgid "while reading inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
+msgid "while writing inode %lu in %s"
 msgstr ""
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr ""
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr ""
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr ""
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr ""
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr ""
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr ""
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr ""
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr ""
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr ""
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr ""
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr ""
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr ""
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr ""
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr ""
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr ""
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr ""
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr ""
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr ""
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
 msgstr ""
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
+msgid "invalid %s - %s"
 msgstr ""
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr ""
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr ""
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr ""
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr ""
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
+#: misc/badblocks.c:1135
+msgid "last block"
 msgstr ""
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
+#: misc/badblocks.c:1141
+msgid "first block"
 msgstr ""
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
 msgstr ""
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr ""
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr ""
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr ""
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
 msgstr ""
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr ""
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr ""
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr ""
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr ""
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr ""
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr ""
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr ""
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr ""
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr ""
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr ""
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr ""
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr ""
 
 #: misc/dumpe2fs.c:53
 #, c-format
-msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:162
-#, c-format
-msgid "Group %lu: (Blocks "
+msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
 msgstr ""
 
 #: misc/dumpe2fs.c:168
 #, c-format
-msgid "  %s superblock at "
-msgstr ""
-
-#: misc/dumpe2fs.c:169
-msgid "Primary"
-msgstr ""
-
-#: misc/dumpe2fs.c:169
-msgid "Backup"
+msgid "Group %lu: (Blocks "
 msgstr ""
 
 #: misc/dumpe2fs.c:173
 #, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:178
+#, c-format
+msgid "  %s superblock at "
+msgstr ""
+
+#: misc/dumpe2fs.c:179
+msgid "Primary"
+msgstr ""
+
+#: misc/dumpe2fs.c:179
+msgid "Backup"
+msgstr ""
+
+#: misc/dumpe2fs.c:183
+#, c-format
 msgid ", Group descriptors at "
 msgstr ""
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
 "  Reserved GDT blocks at "
 msgstr ""
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr ""
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr ""
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ""
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
 msgstr ""
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr ""
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr ""
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr ""
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:274
 #, c-format
 msgid "Bad blocks: %u"
 msgstr ""
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:301 misc/tune2fs.c:281
 msgid "while reading journal inode"
 msgstr ""
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:307
+msgid "while opening journal inode"
+msgstr ""
+
+#: misc/dumpe2fs.c:313
+msgid "while reading journal super block"
+msgstr ""
+
+#: misc/dumpe2fs.c:323
+#, c-format
+msgid "Journal features:        "
+msgstr ""
+
+#: misc/dumpe2fs.c:336
 msgid "Journal size:             "
 msgstr ""
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:347
+#, c-format
+msgid ""
+"Journal length:           %u\n"
+"Journal sequence:         0x%08x\n"
+"Journal start:            %u\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:366 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr ""
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:374
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:378
 #, c-format
 msgid ""
 "\n"
@@ -3077,27 +3290,27 @@
 "Journal number of users:  %u\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:391
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:407 misc/mke2fs.c:699 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:433
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:448
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:459
 #, c-format
 msgid ""
 "\n"
@@ -3111,55 +3324,51 @@
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:518 misc/mke2fs.c:1406
 #, c-format
 msgid "\tUsing %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:554 misc/e2image.c:681 misc/tune2fs.c:1576
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr ""
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:579
 #, c-format
 msgid ""
 "\n"
 "%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr ""
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr ""
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr ""
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr ""
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr ""
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr ""
 
@@ -3183,7 +3392,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr ""
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1711
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr ""
@@ -3198,11 +3407,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr ""
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr ""
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr ""
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:205
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr ""
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+
+#: misc/e2undo.c:162
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr ""
+
+#: misc/e2undo.c:168
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr ""
+
+#: misc/e2undo.c:174
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+
+#: misc/e2undo.c:183
+#, c-format
+msgid "Failed to open %s\n"
+msgstr ""
+
+#: misc/e2undo.c:209
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+
+#: misc/e2undo.c:215
+#, c-format
+msgid "Failed write %s\n"
+msgstr ""
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3221,78 +3482,78 @@
 "\n"
 msgstr ""
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr ""
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr ""
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr ""
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr ""
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr ""
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr ""
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr ""
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr ""
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr ""
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr ""
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1077
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr ""
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr ""
@@ -3312,46 +3573,47 @@
 msgid "While reading version on %s"
 msgstr ""
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:108
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFKSV] device [blocks-count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:210
 #, c-format
 msgid "Running command: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:214
 #, c-format
 msgid "while trying to run '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:221
 msgid "while processing list of bad blocks from program"
 msgstr ""
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:248
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:250
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:253
 msgid "Aborting....\n"
 msgstr ""
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:273
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3359,186 +3621,187 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:292
 msgid "while marking bad blocks as used"
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:350
 msgid "done                            \n"
 msgstr ""
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr ""
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:364
 msgid "Writing inode tables: "
 msgstr ""
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:387
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %u: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:411
 msgid "while creating root dir"
 msgstr ""
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:418
 msgid "while reading root inode"
 msgstr ""
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:432
 msgid "while setting root inode ownership"
 msgstr ""
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:450
 msgid "while creating /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:457
 msgid "while looking up /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:470
 msgid "while expanding /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:485
 msgid "while setting bad block inode"
 msgstr ""
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:512
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr ""
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:522
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:538
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:554
 msgid "while initializing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:560
 msgid "Zeroing journal device: "
 msgstr ""
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:573
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr ""
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:589
 msgid "while writing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:605
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:610
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:611
 msgid "OS type: "
 msgstr ""
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:616
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:618
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:620
+#, c-format
+msgid "Stride=%u blocks, Stripe width=%u blocks\n"
+msgstr ""
+
+#: misc/mke2fs.c:622
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:624
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr ""
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:627
 #, c-format
 msgid "First data block=%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:629
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr ""
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:633
 #, c-format
 msgid "%u block groups\n"
 msgstr ""
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:635
 #, c-format
 msgid "%u block group\n"
 msgstr ""
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:636
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:638
 #, c-format
 msgid "%u inodes per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:645
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:724
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:739
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:761
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:768
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:792
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:814
 #, c-format
 msgid ""
 "\n"
@@ -3551,11 +3814,12 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:830
 #, c-format
 msgid ""
 "\n"
@@ -3563,111 +3827,150 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:862
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:875 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:985
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+
+#: misc/mke2fs.c:988
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1224
 #, c-format
 msgid "invalid block size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1228
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1244
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1250
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr ""
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1257
 msgid "Illegal number for blocks per group"
 msgstr ""
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1262
 msgid "blocks per group must be multiple of 8"
 msgstr ""
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1270
+msgid "Illegal number for flex_bg size"
+msgstr ""
+
+#: misc/mke2fs.c:1276
+msgid "flex_bg size must be a power of 2"
+msgstr ""
+
+#: misc/mke2fs.c:1286
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1306
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1316
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1334
 #, c-format
 msgid "bad revision level - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1346
 #, c-format
 msgid "invalid inode size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1366
 #, c-format
 msgid "bad num inodes - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1431 misc/mke2fs.c:2180
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1437
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1443
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr ""
+
+#: misc/mke2fs.c:1452
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1456
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1464
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1474
 msgid "filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1510
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1519 resize/main.c:374
 msgid "while trying to determine filesystem size"
 msgstr ""
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1526
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1533
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3675,73 +3978,89 @@
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1551
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1557
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr ""
+
+#: misc/mke2fs.c:1591
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1598
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1605
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1617
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1635
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1652
 msgid "while trying to determine hardware sector size"
 msgstr ""
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1690
+#, c-format
+msgid "warning: Unable to get device geometry for %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1693
+#, c-format
+msgid "%s alignment is offset by %lu bytes.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1695
+#, c-format
+msgid ""
+"This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1723
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1732
 msgid "blocks per group count out of range"
 msgstr ""
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1747
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1773
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1778
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1793
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3749,62 +4068,104 @@
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1886 misc/tune2fs.c:1494
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr ""
+
+#: misc/mke2fs.c:1899 misc/tune2fs.c:1516
+#, c-format
+msgid "while trying to delete %s"
+msgstr ""
+
+#: misc/mke2fs.c:1909
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1946
+#, c-format
+msgid "Calling BLKDISCARD from %llu to %llu "
+msgstr ""
+
+#: misc/mke2fs.c:1949
+#, c-format
+msgid "failed.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1951
+#, c-format
+msgid "succeeded.\n"
+msgstr ""
+
+#: misc/mke2fs.c:2000
 msgid "while setting up superblock"
 msgstr ""
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:2064
 #, c-format
 msgid "unknown os - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2118
 msgid "while trying to allocate filesystem tables"
 msgstr ""
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2149
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2162
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2173 misc/tune2fs.c:479
 msgid "journal"
 msgstr ""
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2185
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr ""
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2192
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2197 misc/mke2fs.c:2229 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr ""
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2206
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr ""
+
+#: misc/mke2fs.c:2217
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr ""
+
+#: misc/mke2fs.c:2234
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2239
 #, c-format
 msgid ""
 "\n"
 "Warning, had trouble writing out superblocks."
 msgstr ""
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2242
 #, c-format
 msgid ""
 "done\n"
@@ -3816,11 +4177,41 @@
 msgid "Usage: mklost+found\n"
 msgstr ""
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr ""
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr ""
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:105
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -3828,163 +4219,201 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr ""
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
 msgstr ""
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr ""
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr ""
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr ""
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:358
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:364
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr ""
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr ""
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr ""
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr ""
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
 msgstr ""
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
 msgstr ""
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr ""
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr ""
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr ""
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr ""
+
+#: misc/tune2fs.c:904
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:919
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:948
 #, c-format
 msgid ""
 "\n"
@@ -3995,95 +4424,146 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+#: misc/tune2fs.c:1421 resize/resize2fs.c:790
+msgid "blocks to be moved"
 msgstr ""
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1424
+msgid "Failed to allocate block bitmap when increasing inode size\n"
+msgstr ""
+
+#: misc/tune2fs.c:1430
+msgid "Not enough space to increase inode size \n"
+msgstr ""
+
+#: misc/tune2fs.c:1435
+msgid "Failed to relocate blocks during inode resize \n"
+msgstr ""
+
+#: misc/tune2fs.c:1467
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+
+#: misc/tune2fs.c:1526
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/tune2fs.c:1587
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr ""
+
+#: misc/tune2fs.c:1592
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr ""
+
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1641
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1646
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1651
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1656
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1663
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1670
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1676
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1682
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1689
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1694
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1701
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1707
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1758
 msgid "Invalid UUID format\n"
 msgstr ""
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1770
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1777
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1789
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr ""
+
+#: misc/tune2fs.c:1799
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1804
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
@@ -4142,7 +4622,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 
@@ -4192,62 +4672,79 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr ""
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr ""
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr ""
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr ""
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr ""
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr ""
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr ""
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr ""
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr ""
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
 msgstr ""
 
-#: resize/main.c:353
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr ""
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr ""
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr ""
+
+#: resize/main.c:402
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4255,50 +4752,115 @@
 "\n"
 msgstr ""
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
 msgstr ""
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
 "\n"
 msgstr ""
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr ""
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr ""
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr ""
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr ""
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr ""
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr ""
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr ""
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr ""
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr ""
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr ""
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr ""
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr ""
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.gmo b/po/es.gmo
index f66961d..0b9c4d4 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 1ddbda2..70c7105 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,6 +1,10 @@
-# Mensajes en español para GNU e2fsprogs.
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# Max de Mendizábal <max@upn.mx>, 2003.
+# Mensajes en español para GNU e2fsprogs.
+# Copyright (C) 2008 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
+#
+# Max de Mendizábal <max@upn.mx>, 2003, 2005.
+# Benno Schulenberg <benno@vertaalt.nl>, 2008.
+#
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -62,50 +66,49 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU e2fsprogs 1.38-b3\n"
+"Project-Id-Version: e2fsprogs-1.40.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2005-06-22 11:26-0500\n"
-"Last-Translator: Max de Mendizábal <max@upn.mx>\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
+"PO-Revision-Date: 2008-06-01 23:56+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Spanish <es@li.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
 
 # Ojo: "To ignore" no es ignorar sino "no tener en cuenta",
-# "pasar por alto", etc. Ya sé que "ignorar" se entiende, pero sólo
-# porque su mal uso está muy extendido. sv
-# ¿Qué tal "se descarta"? Me gustaría saber si hay algún glosario de 
-# frases para traducir programas GNU, son cosas que deberían ser 
-# estándar. mm
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+# "pasar por alto", etc. Ya sé que "ignorar" se entiende, pero sólo
+# porque su mal uso está muy extendido. sv
+# ¿Qué tal "se descarta"? Me gustaría saber si hay algún glosario de
+# frases para traducir programas GNU, son cosas que deberían ser
+# estándar. mm
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
-msgstr "El bloque dañado %u está fuera del intervalo; se descarta.\n"
+msgstr "El bloque dañado %u está fuera del intervalo; se descarta.\n"
 
-# En el K&R se habla de nodo-i. ¿Cuáles son las razones a favor y en contra
+# En el K&R se habla de nodo-i. ¿Cuáles son las razones a favor y en contra
 # de "nodo i" sobre "nodo-i"? sv
-# El plural. Pero está bien, adopto la convención K&R. mm
+# El plural. Pero está bien, adopto la convención K&R. mm
 #: e2fsck/badblocks.c:45
 msgid "while sanity checking the bad blocks inode"
-msgstr "mientras se revisaba la salud del nodo-i que tiene bloques dañados"
+msgstr "mientras se revisaba la salud del nodo-i de bloques dañados"
 
-# Yo pondría mejor "el nodo i de bloques dañados". No sé mucho sobre el
+# Yo pondría mejor "el nodo i de bloques dañados". No sé mucho sobre el
 # formato ext2, pero creo que es muy posible que haya un nodo-i especial
-# cuya tarea sea precisamente la de recordar cuáles son los bloques
-# dañados. Investigarlo en caso de duda. sv
-# No, se refiere que a que hay un nodo-i que apunta a bloques que están
-# dañados. Creo que la traducción, como la puse, es correcta. mm
+# cuya tarea sea precisamente la de recordar cuáles son los bloques
+# dañados. Investigarlo en caso de duda. sv
 #: e2fsck/badblocks.c:57
 msgid "while reading the bad blocks inode"
-msgstr "mientras se leía el nodo-i que tiene bloques dañados"
+msgstr "mientras se leía el nodo-i de bloques dañados"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "mientras se intentaba abrir %s"
@@ -113,80 +116,80 @@
 #: e2fsck/badblocks.c:82
 #, c-format
 msgid "while trying popen '%s'"
-msgstr "mientras se intentaba abrir una tubería a '%s'"
+msgstr "mientras se intentaba abrir una tubería a '%s'"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
-msgstr "mientras se leía una lista de bloques dañados desde un fichero"
+msgstr "mientras se leía una lista de bloques dañados desde un fichero"
 
 #: e2fsck/badblocks.c:104
 msgid "while updating bad block inode"
-msgstr "mientras se actualizaba el nodo-i que tiene un bloque dañado"
+msgstr "mientras se actualizaba el nodo-i de bloques dañados"
 
-# Solemos traducir Warning por Atención. sv
+# Solemos traducir Warning por Atención. sv
 # Ok, uniformizo. mm
 #: e2fsck/badblocks.c:130
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr ""
-"Atención: se encontró un bloque ilegal %u en el nodo-i que tiene un bloque "
-"dañado. Limpiado.\n"
+"Atención: se encontró un bloque ilegal %u en el nodo-i de bloques dañados. "
+"Limpiado.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Error al leer el bloque %lu (%s) mientras %s.  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
-msgstr "Error leyendo el bloque %lu (%s). "
+msgstr "Error al leer el bloque %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Se descarta el error"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Se fuerza la reescritura"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Error al escribir el bloque %lu (%s) mientras %s.  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Error al escribir el bloque %lu (%s).  "
 
 #: e2fsck/emptydir.c:56
 msgid "empty dirblocks"
-msgstr "bloques de directorio vacíos"
+msgstr "bloques de directorio vacíos"
 
 #: e2fsck/emptydir.c:61
 msgid "empty dir map"
-msgstr "mapa de directorios vacío"
+msgstr "mapa de directorios vacío"
 
 #: e2fsck/emptydir.c:97
-#, fuzzy, c-format
+#, c-format
 msgid "Empty directory block %u (#%d) in inode %u\n"
-msgstr "El bloque del directorio %d (#%d) está vacío en el nodo-i %d\n"
+msgstr "El bloque del directorio %u (#%d) está vacío en el nodo-i %u\n"
 
 #: e2fsck/extend.c:21
 #, c-format
 msgid "%s: %s filename nblocks blocksize\n"
-msgstr "%s: %s fichero nbloques tamañodelbloque\n"
+msgstr "%s: %s fichero númerodebloques tamañodelbloque\n"
 
 #: e2fsck/extend.c:43
 #, c-format
 msgid "Illegal number of blocks!\n"
-msgstr "¡Número ilegal de bloques!\n"
+msgstr "¡Número inválido de bloques!\n"
 
 #: e2fsck/extend.c:49
 #, c-format
 msgid "Couldn't allocate block buffer (size=%d)\n"
-msgstr "No se puede reservar el bloque del búfer (tamaño=%d)\n"
+msgstr "No se puede reservar el bloque del búfer (tamaño=%d)\n"
 
 #: e2fsck/flushb.c:34
 #, c-format
@@ -197,410 +200,401 @@
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
 msgstr ""
-"¡No está implementado el control de entrada/salida del BLKFLSBUF! No se "
-"pueden vaciar los búfers.\n"
+"¡No está implementado el control de entrada/salida del BLKFLSBUF! No se "
+"pueden vaciar los búfers.\n"
 
 #: e2fsck/iscan.c:46
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
-"Modo de empleo: %s [-F] [-I bloques_del_búfer_del_nodo_i] dispositivo\n"
+"Modo de empleo: %s [-F] [-I bloques_del_búfer_del_nodo_i] dispositivo\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
-msgstr "mientras se abría %s para su vaciado"
+msgstr "mientras se abría %s para su vaciado"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
 msgstr "mientras se intentaba vaciar %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
-msgstr "mientras se iniciaba la exploración del nodo-i"
+msgstr "mientras se iniciaba la exploración de los nodos-i"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
-msgstr "mientras se obtenía el nodo-i siguiente"
+msgstr "mientras se obtenía el nodo-i siguiente"
 
 #: e2fsck/iscan.c:138
-#, fuzzy, c-format
+#, c-format
 msgid "%u inodes scanned.\n"
-msgstr "%d nodos i explorados.\n"
+msgstr "%u nodos-i explorados.\n"
 
-# Yo creo que superbloque debería ser todo junto, no "super bloque". sv
-# Ok, concuerdo contigo. mm
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "leyendo el superbloque del fichero de transacciones\n"
 
 # Ojo: No es que se haya encontrado un superbloque que resulta que no es
-# válido, sino que no se ha encontrado ningún superbloque que sea válido,
-# que es distinto (a lo mejor no se ha encontrado ningún superbloque
-# en absoluto). Creo que la traducción debería cambiarse. sv
-# En efecto, tienes toda la razón. Corregido. mm
-#: e2fsck/journal.c:558
+# válido, sino que no se ha encontrado ningún superbloque que sea válido,
+# que es distinto (a lo mejor no se ha encontrado ningún superbloque
+# en absoluto). Creo que la traducción debería cambiarse. sv
+# En efecto, tienes toda la razón. Corregido. mm
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr ""
-"%s: no se encontró un superbloque válido en el fichero de transacciones\n"
+"%s: no se encontró un superbloque válido en el fichero de transacciones\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: el fichero de transacciones es demasiado corto\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: recuperando el fichero de transacciones\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
-"%s: no se puede hacer la recuperación del fichero de transacciones en modo "
-"de sólo lectura\n"
+"%s: no se puede hacer la recuperación del fichero de transacciones en modo "
+"de sólo lectura\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "mientras se intentaba reabrir %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aatributo extendido"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Aerror en la reserva"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bbloque"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bmapa de bits"
 
-#: e2fsck/message.c:113
-msgid "ccompress"
-msgstr "ccompresión"
-
-# Pregunta: ¿De verdad existe el verbo conflictuar?
-# No, no existe. Corrijo como "entra en conflicto". mm
 #: e2fsck/message.c:114
-msgid "Cconflicts with some other fs @b"
-msgstr "CEntra en conflicto con algún otro sistema de ficheros @b"
+msgid "ccompress"
+msgstr "ccompresión"
 
 #: e2fsck/message.c:115
+msgid "Cconflicts with some other fs @b"
+msgstr "CEntra en conflicto con algún otro sistema de ficheros @b"
+
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "inodo-i"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Iilegal"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jfichero de transacciones"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dborrado"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "ddirectorio"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "eentrada"
 
-#: e2fsck/message.c:121
-msgid "E@e '%Dn' in %p (%i)"
-msgstr "ELa @e '%Dn' que está en %p (%i)"
-
 #: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "ELa @e '%Dn' que está en %p (%i)"
+
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fsistema de ficheros"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpara el @i %i (%Q) es"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggrupo"
 
-#: e2fsck/message.c:125
-msgid "hHTREE @d @i"
-msgstr "hEl ÁRBOL-H del @i del @d"
-
 #: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "hEl ÁRBOL-H del @i del @d"
+
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-# Un enlace.
-# Ok. mm
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Les un enlace"
 
-#: e2fsck/message.c:128
-msgid "mmultiply-claimed"
-msgstr "reclamado en múltiples ocasiones"
-
 #: e2fsck/message.c:129
-msgid "ninvalid"
-msgstr "ninválido"
+msgid "mmultiply-claimed"
+msgstr "mreclamado en múltiples ocasiones"
 
 #: e2fsck/message.c:130
-msgid "oorphaned"
-msgstr "ohuérfano"
+msgid "ninvalid"
+msgstr "ninválido"
 
 #: e2fsck/message.c:131
+msgid "oorphaned"
+msgstr "ohuérfano"
+
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblema en"
 
-#: e2fsck/message.c:132
-msgid "rroot @i"
-msgstr "r@i raíz"
-
 #: e2fsck/message.c:133
-msgid "sshould be"
-msgstr "sdebería ser"
+msgid "rroot @i"
+msgstr "r@i raíz"
 
 #: e2fsck/message.c:134
+msgid "sshould be"
+msgstr "sdebería ser"
+
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "udesacoplado"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vdispositivo"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+#, fuzzy
+msgid "xextent"
+msgstr "eentrada"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zlongitud cero"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<El nodo-i NULO>"
 
-# O el nodo-i de bloques dañados. Ver las especificaciones del formato ext2
-# para asegurarse. sv
-# En efecto. mm
-#: e2fsck/message.c:149
-msgid "<The bad blocks inode>"
-msgstr "<El nodo-i de bloques dañados>"
-
 #: e2fsck/message.c:151
-msgid "<The ACL index inode>"
-msgstr "<El índice ACL del nodo-i>"
+msgid "<The bad blocks inode>"
+msgstr "<El nodo-i de bloques dañados>"
 
-#: e2fsck/message.c:152
-msgid "<The ACL data inode>"
-msgstr "<La información ACL del nodo-i>"
-
-# O cargador de arranque.
-# Tenía dudas entre decir inicio o arranque, prefiero arranque. ok. mm
 #: e2fsck/message.c:153
+msgid "<The ACL index inode>"
+msgstr "<El índice ACL del nodo-i>"
+
+#: e2fsck/message.c:154
+msgid "<The ACL data inode>"
+msgstr "<La información ACL del nodo-i>"
+
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<El nodo-i del cargador de arranque>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<El nodo-i del directorio de desborrado>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<El nodo-i descriptor del grupo>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<El nodo-i del fichero de transacciones>"
 
-# No entiendo lo de 9-reservado. -> "El nodo-i reservado 9"
-# Quiere decir, el que hace el número 9 de entre los nodos-i reservados.
-# Voy a escribir mejor "se ha reservado el nodo-i 9" que suena más a castellano. mm
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Se ha reservado el nodo-i 9>"
 
-# Lo mismo.
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Se ha reservado el nodo-i 10>"
 
-#: e2fsck/message.c:314
-#, fuzzy, c-format
+#: e2fsck/message.c:323
+#, c-format
 msgid "regular file"
-msgstr ""
-"\n"
-"%8d fichero regular\n"
+msgstr "fichero regular"
 
-#: e2fsck/message.c:316
-#, fuzzy, c-format
+#: e2fsck/message.c:325
+#, c-format
 msgid "directory"
-msgstr "ddirectorio"
+msgstr "directorio"
 
-#: e2fsck/message.c:318
-#, fuzzy, c-format
+#: e2fsck/message.c:327
+#, c-format
 msgid "character device"
-msgstr "%8d fichero de dispositivo tipo carácter\n"
+msgstr "dispositivo de caracteres"
 
-#: e2fsck/message.c:320
-#, fuzzy, c-format
+#: e2fsck/message.c:329
+#, c-format
 msgid "block device"
-msgstr "%8d fichero de dispositivo tipo bloque\n"
+msgstr "dispositivo de bloque"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
-msgstr ""
+msgstr "tubería designada"
 
-# enlace
-#: e2fsck/message.c:324
-#, fuzzy, c-format
+#: e2fsck/message.c:333
+#, c-format
 msgid "symbolic link"
-msgstr "%8d vínculo simbólico"
+msgstr "enlace simbólico"
 
-#: e2fsck/message.c:326
-#, fuzzy, c-format
+#: e2fsck/message.c:335
+#, c-format
 msgid "socket"
-msgstr "%8d socket\n"
+msgstr "zócalo"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
-msgstr ""
+msgstr "tipo de fichero desconocido con modo 0%o"
 
 #: e2fsck/pass1b.c:215
 msgid "multiply claimed inode map"
-msgstr "<El mapa de nodos i reclamado muchas veces>"
+msgstr "mapa de nodos-i reclamados en múltiples ocasiones"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
 #, fuzzy, c-format
-msgid "internal error; can't find dup_blk for %u\n"
-msgstr "error interno; no se encontró el dup_blk para %d\n"
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "error interno: no se encontró el dup_blk para %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
 msgstr "regresado del clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:762
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "Error interno: no se puede encontrar el dir_info para %i.\n"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:774
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Error interno: no se puede encontrar el dir_info para %i.\n"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
-#, fuzzy
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 msgid "reading directory block"
-msgstr "leyendo bloques indirectos del nodo-i %u"
+msgstr "leyendo bloque de directorio"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
-msgstr "el mapa de nodos i está en uso"
+msgstr "mapa de nodos-i usados"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
-msgstr "directorio del mapa de nodos i"
+msgstr "mapa de nodos-i de directorio"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
-msgstr "mapa de nodos i de ficheros normales"
+msgstr "mapa de nodos-i de ficheros normales"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
-msgstr "mapa de bloques en uso"
+msgstr "mapa de bloques usados"
 
-#: e2fsck/pass1.c:599
-#, fuzzy
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
-msgstr "haciendo la exploración del nodo-i"
+msgstr "iniciando la exploración de los nodos-i"
 
-#: e2fsck/pass1.c:623
-#, fuzzy
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
-msgstr "mientras se obtenía el nodo-i siguiente"
+msgstr "obteniendo el siguiente nodo-i para examinar"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "Paso 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "leyendo bloques indirectos del nodo-i %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
-msgstr "mapa de nodos i dañados"
+msgstr "mapa de nodos-i dañados"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
-msgstr "el nodo-i está en el mapa de bloques dañados"
+msgstr "el nodo-i está en el mapa de bloques dañados"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
-msgstr "mapa de nodos i de números mágicos i"
+msgstr "mapa de nodos-i con 'imagic'"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
-msgstr "mapa de bloques reclamados muchas veces"
+msgstr "mapa de bloques reclamados en múltiples ocasiones"
 
-# extendidos.
-# ok. Error de dedazo. mm
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr "mapa de bloques de atributos extendidos"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
-msgstr "mapa de bits del bloque"
+msgstr "mapa de bits de bloques"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
-msgstr "mapa de bits del nodo-i"
+msgstr "mapa de bits de nodos-i"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
-msgstr "tabla de nodos i"
+msgstr "tabla de nodos-i"
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "Paso 2"
 
+#: e2fsck/pass2.c:803
+#, fuzzy
+msgid "Can not continue."
+msgstr ""
+"No se puede continuar, se finaliza.\n"
+"\n"
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
-msgstr "el nodo-i hizo al mapa de bits"
+msgstr "mapa de bits de nodos-i pasados"
 
 #: e2fsck/pass3.c:90
 msgid "Peak memory"
 msgstr "Memoria pico"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "Paso 3"
 
-# ¿Dónde dice que se detectó eso? ¿No sería más bien
-# "mapa de bits de detección de ciclos de nodos-i"?
-# ok. mm
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 msgid "inode loop detection bitmap"
-msgstr "mapa de bits de detección de ciclos de nodos-i"
+msgstr "mapa de bits de detección de ciclos de nodos-i"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "Paso 4"
 
@@ -612,9 +606,9 @@
 msgid "(no prompt)"
 msgstr "(no hay cursor)"
 
-# Yo pondría mejor "Arreglar", ya que es una pregunta que hace que quedaría
-# mejor en forma impersonal. Fíjate que todos los demás verbos que siguen
-# están en infinitivo.
+# Yo pondría mejor "Arreglar", ya que es una pregunta que hace que quedaría
+# mejor en forma impersonal. Fíjate que todos los demás verbos que siguen
+# están en infinitivo.
 # Cierto. mm
 #: e2fsck/problem.c:51
 msgid "Fix"
@@ -670,7 +664,7 @@
 
 #: e2fsck/problem.c:64
 msgid "Clone multiply-claimed blocks"
-msgstr "Se clonan los bloques reclamados en múltiples ocasiones"
+msgstr "Clonar los bloques reclamados en múltiples ocasiones"
 
 #: e2fsck/problem.c:65
 msgid "Delete file"
@@ -686,7 +680,7 @@
 
 #: e2fsck/problem.c:68
 msgid "Clear HTree index"
-msgstr "Borrar el índice del árbol-H"
+msgstr "Borrar el índice del árbol-H"
 
 #: e2fsck/problem.c:69
 msgid "Recreate"
@@ -734,7 +728,7 @@
 
 #: e2fsck/problem.c:88
 msgid "INODE CLEARED"
-msgstr "NODO I BORRADO"
+msgstr "NODO-I BORRADO"
 
 #: e2fsck/problem.c:89
 msgid "ABORTED"
@@ -750,7 +744,7 @@
 
 #: e2fsck/problem.c:92
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
-msgstr "SE CLONARON LOS BLOQUES RECLAMADOS EN MÚLTIPLES OCASIONES"
+msgstr "SE CLONARON LOS BLOQUES RECLAMADOS EN MÚLTIPLES OCASIONES"
 
 #: e2fsck/problem.c:93
 msgid "FILE DELETED"
@@ -766,24 +760,26 @@
 
 #: e2fsck/problem.c:96
 msgid "HTREE INDEX CLEARED"
-msgstr "SE BORRÓ EL ÍNDICE DEL ÁRBOL-H"
+msgstr "SE BORRÓ EL ÍNDICE DEL ÁRBOL-H"
 
 #: e2fsck/problem.c:97
 msgid "WILL RECREATE"
-msgstr "SE RECREARÁ"
+msgstr "SE RECREARÁ"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:106
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "El @B del @b para el @g %g no está en el @g.  (@b %b)\n"
+msgstr ""
+"El mapa de bits de bloques para el grupo %g no está en el grupo.  (bloque %"
+"b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:110
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "El @B del @i para el @g no está en el @g.  (@b %b)\n"
+msgstr ""
+"El mapa de bits de nodos-i para el grupo %g no está en el grupo.  (bloque %"
+"b)\n"
 
-# WARNING -> ATENCIÓN.
-# Ok. mm
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
 #: e2fsck/problem.c:115
@@ -791,11 +787,9 @@
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
-"La tabla del @i para el @g %g no está en el @g.  (@b %b)\n"
-"ATENCIÓN: ES POSIBLE QUE HAYA UNA PÉRDIDA DE DATOS SEVERA.\n"
+"La tabla de nodos-i para el @g %g no está en el @g.  (@b %b)\n"
+"ATENCIÓN: ES POSIBLE QUE HAYA UNA PÉRDIDA DE DATOS SEVERA.\n"
 
-# correr el e2fsck -> ejecutar e2fsck.
-# Ups. Perdón, me gana lo mexicano. mm
 #. @-expanded: \n
 #. @-expanded: The superblock could not be read or does not describe a correct ext2\n
 #. @-expanded: filesystem.  If the device is valid and it really contains an ext2\n
@@ -815,15 +809,13 @@
 "\n"
 msgstr ""
 "\n"
-"El @S podría no ser leido o no describe un @f ext2 correcto.\n"
-"Si el @v es válido y en verdad contiene un @f ext2 (y no uno \n"
-"de intercambio, ufs o algo más), entonces el @S está corrompido\n"
-"y podría intentarse ejecutar el e2fsck con un @S alternativo:\n"
+"El @S podría no ser leido o no describe un @f ext2 correcto.\n"
+"Si el @v es válido y en verdad contiene un @f ext2 (y no uno \n"
+"de intercambio, ufs o algo más), entonces el @S está corrompido\n"
+"y podría intentarse ejecutar el e2fsck con un @S alternativo:\n"
 "   e2fsck -b %S <@v>\n"
 "\n"
 
-# tabla de particiones
-# Ok. mm
 #. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
 #. @-expanded: The physical size of the device is %c blocks\n
 #. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
@@ -833,9 +825,9 @@
 "The physical size of the @v is %c @bs\n"
 "Either the @S or the partition table is likely to be corrupt!\n"
 msgstr ""
-"El tamaño del @f (de acuerdo con el @S) es de %b @bs\n"
-"El tamaño físico del @v es de %c @bs\n"
-"¡Puede ser que el @S, o la tabla de particiones, estén corruptos!\n"
+"El tamaño del @f (de acuerdo con el @S) es de %b @bs\n"
+"El tamaño físico del @v es de %c @bs\n"
+"¡Puede ser que el @S, o la tabla de particiones, estén corruptos!\n"
 
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
@@ -846,19 +838,19 @@
 "This version of e2fsck does not support fragment sizes different\n"
 "from the @b size.\n"
 msgstr ""
-"El tamaño_del_@b del @S es %b, el tamaño del fragmento = %c.\n"
-"Esta versión de e2fsck no tiene implementado el manejo de\n"
-"tamaños de fragmento distintos al del @b.\n"
+"El tamaño_del_@b del @S es %b, el tamaño del fragmento = %c.\n"
+"Esta versión de e2fsck no tiene implementado el manejo de\n"
+"tamaños de fragmento distintos al del @b.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
 #: e2fsck/problem.c:144
 msgid "@S @bs_per_group = %b, should have been %c\n"
-msgstr "El @bs_per_group del @S = %b y debería haber sido %c\n"
+msgstr "El @bs_per_group del @S = %b y debería haber sido %c\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
 #: e2fsck/problem.c:149
 msgid "@S first_data_@b = %b, should have been %c\n"
-msgstr "El first_data_@b del @S = %b y debería haber sido %c\n"
+msgstr "El first_data_@b del @S = %b y debería haber sido %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
@@ -866,10 +858,8 @@
 msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
-msgstr "El @f no tiene un UUID; se generará uno.\n"
+msgstr "El @f no tiene un UUID; se generará uno.\n"
 
-# Por favor, no pongas espacio justo antes de \n.
-# Ok. mm
 #: e2fsck/problem.c:159
 #, c-format
 msgid ""
@@ -880,10 +870,10 @@
 "the backup block group descriptors may be OK.\n"
 "\n"
 msgstr ""
-"Nota: si hay varios nodos-i o bloques de mapas de bits o\n"
-"parte de la tabla de tabla de nodos-i necesitan reubicación,\n"
+"Nota: si varios bloques de mapas de bits (de nodos-i o de bloques)\n"
+"o parte de la tabla de nodos-i necesitan reubicación,\n"
 "es posible que primero se quiera intentar ejecutar e2fsck con\n"
-"la opción '-b %S'. El problema podría estar únicamente en el\n"
+"la opción '-b %S'. El problema podría estar únicamente en el\n"
 "descriptor primario del grupo de bloques y posiblemente el\n"
 "descriptor del grupo de bloques de respaldo pudiera estar bien.\n"
 "\n"
@@ -891,30 +881,27 @@
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
 #: e2fsck/problem.c:168
 msgid "Corruption found in @S.  (%s = %N).\n"
-msgstr "El @S está corrupto.  (%s = %N).\n"
+msgstr "El @S está corrupto.  (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
 #: e2fsck/problem.c:173
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
-msgstr "Error al determinar el tamaño del @v físico: %m\n"
+msgstr "Error al determinar el tamaño del @v físico: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
 #: e2fsck/problem.c:178
 msgid "@i count in @S is %i, @s %j.\n"
 msgstr "La cuenta @i en el @S es %i, @s %j.\n"
 
-# Hurd sí lleva artículo, lo mismo en inglés que en español.
-# -> El Hurd
-# Cierto. mm
 #: e2fsck/problem.c:182
 msgid "The Hurd does not support the filetype feature.\n"
-msgstr "El Hurd no tiene implementada la opción de tipos de fichero.\n"
+msgstr "El Hurd no tiene implementada la opción de tipos de fichero.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
-#, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
 msgstr "@S tiene un @j ext3 @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
@@ -930,78 +917,80 @@
 #. @-expanded: External journal has bad superblock\n
 #: e2fsck/problem.c:202
 msgid "External @j has bad @S\n"
-msgstr "El @j externo tiene un @S dañado\n"
+msgstr "El @j externo tiene un @S dañado\n"
 
 #. @-expanded: External journal does not support this filesystem\n
 #: e2fsck/problem.c:207
 msgid "External @j does not support this @f\n"
 msgstr "El @j externo no tiene implementado este @f\n"
 
-# su copia. Siempre tratamos al usuario de usted.
-# old -> antigua, no vieja
-# ok. mm
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
+#, fuzzy
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "El @S del @j ext3 es de un tipo desconocido %N (no implementado).\n"
-"Es posible que tu copia de e2fsck sea muy antigua y/o no tenga implementado\n"
+"Es posible que su copia de e2fsck sea muy antigua y/o no tenga implementado\n"
 "este formato de @j.\n"
-"También es posible que el @S del @j esté corrupto.\n"
+"También es posible que el @S del @j esté corrupto.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "El @S del @j ext3 está corrupto.\n"
+#, fuzzy
+msgid "@j @S is corrupt.\n"
+msgstr "El @S del @j ext3 está corrupto.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "El @S no tiene la bandera has_journal, pero tiene un @j ext3 %s.\n"
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr ""
+"La bandera de recuperación del ext3 está limpia, pero el @j\n"
+"contiene información.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
-"El @S tiene ext3 y la bandera need_recovery está activada, pero no hay @j.\n"
+"El @S tiene ext3 y la bandera need_recovery está activada, pero no hay @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr ""
-"La bandera de recuperación del ext3 está limpia, pero el @j\n"
-"contiene información.\n"
+"La bandera de recuperación del ext3 está limpia, pero el @j\n"
+"contiene información.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
-msgstr "Borra el @j"
+msgstr "Borrar el @j"
 
-# Yo quitaría el "el".
 #. @-expanded: Run journal anyway
 #: e2fsck/problem.c:245
 msgid "Run @j anyway"
-msgstr "Ejecuta el @j de todas formas"
+msgstr "Ejecutar el @j de todas formas"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 #: e2fsck/problem.c:250
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
-"La bandera de recuperación no está activada en el @S de respaldo, por eso\n"
-"se ejecutará de todas maneras el @j.\n"
+"La bandera de recuperación no está activada en el @S de respaldo,\n"
+"por eso se ejecutará de todas maneras el @j.\n"
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:255
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
-msgstr "%s @i @o %i (uid=%Iu, gid=%Ig, modo=%Im, tamaño=%Is)\n"
+msgstr "%s @i @o %i (uid=%Iu, gid=%Ig, modo=%Im, tamaño=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:260
@@ -1011,7 +1000,7 @@
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:265
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
-msgstr "Ya se borró el @b #%B (%b) encontrado en el @i @o %i.\n"
+msgstr "Ya se borró el @b #%B (%b) encontrado en el @i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 #: e2fsck/problem.c:270
@@ -1026,29 +1015,31 @@
 msgstr "@i @I %i en la lista de @i @o.\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
-"El @f tiene una(s) bandera(s) especial(es), pero es una revisión 0 del @f."
+"El @f tiene una(s) bandera(s) especial(es), pero es una revisión 0 del @f.  "
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
-"El @S del @j ext3 tiene puesta una bandera desconocida en una característica "
-"de sólo lectura.\n"
+"El @S del @j ext3 tiene puesta una bandera desconocida en una característica "
+"de sólo lectura.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
-"El @S del @j ext3 tiene puesta una bandera desconocida en una característica "
+"El @S del @j ext3 tiene puesta una bandera desconocida en una característica "
 "incompatible.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:295
 msgid "@j version not supported by this e2fsck.\n"
-msgstr "La versión del @j no está implementada en este e2fsck.\n"
+msgstr "La versión del @j no está implementada en este e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
@@ -1081,7 +1072,7 @@
 "Clearing fields beyond the V1 @j @S...\n"
 "\n"
 msgstr ""
-"Se encontraron campos V2 no válidos en el @j del @S\n"
+"Se encontraron campos V2 no válidos en el @j del @S\n"
 "(del V1 del @j).\n"
 "Borrando los campos que exceden la V1 del @j del @S...\n"
 "\n"
@@ -1093,7 +1084,7 @@
 "Backing up @j @i @b information.\n"
 "\n"
 msgstr ""
-"Respaldando la información del @j, el @i y el @b.\n"
+"Respaldando la información del @j, el @i y el @b.\n"
 "\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
@@ -1103,36 +1094,36 @@
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
-"El @f no tiene resize_@i habilitado, por s_reserved_gdt_@bs\n"
-"es %N; @s es cero.  "
+"El @f no tiene 'resize_inode' habilitado, pero 's_reserved_gdt_blocks'\n"
+"es %N; debería ser cero.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:327
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
 msgstr ""
-"No está habilitado modificar el tamaño del @i, pero la modificación del "
-"tamaño del @i no es cero.  "
+"El 'resize_inode' no está habilitado, pero el nodo-i de cambio del tamaño no "
+"es cero.  "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:332
 msgid "Resize @i not valid.  "
-msgstr "No es válido modificar el tamaño del @i.  "
+msgstr "El nodo-i de cambio del tamaño no es válido.  "
 
 #. @-expanded: superblock last mount time is in the future.  
 #: e2fsck/problem.c:337
 msgid "@S last mount time is in the future.  "
-msgstr ""
+msgstr "La última vez que se montó el superbloque es en el futuro.  "
 
 #. @-expanded: superblock last write time is in the future.  
 #: e2fsck/problem.c:342
 msgid "@S last write time is in the future.  "
-msgstr ""
+msgstr "La última vez que se escribió en el superbloque es en el futuro.  "
 
 #. @-expanded: superblock hint for external superblock should be %X.  
 #: e2fsck/problem.c:346
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
-msgstr ""
+msgstr "La pista de superbloque para un superbloque externo debería ser %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
@@ -1141,146 +1132,172 @@
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
+"Agregando la pista dirhash al sistema de ficheros\n"
+"\n"
 
-# O también "Verificación de nodos i, @bs y tamaños\n"
-# Realmente, creo que todos esos títulos en los que te dice lo que hace
-# deberían estar en infinitivo, pues son títulos.
-# Si estás de acuerdo, procura cambiar todos los títulos para que
-# no queden unos en infinitivo y otros en gerundio.
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr ""
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr ""
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
 # Prefiero el infinitivo, pero hay ocasiones en que el gerundio es
 # indispensable, como por ejemplo "verificando", "revisando", en donde
-# da la impresión de que en ese momento se están haciendo las cosas.
+# da la impresión de que en ese momento se están haciendo las cosas.
 # En este caso en particular, creo que es conveniente el gerundio. mm
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
-msgstr "Paso 1: verificando nodos i, @bs y tamaños\n"
+msgstr "Paso 1: Verificando nodos-i, @bs y tamaños\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "el @r no es un @d.  "
 
-# vieja no, antigua
-# ok. mm
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
-"el @r tiene puesto el dtime (probablemente debido a una versión antigua del "
+"el @r tiene puesto el dtime (probablemente debido a una versión antigua del "
 "mke2fs).  "
 
-# No me parece correcta la traducción. Yo creo que sería más bien así:
-# ok. mm
-# -> "El @i reservado %i %Q tiene un modo inorrecto."
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "El @i reservado %i %Q tiene un modo incorrecto.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@i %i @D, tiene un dtime cero.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr "@i %i está en uso, pero tiene puesto dtime.  "
+msgstr "@i %i está en uso, pero tiene puesto dtime.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i es un @d con @z.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr "@b del @B del @g %g @C está en %b.\n"
+msgstr "@b del @B del @g %g @C está en %b.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "El @i del @B del @g %g @C en %b.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "La tabla de @i del @g %g @C en %b.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr "El @b del @B (%B) del @g %g está dañado.  "
+msgstr "El @b del @B (%B) del @g %g está dañado.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "El @i del @B (%B) del @g %g está dañado.  "
+msgstr "El @i del @B (%B) del @g %g está dañado.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size es %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs es %Ib, @s %N.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@I @b #%B (%b) en @i %i.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "@b #%B (%b) se encima con los metadatos del @f en el @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
-msgstr "@i %i tiene @b(s) inválido(s).  "
+msgstr "@i %i tiene @b(s) inválido(s).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
-msgstr "Demasiados @bs inválidos en el @i %i.\n"
+msgstr "Demasiados @bs inválidos en el @i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
-msgstr "@b @I #%B (%b) en el @b del @i dañado.  "
+msgstr "@b @I #%B (%b) en el @b del @i dañado.  "
 
-# inválido
-# ok
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
-msgstr "@b del @i dañado tiene @b(s) inválido(s).  "
+msgstr "@b del @i dañado tiene @b(s) inválido(s).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
-msgstr "¡@b duplicado o dañado está en uso!\n"
+msgstr "¡@b duplicado o dañado está en uso!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr "El @b %b dañado se usa de forma indirecta como @b del @i.  "
+msgstr "El @b %b dañado se usa de forma indirecta como @b del @i.  "
 
-# Por favor, no traduzcas bad por "malos". Pon "incorrectos" por ejemplo.
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1288,909 +1305,978 @@
 "in the @f.\n"
 msgstr ""
 "\n"
-"El @i del @b dañado probablemente haya sido corrompido.\n"
-"Probablemente se debería detener ahora el programa y ejecutar\n"
-"e2fsck -c para buscar bloques malos en el @f.\n"
+"El nodo-i de bloques dañados probablemente haya sido corrompido.\n"
+"Probablemente se debería detener ahora el programa y ejecutar\n"
+"e2fsck -c para buscar bloques dañados en el @f.\n"
 
-# -> no se puede arreglar
-# muchas oraciones en pasiva en inglés quedan mejor en forma reflexiva
+# Muchas oraciones en pasiva en inglés quedan mejor en forma reflexiva
 # cuando se traducen.
-# ok. mm
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Si el @b está realmente dañado, el @f no se puede arreglar.\n"
+"Si el @b está realmente dañado, el @f no se puede arreglar.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
 "\n"
 msgstr ""
 "Se puede borrar este @b de la lista de @bs y esperar\n"
-"que el @b esté correcto.  Pero no hay ninguna garantía.\n"
+"que el @b esté correcto.  Pero no hay ninguna garantía.\n"
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
-msgstr "El @S primario (%b) está en la lista de @bs dañados.\n"
+msgstr "El @S primario (%b) está en la lista de @bs dañados.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
-"El bloque %b en los descriptores primarios del @g está en la lista de @bs "
-"dañados\n"
+"El bloque %b en los descriptores primarios del @g está en la lista de @bs "
+"dañados\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
-msgstr "Atención: el @S (%B) del grupo %g está dañado.\n"
+msgstr "Atención: el @S (%B) del grupo %g está dañado.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
-"Atención: la copia de los descriptores del @g %g tiene un @b (%b) dañado.\n"
+"Atención: la copia de los descriptores del @g %g tiene un @b (%b) dañado.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
-"¿Será un error de programación?  El @b #%b se reclama sin razón en el "
+"¿Será un error de programación?  El @b #%b se reclama sin razón en el "
 "process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N, es contigua a los @bs en el @b del @g %g para %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
-msgstr "@A del búfer del @b por reubicar %s\n"
+msgstr "@A del búfer del @b por reubicar %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Reubicando %s del @g %g de %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Reubicando el @g %g de %s hacia %c...\n"
 
-# Atención
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
-msgstr "Atención: no se puede leer el @b %b de %s: %m\n"
+msgstr "Atención: no se puede leer el @b %b de %s: %m\n"
 
-# Atención
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
-msgstr "Atención: no se puede escribir el @b %b para %s: %m\n"
+msgstr "Atención: no se puede escribir el @b %b para %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
 msgstr "Hay un @A del @B del @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "Hay un @A del @b del @B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
-msgstr "@A en la cuenta-i de la información del enlace: %m\n"
+msgstr "@A en la cuenta-i de la información del enlace: %m\n"
 
 # array -> matriz
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A el arreglo del @b de @ds: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Error mientras se exploraba el @i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Error mientras se iteraba sobre los @bs en el @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
-"Error al guardar la información de la cuenta del @i (@i=%i, cuenta=%N): %m\n"
+"Error al guardar la información de la cuenta del @i (@i=%i, cuenta=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
-"Error al guardar la información del @b de @ds (@i=%i, @b=%b, núm=%N): %m\n"
+"Error al guardar la información del @b de @ds (@i=%i, @b=%b, núm=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Error al leer el @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i tiene puesta la bandera imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"El fichero especial (@v/socket/fifo/symlink) (@i %i) no es modificable\n"
-"o tiene la bandera sólo-añadir.  "
+"El fichero especial (dispositivo/zócalo/fifo/enlace símbolico) (@i %i)\n"
+"no es modificable o tiene la bandera 'append-only' (sólo añadir).  "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
-"el @i %i tiene la bandera de @c puesta en el @f sin que la @c esté "
+"el @i %i tiene la bandera de @c puesta en el @f sin que la @c esté "
 "implementada.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
-"El fichero especial (@v/socket/fifo) (@i %i) tiene un tamaño distinto de "
-"cero.  "
+"El fichero especial (dispositivo/zócalo/fifo) (@i %i)\n"
+"tiene un tamaño distinto de cero.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
-msgstr "El @i del @j no está en uso, pero contiene información.  "
+msgstr "El @i del @j no está en uso, pero contiene información.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "el @j no es un fichero regular.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "el @i %i era parte de la lista de nodos-i @os.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
-"Los nodos-i fueron parte de una lista enlazada que estaba huérfana y "
-"dañada.  "
+"Los nodos-i fueron parte de una lista enlazada que estaba huérfana y "
+"dañada.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A de la estructura refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Error al leer el @b del @a %b para el @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
-msgstr "@i %i tiene un @b del @a %b dañado.  "
+msgstr "@i %i tiene un @b del @a %b dañado.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Error al leer el @b del @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "El @b del @a %b tiene una cuenta de referencia %B y @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Error al escribir el @b de @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "El @b del @a %b tiene h_@bs > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "@A de @a @b %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr "el @b del @a %b está dañado (hubo una colisión en la reserva).  "
+msgstr "el @b del @a %b está dañado (hubo una colisión en la reserva).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
-msgstr "el @b del @a %b está dañado (nombre no válido).  "
+msgstr "el @b del @a %b está dañado (nombre no válido).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
-msgstr "el @b del @a %b está dañado (valor no válido).  "
+msgstr "el @b del @a %b está dañado (valor no válido).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "el @i %i es muy grande.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "el @b #%B (%b) causa que el @d sea muy grande.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "el @b #%B (%b) causa que el fichero sea muy grande.  "
 
-# enlace simbólico
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
-msgstr "el @b #%B (%b) causa que el enlace simbólico sea muy grande.  "
+msgstr "el @b #%B (%b) causa que el enlace simbólico sea muy grande.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
-"el @i %i tiene la bandera INDEX_FL puesta en el @f sin el árbol-h "
+"el @i %i tiene la bandera INDEX_FL puesta en el @f sin el árbol-h "
 "implementado.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i tiene puesta la bandera INDEX_FL pero no es un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
-msgstr "El @h %i tiene un nodo raíz no válido.\n"
+msgstr "El @h %i tiene un nodo raíz no válido.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr "El @h %i tiene una versión de hash no implementada (%N)\n"
+msgstr "El @h %i tiene una versión de hash no implementada (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
-"El @h %i utiliza una bandera incompatible para el nodo raíz del árbol h.\n"
+"El @h %i utiliza una bandera incompatible para el nodo raíz del árbol h.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "El @h %i tiene una profundidad (%N) muy grande\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
-"El @i del @b está dañado y tiene un @b indirecto (%b) que\n"
-"entra en conflicto con la metainformación del @f.  "
+"El @i del @b está dañado y tiene un @b indirecto (%b) que\n"
+"entra en conflicto con la metainformación del @f.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
-msgstr "El cambio de tamaño del @i o su (re)creación ha fallado: %m."
+msgstr "Falló la (re)creación del nodo-i de cambio de tamaño: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
-msgstr "El @i %i tiene un tamaño adicional (%IS) que es @n\n"
+msgstr "El @i %i tiene un tamaño adicional (%IS) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "El @a en el @i %i tiene una longitud de nombre (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "El @a en el @i %i tiene un valor de tamaño (%N) que es @n\n"
+msgstr "El @a en el @i %i tiene un valor de tamaño (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "El @a en @i %i tiene un valor de desplazamiento (%N) que es @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "El @a en el @i %i tiene un valor de @b (%N) que es @n (debe ser 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr ""
-"El @a en el @i %i tiene un arreglo asociativo (%N) que es @n (debe ser 0)\n"
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+#, fuzzy
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "El @a en el @i %i tiene una longitud de nombre (%N) que es @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "Nodo-i %i está marcado como un %It pero parece ser un directorio.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, fuzzy, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Error mientras se iteraba sobre los @bs en el @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, fuzzy, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"el @i %i tiene la bandera INDEX_FL puesta en el @f sin el árbol-h "
+"implementado.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
 msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Se ejecutan pasos adicionales para resolver los @bs reclamados por más de un "
+"Se ejecutan pasos adicionales para resolver los @bs reclamados por más de un "
 "@i...\n"
-"Paso 1B: Se vuelven a explorar para los @bs reclamados en múltiples "
+"Paso 1B: Se vuelven a explorar para los @bs reclamados en múltiples "
 "ocasiones\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
-msgstr "@m @b(s)  en @i %i.  "
+msgstr "Bloque(s) reclamado(s) en múltiples ocasiones en nodo- %i.  "
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
-msgstr "Error mientras se exploraban los nodos i (%i): %m\n"
+msgstr "Error mientras se exploraban los nodos-i (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A del @B del @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Error mientras se iteraba sobre los @bs en el @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Error al ajustar la cuenta de referencia para el @b del @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
-#, fuzzy
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
-"Paso 1C: Se exploran los directorios para buscar nodos-i con @bs reclamados "
-"en múltiples ocasiones.\n"
+"Paso 1C: Explorando los directorios para buscar nodos-i con @bs reclamados "
+"en múltiples ocasiones\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
-msgstr "Paso 1D: Se reconcilian los @bs reclamados en múltiples ocasiones\n"
+msgstr "Paso 1D: Reconciliando los @bs reclamados en múltiples ocasiones\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
 msgstr ""
-"El fichero %Q (@i #%i, fecha de modificación %IM)\n"
-"tiene %B @b(s) reclamado(s) en múltiples ocasiones, compartido(s) con %N "
+"El fichero %Q (@i #%i, fecha de modificación %IM)\n"
+"tiene %B @b(s) reclamado(s) en múltiples ocasiones, compartido(s) con %N "
 "fichero(s):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
-msgstr "\t%Q (@i #%i, fecha de modificación %IM)\n"
+msgstr "\t%Q (@i #%i, fecha de modificación %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadatos del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
 msgstr ""
-"(Hay %N nodos i que contienen @bs reclamados en múltiples ocasiones.)\n"
+"(Hay %N nodos-i que contienen @bs reclamados en múltiples ocasiones.)\n"
 "\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
-"Los @bs reclamados en múltiples ocasiones ya se reasignaron o se clonaron.\n"
+"Los @bs reclamados en múltiples ocasiones ya se reasignaron o se clonaron.\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "No se puede clonar el fichero: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
-msgstr "Paso 2: Se verifica la estructura de @ds\n"
+msgstr "Paso 2: Verificando la estructura de @ds\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Número @n del @i para '.' en el @i del @d %i.\n"
+msgstr "Número @n del @i para '.' en el @i del @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E tiene un @i @n #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E tiene un @i %Di @D/no utilizado.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "@E @L a '.'  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr "@E apunta al @i (%Di) ubicado en un @b dañado.\n"
+msgstr "@E apunta al @i (%Di) ubicado en un @b dañado.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L al @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "@E @L al @r.\n"
 
-# carácteres -> caracteres
-# en su nombre -> en el nombre (no hace falta decir en "su" nombre,
-# por la misma razón que se suele decir "abre la boca" y no "abre tu boca".
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
-msgstr "La @E contiene carácteres no válidos en su nombre.\n"
+msgstr "La @E contiene caracteres no válidos en el nombre.\n"
 
-# Yo creo que sobra el "un". No es que haya 5 cuando tendría que haber 6
-# sino que no hay ninguno y debería haber uno. Fíjate que en el mensaje
-# siguiente no pones el "un".
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
-msgstr "Falta un '.' en el @d @i %i.\n"
+msgstr "Falta '.' en el @d @i %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Falta '..' en el @i del @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "La primera @e '%Dn' (@i=%Di) en el @i del @d %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "La segunda @e '%Dn' (@i=%Di) en el @i del @d %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "El i_faddr @F %IF, @s cero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "El i_file_acl @F %If, @s cero.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "El i_dir_acl @F %Id, @s cero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "El i_frag @F %N, @s cero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "El i_fsize @F %N, @s cero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "El @i %i (%Q) tiene un modo @n (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
-msgstr "El @i del @d %i, @b %B, desplazamiento %N: el @d está dañado\n"
+msgstr "El @i del @d %i, @b %B, desplazamiento %N: el @d está dañado\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr ""
 "El @i del @d %i, @b %B, desplazamiento %N: el nombre del fichero es muy "
 "largo\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
-msgstr "El @i %i del @d tiene un @b #%B que no está reservado.  "
+msgstr "El @i %i del @d tiene un @b #%B que no está reservado.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "La @e en el @d '.' en el @i del @d %i no está terminada con NULL\n"
+msgstr "La @e en el @d '.' en el @i del @d %i no está terminada con NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "La @e al @d '..' en el @i %i del @d no está terminada con NULL\n"
+msgstr "La @e al @d '..' en el @i %i del @d no está terminada con NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
-msgstr "El @i %i (%Q) es un @v de carácter @I.\n"
+msgstr "El @i %i (%Q) es un @v de carácter @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "El @i %i (%Q) es un @v de @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
-msgstr "La @E está duplicada en la @e '.'.\n"
+msgstr "La @E está duplicada en la @e '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
-msgstr "La @E está duplicada en la @e '..'.\n"
+msgstr "La @E está duplicada en la @e '..'.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Error interno: no se puede encontrar el dir_info para %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "La @E tiene un rec_len de %Dr y @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A de la estructura icount: %m\n"
 
-# iterando -> al iterar. por consistencia con los que vienen después
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
-msgstr "Error iterando sobre los @bs del @d: %m\n"
+msgstr "Error al iterar sobre los @bs del @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Error al leer el @b %b del @d (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Error al escribir el @b %b del @d (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A del @b del @d para el @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Error al liberar el @i %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, fuzzy, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "La @e del @d para '.' es grande.  "
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "El @i %i (%Q) es un FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr "El @i %i (%Q) es un sócket @I.\n"
+msgstr "El @i %i (%Q) es un sócket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Se pone el tipo de fichero para la @E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "La @E tiene un tipo de fichero incorrecto (era %Dt y @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "La @E tiene puesto el tipo de fichero.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "La @E tiene un nombre de @z.\n"
 
-# Enlace simbólico
-# Ok. mm
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
-msgstr "El enlace simbólico %Q (@i #%i) es @n.\n"
+msgstr "El enlace simbólico %Q (@i #%i) es @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "El @b del @a @F es @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "El @f contiene ficheros muy grandes, pero no tiene la bandera LARGE_FILE en "
 "el @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "Hay un @p en el @h %d: el nodo (%B) no ha sido referenciado.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "Hay un @p en el @h %d: el nodo (%B) ha sido referenciado dos veces.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
-msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un hash mínimo incorrecto.\n"
+msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un hash mínimo incorrecto.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
-msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un hash máximo incorrecto.\n"
+msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un hash máximo incorrecto.\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "El @h %d es @n (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
-msgstr "Hay un @p en el @h %d (%q): el número del @b %b es incorrecto.\n"
+msgstr "Hay un @p en el @h %d (%q): el número del @b %b es incorrecto.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
-msgstr "Hay un @p en el @h %d: el nodo raíz es @n.\n"
+msgstr "Hay un @p en el @h %d: el nodo raíz es @n.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
-msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un límite @n (%N).\n"
+msgstr "Hay un @p en el @h %d: el nodo (%B) tiene un límite @n (%N).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "Hay un @p en el @h %d: el nodo (%B) tiene una cuenta @n (%N).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr ""
 "Hay un @p en el @h %d: el nodo (%B) tiene una tabla de hash no ordenada.\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+#, fuzzy
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
 msgstr "Hay un @p en el @h %d: el nodo (%B) su profundidad es @n.\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
-msgstr "@E está duplicada.  "
+msgstr "@E está duplicada.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
 "Rename to %s"
 msgstr ""
-"La @E tiene un nombre de fichero no único.\n"
+"La @E tiene un nombre de fichero no único.\n"
 "Se cambia el nombre a %s"
 
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
 "\n"
 msgstr ""
-"Se encontró una @e duplicada '%Dn'.\n"
+"Se encontró una @e duplicada '%Dn'.\n"
 "\tSe marca %p (%i) para ser reconstruido.\n"
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
-#, fuzzy
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
-msgstr "El i_fsize @F %N, @s cero.\n"
+msgstr "El i_blocks_hi @F %N, @s cero.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+#, fuzzy
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "El @d del @i %i (%p) está desconectado\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1293
 msgid "Pass 3: Checking @d connectivity\n"
-msgstr "Paso 3: Se revisa la conectividad del @d.\n"
+msgstr "Paso 3: Revisando la conectividad de directorios\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
 msgstr "El @r no ha sido reservado.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
 msgstr "No hay espacio en el @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
-msgstr "El @d del @i %i (%p) está desconectado\n"
+msgstr "El @d del @i %i (%p) está desconectado\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
-msgstr "No se encontró /@l.  "
+msgstr "No se encontró /@l.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "'..' en %Q (i) es %P (%j) y debería ser %q (%d).\n"
+msgstr "'..' en %Q (i) es %P (%j) y debería ser %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr "El /@l no existe o está dañado.  No se puede reconectar.\n"
+msgstr "El /@l no existe o está dañado.  No se puede reconectar.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "No se puede expandir /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "No se puede reconectar %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Error mientras se intentaba encontrar /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m mientras se intentaba crear el @d /@l.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m cuando se intentaba crear el @d /@l.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m mientras se creaba un nuevo @b de @d.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr "ext2fs_write_dir_block: %m mientras se escribía el @b de @d para /@l\n"
+msgstr "ext2fs_write_dir_block: %m mientras se escribía el @b de @d para /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Error mientras se ajustaba la cuenta del @i en el @i %i\n"
 
-# el padre
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2200,11 +2286,11 @@
 "\n"
 
 # el padre
-# Perdón, no entiendo, se intenta arreglar AL padre, no EL padre de un directorio.
+# Perdón, no entiendo, se intenta arreglar AL padre, no EL padre de un directorio.
 # Hay alguna regla que se me escape? mm
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2215,180 +2301,190 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
-msgstr "Error al crear el @d raíz (%s): %m\n"
+msgstr "Error al crear el @d raíz (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Error al crear el @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 msgid "@r is not a @d; aborting.\n"
-msgstr "El @r no es un @d; se finaliza la operación.\n"
+msgstr "El @r no es un @d; se finaliza la operación.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
 msgstr "No se puede proceder sin un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "El /@l no es un @d (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
-msgstr "Paso 3A: optimizando directorios\n"
+msgstr "Paso 3A: Optimizando directorios\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Falla al crear el iterador dirs_to_hash: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Fallo al optimizar el directorio %q (%d): %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "Optimizando directorios: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
-msgstr "Paso 4: revisando las cuentas de referencia\n"
+msgstr "Paso 4: Revisando las cuentas de referencia\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, c-format
 msgid "@u @z @i %i.  "
-msgstr "@i %i que tiene @z está @u.  "
+msgstr "@i %i que tiene @z está @u.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
-msgstr "el @i %i está @u\n"
+msgstr "el @i %i está @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "La cuenta de referencia del @i %i es %Il, y @s %N.  "
 
-# WARNING -> ATENCIÓN
-# Sobra el artículo. -> ERROR DE PROGRAMACIÓN EN E2FSCK
-# TU -> USTED
-# FILESYSTEM -> SISTEMA DE FICHEROS
-# ok. mm
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
-"¡ATENCIÓN: ERROR DE PROGRAMACIÓN EN E2FSCK!\n"
-"\tO ALGÚN TARADO (USTED) ESTÁ REVISANDO UN SISTEMA DE FICHEROS MONTADO "
+"¡ATENCIÓN: ERROR DE PROGRAMACIÓN EN E2FSCK!\n"
+"\tO ALGÚN TARADO (USTED) ESTÁ REVISANDO UN SISTEMA DE FICHEROS MONTADO "
 "(VIVO).\n"
-"inode_link_info[%i] es %N, inode.i_links_count es %Il.  ¡Y deberían ser el "
+"inode_link_info[%i] es %N, inode.i_links_count es %Il.  ¡Y deberían ser el "
 "mismo!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 msgid "Pass 5: Checking @g summary information\n"
-msgstr "Paso 5: Se revisa el resumen de información del @g\n"
+msgstr "Paso 5: Revisando el resumen de información de grupos\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 msgid "Padding at end of @i @B is not set. "
-msgstr "No está puesto el relleno al final del @B del @i. "
+msgstr "No está puesto el relleno al final del @B del @i. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @b @B is not set. "
-msgstr "No está puesto el relleno al final del @B del @b. "
+msgstr "No está puesto el relleno al final del @B del @b. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr "Diferencias del @B del @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr "Diferencias del @B del @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
-"La cuenta de nodos i libres es incorrecta para el @g #%g (%i, contados=%j).\n"
+"La cuenta de nodos-i libres es incorrecta para el @g #%g (%i, contados=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 "La cuenta de directorios es incorrecta para @g #%g (%i, contados=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
-msgstr "La cuenta de nodos i libres es incorrecta (%i, contados=%j).\n"
+msgstr "La cuenta de nodos-i libres es incorrecta (%i, contados=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 "La cuenta de @bs libres es incorrecta para el @g #%g (%b, contados=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "La cuenta de @bs libres es incorrecta (%b, contados=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1556
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
-"ERROR DE PROGRAMACIÓN: el @f (#%N) los puntos finales del %B (%b, %c) no "
+"ERROR DE PROGRAMACIÓN: el @f (#%N) los puntos finales del %B (%b, %c) no "
 "coinciden con los puntos finales del @B calculados (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Error interno: el final del bitmap no tiene sentido (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Error al copiar el reemplazo del @i @B: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Error al copiar el reemplazo del @b @B: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Recrear"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
-msgstr "¡Código de error no previsto (0x%x)!\n"
+msgstr "¡Código de error no previsto (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "SE IGNORA"
 
@@ -2400,90 +2496,49 @@
 #: e2fsck/scantest.c:100
 #, c-format
 msgid "size of inode=%d\n"
-msgstr "tamaño del nodo-i=%d\n"
+msgstr "tamaño del nodo-i=%d\n"
 
 #: e2fsck/scantest.c:121
 msgid "while starting inode scan"
-msgstr "mientras se comenzaba a explorar el nodo-i"
+msgstr "mientras se comenzaba a explorar los nodos-i"
 
 #: e2fsck/scantest.c:132
 msgid "while doing inode scan"
-msgstr "mientras se exploraba el nodo-i"
+msgstr "mientras se exploraba los nodos-i"
 
 #: e2fsck/super.c:187
 #, c-format
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "mientras se llamaba a ext2fs_block_iterate para el nodo-i %d"
 
-#: e2fsck/super.c:210
-#, fuzzy, c-format
+#: e2fsck/super.c:209
+#, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "mientras se llamaba a ext2fs_adjust_ea_refcount para el nodo-i %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Truncando"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Borrando"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "mientras se llamaba a ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "mientras se llamaba a la función iteradora"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "mientras se reservaba al búfer del nodo-i"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "mientras se leía la tabla de nodos i (grupo %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "mientras se escribía la tabla de nodos i (grupo %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Paso 0: haciendo la trasposición de bytes del sistema de ficheros\n"
-
-#: e2fsck/swapfs.c:233
-#, c-format
+#: e2fsck/unix.c:76
+#, fuzzy, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: el sistema de ficheros debe ser revisado desde cero utilizando\n"
-"fsck y no debe estar montado cuando se intente hacer una trasposición de "
-"bytes en él.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Trasposición de bytes"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Modo de empleo: %s [-panyrcdfvstDFSV] [-b superbloque] [-B tamañodelbloque]\n"
-"\t\t[-I bloques_del_búfer_del_nodo-i] [-P tamaño_del_proceso_del_nodo-i]\n"
-"\t\t[-l|-L fichero_de_bloques_dañados] [-C fd] [-j fichero-de-transacciones-"
+"Modo de empleo: %s [-panyrcdfvstDFSV] [-b superbloque] [-B tamañodelbloque]\n"
+"\t\t[-I bloques_del_búfer_del_nodo-i] [-P tamaño_del_proceso_del_nodo-i]\n"
+"\t\t[-l|-L fichero_de_bloques_dañados] [-C fd] [-j fichero-de-transacciones-"
 "externo]\n"
 "\t\t[-E opciones-extendidas] dispositivo\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2497,15 +2552,15 @@
 msgstr ""
 "\n"
 "Ayuda de emergencia:\n"
-" -p                   Reparación automática (sin hacer preguntas)\n"
+" -p                   Reparación automática (sin hacer preguntas)\n"
 " -n                   No se hacen cambios al sistema de ficheros\n"
 " -y                   Contestar \"si\" a todas las preguntas\n"
-" -c                   Busca los bloques dañados y los agrega a la\n"
-"                      lista de bloques dañados\n"
-" -f                   Fuerza la revisión aún si el sistema de archivos\n"
-"                      está etiquetado como limpio\n"
+" -c                   Busca los bloques dañados y los agrega a la\n"
+"                      lista de bloques dañados\n"
+" -f                   Fuerza la revisión aún si el sistema de ficheros\n"
+"                      está etiquetado como limpio\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2515,46 +2570,50 @@
 " -l bad_blocks_file   Add to badblocks list\n"
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
-" -v                      Genera más mensajes de diagnóstico\n"
+" -v                      Genera más mensajes de diagnóstico\n"
 " -b superbloque          Utiliza el superbloque alternativo\n"
-" -B tamañodelbloque      Fuerza el tamañodelbloque cuando busca "
+" -B tamañodelbloque      Fuerza el tamañodelbloque cuando busca "
 "al                         superbloque\n"
 " -j fichero-de-transacciones-externo \n"
-"                         Indica el lugar en donde está el fichero\n"
+"                         Indica el lugar en donde está el fichero\n"
 "                         de transacciones externo\n"
-" -l fichero_de_bloques_dañados \n"
-"                         Agrega a la lista de bloques dañados\n"
-" -L fichero_de_bloques_dañados \n"
-"                         Pone la lista de bloques dañados\n"
+" -l fichero_de_bloques_dañados \n"
+"                         Agrega a la lista de bloques dañados\n"
+" -L fichero_de_bloques_dañados \n"
+"                         Pone la lista de bloques dañados\n"
 
-#: e2fsck/unix.c:121
-#, fuzzy, c-format
+#: e2fsck/unix.c:132
+#, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
-msgstr "%s: ficheros %d/%d (%0d.%d%% no contiguos), bloques %d/%d\n"
+msgstr "%s: %u/%u ficheros (%0d.%d%% no contiguos), %u/%u bloques\n"
 
-#: e2fsck/unix.c:133
-#, fuzzy, c-format
+#: e2fsck/unix.c:150
+#, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         # de nodos i con bloques ind/dind/tind: %d/%d/%d\n"
+msgstr "         # de nodos-i con bloques ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr ""
+
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
-msgstr "mientras se determinaba si %s está montado."
+msgstr "mientras se determinaba si %s está montado."
 
-# Atención
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
-msgstr "¡Atención! %s está montado.\n"
+msgstr "¡Atención! %s está montado.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
-msgstr "%s está montado.  "
+msgstr "%s está montado.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2562,10 +2621,7 @@
 "No se puede continuar, se finaliza.\n"
 "\n"
 
-# ATENCIÓN
-# Running -> Ejecutar
-# filesystem -> sistema de ficheros
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2576,296 +2632,281 @@
 msgstr ""
 "\n"
 "\n"
-"\a\a\a\a¡¡ATENCIÓN!!  Correr e2fsck en un sistema de ficheros montado\n"
-"puede causar GRAVES daños al sistema de archivos.\a\a\a\n"
+"\a\a\a\a¡¡ATENCIÓN!!  Ejecutar e2fsck en un sistema de ficheros montado\n"
+"puede causar GRAVES daños al sistema de ficheros.\a\a\a\n"
+"\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
-msgstr "¿De verdad quiere continuar?"
+msgstr "¿De verdad quiere continuar?"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
-msgstr "revisión terminada.\n"
+msgstr "revisión terminada.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " contiene un sistema de ficheros con errores"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " no fue desmontado limpiamente"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr ""
+" las características del superbloque primario difieren de las de la copia de "
+"seguridad"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " ha sido montado %u veces sin ser revisado"
 
-# dias -> días
-#: e2fsck/unix.c:295
-#, c-format
-msgid " has gone %u days without being checked"
-msgstr " ya lleva %u dias sin ser revisado"
-
-#: e2fsck/unix.c:304
-msgid ", check forced.\n"
-msgstr ", se fuerza la revisión.\n"
-
-#: e2fsck/unix.c:307
-#, fuzzy, c-format
-msgid "%s: clean, %u/%u files, %u/%u blocks"
-msgstr "%s: limpio, ficheros %d/%d, bloques %d/%d"
-
-# no veo el imperativo por ningún lado.
-# Yo pondría simplemente "revisión después del siguiente montaje".
 #: e2fsck/unix.c:324
 #, fuzzy
+msgid " has filesystem last checked time in the future"
+msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
+
+#: e2fsck/unix.c:330
+#, c-format
+msgid " has gone %u days without being checked"
+msgstr " ya lleva %u días sin ser revisado"
+
+#: e2fsck/unix.c:339
+msgid ", check forced.\n"
+msgstr ", se fuerza la revisión.\n"
+
+#: e2fsck/unix.c:342
+#, c-format
+msgid "%s: clean, %u/%u files, %u/%u blocks"
+msgstr "%s: limpio, %u/%u ficheros, %u/%u bloques"
+
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
-msgstr " (revísese después del próximo montado)"
+msgstr " (comprobación aplazada; con baterías)"
 
-# no veo el imperativo por ningún lado.
-# Yo pondría simplemente "revisión después del siguiente montaje".
-#: e2fsck/unix.c:327
+# O "revisión después del siguiente montaje".
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
-msgstr " (revísese después del próximo montado)"
+msgstr " (comprobación en el siguiente montaje)"
 
-# Lo mismo.
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
-msgstr " (revísese en %ld montados)"
+msgstr " (comprobación después de %ld montajes)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERROR: no se puede abrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
-msgstr "Versión de EA no válida.\n"
+msgstr "Versión de EA no válida.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
-msgstr "Se desconoce esa opción extendida: %s\n"
+msgstr "Opción extendida desconocida: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Error de sintaxis en el fichero de configuración de e2fsck (%s, línea #%d)\n"
+"\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Error al validar el descriptor de ficheros %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
-msgstr "Información de consistencia no válida en el descriptor de ficheros"
+msgstr "Información de consistencia no válida en el descriptor de ficheros"
 
-# Lo mismo con lo de la forma pasiva.
-# -> Sólo se puede especificar una de las opciones [...]
-#: e2fsck/unix.c:655
-#, fuzzy
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
-msgstr "Sólo una de las opciones -p/-a, -n o -y puede ser especificada."
+msgstr "Sólo se puede especificar una de las opciones -p/-a, -n o -y."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
-msgstr "La opción -t no está implementada en esta versión de e2fsck.\n"
+msgstr "La opción -t no está implementada en esta versión de e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-"Los sistemas con trasposición de bytes no están compilados en esta versión "
-"de e2fsck\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "No es posible resolver '%s'"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr ""
-"Las opciones incompatibles no están permitidas cuando se hace trasposición "
-"de bytes.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr "Las opciones -c y -l/-L no pueden ser utilizadas simultáneamente.\n"
+msgstr "Las opciones -c y -l/-L no pueden ser utilizadas simultáneamente.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
+"E2FSCK_JBD_DEBUG \"%s\" no es un entero\n"
+"\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
 "Invalid non-numeric argument to -%c (\"%s\")\n"
 "\n"
 msgstr ""
+"\n"
+"Argumento no numérico inválido para -%c (\"%s\")\n"
+"\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
-msgstr "¡Error: la versión de la biblioteca ext2fs está caduca!\n"
+msgstr "¡Error: la versión de la biblioteca ext2fs está caduca!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "mientras se intentaba inicializar el programa"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tAl emplear %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
 msgstr "se necesita una terminal para hacer las reparaciones interactivas"
 
-#: e2fsck/unix.c:983
-#, fuzzy, c-format
+#: e2fsck/unix.c:1010
+#, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s está intentando respaldar los bloques...\n"
+msgstr "%s: %s intentando los bloques de respaldo...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
-msgstr ""
+msgstr "Superbloque es inválido,"
 
-#: e2fsck/unix.c:986
-msgid "Group descriptors look bad..."
-msgstr "Los descriptores de los grupos parecen dañados..."
-
-# esta versión (el "esta" no necesita tilde).
 #: e2fsck/unix.c:1013
+msgid "Group descriptors look bad..."
+msgstr "Los descriptores de los grupos parecen dañados..."
+
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
 "\n"
 msgstr ""
-"La versión del sistema de ficheros es, en apariencia, muy superior para "
-"ésta\n"
-"versión de e2fsck. (O el superbloque del sistema de archivos está dañado)\n"
+"La versión del sistema de ficheros es, en apariencia, muy superior para "
+"esta\n"
+"versión de e2fsck. (O el superbloque del sistema de ficheros está dañado)\n"
+"\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
-msgstr "¿Esta podría ser una partición de longitud cero?\n"
+msgstr "¿Esta podría ser una partición de longitud cero?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Se debe tener acceso %s al sistema de ficheros o ser root\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
-msgstr "¿Es posible que no exista o que sea un dispositivo de intercambio?\n"
+msgstr "¿Es posible que no exista o que sea un dispositivo de intercambio?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
+"¿Sistema de ficheros montado o abierto en exclusiva por otro programa?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
-"El disco está protegido contra escritura; utilice la opción -n para\n"
-"hacer una revisión de sólo lectura al dispositivo.\n"
+"El disco está protegido contra escritura; utilice la opción -n para\n"
+"hacer una revisión de sólo lectura al dispositivo.\n"
 
-# más moderna.
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
-msgstr "¡Consiga una versión más nueva de e2fsck!"
+msgstr "¡Consiga una versión más moderna de e2fsck!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "mientras se revisaba el fichero de transacciones ext3 para %s"
 
-# Atención
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
-"Atención: se omitirá la recuperación del fichero de transacciones debido a "
-"que se está haciendo una revisión de sólo lectura del sistema de ficheros.\n"
+"Atención: se omitirá la recuperación del fichero de transacciones debido a "
+"que se está haciendo una revisión de sólo lectura del sistema de ficheros.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1171
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "no es posible poner las banderas de superbloque en %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1177
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "mientras se recuperaba el fichero de transacciones ext3 de %s"
 
-#: e2fsck/unix.c:1171
-#, fuzzy, c-format
+#: e2fsck/unix.c:1201
+#, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "El @h %i tiene una versión de hash no implementada (%N)\n"
+msgstr "%s tiene características no soportadas:"
 
-# Atención
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
-msgstr "Atención: el soporte a la compresión es experimental.\n"
+msgstr "Atención: el soporte a la compresión es experimental.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
-"E2fsck no está compilado con soporte a ÁRBOLES-H,\n"
-"\tpero el sistema de ficheros %s tiene directorios con ÁRBOLES-H.\n"
+"E2fsck no está compilado con soporte a ÁRBOLES-H,\n"
+"\tpero el sistema de ficheros %s tiene directorios con ÁRBOLES-H.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: el orden de los bytes del sistema de ficheros ya se normalizó.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
-msgstr "mientras se leían los bloques dañados del nodo-i"
+msgstr "mientras se leían los bloques dañados del nodo-i"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
-msgstr "Esto no se se ve muy bien, pero se intentará continuar...\n"
+msgstr "Esto no se se ve muy bien, pero se intentará continuar...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
-msgstr ""
+msgstr "No se puede determinar el tamaño del fichero de transacciones"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Creando el fichero de transacciones (%d bloques): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2873,37 +2914,40 @@
 "\n"
 "\tmientras se intentaba crear el fichero de transacciones"
 
-#: e2fsck/unix.c:1302
-#, fuzzy, c-format
+#: e2fsck/unix.c:1317
+#, c-format
 msgid " Done.\n"
-msgstr "hecho\n"
+msgstr " Hecho.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
+"\n"
+"*** el fichero de transacciones se ha creado de nuevo ***\n"
+"*** el sistema de ficheros vuelve a ser ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Se reinicia e2fsck desde el principio...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "mientras se reajusta el contexto"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: se cancela e2fsck.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
 msgstr "finalizado"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -2912,13 +2956,12 @@
 "\n"
 "%s: ***** EL SISTEMA DE FICHEROS FUE MODIFICADO *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** REINICIE LINUX *****\n"
 
-# ATENCIÓN
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
@@ -2926,102 +2969,99 @@
 "\n"
 msgstr ""
 "\n"
-"%s: ********** ATENCIÓN: El sistema de ficheros todavía tiene errores "
+"%s: ********** ATENCIÓN: El sistema de ficheros todavía tiene errores "
 "***********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1400
+#, fuzzy
+msgid "while setting block group checksum info"
+msgstr "mientras se ponía el nodo-i de bloques dañados"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "sS"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<s>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (s/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
-msgstr "¡cancelado!\n"
+msgstr "¡cancelado!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "si\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "no\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
 "\n"
 msgstr ""
-"¿%s? no\n"
+"¿%s? no\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
-"¿%s? si\n"
+"¿%s? si\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "si"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: bloque(s) ilegal(es) de mapas de bits para %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "leyendo los mapas de bits del nodo-i y del bloque"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "mientras se intentaban leer los mapas de bits para %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
+#: e2fsck/util.c:243
+#, fuzzy
+msgid "writing block and inode bitmaps"
 msgstr "escribiendo los mapas de bits del bloque"
 
-#: e2fsck/util.c:242
-#, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "mientras se reintentaba escribir los mapas de bits del bloque para %s"
-
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "escribiendo los mapas de bits de los nodos i"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
+#: e2fsck/util.c:248
+#, fuzzy, c-format
+msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
-"mientras se reintentaba escribir los mapas de bits de los nodos i para %s"
+"mientras se reintentaba escribir los mapas de bits de los nodos-i para %s"
 
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -3034,319 +3074,334 @@
 "%s: INCONSISTENCIA INESPERADA; EJECUTE fsck MANUALMENTE.\n"
 "(i.e., sin las opciones -a o -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:336
 #, c-format
 msgid "Memory used: %dk/%dk (%dk/%dk), "
 msgstr "Memoria utilizada: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:340
 #, c-format
 msgid "Memory used: %d, "
 msgstr "Memoria utilizada: %d, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "fecha: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "tiempo transcurrido: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
-msgstr "mientras se leía el nodo-i %ld en %s"
+msgstr "mientras se leía el nodo-i %ld en %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
-msgstr "mientras se escribía el nodo-i %ld en %s"
+msgstr "mientras se escribía el nodo-i %ld en %s"
 
-#: misc/badblocks.c:61
-#, fuzzy
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "mientras se reservaba el búfer relleno con ceros"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
-msgstr "se finaliza                                 \n"
+msgstr "hecho                               \n"
 
-#: misc/badblocks.c:80
-#, c-format
+#: misc/badblocks.c:89
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
-"Modo de empleo: %s [-b tamaño_del_bloque] [-i fichero_de_entrada] [-svwnf]\n"
-" [-c bloques_a_la_vez] [-p núm_de_pasos] [-t patrón_de_prueba [-t "
-"patrón_de_prueba \n"
+"Modo de empleo: %s [-b tamaño_del_bloque] [-i fichero_de_entrada] [-svwnf]\n"
+" [-c bloques_a_la_vez] [-p núm_de_pasos] [-t patrón_de_prueba [-t "
+"patrón_de_prueba \n"
 " [...]]]\n"
 " dispositivo [bloque_final [bloque_inicial]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
+"%s: Las opciones -n y -w se excluyen mutuamente.\n"
+"\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
-msgstr "Probando con un patrón aleatorio: "
+msgstr "Probando con un patrón aleatorio: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
-msgstr "Probando con el patrón 0x"
+msgstr "Probando con el patrón 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
-msgstr "durante la búsqueda"
+msgstr "durante la búsqueda"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
-msgstr "Valor extraño (%ld) en do_read\n"
+msgstr "Valor extraño (%ld) en do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
 msgstr "durante el ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
-msgstr "mientras se comenzaba la iteración en la lista de bloques dañados"
+msgstr "mientras se comenzaba la iteración en la lista de bloques dañados"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
-msgstr "mientras se reservaban los búferes"
+msgstr "mientras se reservaban los búferes"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Revisando los bloques del %lu al %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
-msgstr "Revisando los bloques dañados en modo de sólo lectura\n"
+msgstr "Revisando los bloques dañados en modo de sólo lectura\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
-msgstr "Se están revisando los bloques dañados (prueba de sólo lectura):"
+msgstr "Se están revisando los bloques dañados (prueba de sólo lectura): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr ""
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
-msgstr "Se están revisando los bloques dañados en modo de lectura-escritura\n"
+msgstr "Se están revisando los bloques dañados en modo de lectura-escritura\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Del bloque %lu al %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
 msgstr "Leyendo y comparando: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
-"Revisando los bloques dañados en modo lectura-escritura no destructivo\n"
+"Revisando los bloques dañados en modo lectura-escritura no destructivo\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
-"Revisando los bloques dañados (prueba de lectura-escritura no destructiva)\n"
+"Revisando los bloques dañados (prueba de lectura-escritura no destructiva)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
 msgstr ""
 "\n"
-"Se interceptó una interrupción, se limpia todo\n"
+"Se interceptó una interrupción, se limpia todo\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "durante la prueba de escritura de datos del bloque %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
-msgstr "%s está montado; "
+msgstr "%s está montado; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:923
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
-"los bloques dañados se fuerzan de todas formas.  Se cree que /etc/mtab esté "
+"los bloques dañados se fuerzan de todas formas.  Se cree que /etc/mtab esté "
 "incorrecto.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:928
 msgid "it's not safe to run badblocks!\n"
-msgstr "¡No es seguro ejecutar los bloques dañados!\n"
+msgstr "¡No es seguro ejecutar los bloques dañados!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:933 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
-msgstr "%s en apariencia está siendo utilizado por el sistema; "
+msgstr "%s está aparentemente en uso por el sistema; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:936
 msgid "badblocks forced anyway.\n"
-msgstr "los bloques dañados se fuerzan de todas formas.\n"
+msgstr "los bloques dañados se fuerzan de todas formas.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:956
+#, fuzzy, c-format
+msgid "invalid %s - %s"
+msgstr "tamaño del bloque inválido - %s"
+
+#: misc/badblocks.c:1015
 #, c-format
 msgid "bad block size - %s"
-msgstr "tamaño de los bloques dañados - %s"
+msgstr "tamaño de los bloques dañados - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
-msgstr "no se puede reservar memoria para el patrón_de_prueba - %s"
+msgstr "no se puede reservar memoria para el patrón_de_prueba - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "patrón_de_prueba no válido: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
-"Sólo un máximo de un patrón_de_prueba puede ser especificado en modo sólo "
+"Sólo un máximo de un patrón_de_prueba puede ser especificado en modo sólo "
 "lectura"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
-msgstr "El patrón_de_prueba aleatorio no está permitido en modo sólo lectura"
+msgstr "El patrón_de_prueba aleatorio no está permitido en modo sólo lectura"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
-"No se puede determinar el tamaño del dispositivo; se debe especificar\n"
+"No se puede determinar el tamaño del dispositivo; se debe especificar\n"
 "de forma manual\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
-msgstr "mientras se intentaba determinar el tamaño del dispositivo"
+msgstr "mientras se intentaba determinar el tamaño del dispositivo"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "cuenta de bloques no válida - %s"
+#: misc/badblocks.c:1128
+#, fuzzy
+msgid "last block"
+msgstr "Reubicando bloques"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "bloque inicial @n - %s"
+#: misc/badblocks.c:1134
+#, fuzzy
+msgid "first block"
+msgstr "Primer bloque de datos=%u\n"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1137
 #, fuzzy, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "bloque inicial @n - %s"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "bloque inicial no válido (%d): debe ser menos que %lu"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 msgid "while creating in-memory bad blocks list"
-msgstr "cuando se creaba la lista de bloques dañados en memoria"
+msgstr "cuando se creaba la lista de bloques dañados en memoria"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 msgid "while adding to in-memory bad block list"
-msgstr "cuando se añadía a la lista de bloques dañados en memoria"
+msgstr "cuando se añadía a la lista de bloques dañados en memoria"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
-msgstr "Paso terminado, se encontraron %u bloques dañados.\n"
+msgstr "Paso terminado, se encontraron %u bloques dañados.\n"
 
-#: misc/chattr.c:84
-#, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "modo de empleo: %s [-RV] [-+=AacDdijsSu] [-v versión] ficheros...\n"
+#: misc/chattr.c:85
+#, fuzzy, c-format
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
+msgstr "modo de empleo: %s [-RV] [-+=AacDdijsSu] [-v versión] ficheros...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
-msgstr "versión incorrecta - %s\n"
+msgstr "versión incorrecta - %s\n"
 
-# No me gusta esto
-# A ver si te gusta ahora. mm
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
 msgstr "mientras se intentaba ver el estado del fichero %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
-msgstr "Las banderas de %s están puestas como "
+msgstr "Las banderas de %s están puestas como "
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
 msgstr "mientras se estaban leyendo las banderas en %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
-msgstr "mientras se ponían las banderas en %s"
+msgstr "mientras se ponían las banderas en %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
-msgstr "La versión de %s está puesta como %lu\n"
+msgstr "La versión de %s está puesta como %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
-msgstr "mientras se estaba poniendo la versión en %s"
+msgstr "mientras se estaba poniendo la versión en %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "No se puede reservar la variable de ruta en chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
 msgstr "= es incompatible con - y +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
 msgstr "Se debe usar '-v', =, - o +\n"
 
-# súperbloque -> superbloque
-# ok. mm
 #: misc/dumpe2fs.c:53
 #, c-format
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr ""
-"Modo de empleo: %s [-bfhixV] [-ob superbloque] [-oB tamañodelbloque] "
+"Modo de empleo: %s [-bfhixV] [-ob superbloque] [-oB tamañodelbloque] "
 "dispositivo\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Grupo %lu: (Bloques "
 
-# superbloque
-# ok. mm
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
-msgstr " %s superbloque en "
+msgstr "  %s superbloque en "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primario"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Respaldo"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
-msgstr ", descriptores de Grupo en "
+msgstr ", descriptores de grupo en "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3355,74 +3410,78 @@
 "\n"
 "  Se reservaron los bloques GDT en "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
-msgstr " Descriptor de Grupo en "
+msgstr " Descriptor de grupo en "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
-msgstr " Mapa de bits de bloque en "
+msgstr "  Mapa de bits de bloque en "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", mapa de bits de nodo-i en "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
 msgstr ""
 "\n"
-" tabla de nodos i en "
+"  tabla de nodos-i en "
 
-#: misc/dumpe2fs.c:207
-#, c-format
+#: misc/dumpe2fs.c:217
+#, fuzzy, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d bloques libres, %d nodos i libres, % directorios\n"
+"  %d bloques libres, %d nodos-i libres, % directorios\n"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Bloques libres: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
-msgstr " Nodos i libres: "
+msgstr "  Nodos-i libres: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
-msgstr "mientras se imprimía la lista de bloques dañados"
+msgstr "mientras se imprimía la lista de bloques dañados"
 
-#: misc/dumpe2fs.c:252
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:270
+#, c-format
 msgid "Bad blocks: %u"
-msgstr "Bloques dañados: %d"
+msgstr "Bloques dañados: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
-msgstr "mientras se leía el nodo-i del fichero de transacciones"
+msgstr "mientras se leía el nodo-i del fichero de transacciones"
 
-#: misc/dumpe2fs.c:277
-#, fuzzy
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
-msgstr "Usuarios del fichero de transacciones:           %s\n"
+msgstr "Tamaño de fichero de transacciones:  "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
-msgstr "mientras se leía el superbloque del fichero de transacciones"
+msgstr "mientras se leía el superbloque del fichero de transacciones"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr ""
-"No se pueden encontrar los números mágicos del superbloque del fichero de "
+"No se pueden encontrar los números mágicos del superbloque del fichero de "
 "transacciones"
 
-#: misc/dumpe2fs.c:308
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:331
+#, c-format
 msgid ""
 "\n"
 "Journal block size:       %u\n"
@@ -3433,36 +3492,36 @@
 "Journal number of users:  %u\n"
 msgstr ""
 "\n"
-"Tamaño del bloque del fichero de transacciones:  %d\n"
-"Longitud del fichero de transacciones:           %d\n"
-"Primer bloque del fichero de transacciones:      %d\n"
+"Tamaño del bloque del fichero de transacciones:  %u\n"
+"Longitud del fichero de transacciones:           %u\n"
+"Primer bloque del fichero de transacciones:      %u\n"
 "Secuencia del fichero de transacciones:          0x%08x\n"
-"Inicio del fichero de transacciones:             %d\n"
-"Número de usuarios del fichero de transacciones: %d\n"
+"Inicio del fichero de transacciones:             %u\n"
+"Número de usuarios del fichero de transacciones: %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Usuarios del fichero de transacciones:           %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
-"¡No se puede reservar memoria para analizar sintácticamente las opciones!\n"
+"¡No se puede reservar memoria para analizar sintácticamente las opciones!\n"
 
-#: misc/dumpe2fs.c:363
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:386
+#, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Parámetro de superbloque no válido: %s\n"
 
-#: misc/dumpe2fs.c:378
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:401
+#, c-format
 msgid "Invalid blocksize parameter: %s\n"
-msgstr "Parámetro de variación de tamaño no válido: %s\n"
+msgstr "Parámetro de tamaño del bloque no válido: %s\n"
 
-#: misc/dumpe2fs.c:389
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:412
+#, c-format
 msgid ""
 "\n"
 "Bad extended option(s) specified: %s\n"
@@ -3475,33 +3534,28 @@
 "\tblocksize=<blocksize>\n"
 msgstr ""
 "\n"
-"Las opciones especificadas son incorrectas.\n"
+"Las opciones especificadas son incorrectas: %s\n"
 "\n"
-"Las opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
+"Opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
 "\targumento que se ajusta con un signo de igual ('=').\n"
 "\n"
-"Las opciones extendidas válidas son:\n"
-"\tstride=<longitud de la zancada en bloques>\n"
-"\tresize=<máximo de variación de tamaño en bloques>\n"
-"\n"
+"Las opciones extendidas válidas son:\n"
+"\tsuperblock=<número_del_superbloque>\n"
+"\tblocksize=<tamaño_del_bloque>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tSe emplea %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
-"No se pudo encontrar un superbloque válido para el sistema de ficheros.\n"
+"No se pudo encontrar un superbloque válido para el sistema de ficheros.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Nota: este es un sistema de archivos con trasposición de bytes\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
@@ -3510,35 +3564,35 @@
 "\n"
 "%s: %s: error al leer los mapas de bits: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Modo de empleo: %s [-rsI] dispositivo fichero_de_imagen\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
-msgstr "No se puede reservar el búfer del encabezado\n"
+msgstr "No se puede reservar el búfer del encabezado\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
-msgstr "se escribió muy poco (sólo %d bytes) para el encabezado de la imagen"
+msgstr "se escribió muy poco (sólo %d bytes) para el encabezado de la imagen"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
-msgstr "mientras se escribía el superbloque"
+msgstr "mientras se escribía el superbloque"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
-msgstr "mientras se escribía la tabla de nodos i"
+msgstr "mientras se escribía la tabla de nodos-i"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
-msgstr "mientras se escribía el mapa de bits del bloque"
+msgstr "mientras se escribía el mapa de bits del bloque"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
-msgstr "mientras se escribía el mapa de bits del nodo-i"
+msgstr "mientras se escribía el mapa de bits del nodo-i"
 
 #: misc/e2label.c:57
 #, c-format
@@ -3560,10 +3614,10 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: no es un sistema de ficheros ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
-msgstr "Atención: la etiqueta es muy larga, se trunca.\n"
+msgstr "Atención: la etiqueta es muy larga, se trunca.\n"
 
 #: misc/e2label.c:99
 #, c-format
@@ -3575,70 +3629,117 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: error al escribir el superbloque\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Modo de empleo: e2label dispositivo [nuevabandera]\n"
 
-# ATENCIÓN
-# ok. mm
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr ""
+
+#: misc/e2undo.c:52
+#, fuzzy
+msgid "Failed to read the file system data \n"
+msgstr "Falla al crear el iterador dirs_to_hash: %m"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr ""
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+
+#: misc/e2undo.c:161
+#, fuzzy, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "mientras se abría %s"
+
+#: misc/e2undo.c:167
+#, fuzzy, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "mientras se determinaba si %s está montado."
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+
+#: misc/e2undo.c:182
+#, fuzzy, c-format
+msgid "Failed to open %s\n"
+msgstr "mientras se intentaba abrir %s"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr ""
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
-msgstr "ATENCIÓN: no se puede abrir %s: %s\n"
+msgstr "ATENCIÓN: no se puede abrir %s: %s\n"
 
-# ATENCIÓN
-# ok. mm
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
-msgstr "ATENCIÓN: formato incorrecto en la línea %d de %s\n"
+msgstr "ATENCIÓN: formato incorrecto en la línea %d de %s\n"
 
-# ATENCIÓN
-# ok. mm
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
 "\tshould fix your /etc/fstab file as soon as you can.\n"
 "\n"
 msgstr ""
-"\a\a\aATENCIÓN: El /etc/fstab no contiene el campo passno fsck.\n"
-"Se intentará hacer un truco, pero se debería arreglar el \n"
+"\a\a\aATENCIÓN: El /etc/fstab no contiene el campo passno fsck.\n"
+"Se intentará hacer un truco, pero se debería arreglar el \n"
 "fichero /etc/fstab tan pronto como sea posible.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
-msgstr "fsck: %s: no se encontró\n"
+msgstr "fsck: %s: no se encontró\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
-msgstr "%s: espera: ¿¡¿No hay más procesos hijos?!?\n"
+msgstr "%s: espera: ¿¡¿No hay más procesos hijos?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr "Atención... %s para el dispositivo %s que finalizó con la señal %d.\n"
+msgstr "Atención... %s para el dispositivo %s que finalizó con la señal %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
-msgstr "%s %s: el estatus es %x, y nunca debió haber sucedido.\n"
+msgstr "%s %s: el estatus es %x, y nunca debió haber sucedido.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Se finaliza con %s (estado de salida %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Error %d mientras se ejecutaba fsck. %s para %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3646,45 +3747,44 @@
 "Puede ser que todos o ninguno de los tipos de sistemas de ficheros que se \n"
 "pasaron con -t deban estar con el prefijo 'no' o '!0.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "No se puede reservar memoria para los tipos de sistema de ficheros\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: no se puede verificar %s: fsck.%s no se encuentra\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
 msgstr "Revisando todos los sistemas de ficheros.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--esperando-- (paso %d)\n"
 
-#: misc/fsck.c:1066
-#, fuzzy
+#: misc/fsck.c:1081
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
-"Modo de empleo: fsck [-ANPRTV] [ -C [ fd ] ] [-t tipodefs] [opciones-fs] "
-"[sistficheros ...]\n"
+"Modo de empleo:  fsck [-AMNPRTV] [ -C [ fd ] ] [-t tipo_de_sf]\n"
+"                      [opciones_de_sf] [sistema_de_ficheros ...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: demasiados dispositivos\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: demasiados argumentos\n"
@@ -3697,276 +3797,264 @@
 #: misc/lsattr.c:83
 #, c-format
 msgid "While reading flags on %s"
-msgstr "Mientras se leían las banderas en %s"
+msgstr "Mientras se leían las banderas en %s"
 
 #: misc/lsattr.c:90
 #, c-format
 msgid "While reading version on %s"
-msgstr "Mientras se leía la versión en %s"
+msgstr "Mientras se leía la versión en %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
-"Modo de empleo: %s [-c|-t|-l nombredelfichero] [-b tamaño-del-bloque]\n"
-"\t[-f tamaño-del fragmento] [-i bytes-por-nodo-i] [-j] \n"
-"\t[-J opciones-de-fichero-de-transacciones] [-N número-de-nodos-i]\n"
-"\t[-m porcentaje-de-bloques-reservados] [-o creador-del-so]\n"
+"Modo de empleo: %s [-c|-l nombre-del-fichero] [-b tamaño-del-bloque]\n"
+"\t[-f tamaño-del-fragmento] [-i bytes-por-nodo-i] [-I tamaño-del-nodo-i]\n"
+"\t[-J opciones-de-fichero-de-transacciones] [-N número-de-nodos-i]\n"
+"\t[-m porcentaje-de-bloques-reservados] [-o SO-creador]\n"
 "\t[-g bloques-por-grupo] [-L etiqueta-de-volumen]\n"
-"\t[-M último-directorio-montado] [-O característica[,...]]\n"
-"\t[-r revisión-del-sf] [-R opciones] [-qsSV] dispositivo\n"
-"\t[cuenta-de-bloques]\n"
+"\t[-M último-directorio-montado] [-O característica[,...]]\n"
+"\t[-r revisión-del-sf] [-E opción-extendida{,...]]\n"
+"\t[-T tipo-del-sf] [-jnqvFSV] dispositivo [cuenta-de-bloques]\n"
 
-# orden
-# ok. mm
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Ejecutando orden: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "mientras se intentaba ejecutar '%s'"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
-msgstr "mientras se procesaba la lista de bloques dañados del programa"
+msgstr "mientras se procesaba la lista de bloques dañados del programa"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
-"El bloque %d en el área del descriptor primario del superbloque/grupo está "
-"dañado.\n"
+"El bloque %d en el área del descriptor primario del superbloque/grupo está "
+"dañado.\n"
 
-#: misc/mke2fs.c:238
-#, fuzzy, c-format
+#: misc/mke2fs.c:246
+#, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
-"Los bloques del %d al %d deben estar correctos para poder construir un "
+"Los bloques del %u al %u deben estar correctos para poder construir un "
 "sistema de ficheros.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Finalizando...\n"
 
-#: misc/mke2fs.c:261
-#, fuzzy, c-format
+#: misc/mke2fs.c:269
+#, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
 "\tbad blocks.\n"
 "\n"
 msgstr ""
-"Atención: los descriptores de respaldo del superbloque/grupo en el bloque %"
-"d\n"
-"\tcontienen bloques dañados.\n"
+"Atención: los descriptores de respaldo del superbloque/grupo en el bloque %"
+"u\n"
+"\tcontienen bloques dañados.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
-msgstr "mientras se marcaban los bloques dañados como utilizados"
+msgstr "mientras se marcaban los bloques dañados como utilizados"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
-msgstr "se finaliza                                 \n"
+msgstr "hecho                           \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "mientras se reservaba el búfer relleno con ceros"
-
-# Sobra del todo el "mientras". Este mensaje sale cuando se hace mke2fs sobre
-# una partición. No es un error del tipo "sucedió esto mientras se hacía
-# esto otro". Dice simplemente lo que está haciendo.
-# -> Escribiendo las tablas [...]
-# Ok. mm
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Escribiendo las tablas de nodos-i: "
 
-#: misc/mke2fs.c:431
-#, fuzzy, c-format
+#: misc/mke2fs.c:383
+#, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %u: %s\n"
 msgstr ""
 "\n"
-"No se pueden escribir %d bloques en la tabla de nodos i al principio de %d: %"
+"No se pueden escribir %d bloques en la tabla de nodos-i al principio de %u: %"
 "s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
-msgstr "mientras se creaba el directorio raíz"
+msgstr "mientras se creaba el directorio raíz"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
-msgstr "mientras se leía el nodo-i raíz"
+msgstr "mientras se leía el nodo-i raíz"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
-msgstr "mientras se ponían los permisos del dueño del nodo-i raíz"
+msgstr "mientras se ponían los permisos del dueño del nodo-i raíz"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "mientras se creaba /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "mientras se revisaba /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
-msgstr "mientras se expandía /lost+found"
+msgstr "mientras se expandía /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
-msgstr "mientras se ponía el nodo-i de bloques dañados"
+msgstr "mientras se ponía el nodo-i de bloques dañados"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
-msgstr "Se agotó la memoria cuando se borraban los sectores %d-%d\n"
+msgstr "Se agotó la memoria cuando se borraban los sectores %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
-msgstr "Atención: no se puede leer el bloque 0: %s\n"
+msgstr "Atención: no se puede leer el bloque 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
-msgstr "Atención: no se puede borrar el sector %d: %s\n"
+msgstr "Atención: no se puede borrar el sector %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "mientras se inicializaba el superbloque del fichero de transacciones"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
-msgstr "Se rellena con ceros el fichero de transacciones del dispositivo"
+msgstr "Se rellena con ceros el dispositivo del fichero de transacciones: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr ""
 "mientras se inicializaba con ceros el fichero de transacciones del "
 "dispositivo (bloque %u, cuenta %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
-msgstr "mientras se escribía el superbloque del fichero de transacciones"
+msgstr "mientras se escribía el superbloque del fichero de transacciones"
 
-#: misc/mke2fs.c:673
-#, fuzzy, c-format
+#: misc/mke2fs.c:601
+#, c-format
 msgid ""
 "warning: %u blocks unused.\n"
 "\n"
 msgstr ""
-"cuidado: hay %d bloques sin usar.\n"
+"Atención: hay %u bloques sin usar.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etiqueta del sistema de ficheros=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Tipo de SO: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
-msgstr "Tamaño del bloque=%u (bitácora=%u)\n"
+msgstr "Tamaño del bloque=%u (bitácora=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
-msgstr "Tamaño del fragmento=%u (bitácora=%u)\n"
+msgstr "Tamaño del fragmento=%u (bitácora=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
-msgstr "%u nodos i, %u bloques\n"
+msgstr "%u nodos-i, %u bloques\n"
 
-# superusuario
-# ok. mm
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u bloques (%2.2f%%) reservados para el superusuario\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Primer bloque de datos=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
-msgstr "Máximo de bloques del sistema de ficheros=%lu\n"
+msgstr "Número máximo de bloques del sistema de ficheros=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u bloque de grupos\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u bloque de grupo\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloques por grupo, %u fragmentos por grupo\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
-msgstr "%u nodos i por grupo\n"
+msgstr "%u nodos-i por grupo\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Respaldo del superbloque guardado en los bloques: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Tamaño de zancada no válido: %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, fuzzy, c-format
 msgid "Invalid stripe-width parameter: %s\n"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Parámetro de zancada no válido: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
-msgstr "Parámetro de variación de tamaño no válido: %s\n"
+msgstr "Parámetro de variación de tamaño no válido: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
-"El máximo de la variación de tamaño debe ser mayor que el tamaño del sistema "
+"El máximo de la variación de tamaño debe ser mayor que el tamaño del sistema "
 "de ficheros.\n"
 
-#: misc/mke2fs.c:861
-#, fuzzy, c-format
+#: misc/mke2fs.c:786
+#, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
-"el cambio de tamaño en línea de los bloques reservados no está implementado "
-"para los sistemas de ficheros que no están esparcidos"
+"El cambio de tamaño en línea no está soportado con sistemas de archivos de "
+"revisión 0\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3979,21 +4067,24 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
-"Las opciones especificadas son incorrectas.\n"
+"Las opciones especificadas son incorrectas: %s\n"
 "\n"
-"Las opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
+"Opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
 "\targumento que se ajusta con un signo de igual ('=').\n"
 "\n"
-"Las opciones extendidas válidas son:\n"
+"Las opciones extendidas válidas son:\n"
 "\tstride=<longitud de la zancada en bloques>\n"
-"\tresize=<máximo de variación de tamaño en bloques>\n"
+"\tstripe-width=<RAID stride * data disks in blocks>\n"
+"\tresize=<máximo de variación de tamaño en bloques>\n"
 "\n"
+"\ttest_fs\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -4001,283 +4092,340 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
+"Error de sintaxis en el fichero de configuración de mke2fs (%s, línea #%d)\n"
+"\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
-msgstr "Se puso una opción no válida para el sistema de ficheros: %s\n"
+msgstr "Se puso una opción no válida para el sistema de ficheros: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid "invalid block size - %s"
-msgstr "tamaño del bloque inválido - %s"
+msgstr "tamaño del bloque inválido - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
-"Atención: el tamaño del bloque %d no se puede utilizar en muchos sistemas.\n"
+"Atención: el tamaño del bloque %d no se puede utilizar en muchos sistemas.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, c-format
 msgid "invalid fragment size - %s"
-msgstr "Tamaño del fragmento inválido - %s"
+msgstr "Tamaño del fragmento inválido - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr ""
-"Atención: no están implementados los fragmentos. Se descarta la opción -f\n"
+"Atención: no están implementados los fragmentos. Se descarta la opción -f\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
-msgstr "Número ilegal de bloques por grupo"
+msgstr "Número ilegal de bloques por grupo"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
-msgstr "los bloques por grupo deben ser un múltiplo de 8"
+msgstr "los bloques por grupo deben ser un múltiplo de 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+#, fuzzy
+msgid "Illegal number for flex_bg size"
+msgstr "¡Número inválido de bloques!\n"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr ""
+
+#: misc/mke2fs.c:1239
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
-msgstr "proporción de nodos-i inválida %s (min %d/max %d)"
+msgstr "proporción de nodos-i inválida %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
-msgstr "en malloc para fichero_de_bloques_dañados"
+msgstr "en malloc para fichero_de_bloques_dañados"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
-msgstr "el porcentaje de bloques reservados es inválido - %s"
+msgstr "el porcentaje de bloques reservados es inválido - %s"
 
-#: misc/mke2fs.c:1133
-#, fuzzy, c-format
+#: misc/mke2fs.c:1283
+#, c-format
 msgid "bad revision level - %s"
-msgstr "versión incorrecta - %s\n"
+msgstr "nivel de revisión incorrecto - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
-msgstr "tamaño de los nodos-i inválido - %s"
+msgstr "tamaño de los nodos-i inválido - %s"
 
-#: misc/mke2fs.c:1165
-#, fuzzy, c-format
+#: misc/mke2fs.c:1315
+#, c-format
 msgid "bad num inodes - %s"
-msgstr "tamaño de los nodos-i inválido - %s"
+msgstr "número de los nodos-i inválido - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr ""
 "mientras se intentaba abrir el fichero de transacciones del dispositivo %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
-"El tamaño del bloque del dispositivo del fichero de transacciones (%d) es\n"
-"menor que el tamaño del bloque mínimo %d\n"
+"El tamaño del bloque del dispositivo del fichero de transacciones (%d) es\n"
+"menor que el tamaño del bloque mínimo %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, fuzzy, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Añadiendo el fichero de transacciones al dispositivo %s: "
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
-msgstr "los bloques de %d-bytes son muy grandes para el sistema (máx %d)"
+msgstr "los bloques de %d bytes son muy grandes para el sistema (máx %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
-"Atención: los bloques de %d-bytes son muy grandes para el sistema \n"
-"(máx %d), se hace un esfuerzo para continuar\n"
+"Atención: los bloques de %d bytes son muy grandes para el sistema \n"
+"(máx %d), se hace un esfuerzo para continuar\n"
 
-#: misc/mke2fs.c:1265
+# The specified number of blocks is invalid.
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "cuenta de bloques no válida - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "sistema de ficheros"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
-msgid "while trying to determine filesystem size"
-msgstr "mientras se intentaba determinar el tamaño del sistema de ficheros"
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1468 resize/main.c:371
+msgid "while trying to determine filesystem size"
+msgstr "mientras se intentaba determinar el tamaño del sistema de ficheros"
+
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
-"No se puede determinar el tamaño del dispositivo; se deberá especificar\n"
-"explícitamente el tamaño del sistema de ficheros\n"
+"No se puede determinar el tamaño del dispositivo; se deberá especificar\n"
+"explícitamente el tamaño del sistema de ficheros\n"
 
-# tabla de particiones
-# Ok. mm
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
 "\ta modified partition being busy and in use.  You may need to reboot\n"
 "\tto re-read your partition table.\n"
 msgstr ""
-"Se informó que el tamaño del disposivo es cero.  Es posible que se haya\n"
-"\tespecificado una partición no válida o que la tabla de particiones\n"
-"\tno haya sido releída después de ejecutar fdisk debido a que una \n"
-"\tpartición modificada está ocupada o en uso.  Es necesario reiniciar\n"
+"Se informó que el tamaño del disposivo es cero.  Es posible que se haya\n"
+"\tespecificado una partición no válida o que la tabla de particiones\n"
+"\tno haya sido releída después de ejecutar fdisk debido a que una \n"
+"\tpartición modificada está ocupada o en uso.  Es necesario reiniciar\n"
 "\tpara poder releer la tabla de particiones.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr ""
-"El sistema de ficheros es más grande que el tamaño aparente del dispositivo."
+"El sistema de ficheros es más grande que el tamaño aparente del dispositivo."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr ""
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, fuzzy, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
-"el cambio de tamaño en línea de los bloques reservados no está implementado "
-"para los sistemas de ficheros que no están esparcidos"
+"el cambio de tamaño en línea de los bloques reservados no está implementado "
+"para los sistemas de ficheros que no están esparcidos"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1568
 #, fuzzy, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "\n"
-"El tamaño del fichero de transacciones es muy grande para el sistema de "
+"El tamaño del fichero de transacciones es muy grande para el sistema de "
 "ficheros.\n"
 
-#: misc/mke2fs.c:1412
-msgid "while trying to determine hardware sector size"
-msgstr "mientras se intentaba determinar el tamaño del sector por hardware"
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1603
+msgid "while trying to determine hardware sector size"
+msgstr "mientras se intentaba determinar el tamaño del sector por hardware"
+
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
-"el cambio de tamaño en línea de los bloques reservados no está implementado "
-"para los sistemas de ficheros que no están esparcidos"
+"el cambio de tamaño en línea de los bloques reservados no está implementado "
+"para los sistemas de ficheros que no están esparcidos"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
-msgstr "la cuenta de bloques por grupo está fuera del intervalo"
+msgstr "la cuenta de bloques por grupo está fuera del intervalo"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Atención: algunos núcleos 2.4 no operan con tamaños de bloque superiores\n"
-"a 4096 con ext3.  Utilice -b 4096 si esto es un problema para usted.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
-msgstr "tamaño incorrecto del nodo-i %d (mín %d/máx %d)"
+msgstr "tamaño incorrecto del nodo-i %d (mín %d/máx %d)"
 
-#: misc/mke2fs.c:1510
-#, fuzzy, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-"Atención: los nodos i de %d-bytes no se pueden utilizar en muchos sistemas\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
-msgstr ""
+msgstr "demasiados nodos-i (%llu), ¿aumentar el ratio de los nodos-i?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
-msgstr ""
+msgstr "demasiados nodos-i (%llu), especifique menos que 2^32 nodos-i"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
 "\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
 "\tor lower inode count (-N).\n"
 msgstr ""
+"tamaño_de_nodos_i (%u) * número_de_nodos_i (%u) es demasiado\n"
+"grande para un sistema de ficheros con %lu bloques; especifique\n"
+"un ratio mayor de nodos-i (-i) o un menor número de nodos-i (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, fuzzy, c-format
+msgid "while trying to delete %s"
+msgstr "mientras se intentaba modificar el tamaño %s"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1885
 msgid "while setting up superblock"
 msgstr "mientras se ajustaba el superbloque"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "sistema operativo desconocido - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "mientras se intentaba reservar las tablas del sistema de ficheros"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr ""
 "mientras se inicializaba a cero el bloque %u al final del sistema de ficheros"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 msgid "while reserving blocks for online resize"
-msgstr "mientras se reservaban los bloques para el cambio de tamaño en línea"
+msgstr "mientras se reservaban los bloques para el cambio de tamaño en línea"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
 msgstr "fichero de transacciones"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
-msgstr "Añadiendo el fichero de transacciones al dispositivo %s: "
+msgstr "Añadiendo el fichero de transacciones al dispositivo %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 "\n"
-"\tmientras se intentaba añadir el fichero de transacciones al dispositivo %s"
+"\tmientras se intentaba añadir el fichero de transacciones al dispositivo %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
 msgstr "hecho\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, fuzzy, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Creando el fichero de transacciones (%d bloques): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
-"Escribiendo superbloques y la información contable del sistema de ficheros: "
+"Escribiendo superbloques y la información contable del sistema de ficheros: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
 "Warning, had trouble writing out superblocks."
 msgstr ""
 "\n"
-"Atención, se tuvo un problema al escribir los superbloques."
+"Atención, se tuvo un problema al escribir los superbloques."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -4291,11 +4439,48 @@
 msgid "Usage: mklost+found\n"
 msgstr "Modo de empleo: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, fuzzy, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Modo de empleo: %s <dev1> <dev2> <dev3>\n"
+"\n"
+"Este programa muestra la información de la partición para un conjunto de\n"
+"dispositivos. Una forma común de utilizar este programa es:\n"
+"\n"
+"\t%s /dev/hda?\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, fuzzy, c-format
+msgid "Cannot open %s: %s"
+msgstr "e2label: no se puede abrir %s\n"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr ""
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Por favor ejecute e2fsck sobre el sistema de ficheros.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:103
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4303,92 +4488,115 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Modo de empleo: %s [-c cuenta-máxima-de-montajes]\n"
+"Modo de empleo: %s [-c cuenta-máxima-de-montajes]\n"
 "\t[-e comportamiento-de-errores] [-g grupo] [-i intervalo[d|m|w]] \n"
 "\t[-j] [-J opciones-del-fichero-de-transacciones]\n"
 "\t[-l] [-s bandera-esparcimiento] [-m porcentaje-de-bloques-reservados]\n"
 "\t[-o [^]opciones-de-montaje[,...]] [-r cuenta-de-bloques-reservados]\n"
 "\t[-u usuario] [-C cuenta-de-montajes] [-L etiqueta-de-volumen]\n"
-"\t[-M último-directorio-montado] [-O [^]característica[,...]]\n"
-"\t[-T última-fecha-de-revisón] [-U UUID] dispositivo\n"
+"\t[-M último-directorio-montado] [-O [^]característica[,...]]\n"
+"\t[-T última-fecha-de-revisón] [-U UUID] dispositivo\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
 msgstr "mientras se intentaba abrir el fichero de transacciones externo"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s no es un dispositivo con fichero de transacciones.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
-msgstr "¡No se encontró el superbloque del fichero de transacciones!\n"
+msgstr "¡No se encontró el superbloque del fichero de transacciones!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
-"No se encontró el UUID del sistema de ficheros en el fichero de\n"
+"No se encontró el UUID del sistema de ficheros en el fichero de\n"
 "transacciones del dispositivo.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
 msgstr "NO se ha eliminado el fichero de transacciones\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
 msgstr "Fichero de transacciones eliminado\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:286
 msgid "while reading bitmaps"
-msgstr "mientras se leían los mapas de bits"
+msgstr "mientras se leían los mapas de bits"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:294
 msgid "while clearing journal inode"
 msgstr "mientras se borraba el nodo-i del fichero de transacciones"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:305
 msgid "while writing journal inode"
-msgstr "mientras se escribía el nodo-i del fichero de transacciones"
+msgstr "mientras se escribía el nodo-i del fichero de transacciones"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
-msgstr "Se puso una opción de montaje no válida: %s\n"
+msgstr "Se puso una opción de montaje no válida: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
+"No se soporta desactivar la característica '%s' del sistema de ficheros.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:362
 #, fuzzy, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
+msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
+#, fuzzy
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"La bandera has_journal sólo puede ser borrada cuando el sistema de\n"
-"ficheros no está montada o está en modo de sólo lectura.\n"
+"La bandera 'has_journal' sólo puede ser borrada cuando el sistema de\n"
+"ficheros no está montada o está en modo de sólo lectura.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
-"La bandera needs_recovery está puesta.  Por favor ejecute e2fsck antes\n"
-"de limpiar la bandera has_journal.\n"
+"La bandera 'needs_recovery' está puesta.  Por favor ejecute e2fsck antes\n"
+"de deactivar la bandera 'has_journal'.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+
+#: misc/tune2fs.c:423
+#, fuzzy
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"La bandera 'has_journal' sólo puede ser borrada cuando el sistema de\n"
+"ficheros no está montada o está en modo de sólo lectura.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr ""
+
+#: misc/tune2fs.c:472
 msgid "The filesystem already has a journal.\n"
 msgstr "El sistema de ficheros ya tiene un fichero de transacciones.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
@@ -4397,22 +4605,22 @@
 "\n"
 "\tmientras se intentaba abrir el fichero de transacciones en %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Creando un fichero de transacciones en el dispositivo %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr ""
 "mientras se agregaba un sistema de ficheros al fichero de transacciones en %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
 msgstr "Creando el nodo-i del fichero de transacciones: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4420,69 +4628,86 @@
 "\n"
 "\tmientras intentaba crear el fichero de transacciones"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
-"No se puede analizar sintácticamente el especificador de fecha/hora: %s"
+"No se puede analizar sintácticamente el especificador de fecha/hora: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "cuenta de montajes incorrectos - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "comportamiento de errores incorrecto - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nombre del gid/grupo incorrecto - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervalo incorrecto - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
-msgstr "proporción de bloques reservados incorrecta - %s"
+msgstr "proporción de bloques reservados incorrecta - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
-msgstr "-o solo podría ser especificado una vez"
+msgstr "-o solo podría ser especificado una vez"
 
-# otro caso en que la voz pasiva hace que suene a traducción.
-# -> sólo se puede especificar
-# Ok, mejora bastante. mm
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
-msgstr "-O sólo se puede especificar una vez"
+msgstr "-O sólo se puede especificar una vez"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "cuenta de bloques reservados incorrecta - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nombre de uid/usuario incorrecto - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:806
+#, fuzzy, c-format
+msgid "bad inode size - %s"
+msgstr "tamaño de los nodos-i inválido - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr ""
+
+#: misc/tune2fs.c:900
 #, fuzzy, c-format
 msgid "Invalid RAID stride: %s\n"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Parámetro de zancada no válido: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:915
 #, fuzzy, c-format
 msgid "Invalid RAID stripe-width: %s\n"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Parámetro de zancada no válido: %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:930
+#, fuzzy, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Tamaño de zancada no válido: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:944
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -4493,7 +4718,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4503,57 +4729,74 @@
 "Las opciones extendidas deben estar separadas por comas, y pueden tomar un\n"
 "\targumento que se ajusta con un signo de igual ('=').\n"
 "\n"
-"Las opciones extendidas válidas son:\n"
+"Las opciones extendidas válidas son:\n"
 "\tstride=<longitud de la zancada en bloques>\n"
-"\tresize=<máximo de variación de tamaño en bloques>\n"
+"\tresize=<máximo de variación de tamaño en bloques>\n"
 "\n"
 
-#: misc/tune2fs.c:927
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "bloques por ser movidos"
+
+#: misc/tune2fs.c:1471
 #, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
 msgstr ""
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1534
+#, fuzzy, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
+
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
-msgstr "Se pone la cuenta de montajes máxima a %d\n"
+msgstr "Se pone la cuenta de montajes máxima a %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Se pone la cuenta de montajes actual a %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Se pone el comportamiento de errores a %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Se pone el gid de los bloques reservados %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Se pone el intervalo entre revisiones en %lu segundos\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, fuzzy, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Se pone el porcentaje de bloques reservados a %lu (%u bloques)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "la cantidad de bloques reservados es muy grande (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Se pone la cantidad de bloques reservados a %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4561,50 +4804,72 @@
 "\n"
 "El sistema de ficheros ya tiene superbloques dispersos.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 "\n"
-"La bandera de superbloques dispersos está puesta.  %s"
+"La bandera de superbloques dispersos está puesta.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
-msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
+msgstr "Se pone la hora de la última revisión al sistema de ficheros a %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Se pone el uid de los bloques reservados a %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
-msgstr "Formato del UUID no válido\n"
+msgstr "Formato del UUID no válido\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1712
+#, fuzzy
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"La bandera 'has_journal' sólo puede ser borrada cuando el sistema de\n"
+"ficheros no está montada o está en modo de sólo lectura.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+
+#: misc/tune2fs.c:1735
+#, fuzzy, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Se pone el gid de los bloques reservados %lu\n"
+
+#: misc/tune2fs.c:1745
 #, fuzzy, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Se pone el gid de los bloques reservados %lu\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1750
 #, fuzzy, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Se pone el gid de los bloques reservados %lu\n"
 
-# Yo lo pondría en infinitivo: -> ¿Continuar de todas formas? (s,n)
-# Ok. mm
 #: misc/util.c:72
 msgid "Proceed anyway? (y,n) "
-msgstr "¿Continuar de todas formas? (s,n) "
+msgstr "¿Continuar de todas formas? (s,n) "
 
 #: misc/util.c:93
 #, c-format
@@ -4617,7 +4882,7 @@
 "The device apparently does not exist; did you specify it correctly?\n"
 msgstr ""
 "\n"
-"En apariencia, el dispositivo no existe; ¿Se especificó correctamente?\n"
+"En apariencia, el dispositivo no existe; ¿Se especificó correctamente?\n"
 
 #: misc/util.c:107
 #, c-format
@@ -4627,21 +4892,17 @@
 #: misc/util.c:136
 #, c-format
 msgid "%s is entire device, not just one partition!\n"
-msgstr "¡%s es todo el dispositivo, no sólo una partición!\n"
+msgstr "¡%s es todo el dispositivo, no sólo una partición!\n"
 
-# Ojo: "Hope" es esparanza más que fe...
-# -> Esperemos que /etc/mtab sea incorrecto.
-# Prefiero Se espera, por usar algo más impersonal. mm
 #: misc/util.c:158
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
-"Se fuerza de todas formas mke2fs.  Se espera que el fichero /etc/mtab esté "
-"incorrecto.\n"
+"Se fuerza de todas formas mke2fs.  Esperemos que /etc/mtab sea incorrecto.\n"
 
 #: misc/util.c:163
 #, c-format
 msgid "will not make a %s here!\n"
-msgstr "¡No se hará un %s aquí!\n"
+msgstr "¡No se hará un %s aquí!\n"
 
 #: misc/util.c:170
 msgid "mke2fs forced anyway.\n"
@@ -4650,10 +4911,11 @@
 #: misc/util.c:186
 msgid "Couldn't allocate memory to parse journal options!\n"
 msgstr ""
-"¡No se puede reservar memoria para la revisión sintáctica de las opciones "
+"¡No se puede reservar memoria para la revisión sintáctica de las opciones "
 "del fichero de transacciones!\n"
 
 #: misc/util.c:228
+#, fuzzy
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -4665,7 +4927,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4674,11 +4936,11 @@
 "Las opciones del fichero de transacciones deben estar separadas por comas\n"
 "y pueden tener un argumento que se pone con un signo de igual ('=').\n"
 "\n"
-"Las opciones válidas para el fichero de transacciones son:\n"
-"\tsize=<tamaño del fichero de transacciones en megabytes>\n"
+"Las opciones válidas para el fichero de transacciones son:\n"
+"\tsize=<tamaño del fichero de transacciones en megabytes>\n"
 "        device=<dispositivo del fichero de transacciones>\n"
 "\n"
-"El tamaño del fichero de transacciones debe estar entre 1024 y 102400 "
+"El tamaño del fichero de transacciones debe estar entre 1024 y 102400 "
 "bloques del sistema de ficheros.\n"
 "\n"
 
@@ -4688,20 +4950,19 @@
 "Filesystem too small for a journal\n"
 msgstr ""
 "\n"
-"El sistema de ficheros es demasiado pequeño para un fichero de "
+"El sistema de ficheros es demasiado pequeño para un fichero de "
 "transacciones\n"
 
 #: misc/util.c:265
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "\n"
 "The requested journal size is %d blocks; it must be\n"
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
 "\n"
-"El tamaño del fichero de transacciones solicitado es de %d bloques; y "
-"debería\n"
-"estar entre 1024 y 102400 bloques.  Se finaliza.\n"
+"El tamaño del fichero de transacciones solicitado es de %d bloques;\n"
+"debería estar entre 1024 y 10240000 bloques.  Se finaliza.\n"
 
 #: misc/util.c:273
 msgid ""
@@ -4709,19 +4970,17 @@
 "Journal size too big for filesystem.\n"
 msgstr ""
 "\n"
-"El tamaño del fichero de transacciones es muy grande para el sistema de "
+"El tamaño del fichero de transacciones es muy grande para el sistema de "
 "ficheros.\n"
 
-# --->>> ¡cada %d montajes, no cada %d meses! <<<---
-# Perdón, creo que andaba dormido. mm
 #: misc/util.c:283
 #, c-format
 msgid ""
 "This filesystem will be automatically checked every %d mounts or\n"
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
-"Este sistema de ficheros se revisará automáticamente cada %d montajes o\n"
-"%g dias, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.\n"
+"Este sistema de ficheros se revisará automáticamente cada %d montajes o\n"
+"%g días, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.\n"
 
 #: misc/uuidgen.c:31
 #, c-format
@@ -4735,93 +4994,108 @@
 #: resize/extent.c:197
 #, c-format
 msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
-msgstr "#\tNúm=%d, Tamaño=%d, Cursor=%d, Ordenado=%d\n"
+msgstr "#\tNúm=%d, Tamaño=%d, Cursor=%d, Ordenado=%d\n"
 
 #: resize/extent.c:200
 #, c-format
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
-#, c-format
+#: resize/main.c:42
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Modo de empleo: %s [-d banderas_de_depuración] [-f] [-F] \n"
-"\t[-p] dispositivo [nuevo-tamaño]\n"
+"Modo de empleo: %s [-d banderas_de_depuración] [-f] [-F] \n"
+"\t[-p] dispositivo [nuevo-tamaño]\n"
 "\n"
 
-#: resize/main.c:61
-msgid "Extending the inode table"
-msgstr "Extendiendo la tabla de nodos i"
-
 #: resize/main.c:64
+msgid "Extending the inode table"
+msgstr "Extendiendo la tabla de nodos-i"
+
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Reubicando bloques"
 
-#: resize/main.c:67
-msgid "Scanning inode table"
-msgstr "Revisando la tabla de nodos i"
-
 #: resize/main.c:70
-msgid "Updating inode references"
-msgstr "Actualizando las referencias a los nodos i"
+msgid "Scanning inode table"
+msgstr "Revisando la tabla de nodos-i"
 
 #: resize/main.c:73
-msgid "Moving inode table"
-msgstr "Moviendo la tabla de nodos i"
+msgid "Updating inode references"
+msgstr "Actualizando las referencias a los nodos-i"
 
 #: resize/main.c:76
-msgid "Unknown pass?!?"
-msgstr "¿¡¿Paso desconocido?!?"
+msgid "Moving inode table"
+msgstr "Moviendo la tabla de nodos-i"
 
 #: resize/main.c:79
+msgid "Unknown pass?!?"
+msgstr "¿¡¿Paso desconocido?!?"
+
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
-msgstr "Se comienza el paso %d (máx = %lu)\n"
+msgstr "Se comienza el paso %d (máx = %lu)\n"
 
-#: resize/main.c:253
-#, fuzzy, c-format
+#: resize/main.c:264
+#, c-format
 msgid "while opening %s"
-msgstr "mientras se iniciaba la exploración del nodo-i"
+msgstr "mientras se abría %s"
 
-#: resize/main.c:265
+#: resize/main.c:276
 #, fuzzy, c-format
 msgid "while getting stat information for %s"
-msgstr "mientras se estaba poniendo la versión en %s"
+msgstr "mientras se estaba poniendo la versión en %s"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "tamaño del sistema de ficheros dañado - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
 
-#: resize/main.c:353
+#: resize/main.c:345
+#, fuzzy, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr ""
+"%s está montado; ¡No se puede cambiar el tamaño de un sistema de ficheros "
+"montado!\n"
+"\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "tamaño de los nodos-i inválido - %s"
+
+#: resize/main.c:394
 #, fuzzy
 msgid "Invalid stride length"
-msgstr "Parámetro de zancada no válido: %s\n"
+msgstr "Parámetro de zancada no válido: %s\n"
 
-#: resize/main.c:377
-#, fuzzy, c-format
+#: resize/main.c:418
+#, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
 "You requested a new size of %u blocks.\n"
 "\n"
 msgstr ""
-"La partición contenida (o el dispositivo) sólo tiene %d (%dk) bloques.\n"
-"Y se ha solicitado un nuevo tamaño de %d bloques.\n"
+"La partición contenida (o el dispositivo) sólo tiene %u (%dk) bloques.\n"
+"Y se ha solicitado un nuevo tamaño de %u bloques.\n"
 "\n"
 
-#: resize/main.c:384
-#, fuzzy, c-format
+#: resize/main.c:425
+#, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
-"El sistema de ficheros ya mide %d bloques. ¡No hay nada que hacer!\n"
+"El sistema de ficheros ya tiene %u bloques. ¡No hay nada que hacer!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4830,46 +5104,213 @@
 "Por favor ejecute antes 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
-msgstr "mientras se intentaba modificar el tamaño %s"
+msgstr "mientras se intentaba modificar el tamaño %s"
 
-#: resize/main.c:411
-#, fuzzy, c-format
+#: resize/main.c:452
+#, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
 "\n"
 msgstr ""
-"El sistema de ficheros en %s mide ahora %d bloques.\n"
+"El sistema de ficheros en %s tiene ahora %u bloques.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
 #, c-format
-msgid "inodes (%llu) must be less than %u"
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
 msgstr ""
 
-#: resize/resize2fs.c:642
+#: resize/online.c:41
+#, fuzzy, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr ""
+"No se soporta desactivar la característica '%s' del sistema de ficheros.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr ""
+
+#: resize/online.c:68
+#, fuzzy, c-format
+msgid "while trying to open mountpoint %s"
+msgstr ""
+"\n"
+"\tmientras se intentaba abrir el fichero de transacciones en %s\n"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr ""
+
+#: resize/online.c:79
+#, fuzzy
+msgid "Kernel does not support online resizing"
+msgstr "El @j externo no tiene implementado este @f\n"
+
+#: resize/online.c:82
+#, fuzzy
+msgid "While checking for on-line resizing support"
+msgstr "mientras se reservaban los bloques para el cambio de tamaño en línea"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/online.c:121
+#, fuzzy
+msgid "While trying to extend the last group"
+msgstr "mientras se intentaba abrir el fichero de transacciones externo"
+
+#: resize/online.c:180
+#, fuzzy, c-format
+msgid "While trying to add group #%d"
+msgstr "mientras se intentaba abrir %s"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+
+#: resize/resize2fs.c:322
+#, c-format
+msgid "inodes (%llu) must be less than %u"
+msgstr "los nodos-i (%llu) deben ser menos de %u"
+
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "bloques reservados"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "bloques por ser movidos"
-
-# metadatos
-# ok. mm
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr "bloques de metadatos"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
-"Esto nunca debería suceder: ¡Se cambia el tamaño del nodo-i corrupto!\n"
+"Esto nunca debería suceder: ¡Se cambia el tamaño del nodo-i corrupto!\n"
 
-# superbloque
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "El @S no tiene la bandera has_journal, pero tiene un @j ext3 %s.\n"
+
+#, fuzzy
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Error mientras se intentaba encontrar /@l: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr "¿Recrear el @j para hacer el sistema de ficheros ext3 de nuevo?\n"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr ""
+#~ "mientras se reintentaba escribir los mapas de bits del bloque para %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "escribiendo los mapas de bits de los nodos-i"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s falló para %s: %s\n"
+
+# Bueno, en estos casos, y ante la imposibilidad de traducir las palabras
+# considero al menos que se debe traducir a la gramática española:
+# -> ioctl de HDIO_GETGEO
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "HDIO_GETGEO ioctl"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "BLKGETSIZE ioctl"
+
+#~ msgid "Filesystem %s has unsupported features enabled.\n"
+#~ msgstr ""
+#~ "El sistema de ficheros %s tiene activadas características no soportadas.\n"
+
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr ""
+#~ "El @a en el @i %i tiene un arreglo asociativo (%N) que es @n (debe ser "
+#~ "0)\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "mientras se llamaba a ext2fs_block_iterate"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "mientras se llamaba a la función iteradora"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "mientras se reservaba al búfer del nodo-i"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "mientras se leía la tabla de nodos-i (grupo %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "mientras se escribía la tabla de nodos-i (grupo %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr "Paso 0: Haciendo la trasposición de bytes del sistema de ficheros\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s: el sistema de ficheros debe ser revisado desde cero utilizando\n"
+#~ "fsck y no debe estar montado cuando se intente hacer una trasposición de "
+#~ "bytes en él.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Trasposición de bytes"
+
+#~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#~ msgstr ""
+#~ "Los sistemas con trasposición de bytes no están compilados en esta "
+#~ "versión de e2fsck\n"
+
+#~ msgid "Incompatible options not allowed when byte-swapping.\n"
+#~ msgstr ""
+#~ "Las opciones incompatibles no están permitidas cuando se hace "
+#~ "trasposición de bytes.\n"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr ""
+#~ "%s: el orden de los bytes del sistema de ficheros ya se normalizó.\n"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "patrón_de_prueba no válido: %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "bloque inicial no válido - %s"
+
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Nota: este es un sistema de ficheros con trasposición de bytes\n"
+
+#~ msgid ""
+#~ "Filesystem too large.  No more than 2**31-1 blocks\n"
+#~ "\t (8TB using a blocksize of 4k) are currently supported."
+#~ msgstr ""
+#~ "El sistema de ficheros es demasiado grande.  Actualmente no se\n"
+#~ "soportan más de 2**31-1 bloques (8 TB con un tamaño de bloque de 4k)."
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
+#~ "\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Atención: algunos núcleos 2.4 no operan con tamaños de bloque superiores\n"
+#~ "a 4096 con ext3.  Utilice -b 4096 si esto es un problema para usted.\n"
+#~ "\n"
+
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr ""
+#~ "Atención: los nodos-i de %d bytes no se pueden utilizar en muchos "
+#~ "sistemas\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "tamaño inválido del sistema de ficheros - %s"
+
 #~ msgid "Couldn't find ext2 superblock,"
 #~ msgstr "No se puede encontrar el superbloque del ext2,"
 
@@ -4877,7 +5318,7 @@
 #~ msgstr "hecho                         \n"
 
 #~ msgid "invalid blocks range: %lu-%lu"
-#~ msgstr "intervalo de bloques dañados: %lu-%lu"
+#~ msgstr "intervalo de bloques dañados: %lu-%lu"
 
 #~ msgid ""
 #~ "\n"
@@ -4894,16 +5335,8 @@
 #~ "\n"
 #~ "La bandera de superbloques dispersos ha sido borrada.  %s"
 
-#~ msgid ""
-#~ "%s is mounted; can't resize a mounted filesystem!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "%s está montado; ¡No se puede cambiar el tamaño de un sistema de ficheros "
-#~ "montado!\n"
-#~ "\n"
-
 #~ msgid "Clone duplicate/bad blocks"
-#~ msgstr "Clonar los bloques duplicados/dañados"
+#~ msgstr "Clonar los bloques duplicados/dañados"
 
 #~ msgid "Error allocating @a @b %b.  "
 #~ msgstr "Error al reservar el @b del @a %b.  "
@@ -4914,14 +5347,14 @@
 #~ msgstr ""
 #~ "Se encontraron @bs duplicados... se invocan los pasos para @bs "
 #~ "duplicados.\n"
-#~ "Paso 1B: Re-exploración para buscar @bs duplicados/dañados\n"
+#~ "Paso 1B: Re-exploración para buscar @bs duplicados/dañados\n"
 
 #~ msgid "Duplicate/bad @b(s) in @i %i:"
-#~ msgstr "Hay @b(s) duplicados/dañados en el @i %i:"
+#~ msgstr "Hay @b(s) duplicados/dañados en el @i %i:"
 
 #~ msgid "Forcibly clearing HTREE flag on @i %d (%q).  (Beta test code)\n"
 #~ msgstr ""
-#~ "Se intenta borrar a la fuerza la bandera HTREE en el @i %d (%q).  (Código "
+#~ "Se intenta borrar a la fuerza la bandera HTREE en el @i %d (%q).  (Código "
 #~ "de prueba en etapa beta)\n"
 
 #~ msgid ""
@@ -4949,8 +5382,8 @@
 
 #~ msgid "%8d bad block\n"
 #~ msgid_plural "%8d bad blocks\n"
-#~ msgstr[0] "%8d bloque dañado\n"
-#~ msgstr[1] "%8d bloques dañados\n"
+#~ msgstr[0] "%8d bloque dañado\n"
+#~ msgstr[1] "%8d bloques dañados\n"
 
 #~ msgid "%8d large file\n"
 #~ msgid_plural "%8d large files\n"
@@ -4967,49 +5400,34 @@
 #~ msgstr[0] "%8d fifo\n"
 #~ msgstr[1] "%8d fifos\n"
 
-# enlace
 #~ msgid "%8d link\n"
 #~ msgid_plural "%8d links\n"
-#~ msgstr[0] "%8d vínculo\n"
-#~ msgstr[1] "%8d vínculos\n"
+#~ msgstr[0] "%8d vínculo\n"
+#~ msgstr[1] "%8d vínculos\n"
 
 #~ msgid " (%d fast symbolic link)\n"
 #~ msgid_plural " (%d fast symbolic links)\n"
-#~ msgstr[0] "(%d vínculo simbólico rápido)\n"
-#~ msgstr[1] "(%d vínculos simbólicos rápidos)\n"
+#~ msgstr[0] "(%d vínculo simbólico rápido)\n"
+#~ msgstr[1] "(%d vínculos simbólicos rápidos)\n"
 
 #~ msgid "%8d file\n"
 #~ msgid_plural "%8d files\n"
 #~ msgstr[0] "%8d fichero\n"
 #~ msgstr[1] "%8d ficheros\n"
 
-# el cual -> que
-#~ msgid ""
-#~ "Extended options are separated by commas, and may take an argument which\n"
-#~ "is set off by an equals ('=') sign.  Valid raid options are:\n"
-#~ "\tea_ver=<ea_version (1 or 2)\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Las opciones extendidas se separan con comas y pueden tomar un "
-#~ "argumento,\n"
-#~ "el cual se pone con el símbolo de igual ('=').  Las opciones válidas\n"
-#~ "para raid son:\n"
-#~ "\tea_ver=<versión_ea (1 o 2)\n"
-#~ "\n"
-
 #~ msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
 #~ msgstr ""
 #~ "Modo de empleo: findsuper dispositivo [bytesporsaltar [principio (en "
 #~ "kb)]]\n"
 
 #~ msgid "skipbytes should be a number, not %s\n"
-#~ msgstr "bytesporsaltar debe ser un número, no %s\n"
+#~ msgstr "bytesporsaltar debe ser un número, no %s\n"
 
 #~ msgid "skipbytes must be a multiple of the sector size\n"
-#~ msgstr "bytesporsaltar debe ser un múltiplo del tamaño del sector\n"
+#~ msgstr "bytesporsaltar debe ser un múltiplo del tamaño del sector\n"
 
 #~ msgid "startkb should be a number, not %s\n"
-#~ msgstr "principio debe ser un número, no %s\n"
+#~ msgstr "principio debe ser un número, no %s\n"
 
 #~ msgid "startkb should be positive, not %Ld\n"
 #~ msgstr "principio debe ser positivo, no %Ld\n"
@@ -5025,45 +5443,16 @@
 #~ "%14Ld: finished with errno %d\n"
 #~ msgstr ""
 #~ "\n"
-#~ "%14Ld: se finaliza con el error número %d\n"
+#~ "%14Ld: se finaliza con el error número %d\n"
 
 #~ msgid "(unknown os)"
 #~ msgstr "(so desconocido)"
 
-#~ msgid "%s failed for %s: %s\n"
-#~ msgstr "%s falló para %s: %s\n"
-
-#~ msgid ""
-#~ "Usage: %s <dev1> <dev2> <dev3>\n"
-#~ "\n"
-#~ "This program prints out the partition information for a set of devices\n"
-#~ "A common way to use this program is:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Modo de empleo: %s <dev1> <dev2> <dev3>\n"
-#~ "\n"
-#~ "Este programa muestra la información de la partición para un conjunto de\n"
-#~ "dispositivos. Una forma común de utilizar este programa es:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-
-# Bueno, en estos casos, y ante la imposibilidad de traducir las palabras
-# considero al menos que se debe traducir a la gramática española:
-# -> ioctl de HDIO_GETGEO 
-#~ msgid "HDIO_GETGEO ioctl"
-#~ msgstr "HDIO_GETGEO ioctl"
-
-#~ msgid "BLKGETSIZE ioctl"
-#~ msgstr "BLKGETSIZE ioctl"
-
 #~ msgid "resize2fs %s (%s)\n"
 #~ msgstr "resize2fs %s (%s)\n"
 
 #~ msgid "Number of free blocks: %d/%d, Needed: %d\n"
-#~ msgstr "Número de bloques libres: %d/%d, se necesitan: %d\n"
+#~ msgstr "Número de bloques libres: %d/%d, se necesitan: %d\n"
 
 #~ msgid "Going into desperation mode for block allocations\n"
 #~ msgstr "Entrando al modo desesperado para reservar bloques\n"
@@ -5078,7 +5467,7 @@
 #~ msgstr "Nodo i movido %u->%u\n"
 
 #~ msgid "Inode translate (dir=%u, name=%.*s, %u->%u)\n"
-#~ msgstr "Traducción de nodo-i (dir=%u, nombre=%.*s, %u->%u)\n"
+#~ msgstr "Traducción de nodo-i (dir=%u, nombre=%.*s, %u->%u)\n"
 
 #~ msgid "Itable move group %d block %u->%u (diff %d)\n"
 #~ msgstr "La tabla i mueve al grupo %d bloque %u->%u (diferencia %d)\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 558c095..7bf06aa 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index cf31ca3..2473dc4 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,6 +1,9 @@
 # Messages français pour GNU concernant e2fsprogs.
+# Copyright (C) 2008 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
 # Copyright © 1996 Free Software Foundation, Inc.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
+# Samuel Thibault <samuel.thibault@ens-lyon.org>, 2006-2009.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -62,10 +65,10 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU e2fsprogs 1.39-b2\n"
+"Project-Id-Version: GNU e2fsprogs 1.41.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2006-12-04 23:38+0100\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-07-28 17:30:0200\n"
 "Last-Translator: Samuel Thibault <samuel.thibault@ens-lyon.org>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "MIME-Version: 1.0\n"
@@ -73,7 +76,7 @@
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bloc défectueux %u hors limite ; ignoré.\n"
@@ -87,10 +90,10 @@
 msgstr "lors de la lecture de l'i-noeud des blocs défectueux"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr "lors de la tentative d'ouverture de %s"
@@ -100,10 +103,9 @@
 msgid "while trying popen '%s'"
 msgstr "lors de la tentative d'ouverture via popen() « %s »"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
-msgstr ""
-"lors de la lecture de la liste des blocs défectueux à partir du fichier"
+msgstr "lors de la lecture de la liste des blocs défectueux à partir du fichier"
 
 #: e2fsck/badblocks.c:104
 msgid "while updating bad block inode"
@@ -116,30 +118,30 @@
 "Avertissement : bloc illégal %u repéré dans l'i-noeud des blocs\n"
 "défectueux.  Effacé.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Erreur de lecture du bloc %lu (%s) lors de %s. "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Erreur de lecture du bloc %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignorer l'erreur"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Forcer la ré-écriture"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Erreur lors de l'écriture du bloc %lu (%s) lors de %s. "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Erreur lors de d'écriture du bloc %lu (%s). "
@@ -153,9 +155,9 @@
 msgstr "carte des répertoires vide"
 
 #: e2fsck/emptydir.c:97
-#, fuzzy, c-format
+#, c-format
 msgid "Empty directory block %u (#%d) in inode %u\n"
-msgstr "Bloc des répertoires %u (n°%d) vide dans l'i-noeud %d\n"
+msgstr "Bloc des répertoires %u (n°%d) vide dans l'i-noeud %u\n"
 
 #: e2fsck/extend.c:21
 #, c-format
@@ -180,358 +182,361 @@
 #: e2fsck/flushb.c:63
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"L'ioctl BLKFLSBUF n'est pas supporté ! Impossible de vider les tampons.\n"
+msgstr "L'ioctl BLKFLSBUF n'est pas supporté ! Impossible de vider les tampons.\n"
 
 #: e2fsck/iscan.c:46
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Usage : %s [-F] [-I nombre_blocs_du_tampon_d_i_noeud] périphérique\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "lors de l'ouverture de %s pour la vidange"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr "lors de la tentative de vidange de %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
 msgstr "lors de l'ouverture de l'examen d'i-noeuds"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
 msgstr "lors de l'obtention de l'i-noeud suivant"
 
 #: e2fsck/iscan.c:138
-#, fuzzy, c-format
+#, c-format
 msgid "%u inodes scanned.\n"
-msgstr "%d i-noeuds examinés.\n"
+msgstr "%u i-noeuds examinés.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "lecture en cours du superbloc du journal\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s : aucun superbloc de journal valide n'a été trouvé\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s : journal trop court\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s : récupération du journal\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 "%s : aucune récupération du journal n'est possible tant qu'il est en\n"
 "lecture seule\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "lors de la tentative de ré-ouverture de %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aattribut étendu"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Aerreur lors de l'allocation"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bbloc"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bbitmap"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ccompress"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Cest en conflit avec des @bs d'autres systèmes de fichiers"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "ii-noeud"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Iillégal"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Deffacé"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "drépertoire"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "eentrée"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e « %Dn » dans %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fsystème de fichiers"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fpour l'@i %i (%Q) est"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggroupe"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "h@i de @d d'HTREE"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lest un lien"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mréclamé(s) plusieurs fois"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "ninvalide"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oorphelin"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblème avec"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "r@i racine"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "sdevrait être"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "unon attaché"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vpériphérique"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xextent"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zde longeur zéro"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<L'i-noeud NUL>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<L'i-noeud des blocs défectueux>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<L'i-noeud d'index ACL>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<L'i-noeud des données ACL>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<L'i-noeud du chargeur d'amorce>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<L'i-noeud du répertoire de récupération de fichiers effacés>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<L'i-noeud descripteur de groupe>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<L'i-noeud de journal>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<L'i-noeud réservé 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<L'i-noeud réservé 10>"
 
-#: e2fsck/message.c:314
-#, fuzzy, c-format
+#: e2fsck/message.c:323
+#, c-format
 msgid "regular file"
-msgstr ""
-"\n"
-"%8d fichier normal\n"
+msgstr "fichier normal"
 
-#: e2fsck/message.c:316
-#, fuzzy, c-format
+#: e2fsck/message.c:325
+#, c-format
 msgid "directory"
-msgstr "drépertoire"
+msgstr "répertoire"
 
-#: e2fsck/message.c:318
-#, fuzzy, c-format
+#: e2fsck/message.c:327
+#, c-format
 msgid "character device"
-msgstr "%8d fichier de périphérique en mode caractère\n"
+msgstr "fichier de périphérique en mode caractère"
 
-#: e2fsck/message.c:320
-#, fuzzy, c-format
+#: e2fsck/message.c:329
+#, c-format
 msgid "block device"
-msgstr "%8d fichier de périphérique en mode bloc\n"
+msgstr "fichier de périphérique en mode bloc"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
-msgstr ""
+msgstr "tube nommé"
 
-#: e2fsck/message.c:324
-#, fuzzy, c-format
+#: e2fsck/message.c:333
+#, c-format
 msgid "symbolic link"
-msgstr "%8d lien symbolique"
+msgstr "lien symbolique"
 
-#: e2fsck/message.c:326
-#, fuzzy, c-format
+#: e2fsck/message.c:335
+#, c-format
 msgid "socket"
-msgstr "%8d socket\n"
+msgstr "socket"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
-msgstr ""
+msgstr "type de fichier inconnu avec un mode 0%o"
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr "carte des i-noeuds réclamés plusieurs fois"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
-msgstr "erreur interne ; ne peut trouver dup_blk pour %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "erreur interne : ne peut trouver dup_blk pour %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr "retourné de clone_file_block"
 
-#: e2fsck/pass1b.c:765
-#, fuzzy, c-format
+#: e2fsck/pass1b.c:776
+#, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
-msgstr "erreur interne ; ne peut trouver dup_blk pour %u\n"
+msgstr "erreur interne : impossible de trouver l'enregistrement de bloc EA pour %u"
 
-#: e2fsck/pass1b.c:777
-#, fuzzy, c-format
+#: e2fsck/pass1b.c:788
+#, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr "Erreur interne : impossible de trouver dir_info pour %i.\n"
+msgstr "erreur interne : impossible de trouver l'enregistrement d'i-noeud EA pour %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
-#, fuzzy
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
 msgid "reading directory block"
-msgstr "lecture des blocs indirects de l'i-noeud %u"
+msgstr "lecture des blocs de répertoire"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "carte des i-noeuds utilisés"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "carte des i-noeuds de répertoires"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "carte des i-noeuds de fichiers normaux"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "carte des blocs utilisés"
 
-#: e2fsck/pass1.c:599
-#, fuzzy
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
-msgstr "l'examen des i-noeuds"
+msgstr "l'ouverture de l'examen des i-noeuds"
 
-#: e2fsck/pass1.c:623
-#, fuzzy
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
-msgstr "lors de l'obtention de l'i-noeud suivant"
+msgstr "l'obtention de l'i-noeud suivant depuis l'examen"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1123
 msgid "Pass 1"
 msgstr "Passe 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1180
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lecture des blocs indirects de l'i-noeud %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1224
 msgid "bad inode map"
 msgstr "carte des i-noeuds défectueux"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1246
 msgid "inode in bad block map"
 msgstr "i-noeud dans la carte des blocs défectueux"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1266
 msgid "imagic inode map"
 msgstr "carte d'i-noeuds magiques"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1293
 msgid "multiply claimed block map"
 msgstr "carte des blocs réclamés plusieurs fois"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1392
 msgid "ext attr block map"
 msgstr "carte des blocs d'attributs étendus"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): %6lu attendu, obtenu phys %6lu (blkcnt %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "bitmap de blocs"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "bitmap d'i-noeuds"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "table d'i-noeuds"
 
@@ -539,27 +544,31 @@
 msgid "Pass 2"
 msgstr "Passe 2"
 
-#: e2fsck/pass3.c:79
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Ne peut continuer."
+
+#: e2fsck/pass3.c:76
 msgid "inode done bitmap"
 msgstr "bitmap d'i-noeuds complétés"
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr "Pointe mémoire"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr "Passe 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
 msgstr "bitmap de détection des boucles d'i-noeuds"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr "Passe 4"
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr "Passe 5"
 
@@ -855,11 +864,11 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Le Hurd ne supporte pas la fonctionnalité filetype.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr "le @S a un @j ext3 @n (@i %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "le @S a un @j @n (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
@@ -881,118 +890,97 @@
 msgid "External @j does not support this @f\n"
 msgstr "Le @j externe ne supporte pas ce @f\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"@f @j @S is unknown type %N (unsupported).\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Le @S du @j Ext3 est de type inconnu %N (non supporté).\n"
+"Le @S du @j est de type inconnu %N (non supporté).\n"
 "Il semble que votre copie d'e2fsck soit un peu vieillotte et/ou ne supporte\n"
 "pas ce format de @j.\n"
 "Il est aussi possible que le @S du @j soit corrompu.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "Le @S du @j Ext3 est corrompu.\n"
+msgid "@j @S is corrupt.\n"
+msgstr "Le @S du @j est corrompu.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
 #, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr ""
-"Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j ext3.\n"
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "Le drapeau has_@j du @S n'est pas activé, mais un @j %s est présent.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr ""
-"Le @S a le drapeau ext3 needs_recovery activé, mais n'a pas de de @j.\n"
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "Le @S a le drapeau needs_recovery activé, mais n'a pas de de @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr ""
-"le drapeau ext3 recovery n'est pas activé, mais le @j contient des données.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "le drapeau needs_recovery n'est pas activé, mais le @j contient des données.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
 msgstr "Effacer le @j"
 
-#. @-expanded: Run journal anyway
-#: e2fsck/problem.c:245
-msgid "Run @j anyway"
-msgstr "Exécuter quand même le @j"
-
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:250
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"Le drapeau de récupération n'est pas activé dans le @S de secours, le @j "
-"sera donc quand même exécuté.\n"
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "le @f a des drapeaux de fonctionnalités activés mais est un @f de version 0. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:255
+#: e2fsck/problem.c:250
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s l'@i @o %i (uid=%Iu, gid=%Ig, mode=%Im, taille=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:260
+#: e2fsck/problem.c:255
 msgid "@I @b #%B (%b) found in @o @i %i.\n"
 msgstr "@b n°%B (%b) @I repéré dans l'@i @o %i.\n"
 
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:265
+#: e2fsck/problem.c:260
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
 msgstr "Déjà effaçé le @b n°%B (%b) repéré dans l'@i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:270
+#: e2fsck/problem.c:265
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o %i @I dans le @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:275
+#: e2fsck/problem.c:270
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@i %i @I dans la liste des @is @os.\n"
 
-#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
-msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"le @f a des drapeaux de fonctionnalités activés mais est un @f de version 0. "
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "Le @S du @j a un drapeau de fonctionnalités inconnu sélectionné en lecture seule.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Le @S du @j Ext3 a un drapeau de fonctionnalités inconnu sélectionné en "
-"lecture seule.\n"
-
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Le @S du @j Ext3 contient un drapeau non reconnu de fonctionnalités "
-"incompatibles.\n"
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "Le @S du @j contient un drapeau non reconnu de fonctionnalités incompatibles.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:295
+#: e2fsck/problem.c:285
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "cette version de @j n'est pas supportée par cet e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -1003,7 +991,7 @@
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1015,7 +1003,7 @@
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1025,6 +1013,16 @@
 "Effacement des champs au-delà du @S de @j V1...\n"
 "\n"
 
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Exécuter quand même le @j"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Le drapeau de récupération n'est pas activé dans le @S de secours, le @j sera donc quand même exécuté.\n"
+
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 #: e2fsck/problem.c:316
@@ -1048,9 +1046,7 @@
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:327
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_inode n'est pas activé, mais l'@i de changement de taille n'est pas "
-"nul. "
+msgstr "Resize_inode n'est pas activé, mais l'@i de changement de taille n'est pas nul. "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:332
@@ -1080,128 +1076,170 @@
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
+"Ajout de l'indication « dirhash » au @f.\n"
+"\n"
+
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Le checksum du descripteur de @g %g est invalide. "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+"Le descripteur de @g %g est marqué comme non initialisé alors que la\n"
+"fonctionnalité n'est pas activée.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+"Le @B de @b du @g %g n'est pas initialisé\n"
+"alors que le @B d'@i est en cours d'utilisation.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "Le descripteur de @g %g a un nombre invalide d'i-noeuds non utilisés %b. "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Le @B de @b du dernier @g n'est pas initialisé. "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "La transaction %i du journal était corrompue, le rejeu a été abandonné.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Le drapeau test_fs est positionné (et ext4 est disponible). "
 
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Passe 1 : vérification des @is, des @bs et des tailles\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "l'@r n'est pas un @d. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "l'@r a un dtime (probablement en raison d'un vieux mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "l'@i réservé %i (%Q) a un mode @n. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "l'@i @D %i a un dtime à zéro. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "l'@i %i est utilisé, mais a un dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "l'@i %i est un @d @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "le @B de @bs du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "le @B d'@is du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "la table d'@is du @g %g à %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "le @B (%b) de @bs du @g %g's est corrompu. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "le @B (%b) d'@is du @g %g's est corrompu. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size est %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs est %Ib, @s %N. "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@b n°%B (%b) @I dans l'@i %i. "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "le @b n°%B (%b) chevauche les métadonnées de @f dans l'@i %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "l'@i %i a un(des) @b(s) illégal(aux). "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Trop de @bs illégaux dans l'@i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "@b n°%B (%b) @I dans l'@i des @b défectueux. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "L'@i des @bs défectueux a un(des) @b(s) illégal(aux). "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b dupliqué ou défectueux actuellement utilisé !\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"%b défectueux utilisé en tant que @b indirect d'@i des @bs défectueux. "
+msgstr "%b défectueux utilisé en tant que @b indirect d'@i des @bs défectueux. "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1215,7 +1253,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1226,7 +1264,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1237,131 +1275,121 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Le @S primaire (%b) est sur la liste des @bs défectueux.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs "
-"défectueux\n"
+msgstr "Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs défectueux\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Avertissement : le @S (%b) du @g %g est corrompu.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Avertissement : la copie des descripteurs de @gs du @g %g a un @b (%b) "
-"défectueux.\n"
+msgstr "Avertissement : la copie des descripteurs de @gs du @g %g a un @b (%b) défectueux.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Erreur de programmation ? @b n°%b reclamé sans aucune raison dans "
-"process_bad_block.\n"
+msgstr "Erreur de programmation ? @b n°%b reclamé sans aucune raison dans process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A de %N @b(s) contigus dans le @g de @b %g pour %s : %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A d'un tampon de @b pour la relocalisation de %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Relocalisation du %s du @g %g de %b vers %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Relocalisation pour le @g %g du %s vers %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Avertissement : impossible de lire le @b %b de %s : %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Avertissement : impossible d'écrire le @b %b pour %s : %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A du @B d'@is (%N) : %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A du @B de @bs (%N) : %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A de l'information du compteur de liens : %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A du tableau des @bs de @ds : %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Erreur lors de l'examen des @is (%i) : %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Erreur lors de la boucle d'itération sur les @bs dans l'@i %i : %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Erreur lors du stockage du compteur d'information d'@i (@i=%i, compteur=%"
-"N) : %m\n"
+msgstr "Erreur lors du stockage du compteur d'information d'@i (@i=%i, compteur=%N) : %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, num=%"
-"N) : %m\n"
+msgstr "Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, num=%N) : %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Erreur lors de la lecture de l'@i %i : %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "l'@i %i a un drapeau imagic activé. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1371,259 +1399,325 @@
 "immutable ou append-only activé. "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr ""
-"l'@i %i a le drapeau de @cion qui est initialisé sur un @f sans support de "
-"@cion. "
+msgstr "l'@i %i a le drapeau de @cion qui est initialisé sur un @f sans support de @cion. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "L'@i spécial (@v/socket/fifo) %i a une taille non nulle. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "l'@i de @j n'est pas utilisé mais contient des données. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "le @j n'est pas un fichier normal. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "l'@i %i fait partie de la liste des @is @os. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"des @is qui faisaient partie d'une liste chaînée d'orphelins corrompue ont "
-"été repérés. "
+msgstr "des @is qui faisaient partie d'une liste chaînée d'orphelins corrompue ont été repérés. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A d'une structure de comptage de références (%N) : %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Erreur lors de la lecture du @b %b d'@a pour l'@i %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "l'@i %i a un mauvais @b %b d'@a. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Erreur de lecture du @b %b d'@a (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "le @b %b d'@a a un compteur de référence %B, @s %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Erreur d'écriture du @b %b d'@a (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "le @b %b d'@a a h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "@A du @b %b d'@a. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "le @b %b d'@a est corrompu (collision d'allocation). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "le @b %b d'@a est corrompu (nom @n). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "le @b %b d'@a est corrompu (valeur @ne). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "l'@i %i est trop grand. "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "le @b n°%B (%b) rend le @d trop grand. "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "le @b n°%B (%b) rend le fichier trop grand. "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "le @b n°%B (%b) rend le lien symbolique trop grand. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"l'@i %i a le drapeau INDEX_FL activé sur le @f sans support des htrees.\n"
+msgstr "l'@i %i a le drapeau INDEX_FL activé sur le @f sans support des htrees.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "l'@i %i a le drapeau INDEX_FL activé mais n'est pas un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "l'@h %i a un noeud root @n.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "l'@h %i dispose d'une version de hachage non supportée (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "l'@h %i utilise un drapeau de noeud root incompatible.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "l'@h %i a une hauteur d'arbre (%N) qui est trop grande\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
-msgstr ""
-"l'@i des @bs défectueux a un @b indirect (%b) qui entre en conflit avec les "
-"métadonnées du @f. "
+msgstr "l'@i des @bs défectueux a un @b indirect (%b) qui entre en conflit avec les métadonnées du @f. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "La (re-)création de l'@i de changement de taille a échoué : %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "l'@i %i a une taille extra (%IS) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a une longueur de nom (%N) qui est @n\n"
 
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "l'@a dans l'@i %i a une valeur de taille (%N) qui est @n\n"
-
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "l'@a dans l'@i %i a une valeur de décalage (%N) qui est @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "l'@a dans l'@i %i a un @b de valeur (%N) qui est @n (doit être 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "l'@a dans l'@i %i a un hash (%N) qui est @n (doit être 0)\n"
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "l'@a dans l'@i %i a une valeur de taille (%N) qui est @n\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "l'@a dans l'@i %i a un hachage (%N) qui est @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "l'@i %i est un %It mais il semble qu'il soit en fait un répertoire.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Erreur lors de l'itération sur l'arbre d'@xs dans l'@i %i : %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
 msgstr ""
+"N'a pu itérer sur les extens de l'@i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"L'@i %i a un extent @n\n"
+"\t(@b logique %c, @b physique @n %b, longueur %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"L'@i %i a un extent @n\n"
+"\t(@b logique %c, @b physique %b, longueur @n %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "l'@i %i a le drapeau EXTENTS_FL activé sur le @f sans support des extents.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "L'@i %i a un format d'extent, mais le @S n'a pas la fonctionnalité EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "L'@i %i n'a pas le drapeau EXTENT_FL, mais a un format d'extent\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Le fast symlink %i a le drapeau EXTENT_FL activé. "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"L'@i %i a des extents hors de portée\n"
+"\t(@b logique @n %c, @b physique %b, longueur %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "L'@i %i a un noeud d'extent invalide (blk %b, lblk %c)\n"
 
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Exécution de passes additionnelles pour résoudre les problèmes de @bs "
-"réclamés par plus d'un @i...\n"
+"Exécution de passes additionnelles pour résoudre les problèmes de @bs réclamés par plus d'un @i...\n"
 "Passe 1B : ré-examen pour les @bs @m\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b(s) @m dans l'@i %i :"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Erreur lors de l'examen des i-noeuds (%i) : %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A du @B d'@is (i_node_dup_map) : %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Erreur lors des itérations sur les @bs dans l'@i %i (%s) : %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Erreur d'ajustement de refcount pour le @b %b d'@a (@i %i) : %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Passe 1C : examen des répertoires pour les @is avec des @bs @m\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Passe 1D : ajustement des @bs @m\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1632,18 +1726,18 @@
 "  a %B @b(s) @m, partagés avec %N fichier(s):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i n°%i, date de modification %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<métadonnée du @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1653,7 +1747,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1661,316 +1755,315 @@
 "@bs @m déjà été réassignés ou clonés.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "N'a pu cloner le fichier : %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Passe 2 : vérification de la structure des @ds\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Numéro d'@i @n pour « . » dans l'@i de @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "l'@E a un n° d'@i @n : %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "l'@E a un @i @D/non utilisé %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "l'@E @L vers « . » "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "l'@E pointe vers l'@i (%Di) localisé dans un @b défectueux.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "l'@E @L vers le @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "l'@E @L vers l'@r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "l'@E a un caractère illégal dans son nom.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "« . » manquant dans l'@i de @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "« .. » manquant dans l'@i de @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "La première @e « %Dn » (@i=%Di) dans l'@i de @d %i (%p) @s « . »\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "La seconde @e « %Dn » (@i=%Di) dans l'@i de @d %i @s « .. »\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s zéro.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s zéro.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl @F %Id, @s zéro.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s zéro.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s zéro.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "l'@i %i (%Q) a un mode @n (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "@i de @d %i, @b %B, déplacement %N : @d corrompu\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "@i de @d %i, @b %B, déplacement %N : nom de fichier trop long\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "l'@i de @d %i a un @b n°%B non alloué. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "l'@e de @d « . » dans l'@i de @d %i n'est pas terminée pas un NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "l'@e de @d « .. » dans l'@i de @d %i n'est pas terminée pas un NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "l'@i %i (%Q) est un @v de caractère @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "l'@i %i (%Q) est un @v de @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "l'@E est un doublon de l'@e « . ».\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "l'@E est un doublon de l'@e « .. ».\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Erreur interne : impossible de trouver dir_info pour %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "l'@E a un rec_len de %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A d'une structure icount : %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Erreur d'itération sur les @bs de @d : %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Erreur de lecture du @b %b de @d (@i %i) : %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Erreur d'écriture du @b %b de @d (@i %i) : %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A d'un nouveau @b de @d pour l'@i %i (%s) : %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Erreur lors de la désallocation de l'@i %i : %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "l'@e de @d pour « . » est grande. "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "l'@e de @d pour « . » dans %p (%i) est grande.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "l'@i %i (%Q) est un FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "l'@i %i (%Q) est une socket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Définition du type de fichier pour l'@E à %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "l'@E a un type de fichier incorrect (était %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "l'@E a un type de fichier initialisé.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "l'@E a un nom @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Le lien symbolique %Q (@i n°%i) est @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "le @b d'@a @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activé "
-"dans le @S.\n"
+msgstr "le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activé dans le @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "@p l'@h %d : le noeud (%B) n'est pas référencé\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "@p l'@h %d : le noeud (%B) est référencé deux fois\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "@p l'@h %d : le noeud (%B) a un hachage mininal erroné\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "@p l'@h %d : le noeud (%B) a un hachage maximal erroné\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "@h %d @n (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p l'@h %d (%q) : numéro de @b %b erroné.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p l'@h %d : le noeud root est @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "@p l'@h %d : le noeud (%B) a une limite @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "@p l'@h %d : le noeud (%B) a un compteur @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "@p l'@h %d : le noeud (%B) a une table de hachage non ordonnée\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "@p l'@h %d : le noeud (%B) a une profondeur @n\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p l'@h %d : le noeud (%B) a une profondeur @n (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "@E doublon repérée. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1982,7 +2075,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1993,101 +2086,116 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
-#, fuzzy
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
-msgstr "i_fsize @F %N, @s zéro.\n"
+msgstr "i_blocks_hi @F %N, @s zéro.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "@b dans l'@h %d (%q) inattendu.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@E référence l'@i %Di dans le @g %g où _INODE_UNINIT est positionné.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@E référence l'@i %Di trouvé dans la zone d'i-noeuds non utilisés du @g %g.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi @F %N, @s zéro.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1298
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Passe 3 : vérification de la connectivité des @ds\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1303
 msgid "@r not allocated.  "
 msgstr "l'@r n'est pas alloué. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1308
 msgid "No room in @l @d.  "
 msgstr "Pas d'espace dans le @d @l. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1313
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "@i %i (%p) de @d non connecté\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1318
 msgid "/@l not found.  "
 msgstr "/@l n'a pas été trouvé. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1323
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "« .. » dans %Q (%i) est %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1328
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/@l erroné ou inexistent. Ne peut reconnecter.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Ne peux étendre /@l : %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Ne peut reconnecter %i : %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Erreur lors de la tentative de repérage de /@l : %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b : %m lors de la tentative de création du @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i : %m lors de la tentative de création du @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
-"ext2fs_new_dir_@b : %m lors de la tentative de création d'un nouveau @b de "
-"@d\n"
+msgstr "ext2fs_new_dir_@b : %m lors de la tentative de création d'un nouveau @b de @d\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
-"ext2fs_write_dir_@b : %m lors de la tentative d'écriture du @b de @d pour /"
-"@l\n"
+msgstr "ext2fs_write_dir_@b : %m lors de la tentative d'écriture du @b de @d pour /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1368
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Erreur lors de l'ajustement du compteur d'@i sur l'@i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2098,7 +2206,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1378
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2108,75 +2216,75 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Erreur de création du @d racine (%s) : %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Erreur de création du @d /@l (%s) : %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1398
 msgid "@r is not a @d; aborting.\n"
 msgstr "l'@r n'est pas un @d ; arrêt immédiat.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1403
 msgid "Cannot proceed without a @r.\n"
 msgstr "Ne peut procéder sans un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1413
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l n'est pas un @d (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1420
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Passe 3A : optimisation des répertoires\n"
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1425
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr "Échec de création de l'itérateur dirs_to_hash : %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Échec de création de l'itérateur dirs_to_hash : %m\n"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr "Échec d'optimisation du répertoire %q (%d) : %m"
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Échec d'optimisation du répertoire %q (%d) : %m\n"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1435
 msgid "Optimizing directories: "
 msgstr "Optimisation des répertoires : "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1452
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Passe 4 : vérification des compteurs de référence\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@i %i @z @u. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1462
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@i %i @u\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1467
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "le compteur de référence de l'@i %i est %Il, @s %N. "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1471
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2188,95 +2296,100 @@
 "\ti-node.i_links_count est %Il. Ils devraient être les mêmes !\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1481
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Passe 5 : vérification de l'information du sommaire de @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @i @B is not set. "
 msgstr "Le remplissage à la fin du @B d'@i n'est pas initialisé. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1491
 msgid "Padding at end of @b @B is not set. "
 msgstr "Le remplissage à la fin du @B de @bs n'est pas initialisé. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1496
 msgid "@b @B differences: "
 msgstr "différences de @B de @bs: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1516
 msgid "@i @B differences: "
 msgstr "différences de @B d'@is : "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1536
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Le décompte des @is libres est erroné pour le @g n°%g (%i, décompté=%j).\n"
+msgstr "Le décompte des @is libres est erroné pour le @g n°%g (%i, décompté=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1541
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Le décompte des répertoires est erroné pour le @g n°%g (%i, décompté=%j).\n"
+msgstr "Le décompte des répertoires est erroné pour le @g n°%g (%i, décompté=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1546
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Le décompte des @is libres est erroné (%i, décompté=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr ""
-"Le décompte des @bs libres est erroné pour le @g n°%g (%b, décompté=%c).\n"
+msgstr "Le décompte des @bs libres est erroné pour le @g n°%g (%b, décompté=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1556
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Le décompte des @bs libres est erroné (%b, décompté=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"ERREUR DE PROGRAMMATION : les points de terminaisons (%b, %c) de @Bs du @f (n"
-"°%N) ne concordent pas avec les points de terminaison de @Bs calculés (%i, %"
-"j)\n"
+#: e2fsck/problem.c:1561
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ERREUR DE PROGRAMMATION : les points de terminaisons (%b, %c) de @Bs du @f (n°%N) ne concordent pas avec les points de terminaison de @Bs calculés (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1567
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Erreur interne : ajustement approximatif de la fin du bitmap (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Erreur lors de la copie du @B d'@is de remplacement : %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1577
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Erreur lors de la copie du @B des @bs de remplacement : %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr ""
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "Un ou des @b(s) du @g %g en cours d'utilisation alors que le @g est marqué BLOCK_UNINIT\n"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "Un ou des @i(s) du @g %g en cours d'utilisation alors que le @g est marqué INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Recréer le @j"
+
+#: e2fsck/problem.c:1732
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Code d'erreur non traité (0x%x) !\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1827
 msgid "IGNORED"
 msgstr "IGNORÉ"
 
@@ -2303,75 +2416,33 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "lors de l'appel de ext2fs_block_iterate pour l'i-noeud %d"
 
-#: e2fsck/super.c:210
-#, fuzzy, c-format
+#: e2fsck/super.c:209
+#, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
-msgstr "lors de l'appel de ext2fs_adjust_ea_refocunt pour l'i-noeud %d"
+msgstr "lors de l'appel à ext2fs_adjust_ea_refcount pour l'i-noeud %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Lors de la troncature de"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Lors de l'effacement de"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "lors de l'appel de ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "lors de l'appel de la fonction itération"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "lors de l'allocation d'un tampon d'i-noeud"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "lors de la lecture de la table d'i-noeuds (groupe %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "lors de l'écriture de la table d'i-noeuds (groupe %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr ""
-"Passe 0 : traitement de l'échange octet par octet du système de fichiers\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s : le système de fichiers doit avoir été récemment vérifié en utilisant\n"
-"fsck et ne doit pas avoir été monté avant d'essayer un échange par octet de\n"
-"celui-ci.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Échange d'octets"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Usage : %s [-panyrcdfvstDFSV] [-b super-bloc] [-B taille-de-bloc]\n"
+"Usage : %s [-panyrcdfvtDFV] [-b super-bloc] [-B taille-de-bloc]\n"
 "\t\t[-I nombre-blocs-du-tampon-i-noeuds] [-P taille-i-noeud-processus]\n"
 "\t\t[-l|-L fichiers-des-blocs-défectueux] [-C fd] [-j journal-externe]\n"
 "\t\t[-E options-étendues] périphérique\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2379,8 +2450,7 @@
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2393,7 +2463,7 @@
 " -f                   Forcer la vérification même si le système de fichiers\n"
 "                      est marqué propre\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2413,33 +2483,38 @@
 " -L fichier-des-blocs-erronés\n"
 "                      Définir la liste des blocs défectueux\n"
 
-#: e2fsck/unix.c:121
-#, fuzzy, c-format
+#: e2fsck/unix.c:132
+#, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
-msgstr "%s : %d/%d fichiers (%0d.%d%% non contigus), %u/%u blocs\n"
+msgstr "%s : %u/%u fichiers (%0d.%d%% non contigus), %u/%u blocs\n"
 
-#: e2fsck/unix.c:133
-#, fuzzy, c-format
+#: e2fsck/unix.c:150
+#, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         nombre d'i-noeuds avec des blocs ind/dind/tind : %d/%d/%d\n"
+msgstr "         nombre d'i-noeuds avec des blocs ind/dind/tind : %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Histogramme des profondeurs d'extents : "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "lors de la détermination à savoir si %s est monté."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Avertissement ! %s est monté.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s est monté. "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2447,7 +2522,7 @@
 "Ne peut continuer, arrêt immédiat.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2458,80 +2533,83 @@
 msgstr ""
 "\n"
 "\n"
-"\a\a\a\aAVERTISSEMENT !!! L'exécution d'e2fsck sur un système de fichiers "
-"monté\n"
+"\a\a\a\aAVERTISSEMENT !!! L'exécution d'e2fsck sur un système de fichiers monté\n"
 "peut causer des dommages SÉVÈRES au système de fichiers.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Souhaitez-vous réellement continuer"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "vérification stoppée.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " contient un système de fichiers comportant des erreurs"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " n'a pas été démonté proprement"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
-msgstr ""
+msgstr " les fonctionnalités du superbloc primaire diffèrent de celles de la sauvegarde"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " a été monté %u fois sans avoir été vérifié"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " a une date de dernière vérification du système de fichier dans le futur"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " a passé %u jours sans avoir été vérifié"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", vérification forcée.\n"
 
-#: e2fsck/unix.c:307
-#, fuzzy, c-format
+#: e2fsck/unix.c:342
+#, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
-msgstr "%s : propre, %d/%d fichiers, %u/%u blocs"
+msgstr "%s : propre, %u/%u fichiers, %u/%u blocs"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (vérification remise à plus tard : sur batterie)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (vérification lors du prochain montage)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (vérification dans %ld montages)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERREUR : ne peut ouvrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Version EA invalide.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Option étendue inconnue : %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2541,95 +2619,91 @@
 "\tligne n°%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "ERREUR lors de la validation du descripteur de fichier %d : %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Descripteur de fichier d'information de complétion invalide"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Seule une des options -p/-a, -n ou -y peut être spécifiée."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'option -t n'est pas supportée sur cette version d'e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-"Les systèmes de fichiers avec échange d'octets ne sont pas compilés pour\n"
-"cette version d'e2fsck\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Impossible de résoudre « %s »"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr ""
-"Les options incompatibles ne sont pas autorisées lors de l'échanges "
-"d'octets.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Les options -c et -l/-L ne peuvent pas être utilisées simultanément.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:878
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
+"E2FSCK_JBD_DEBUG \"%s\" n'est pas un entier\n"
+"\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:887
 #, c-format
 msgid ""
 "\n"
 "Invalid non-numeric argument to -%c (\"%s\")\n"
 "\n"
 msgstr ""
+"\n"
+"Argument non numérique invalide pour -%c (\"%s\")\n"
+"\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:961
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Erreur : la version de la bibliothèque ext2fs est périmée !\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:969
 msgid "while trying to initialize program"
 msgstr "lors de la tentative d'initialisation du programme"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:980
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUtilisation de %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:992
 msgid "need terminal for interactive repairs"
 msgstr "a besoin d'un terminal pour des réparations en mode interactif"
 
-#: e2fsck/unix.c:983
-#, fuzzy, c-format
+#: e2fsck/unix.c:1021
+#, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s tente d'archiver les blocs...\n"
+msgstr "%s: %s tentons d'utiliser les blocs de sauvetage...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1023
 msgid "Superblock invalid,"
-msgstr ""
+msgstr "Superbloc invalide,"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1024
 msgid "Group descriptors look bad..."
 msgstr "Les descripteurs de groupe semblent en mauvais état..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s : retour au superblock originel\n"
+
+#: e2fsck/unix.c:1060
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2641,29 +2715,29 @@
 "corrompu)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1066
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Peut-être cette partition est-elle de taille zéro ?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1068
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Vous devez avoir un accès %s au système de fichiers ou être root\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1073
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Périphérique peut-être inexistent ou pour le swap ?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1075
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Système de fichier monté ou ouvert en mode exclusif par un autre\n"
 "programme ?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1079
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2672,44 +2746,42 @@
 "Disque protégé en écriture ; utilisez l'option -n pour effectuer une\n"
 "vérification du périphérique en lecture seule.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1143
 msgid "Get a newer version of e2fsck!"
 msgstr "Veuillez obtenir une version plus récente d'e2fsck !"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1173
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "lors de la vérification du journal ext3 pour %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1184
 #, c-format
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Avertissement : saute la récupération du journal puisque l'on\n"
 "procède à l'examen d'un système de fichiers en lecture seule.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1197
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "impossible d'initialiser les drapeaux du superbloc sur %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1203
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "lors de la récupération du journal ext3 de %s"
 
-#: e2fsck/unix.c:1171
-#, fuzzy, c-format
+#: e2fsck/unix.c:1228
+#, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "l'@h %i dispose d'une version de hachage non supportée (%N)\n"
+msgstr "%s a une(des) fonctionnalité(s) non supportée(s):"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1244
 msgid "Warning: compression support is experimental.\n"
 msgstr "Avertissement : le support de la compression est expérimental.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1249
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2718,30 +2790,25 @@
 "E2fsck n'est pas compilé avec le support pour HTREE,\n"
 "\tmais le système de fichiers %s a des répertoires HTREE.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s : l'ordre des octets du système de fichiers a déjà été normalisé.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1302
 msgid "while reading bad blocks inode"
 msgstr "lors de la lecture de l'i-noeud des blocs défectueux"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1304
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Cela ne semble pas être bien, mais on va quand même essayer...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1330
 msgid "Couldn't determine journal size"
-msgstr ""
+msgstr "N'a pu déterminer la taille du journal"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1333
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Création du journal (%d blocs) : "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2749,37 +2816,39 @@
 "\n"
 "\tlors de la tentative de création du journal"
 
-#: e2fsck/unix.c:1302
-#, fuzzy, c-format
+#: e2fsck/unix.c:1343
+#, c-format
 msgid " Done.\n"
-msgstr "complété\n"
+msgstr "Complété.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1344
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
+"\n"
+"*** le journal a été re-créé - le système de fichier est de nouveau ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1351
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Re-démarrons e2fsck depuis le début...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1355
 msgid "while resetting context"
 msgstr "lors de la réinitialisation du contexte"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1362
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s : e2fsck a été annulé.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1367
 msgid "aborted"
 msgstr "arrêté"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1379
 #, c-format
 msgid ""
 "\n"
@@ -2788,12 +2857,12 @@
 "\n"
 "%s: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** RÉ-AMORCER LINUX *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1390
 #, c-format
 msgid ""
 "\n"
@@ -2804,39 +2873,43 @@
 "%s : **AVERTISSEMENT : le système de fichiers contient encore des erreurs**\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "lors de l'initialisation de l'information de checksum du groupe de blocs"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "oO"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<o>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (o/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "annulé !\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "oui\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "non\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2845,7 +2918,7 @@
 "%s ? non\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2854,47 +2927,38 @@
 "%s ? oui\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "oui"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "non"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps : bloc(s) de bitmap illégal(aux) pour %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "la lecture des bitmaps d'i-noeuds et de blocs"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "lors de la tentative de re-lecture des bitmaps pour %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "l'écriture des bitmaps de blocks"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "l'écriture des bitmaps de blocs et d'i-noeuds"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "lors d'une nouvelle tentative d'écriture des bitmaps de blocs pour %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "lors d'une nouvelle tentative d'écriture de bitmaps de blocs et d'i-noeuds pour %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "l'écriture des bitmaps d'i-noeuds"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "lors d'une nouvelle tentative d'écriture de bitmaps d'i-noeuds pour %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2907,128 +2971,143 @@
 "%s: INCONSISTENCE INATTENDUE ; EXÉCUTEZ fsck MANUELLEMENT.\n"
 "\t(i.e., sans options -a ou -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr "Mémoire utilisée : %dk/%dk (%dk/%dk), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Mémoire utilisée : %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
-msgstr "Mémoire utilisée : %d, "
+msgid "Memory used: %lu, "
+msgstr "Mémoire utilisée : %lu, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "temps : %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "temps écoulé : %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
-msgstr "lors de la lecture de l'i-noeud %ld dans %s"
+msgid "while reading inode %lu in %s"
+msgstr "lors de la lecture de l'i-noeud %lu dans %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
-msgstr "lors de l'écriture de l'i-noeud %ld dans %s"
+msgid "while writing inode %lu in %s"
+msgstr "lors de l'écriture de l'i-noeud %lu dans %s"
 
-#: misc/badblocks.c:61
-#, fuzzy
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "lors de l'allocation d'un tampon de mise à zéro"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
-msgstr "complété                         \n"
+msgstr "complété                            \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
-"Usage : %s [-b taille_de_bloc] [-i fichier_d_entrée]\n"
-" [-o fichier_de_sortie] [-svwnf] [-c blocs_a_la_fois]\n"
-" [-p nombre_de_passes] [-t motif_de_test [-t motif_de_test [...]]]\n"
-" périphérique [dernier_bloc [premier_bloc]]\n"
+"Usage : %s [-b taille_de_bloc] [-i fichier_d_entrée] [-o fichier_de_sortie]\n"
+"       [-svwnf] [-c blocs_à_la_fois] [-d facteur_délai_entre_lectures]\n"
+"       [-e max_blocks_défectueux] [-p nombre_de_passes]\n"
+"       [-t motif_de_test [-t motif_de_test [...]]]\n"
+"       périphérique [dernier_bloc [premier_bloc]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
+"%s: Les options -n et -w sont mutuellement exclusive.\n"
+"\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "%6.2f%% effectué, %s écoulé"
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr "Test en cours avec un motif aléatoire : "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr "Test en cours avec le motif 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr "lors de la recherche"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valeur bizarre (%ld) dans do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr "lors de l'exécution d'ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr "lors du début de l'itération de la liste des blocs défectueux"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr "lors de l'allocation des tampons"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Vérification des blocs %lu à %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Vérification des blocs défectueux en mode lecture seule\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Vérification des blocs défectueux (test en mode lecture seule) : "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Trop de blocs défectueux, test abandonné\n"
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Vérification des blocs défectueux en mode lecture-écriture\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Du bloc %lu au bloc %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr "Lecture et comparaison : "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "Vérification des blocs défectueux dans un mode non destructif de lecture-\n"
 "écriture\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Vérification des blocs défectueux (test non destructif de lecture-écriture)\n"
+msgstr "Vérification des blocs défectueux (test non destructif de lecture-écriture)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3036,59 +3115,54 @@
 "\n"
 "Interruption, nettoyage en cours\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "lors du test d'écriture de données, bloc %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s est monté ; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "l'exécution de badblocks est tout de même forcée.\n"
 "Espérons que /etc/mtab est incorrect.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr "il n'est pas prudent d'exécuter badblocks !\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s est apparemment utilisé par le système ; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
 msgstr "blocs erronés forcés de toutes manières.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
-msgstr "taille des blocs défectueux - %s"
+msgid "invalid %s - %s"
+msgstr "%s invalide - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "ne peut allouer de la mémoire pour motif_de_test - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "motif_de_test invalide : %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Au plus un seul motif_de_test peut être spécifé en mode lecture seule"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Un motif_de_test aléatoire n'est pas permis en mode lecture seule"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3096,121 +3170,128 @@
 "Ne peut déterminer la taille du périphérique ; vous devez spécifier\n"
 "la taille manuellement\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr "lors de la tentative de détermination de la taille du périphérique"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "dernier bloc"
+
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "premier bloc"
+
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid blocks count - %s"
-msgstr "décompte de blocs invalide - %s"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "bloc de départ invalide (%lu): doit être moins de %lu"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "bloc de départ invalide - %s"
-
-#: misc/badblocks.c:1015
-#, fuzzy, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "bloc de départ invalide - %s"
-
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr "lors de la création en mémoire d'une liste des blocs défectueux"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr "lors de l'ajout en mémoire à la liste des blocs défectueux"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Passe complétée, %u blocs défectueux repérés.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Usage : %s [-RV] [-+=AacDdijsSu] [-v version] fichiers...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Usage : %s [-RVf] [-+=AacDdeijsSu] [-v version] fichiers...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr "version erronée - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr "lors de l'évaluation par stat() de %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr "Drapeaux de %s initialisés comme "
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr "lors de la lecture des drapeaux sur %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "La suppression du drapeau extent n'est pas supportée sur %s"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Drapeaux de %s initialisés comme "
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr "lors de l'initialisation des drapeaux sur %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version de %s initialisée à %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr "lors de l'initialisation de la version sur %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Ne peut allouer une variable de chemin dans chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr "= est incompatible avec - et +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr "Vous devez utiliser « -v », = - ou +\n"
 
 #: misc/dumpe2fs.c:53
 #, c-format
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
-msgstr ""
-"Usage : %s [-bfhixV] [-ob super_bloc] [-oB taille_de_bloc] périphérique\n"
+msgstr "Usage : %s [-bfhixV] [-ob super_bloc] [-oB taille_de_bloc] périphérique\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Groupe %lu : (Blocs "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr " Checksum 0x%04x, %d i-noeuds non utilisés\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
-msgstr "  superbloc %s à "
+msgstr " superbloc %s à "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primaire"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Secours"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Descripteurs de groupes à "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3219,71 +3300,76 @@
 "\n"
 "  Blocs réservés GDT à "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Descripteur de groupe à "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
-msgstr "  Bitmap de blocs à "
+msgstr " Bitmap de blocs à "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", Bitmap d'i-noeuds à "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
 msgstr ""
 "\n"
-"  Table d'i-noeuds à "
+" Table d'i-noeuds à "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d blocs libres, %d i-noeuds libres, %d répertoires\n"
+"  %u blocs libres, %u i-noeuds libres, %u répertoires%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u i-noeuds non utilisés\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
-msgstr "  Blocs libres : "
+msgstr " Blocs libres : "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
-msgstr "  I-noeuds libres : "
+msgstr " I-noeuds libres : "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr "lors de l'affichage de la liste des blocs défectueux"
 
-#: misc/dumpe2fs.c:252
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:274
+#, c-format
 msgid "Bad blocks: %u"
-msgstr "Blocs défectueux : %d"
+msgstr "Blocs défectueux : %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
 msgid "while reading journal inode"
 msgstr "lors de la lecture de l'i-noeud du journal"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:300
 msgid "Journal size:             "
 msgstr "Taille du journal:        "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr "lors de la lecture du journal du superbloc"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:332
 msgid "Couldn't find journal superblock magic numbers"
-msgstr "Ne peut trouver les numéros magique du superblock du journal"
+msgstr "Ne peut trouver les numéros magique du superbloc du journal"
 
-#: misc/dumpe2fs.c:308
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:336
+#, c-format
 msgid ""
 "\n"
 "Journal block size:       %u\n"
@@ -3299,30 +3385,30 @@
 "Premier bloc du journal :          %u\n"
 "Séquence du journal :              0x%08x\n"
 "Début du journal :                 %u\n"
-"Nombre d'utilisateurs du journal : %lu\n"
+"Nombre d'utilisateurs du journal : %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:349
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Usagers du journal :      %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Impossible d'allouer de la mémoire pour analyser les options !\n"
 
-#: misc/dumpe2fs.c:363
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:391
+#, c-format
 msgid "Invalid superblock parameter: %s\n"
-msgstr "Paramètre « stride » invalide : %s\n"
+msgstr "Paramètre de superbloc invalide : %s\n"
 
-#: misc/dumpe2fs.c:378
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:406
+#, c-format
 msgid "Invalid blocksize parameter: %s\n"
-msgstr "Paramètre de changement de taille invalide : %s\n"
+msgstr "Paramètre de taille de bloc invalide : %s\n"
 
-#: misc/dumpe2fs.c:389
-#, fuzzy, c-format
+#: misc/dumpe2fs.c:417
+#, c-format
 msgid ""
 "\n"
 "Bad extended option(s) specified: %s\n"
@@ -3335,32 +3421,28 @@
 "\tblocksize=<blocksize>\n"
 msgstr ""
 "\n"
-"Les options spécifiées sont erronées.\n"
+"Une ou des options spécifiées sont erronées : %s\n"
 "\n"
 "Les options étendues sont séparées par des virgules et peuvent prendre un\n"
-"\targument qui est défini à l'aide d'un signe d'égalité ('=').\n"
+"\targument qui est défini à l'aide d'un signe d'égalité (« = »).\n"
 "\n"
 "Les options valides sont:\n"
-"\tstride=<longueur de stride en blocs>\n"
-"\tresize=<taille maximale de changement de taille en blocs>\n"
+"\tsuperblock=<numéro de superbloc>\n"
+"\tblocksize=<taille de bloc>\n"
 "\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUtilisation de %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Impossible de trouver un superbloc de système de fichiers valide.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Note : ce système de fichiers est à échange d'octets\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid ""
 "\n"
@@ -3369,34 +3451,33 @@
 "\n"
 "%s : %s : erreur lors de la lecture des bitmaps : %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Usage : %s [-rsI] périphérique fichier_image\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Ne peut allouer un tampon d'en-tête\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
-msgstr ""
-"écriture écourtée (seulement %d octets) pour l'écriture de l'en-tête image"
+msgstr "écriture écourtée (seulement %d octets) pour l'écriture de l'en-tête image"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "lors de l'écriture du superbloc"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "lors de l'écriture de la table d'i-noeuds"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "lors de l'écriture du bitmap de blocs"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "lors de l'écriture du bitmap d'i-noeuds"
 
@@ -3420,7 +3501,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label : n'est pas un système de fichiers ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1670
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Avertissement : étiquette trop longue, sera tronquée.\n"
@@ -3435,11 +3516,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label : erreur lors de l'écriture du superbloc\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Usage : e2label périphérique [nouvelle_étiquette]\n"
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Usage : %s <fichier transaction> <système de fichier>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Échec de lecture des données du système de fichier \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Échec tdb_fetch %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "La date de montage du système de fichier ne correspond pas à %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "L'UUID du système de fichiers ne correspond pas \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "Échec tdb_open %s\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Erreur lors la détermination à savoir si %s est monté.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo ne devrait être lancé que sur un système de fichiers non monté\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Échec lors de l'ouverture de %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Rejeu de la transaction de taille %zd à la position %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Échec écriture %s\n"
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3463,39 +3596,37 @@
 "\tpossible.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck : %s : non trouvé\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s : wait : plus de processus fils ?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr ""
-"Avertissement... %s pour le périphérique %s s'est terminé avec le signal %"
-"d.\n"
+msgstr "Avertissement... %s pour le périphérique %s s'est terminé avec le signal %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s : l'état est %x, ne devrait jamais se produire.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Terminé avec %s (état de fin d'exécution %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s : Erreur %d lors de l'exécution de fsck.%s pour %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3503,46 +3634,39 @@
 "Soit tous ou aucun des types de systèmes de fichiers passés à -t doivent\n"
 "être préfixés par « no » ou « ! ».\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
-msgstr ""
-"Impossible d'allouer de la mémoire pour les types de systèmes de fichiers\n"
+msgstr "Impossible d'allouer de la mémoire pour les types de systèmes de fichiers\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: saut de la mauvaise ligne de /etc/fstab: montage « bind » avec un numéro de passe fsck non nul\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck : ne peut pas vérifier %s : fsck.%s non trouvé\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr "Vérification de tous les systèmes de fichiers.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--en attente-- (passe %d)\n"
 
-#: misc/fsck.c:1066
-#, fuzzy
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Usage : fsck [-ANPRTV] [ -C [fd] ] [-t type_sys_fichiers] "
-"[options_sys_fichiers] [sys_fichiers...]\n"
+#: misc/fsck.c:1077
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Usage : fsck [-AMNPRTV] [ -C [ fd ] ] [-t type_sys_fichiers] [options_sys_fichiers] [sys_fichiers...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s : trop de périphériques\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s : trop d'arguments\n"
@@ -3562,59 +3686,56 @@
 msgid "While reading version on %s"
 msgstr "Lors de la lecture de la version sur %s"
 
-#: misc/mke2fs.c:97
-#, fuzzy, c-format
+#: misc/mke2fs.c:104
+#, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
-"Usage : %s [-c|-t|-l nom-de-fichier] [-b taille-de-bloc]\n"
-"\t[-f taille-de-fragment] [-i octets-par-i-noeud] [-j]\n"
-"\t[-J options-journal] [-N nombre-d-i-noeuds]\n"
+"Usage : %s [-c|-l nom-de-fichier] [-b taille-de-bloc]\n"
+"\t[-f taille-de-fragment] [-i octets-par-i-noeud] [-I taille-des-i-noeuds]\n"
+"\t[-J options-de-journal] [-G taille-méta-groupe] [-N nombre-d-i-noeuds]\n"
 "\t[-m pourcentage-de-blocs-réservés]\n"
 "\t[-o système-d-exploitation-de-création] [-g blocs-par-groupe]\n"
 "\t[-L étiquette-du-volume] [-M dernier-répertoire-monté]\n"
-"\t[-O fonctionnalités [,...]] [-r révision-du-système-de-fichier]\n"
-"\t[-R options] [-qvSV] périphérique [nombre-de-blocs]\n"
+"\t[-O fonctionnalité[,...]] [-r révision-du-système-de-fichier]\n"
+"\t[-E option-étendue[,...]] [-T type-système-fichier] [-U UUID]\n"
+"\t[-jnqvFSV] périphérique [nombre-de-blocs]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Exécution de la commande : %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "durant la tentative d'exécution de « %s »"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
-msgstr ""
-"lors du traitement de la liste des blocs défectueux à partir du programme"
+msgstr "lors du traitement de la liste des blocs défectueux à partir du programme"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr ""
-"Bloc %d dans la zone du descripteur de superbloc/groupe primaire est "
-"défectueux.\n"
+msgstr "Bloc %d dans la zone du descripteur de superbloc/groupe primaire est défectueux.\n"
 
-#: misc/mke2fs.c:238
-#, fuzzy, c-format
+#: misc/mke2fs.c:246
+#, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr ""
-"Blocs de %u à %d doivent être en bon état pour générer le système de "
-"fichiers.\n"
+msgstr "Les blocs de %u à %u doivent être en bon état pour générer le système de fichiers.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Arrêt immédiat...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3625,23 +3746,19 @@
 "\tbloc %u contiennent des blocs défectueux.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "lors du marquage des blocs défectueux en tant qu'utilisés"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "complété                        \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "lors de l'allocation d'un tampon de mise à zéro"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Écriture des tables d'i-noeuds : "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3650,67 +3767,67 @@
 "\n"
 "Impossible d'écrire %d blocs dans la table d'i-noeuds débutant à %u : %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "lors de la création du répertoire racine"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "lors de la lecture de l'i-noeud racine"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "lors de l'initialisation de la propriété de l'i-noeud racine"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "lors de la création de /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "lors de la recherche de /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "lors de l'extension de /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "lors de l'initialisation de l'i-noeud des blocs défectueux"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Mémoire épuisée lors de l'effacement des secteurs %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Avertissement : impossible de lire le bloc 0 : %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Avertissement : impossible d'effacer le secteur %d : %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "lors de l'initialisation du journal du superbloc"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Mise à zéro du périphérique de journal : "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "lors de la mise à zéro du périphérique de journal (bloc %u, compte %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
-msgstr "lors de l'écriture du superblock de journal"
+msgstr "lors de l'écriture du superbloc de journal"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3719,101 +3836,101 @@
 "Avertissement : %u blocs inutilisés.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Étiquette de système de fichiers=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Type de système d'exploitation : "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Taille de bloc=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Taille de fragment=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u i-noeuds, %u blocs\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blocs (%2.2f%%) réservés pour le super utilisateur\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Premier bloc de données=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Nombre maximum de blocs du système de fichiers=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u groupes de blocs\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u groupe de bloc\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocs par groupe, %u fragments par groupe\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-noeuds par groupe\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblocs de secours stockés sur les blocs : "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Paramètre « stride » invalide : %s\n"
 
-#: misc/mke2fs.c:808
-#, fuzzy, c-format
+#: misc/mke2fs.c:733
+#, c-format
 msgid "Invalid stripe-width parameter: %s\n"
-msgstr "Paramètre « stride » invalide : %s\n"
+msgstr "Paramètre « stripe-width » invalide : %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Paramètre de changement de taille invalide : %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "La taille maximale de l'agrandissement doit être plus grande que la taille\n"
 "du système de fichiers.\n"
 
-#: misc/mke2fs.c:861
-#, fuzzy, c-format
+#: misc/mke2fs.c:786
+#, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
+"Le changement de taille en ligne n'est pas supportée avec les systèmes de\n"
 "fichier de version 0\n"
 
-#: misc/mke2fs.c:878
-#, fuzzy, c-format
+#: misc/mke2fs.c:808
+#, c-format
 msgid ""
 "\n"
 "Bad option(s) specified: %s\n"
@@ -3825,29 +3942,36 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
-"Les options spécifiées sont erronées.\n"
+"Une ou des options spécifiées sont erronées : %s\n"
 "\n"
 "Les options étendues sont séparées par des virgules et peuvent prendre un\n"
-"\targument qui est défini à l'aide d'un signe d'égalité ('=').\n"
+"\targument qui est défini à l'aide d'un signe d'égalité (« = »).\n"
 "\n"
-"Les options valides sont:\n"
-"\tstride=<longueur de stride en blocs>\n"
+"Les options valides sont :\n"
+"\tstride=<taille en blocs des morceaux par disque RAID>\n"
+"\tstripe-width=<stride RAID * nombre de disques en blocs>\n"
 "\tresize=<taille maximale de changement de taille en blocs>\n"
+"\tlazy_itable_init=<0 pour désactive, 1 pour activer>\n"
+"\ttest_fs\n"
 "\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
 "Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
 "\n"
 msgstr ""
+"\n"
+"Attention : le « stripe-width » RAID %u n'est pas multiple impair du « stride » %u.\n"
+"\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3857,105 +3981,149 @@
 "\t(%s, ligne n°%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Jeu d'options de système de fichiers invalide : %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Attention ! Votre mke2fs.conf ne précise pas le type de système de fichier de\n"
+"%s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Il vous faut sans doute installer un fichier mke2fs.conf mis à jour.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
 #, c-format
 msgid "invalid block size - %s"
 msgstr "taille invalide des blocs - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1180
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Avertissement : la taille de bloc %d n'est pas utilisable\n"
 "sur la plupart des systèmes.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1196
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "taille de fragment invalide - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1202
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Avertissement : fragments non supportés. L'option -f est ignorée\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1209
 msgid "Illegal number for blocks per group"
 msgstr "Nombre de blocs par groupe illégal"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1214
 msgid "blocks per group must be multiple of 8"
 msgstr "le nombre de blocs par groupe doit être un multiple de 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Nombre illégal pour la taille flex_bg"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "La taille flex_bg doit être une puissance de 2"
+
+#: misc/mke2fs.c:1238
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "taux d'i-noeuds invalides %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1255
 msgid "in malloc for bad_blocks_filename"
 msgstr "dans malloc pour bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "pourcentage de blocs réservés invalide - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "mauvais numéro de version - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "taille d'i-noeud invalide - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "mauvais nombre d'i-noeuds - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "lors de la tentative d'ouverture du périphérique de journal %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "la taille de bloc du périphérique de journal (%d) est plus petit que la\n"
 "taille de blocs minimum %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Utilisation de la taille de bloc du périphérique de journal: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "blocs de %d octets trop gros pour le système (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Avertissement : blocs de %d octets trop gros pour le système (max %d),\n"
 "poursuite forcée\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "décompte de blocs invalide - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "système de fichiers"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
-msgid "while trying to determine filesystem size"
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
 msgstr ""
-"lors de la tentative de détermination de la taille du système de fichiers"
+"%s: La taille du périphérique %s est trop grande pour pouvoir être\n"
+"\t exprimée sur 32 bits, utilisation d'une taille de bloc de %d.\n"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1468 resize/main.c:374
+msgid "while trying to determine filesystem size"
+msgstr "lors de la tentative de détermination de la taille du système de fichiers"
+
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3963,7 +4131,7 @@
 "Ne peut déterminer la taille du périphérique ; vous devez spécifier\n"
 "la taille du système de fichiers\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3976,130 +4144,145 @@
 "\toccupée et utilisée. Vous devez ré-amorcer pour forcer une\n"
 "\trelecture de la table de partitions.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Système de fichiers plus grand que la taille apparente du périphérique"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Échec du parcours de la liste de types de systèmes de fichiers\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "résolution de fs_types pour mke2fs.conf : "
+
+#: misc/mke2fs.c:1547
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Fonctionnalités du système de fichier non supportées par les systèmes de\n"
 "fichier de version 0\n"
 
-#: misc/mke2fs.c:1374
-#, fuzzy, c-format
+#: misc/mke2fs.c:1554
+#, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
+"Les superblocs creux ne sont pas supportés par les systèmes de\n"
 "fichier de version 0\n"
 
-#: misc/mke2fs.c:1386
-#, fuzzy, c-format
+#: misc/mke2fs.c:1566
+#, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
+"Les journaux ne sont pas supportés par les systèmes de\n"
 "fichier de version 0\n"
 
-#: misc/mke2fs.c:1412
-msgid "while trying to determine hardware sector size"
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
 msgstr ""
-"lors de la tentative de détermination de la taille matérielle de secteur"
+"Les fonctionnalités resize_inode et meta_bg ne sont pas compatibles.\n"
+"Elles ne peuvent pas être activées simultanément.\n"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1601
+msgid "while trying to determine hardware sector size"
+msgstr "lors de la tentative de détermination de la taille matérielle de secteur"
+
+#: misc/mke2fs.c:1658
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "la réservation de blocs de changement de taille en ligne n'est pas\n"
 "supportée sur un système de fichiers non creux"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1667
 msgid "blocks per group count out of range"
 msgstr "compteur de blocs par groupe hors limite"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
-msgstr ""
-"Système de fichiers trop grand. Pas plus de 2^31-1 blocs (8TO pour\n"
-"\t une taille de blocs de 4K) ne sont actuellement supportés."
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "La fonctionnalité flex_bg n'est pas activée, la taille flex_bg ne peut donc pas être spécifiée"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Avertissement : certains noyaux 2.4 ne tolèrent pas les tailles de blocs\n"
-"\tsupérieures à 4096 avec ext3. Utilisez -b 4096 si cela vous\n"
-"\tpose problème.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1694
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "taille d'i-noeud invalide %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, fuzzy, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-"Avertissement : les i-noeuds de %d octets ne sont pas utilisables sur la\n"
-"plupart des systèmes\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1708
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
-msgstr ""
+msgstr "trop d'i-noeuds (%llu), augmenter le ratio d'i-noeuds ?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1713
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
-msgstr ""
+msgstr "trop d'i-noeuds (%llu), indiquer < 2^32 i-noeuds"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1728
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
 "\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
 "\tor lower inode count (-N).\n"
 msgstr ""
+"taille_i_noeud (%u) * nombre_i_noeuds (%u) trop grand pour un\n"
+"\tsystème de fichier avec %lu blocs, indiquer un ratio_i_noeud (-i)\n"
+"\tplus grand ou un nombre d'i-noeud plus petit (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Impossible d'allouer de la mémoire pour le nom du fichier tdb\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "lors de la tentative d'effacement de %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Écrasement du système de fichiers existant ; cela peut être défait en utilisant la commande :\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1893
 msgid "while setting up superblock"
 msgstr "lors de l'initialisation du superbloc"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1952
 #, c-format
 msgid "unknown os - %s"
 msgstr "système d'exploitation inconnu - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2006
 msgid "while trying to allocate filesystem tables"
 msgstr "lors de la tentative d'allocation des tables de systèmes de fichiers"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2037
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "lors de la mise à zéro du bloc %u à la fin du système de fichiers"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2050
 msgid "while reserving blocks for online resize"
 msgstr "lors de la réservation de blocs pour un changement de taille en ligne"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2073
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Ajout du journal au périphérique %s : "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2080
 #, c-format
 msgid ""
 "\n"
@@ -4108,19 +4291,29 @@
 "\n"
 "\tlors de la tentative d'ajout d'un journal au périphérique %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr "complété\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "Pas de création de journal en mode super-seul\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Création du journal (%u blocs) : "
+
+#: misc/mke2fs.c:2122
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Écriture des superblocs et de l'information de comptabilité du système de\n"
 "fichiers : "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2127
 #, c-format
 msgid ""
 "\n"
@@ -4129,7 +4322,7 @@
 "\n"
 "Attention, des problèmes sont survenus lors de l'écriture des superblocs."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2130
 #, c-format
 msgid ""
 "done\n"
@@ -4143,96 +4336,132 @@
 msgid "Usage: mklost+found\n"
 msgstr "Usage : mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Usage :  %s périphérique...\n"
+"\n"
+"Imprime l'information de partition pour chaque périphérique indiqué.\n"
+"Par exemple : %s /dev/hda\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Impossible d'ouvrir %s : %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Impossible d'obtenir la géométrie de %s : %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Impossible d'obtenir la taille de %s : %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   début=%8d taille=%8lu fin=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "SVP exécutez e2fsck sur le système de fichiers.\n"
 
-#: misc/tune2fs.c:98
-#, fuzzy, c-format
+#: misc/tune2fs.c:105
+#, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Usage: %s [-c limite-maximale-de-montage]\n"
+"Usage : %s [-c limite-maximale-de-montage]\n"
 "\t[-e comportement-en-cas-d-erreur] [-g groupe]\n"
-"\t[-i intervalle[d|m|w]] [-j] [-J options-journal]\n"
-"\t[-l] [-s drapeau-de-dispersion] [-m pourcentage-de-blocs-réservés]\n"
+"\t[-i intervalle[d|m|w]] [-j] [-J options-journal] [-l]\n"
+"\t[-m pourcentage-de-blocs-réservés]\n"
 "\t[-o [^]options-de-montage[,...]] [-r compteur-de-blocs-réservés]\n"
 "\t[-u utilisateur] [-C compteur-de-montage] [-L étiquette-du-volume]\n"
 "\t[-M dernier-répertoire-monté] [-O [^]fonctionnalité[,...]]\n"
-"\t[-T date-de-dernière-vérification] [-U UUID] périphérique\n"
+"\t[-E option-étendue[,...]] [-T date-de-dernière-vérification]\n"
+"\t[-U UUID] [-I nouvelle-taille-i-noeuds] périphérique\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr "lors de la tentative d'ouverture du journal externe"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s n'est pas un périphérique de journal.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
-msgstr "Le superblock de journal n'a pas été trouvé !\n"
+msgstr "Le superbloc de journal n'a pas été trouvé !\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "L'UUID du système de fichiers n'a pas été trouvé sur le périphérique de\n"
 "journal.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr "Le journal N'A PAS été enlevé\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr "Journal enlevé\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr "lors de la lecture des bitmaps"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
 msgstr "lors de l'effacement de l'i-noeud du journal"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
 msgstr "lors de l'écriture de l'i-noeud du journal"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Jeu d'options pour le montage invalide: %s\n"
 
-#: misc/tune2fs.c:338
-#, fuzzy, c-format
+#: misc/tune2fs.c:358
+#, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
-"fichier de version 0\n"
+"La suppression de la fonctionnalité de système de fichier '%s' n'est pas\n"
+"supportée.\n"
 
-#: misc/tune2fs.c:344
-#, fuzzy, c-format
+#: misc/tune2fs.c:364
+#, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
-"fichier de version 0\n"
+"L'ajout de la fonctionnalité de système de fichier '%s' n'est pas\n"
+"supporté.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Le drapeau has_journal peut seulement être désactivé lorsque le\n"
+"La fonctionnalitié has_journal peut être désactivée uniquement lorsque le\n"
 "système de fichiers est démonté ou monté en lecture seule.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4240,11 +4469,30 @@
 "Le drapeau needs_recovery est activé. SVP exécutez e2fsck avant\n"
 "de désactiver le drapeau has_journal.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr "Effacer le drapeau flex_bg rendrait le système de fichiers incohérent.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"La fonctionnalité huge_file peut être désactivée uniquement lorsque le\n"
+"système de fichiers est démonté ou monté en lecture seule.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(et rebootez après !)\n"
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr "Le système de fichiers a déjà un journal.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
@@ -4253,21 +4501,21 @@
 "\n"
 "\tlors de la tentative d'ouverture du journal sur %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Création du journal sur le périphérique %s : "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "lors de l'ajout du système de fichiers au journal sur %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
 msgstr "Création de l'i-noeud du journal : "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4275,66 +4523,86 @@
 "\n"
 "\tlors de la tentative de création du fichier journal"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Ne peut analyser la spécification de date/heure : %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "compteur de montages erroné - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "mauvais comportement en cas d'erreur - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nom gid/groupe erroné - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervalle erroné - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "taux de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr "-o ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr "-O ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "compteur de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nom utilisateur/uid erroné - %s"
 
-#: misc/tune2fs.c:842
-#, fuzzy, c-format
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "taille d'i-noeud invalide - %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "La taille des i-noeuds doit être une puissance de deux - %s"
+
+#: misc/tune2fs.c:904
+#, c-format
 msgid "Invalid RAID stride: %s\n"
-msgstr "Paramètre « stride » invalide : %s\n"
+msgstr "Paramètre « stride RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:857
-#, fuzzy, c-format
+#: misc/tune2fs.c:919
+#, c-format
 msgid "Invalid RAID stripe-width: %s\n"
-msgstr "Paramètre « stride » invalide : %s\n"
+msgstr "Paramètre « stripe-width RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:867
-#, fuzzy, c-format
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Algorithme de hachage invalide : %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Définition de l'algorithme de hachage par défaut à %s (%d)\n"
+
+#: misc/tune2fs.c:948
+#, c-format
 msgid ""
 "\n"
 "Bad options specified.\n"
@@ -4344,69 +4612,90 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
 "\n"
-"Les options spécifiées sont erronées.\n"
+"Une ou des options spécifiées sont erronées.\n"
 "\n"
 "Les options étendues sont séparées par des virgules et peuvent prendre un\n"
-"\targument qui est défini à l'aide d'un signe d'égalité ('=').\n"
+"\targument qui est défini à l'aide d'un signe d'égalité (« = »).\n"
 "\n"
-"Les options valides sont:\n"
-"\tstride=<longueur de stride en blocs>\n"
-"\tresize=<taille maximale de changement de taille en blocs>\n"
-"\n"
+"Les options étendues valides sont:\n"
+"\tstride=<taille en blocs des morceaux par disque RAID>\n"
+"\tstripe-width=<stride RAID * nombre de disques en blocs>\n"
+"\thash_alg=<algorithme de hachage>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, fuzzy, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "blocs à déplacer"
+
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
 msgstr ""
-"Fonctionnalités du système de fichier non supportées par les systèmes de\n"
-"fichier de version 0\n"
+"Pour défaire l'opération de tune2fs, veuillez lancer la commande\n"
+"    e2undo %s %s\n"
+"\n"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "La taille des i-noeuds est déjà %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "La réduction de la taille des i-noeuds n'est pas supportée\n"
+
+#: misc/tune2fs.c:1594
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Initialisation du nombre maximal de montages à %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1600
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Initialisation du nombre courant de montages à %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Initialisation du comportement en cas d'erreur à %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1610
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Initialisation du gid des blocs réservés à %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1615
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Initialisation de l'intervalle de vérification à %lu secondes\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1622
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Initialisation du pourcentage de blocs réservés à %g%% (%u blocs)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "compteur de blocs réservés est trop grand (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Initialisation du compteur des blocs réservés à %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1641
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4414,7 +4703,7 @@
 "\n"
 "Le système de fichiers a déjà des superblocs creux.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1648
 #, c-format
 msgid ""
 "\n"
@@ -4423,37 +4712,66 @@
 "\n"
 "Drapeau de superbloc creux activé. %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1653
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
+"\n"
+"La suppression du superflag creux n'est pas supportée.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1660
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 "Initialisation de la date de la dernière vérification du système de\n"
 "fichiers à %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1666
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Initialisation de l'uid de blocs réservés à %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1717
 msgid "Invalid UUID format\n"
 msgstr "Format UUID invalide\n"
 
-#: misc/tune2fs.c:1067
-#, fuzzy, c-format
-msgid "Setting stride size to %d\n"
-msgstr "Initialisation du gid des blocs réservés à %lu\n"
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"La taille des i-noeuds ne peut être changée que lorsque le système\n"
+"de fichiers et démonté.\n"
 
-#: misc/tune2fs.c:1072
-#, fuzzy, c-format
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Changer la taille des i-noeuds n'est pas supporté pour les systèmes de\n"
+"fichiers avec la fonctionalité flex_bg activée.\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Erreur lors du changement de la taille des i-noeuds.\n"
+"Exécutez e2undo pour défaire les changements du système de fichiers. \n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Définition de la taille des i-noeuds à %lu\n"
+
+#: misc/tune2fs.c:1762
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr "Définition de la taille de « stride » à %d\n"
+
+#: misc/tune2fs.c:1767
+#, c-format
 msgid "Setting stripe width to %d\n"
-msgstr "Initialisation du gid des blocs réservés à %lu\n"
+msgstr "Définition de la taille du « stripe width » à %d\n"
 
 #: misc/util.c:72
 msgid "Proceed anyway? (y,n) "
@@ -4514,20 +4832,20 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
-"Les options journal spécifiées sont erronées.\n"
+"Une ou des options de journal spécifiées sont erronées.\n"
 "\n"
-"Les options journal sont séparées par des virgules et peuvent prendre un\n"
-"\targument qui est initialisé par un signe d'égalité (« = »).\n"
+"Les options de journal sont séparées par des virgules et peuvent prendre un\n"
+"\targument qui est défini à l'aide d'un signe d'égalité (« = »).\n"
 "\n"
-"Les options journal valides sont :\n"
+"Les options de journal valides sont :\n"
 "\tsize=<taille du journal en mégaoctets>\n"
 "\tdevice=<périphérique du journal>\n"
 "\n"
-"La taille du journal doit être comprise entre 1024 et 102400 blocs du\n"
+"La taille du journal doit être comprise entre 1024 et 10240000 blocs du\n"
 "système de fichiers.\n"
 "\n"
 
@@ -4540,7 +4858,7 @@
 "Le système de fichiers est trop petit pour un journal\n"
 
 #: misc/util.c:265
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "\n"
 "The requested journal size is %d blocks; it must be\n"
@@ -4548,7 +4866,7 @@
 msgstr ""
 "\n"
 "La taille demandée du journal est de %d blocs ; elle doit être\n"
-"entre 1024 et 102400 blocs. Arrêt immédiat.\n"
+"entre 1024 et 10240000 blocs. Arrêt immédiat.\n"
 
 #: misc/util.c:273
 msgid ""
@@ -4587,66 +4905,84 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Usage : %s [-d drapeaux_de_debug] [-f] [-F] [-p] périphérique\n"
+"Usage : %s [-d drapeaux_de_debug] [-f] [-F] [-M] [ -P] [-p] périphérique\n"
 " [nouvelle_taille]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Extension de la table d'i-noeuds"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Relocalisation de blocs"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Examen de la table d'i-noeuds"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Mise à jour des références d'i-noeuds"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Déplacement de la table d'i-noeuds"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Passe inconnue ?!?!"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Début de la passe %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr "lors de l'ouverture de %s"
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "lors de la récupérartion de l'état de %s"
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "taille erronée du système de fichiers - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s : La combinaison des fonctionnalités\n"
+"\tflex_bg et !resize_inode n'est pas supportée par resize2fs.\n"
 
-#: resize/main.c:353
-#, fuzzy
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Taille minimale estimée du système de fichiers : %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "taille d'i-noeud invalide - %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "La nouvelle taille est plus petit que le minimum (%u)\n"
+
+#: resize/main.c:402
 msgid "Invalid stride length"
-msgstr "Paramètre « stride » invalide : %s\n"
+msgstr "Longueur « stride » invalide"
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4657,7 +4993,7 @@
 "Vous avez demandé une nouvelle taille de %u blocs.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4666,7 +5002,7 @@
 "Le système de fichiers a déjà %u blocs. Rien à modifier !\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4675,12 +5011,26 @@
 "SVP exécutez « e2fsck -f %s » d'abord.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "En train de retailler le système de fichiers sur %s à %u (%dk) blocs.\n"
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
-msgstr "lors de la tentative de redimensionnement à %s"
+msgstr "lors de la tentative de changement de taille de %s"
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Veuillez lancer 'e2fsck -fy %s' pour corriger le système de fichier\n"
+"après l'opération de changement de taille avortée.\n"
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4689,28 +5039,190 @@
 "Le système de fichiers %s a maintenant une taille de %u blocs.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "lors de la troncature de %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Le système de fichiers de %s est monté sur %s ; le changement de taille doit être effectué en ligne\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "La réduction en ligne de %u à %u n'est pas supportée.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Le système de fichiers ne supporte pas le changement de taille en ligne"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "lors de la tentative d'ouverture du point de montage %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Permission de retailler le système de fichiers refusée"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Le noyau ne supporte pas le changement de taille en ligne"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Lors de la vérification du support de changement de taille en ligne"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "En train d'effectuer un changement de taille en ligne de %s vers %u (%dk) blocs.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Lors de la tentative d'étendre le dernier groupe"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Lors de la tentative d'ajout du groupe numéro %d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Le système de fichiers de %s est monté sur %s, et le changement de taille en ligne n'est pas supporté sur ce système.\n"
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
-msgstr ""
+msgstr "le nombre d'i-noeuds (%llu) doit être plus petit que %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "blocs réservés"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "blocs à déplacer"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr "blocs de métadonnées"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr ""
-"Ne devrait jamais se produire : i-noeud de redimensionnement corrompu !\n"
+msgstr "Ne devrait jamais se produire : i-noeud de redimensionnement corrompu !\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j ext3.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Erreur lors de la suppression de l'extent : %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr "Recréer le journal pour rendre le système de fichier ext3 de nouveau ?\n"
+
+#~ msgid "bad block size - %s"
+#~ msgstr "taille des blocs défectueux - %s"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "lors d'une nouvelle tentative d'écriture des bitmaps de blocs pour %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "l'écriture des bitmaps d'i-noeuds"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s a échoué pour %s: %s\n"
+
+#~ msgid "open"
+#~ msgstr "open"
+
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "HDIO_GETGEO ioctl"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "BLKGETSIZE ioctl"
+
+#~ msgid "Filesystem %s has unsupported features enabled.\n"
+#~ msgstr "Le système de fichier %s a des fonctionnalités non supportées activées.\n"
+
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr "l'@a dans l'@i %i a un hash (%N) qui est @n (doit être 0)\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "lors de l'appel de ext2fs_block_iterate"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "lors de l'appel de la fonction itération"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "lors de l'allocation d'un tampon d'i-noeud"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "lors de la lecture de la table d'i-noeuds (groupe %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "lors de l'écriture de la table d'i-noeuds (groupe %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr "Passe 0 : traitement de l'échange octet par octet du système de fichiers\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s : le système de fichiers doit avoir été récemment vérifié en utilisant\n"
+#~ "fsck et ne doit pas avoir été monté avant d'essayer un échange par octet de\n"
+#~ "celui-ci.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Échange d'octets"
+
+#~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#~ msgstr ""
+#~ "Les systèmes de fichiers avec échange d'octets ne sont pas compilés pour\n"
+#~ "cette version d'e2fsck\n"
+
+#~ msgid "Incompatible options not allowed when byte-swapping.\n"
+#~ msgstr "Les options incompatibles ne sont pas autorisées lors de l'échanges d'octets.\n"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr "%s : l'ordre des octets du système de fichiers a déjà été normalisé.\n"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "motif_de_test invalide : %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "bloc de départ invalide - %s"
+
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Note : ce système de fichiers est à échange d'octets\n"
+
+#~ msgid ""
+#~ "Filesystem too large.  No more than 2**31-1 blocks\n"
+#~ "\t (8TB using a blocksize of 4k) are currently supported."
+#~ msgstr ""
+#~ "Système de fichiers trop grand. Pas plus de 2^31-1 blocs (8TO pour\n"
+#~ "\t une taille de blocs de 4K) ne sont actuellement supportés."
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
+#~ "\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Avertissement : certains noyaux 2.4 ne tolèrent pas les tailles de blocs\n"
+#~ "\tsupérieures à 4096 avec ext3. Utilisez -b 4096 si cela vous\n"
+#~ "\tpose problème.\n"
+#~ "\n"
+
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr ""
+#~ "Avertissement : les i-noeuds de %d octets ne sont pas utilisables sur les\n"
+#~ "anciens systèmes\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "taille erronée du système de fichiers - %s"
 
 #~ msgid "Couldn't find ext2 superblock,"
 #~ msgstr "Impossible de trouver le superbloc ext2,"
@@ -4732,13 +5244,6 @@
 #~ "\n"
 #~ "Drapeau de superbloc creux désactivé. %s"
 
-#~ msgid ""
-#~ "%s is mounted; can't resize a mounted filesystem!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "%s est monté ; ne peut redimensionner un système de fichiers monté !\n"
-#~ "\n"
-
 #~ msgid "Clone duplicate/bad blocks"
 #~ msgstr "Cloner les blocs duplicatas/défectueux"
 
@@ -4761,15 +5266,13 @@
 #~ "\tea_ver=<ea_version (1 or 2)\n"
 #~ "\n"
 #~ msgstr ""
-#~ "Les options étendues sont séparées par des virgules, et peuvent prendre "
-#~ "un argument\n"
-#~ "lequel peut être initialisé par un signe d'égalité ('='). Les options "
-#~ "RAID valides sont:\n"
+#~ "Les options étendues sont séparées par des virgules, et peuvent prendre un argument\n"
+#~ "lequel peut être initialisé par un signe d'égalité ('='). Les options RAID valides sont:\n"
 #~ "\tea_ver=<ea_version (1 or 2)\n"
 #~ "\n"
 
 #~ msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-#~ msgstr "Usage:  findsuper périphérique [octets_à_escamoter [début_en_Ko]]\n"
+#~ msgstr "Usage :  findsuper périphérique [octets_à_escamoter [début_en_Ko]]\n"
 
 #~ msgid "skipbytes should be a number, not %s\n"
 #~ msgstr "octets à escamoter doit être un nombre, non pas %s\n"
@@ -4796,9 +5299,6 @@
 #~ "\n"
 #~ "%14Ld: terminé avec errno %d\n"
 
-#~ msgid "%s failed for %s: %s\n"
-#~ msgstr "%s a échoué pour %s: %s\n"
-
 #~ msgid ""
 #~ "Usage: %s <dev1> <dev2> <dev3>\n"
 #~ "\n"
@@ -4808,25 +5308,16 @@
 #~ "\t%s /dev/hda?\n"
 #~ "\n"
 #~ msgstr ""
-#~ "Usage: %s <périph1> <périph2> <périph3>\n"
+#~ "Usage : %s <périph1> <périph2> <périph3>\n"
 #~ "\n"
-#~ "Ce programme affiche les informations des partitions pour un ensemble de "
-#~ "périphériques\n"
+#~ "Ce programme affiche les informations des partitions pour un ensemble de périphériques\n"
 #~ "Une façon usuelle d'utiliser ce programme est:\n"
 #~ "\n"
 #~ "\t%s /dev/hda?\n"
 #~ "\n"
 
-#~ msgid "HDIO_GETGEO ioctl"
-#~ msgstr "HDIO_GETGEO ioctl"
-
-#~ msgid "BLKGETSIZE ioctl"
-#~ msgstr "BLKGETSIZE ioctl"
-
 #~ msgid "Forcibly clearing HTREE flag on @i %d (%q).  (Beta test code)\n"
-#~ msgstr ""
-#~ "Forcer la mise à zéro du drapeau HTREE sur l'@i %d (%q). (Code en phase "
-#~ "beta test)\n"
+#~ msgstr "Forcer la mise à zéro du drapeau HTREE sur l'@i %d (%q). (Code en phase beta test)\n"
 
 #~ msgid "(unknown os)"
 #~ msgstr "(système d'exploitation inconnu)"
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..89ba4d9
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..fd52e11
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,5074 @@
+# Pesan Bahasa Indonesia untuk e2fsprogs
+# Copyright (C) 2008 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
+# Permission is granted to freely copy and distribute
+# this file and modified versions, provided that this
+# header is not removed and modified versions are marked
+# as such.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009.
+#
+#. The strings in e2fsck's problem.c can be very hard to translate,
+#. since the strings are expanded in two different ways.  First of all,
+#. there is an @-expansion, where strings like "@i" are expanded to
+#. "inode", and so on.  In order to make it easier for translators, the
+#. e2fsprogs po template file has been enhanced with comments that show
+#. the @-expansion, for the strings in the problem.c file.
+#.
+#. Translators are free to use the @-expansion facility if they so
+#. choose, by providing translations for strings in e2fsck/message.c.
+#. These translation can completely replace an expansion; for example,
+#. if "bblock" (which indicated that "@b" would be expanded to "block")
+#. is translated as "ddatenverlust", then "@d" will be expanded to
+#. "datenverlust".  Alternatively, translators can simply not use the
+#. @-expansion facility at all.
+#.
+#. The second expansion which is done for e2fsck's problem.c messages is
+#. a dynamic %-expansion, which expands %i as an inode number, and so
+#. on.  A table of these expansions can be found below.  Note that
+#. %-expressions that begin with "%D" and "%I" are two-character
+#. expansions; so for example, "%Iu" expands to the inode's user id
+#. ownership field (inode->i_uid).
+#.  
+#. 	%b	<blk>			block number
+#. 	%B	<blkcount>		integer
+#. 	%c	<blk2>			block number
+#. 	%Di	<dirent> -> ino		inode number
+#. 	%Dn	<dirent> -> name	string
+#. 	%Dr	<dirent> -> rec_len
+#. 	%Dl	<dirent> -> name_len
+#. 	%Dt	<dirent> -> filetype
+#. 	%d	<dir> 			inode number
+#. 	%g	<group>			integer
+#. 	%i	<ino>			inode number
+#. 	%Is	<inode> -> i_size
+#. 	%IS	<inode> -> i_extra_isize
+#. 	%Ib	<inode> -> i_blocks
+#. 	%Il	<inode> -> i_links_count
+#. 	%Im	<inode> -> i_mode
+#. 	%IM	<inode> -> i_mtime
+#. 	%IF	<inode> -> i_faddr
+#. 	%If	<inode> -> i_file_acl
+#. 	%Id	<inode> -> i_dir_acl
+#. 	%Iu	<inode> -> i_uid
+#. 	%Ig	<inode> -> i_gid
+#. 	%j	<ino2>			inode number
+#. 	%m	<com_err error message>
+#. 	%N	<num>
+#. 	%p		ext2fs_get_pathname of directory <ino>
+#. 	%P		ext2fs_get_pathname of <dirent>->ino with <ino2> as
+#. 				the containing directory.  (If dirent is NULL
+#. 				then return the pathname of directory <ino2>)
+#. 	%q		ext2fs_get_pathname of directory <dir>
+#. 	%Q		ext2fs_get_pathname of directory <ino> with <dir> as
+#. 				the containing directory.
+#. 	%s	<str>			miscellaneous string
+#. 	%S		backup superblock
+#. 	%X	<num>	hexadecimal format
+#.
+msgid ""
+msgstr ""
+"Project-Id-Version: e2fsprogs 1.41.8\n"
+"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-09-08 20:00+0700\n"
+"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
+#, c-format
+msgid "Bad block %u out of range; ignored.\n"
+msgstr "Bad block %u diluar jangkauan; diabaikan.\n"
+
+#: e2fsck/badblocks.c:45
+msgid "while sanity checking the bad blocks inode"
+msgstr "ketika melakukan pengecheckan di inode bad block"
+
+#: e2fsck/badblocks.c:57
+msgid "while reading the bad blocks inode"
+msgstr "ketika membaca inode bad block"
+
+#: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
+#, c-format
+msgid "while trying to open %s"
+msgstr "ketika mencoba untuk membuka %s"
+
+#: e2fsck/badblocks.c:82
+#, c-format
+msgid "while trying popen '%s'"
+msgstr "ketika mencoba popen '%s'"
+
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
+msgid "while reading in list of bad blocks from file"
+msgstr "ketika membaca dalam daftar bad block dari berkas"
+
+#: e2fsck/badblocks.c:104
+msgid "while updating bad block inode"
+msgstr "ketika memperbarui inode bad block"
+
+#: e2fsck/badblocks.c:130
+#, c-format
+msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
+msgstr "Peringatan: illegal block %u ditemukan dalam inode bad block. Dihapus.\n"
+
+#: e2fsck/ehandler.c:54
+#, c-format
+msgid "Error reading block %lu (%s) while %s.  "
+msgstr "Error membaca block %lu (%s) ketika %s. "
+
+#: e2fsck/ehandler.c:57
+#, c-format
+msgid "Error reading block %lu (%s).  "
+msgstr "Error membaca block %lu (%s).  "
+
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
+msgid "Ignore error"
+msgstr "Mengabaikan error"
+
+#: e2fsck/ehandler.c:61
+msgid "Force rewrite"
+msgstr "Memaksa menulis kembali"
+
+#: e2fsck/ehandler.c:103
+#, c-format
+msgid "Error writing block %lu (%s) while %s.  "
+msgstr "Error menulis block %lu (%s) ketika %s.  "
+
+#: e2fsck/ehandler.c:106
+#, c-format
+msgid "Error writing block %lu (%s).  "
+msgstr "Error menulis block %lu (%s).  "
+
+#: e2fsck/emptydir.c:56
+msgid "empty dirblocks"
+msgstr "dirblock kosong"
+
+#: e2fsck/emptydir.c:61
+msgid "empty dir map"
+msgstr "dir map kosong"
+
+#: e2fsck/emptydir.c:97
+#, c-format
+msgid "Empty directory block %u (#%d) in inode %u\n"
+msgstr "Direktori block %u (#%d) kosong dalam inode %u\n"
+
+#: e2fsck/extend.c:21
+#, c-format
+msgid "%s: %s filename nblocks blocksize\n"
+msgstr "%s: %s filename nblocks blocksize\n"
+
+#: e2fsck/extend.c:43
+#, c-format
+msgid "Illegal number of blocks!\n"
+msgstr "Nomor dari block tidak legal!\n"
+
+#: e2fsck/extend.c:49
+#, c-format
+msgid "Couldn't allocate block buffer (size=%d)\n"
+msgstr "Tidak dapat mengalokasikan block buffer (ukuran=%d)\n"
+
+#: e2fsck/flushb.c:34
+#, c-format
+msgid "Usage: %s disk\n"
+msgstr "Penggunaan: %s disk\n"
+
+#: e2fsck/flushb.c:63
+#, c-format
+msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
+msgstr "BLKFLSBUF ioctl tidak disupport! Tidak dapat memflush buffer.\n"
+
+#: e2fsck/iscan.c:46
+#, c-format
+msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
+msgstr "Penggunaan: %s [-F] [-I inode_buffer_block] perangkat\n"
+
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
+#, c-format
+msgid "while opening %s for flushing"
+msgstr "ketika membuka %s untuk flushing"
+
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
+#, c-format
+msgid "while trying to flush %s"
+msgstr "ketika mencoba untuk memflush %s"
+
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
+msgid "while opening inode scan"
+msgstr "ketika mencoba membuka inode scan"
+
+#: e2fsck/iscan.c:129 misc/e2image.c:507
+msgid "while getting next inode"
+msgstr "ketika memperoleh inode berikutnya"
+
+#: e2fsck/iscan.c:138
+#, c-format
+msgid "%u inodes scanned.\n"
+msgstr "%u inodes discan.\n"
+
+#: e2fsck/journal.c:507
+msgid "reading journal superblock\n"
+msgstr "membaca journal superblock\n"
+
+#: e2fsck/journal.c:564
+#, c-format
+msgid "%s: no valid journal superblock found\n"
+msgstr "%s: journal superblock tidak valid ditemukan\n"
+
+#: e2fsck/journal.c:573
+#, c-format
+msgid "%s: journal too short\n"
+msgstr "%s: journal terlalu pendek\n"
+
+#: e2fsck/journal.c:860
+#, c-format
+msgid "%s: recovering journal\n"
+msgstr "%s: merecovery journal\n"
+
+#: e2fsck/journal.c:862
+#, c-format
+msgid "%s: won't do journal recovery while read-only\n"
+msgstr "%s: tidak akan melakukan journal recovery ketika read-only\n"
+
+#: e2fsck/journal.c:887
+#, c-format
+msgid "while trying to re-open %s"
+msgstr "ketika mencoba untuk membuka %s"
+
+#: e2fsck/message.c:110
+msgid "aextended attribute"
+msgstr "aextended attribute"
+
+#: e2fsck/message.c:111
+msgid "Aerror allocating"
+msgstr "Aerror mengalokasikan"
+
+#: e2fsck/message.c:112
+msgid "bblock"
+msgstr "bblock"
+
+#: e2fsck/message.c:113
+msgid "Bbitmap"
+msgstr "Bbitmap"
+
+#: e2fsck/message.c:114
+msgid "ccompress"
+msgstr "ccompress"
+
+#: e2fsck/message.c:115
+msgid "Cconflicts with some other fs @b"
+msgstr "Ckonflik dengan beberapa filesystem lain @b"
+
+#: e2fsck/message.c:116
+msgid "iinode"
+msgstr "iinode"
+
+#: e2fsck/message.c:117
+msgid "Iillegal"
+msgstr "Iilegal"
+
+#: e2fsck/message.c:118
+msgid "jjournal"
+msgstr "jjournal"
+
+#: e2fsck/message.c:119
+msgid "Ddeleted"
+msgstr "Ddeleted"
+
+#: e2fsck/message.c:120
+msgid "ddirectory"
+msgstr "ddirektori"
+
+#: e2fsck/message.c:121
+msgid "eentry"
+msgstr "eentri"
+
+#: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "E@e '%Dn' dalam %p (%i)"
+
+#: e2fsck/message.c:123
+msgid "ffilesystem"
+msgstr "ffilesystem"
+
+#: e2fsck/message.c:124
+msgid "Ffor @i %i (%Q) is"
+msgstr "Funtuk @i %i (%Q) adalah"
+
+#: e2fsck/message.c:125
+msgid "ggroup"
+msgstr "ggrup"
+
+#: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "hHTREE @d @i"
+
+#: e2fsck/message.c:127
+msgid "llost+found"
+msgstr "llost+found"
+
+#: e2fsck/message.c:128
+msgid "Lis a link"
+msgstr "Ladalah sebuah link"
+
+#: e2fsck/message.c:129
+msgid "mmultiply-claimed"
+msgstr "mmultiply-claimed"
+
+#: e2fsck/message.c:130
+msgid "ninvalid"
+msgstr "ninvalid"
+
+#: e2fsck/message.c:131
+msgid "oorphaned"
+msgstr "oorphaned"
+
+#: e2fsck/message.c:132
+msgid "pproblem in"
+msgstr "pproblem dalam"
+
+#: e2fsck/message.c:133
+msgid "rroot @i"
+msgstr "rroot @i"
+
+#: e2fsck/message.c:134
+msgid "sshould be"
+msgstr "sseharusnya"
+
+#: e2fsck/message.c:135
+msgid "Ssuper@b"
+msgstr "Ssuper@b"
+
+#: e2fsck/message.c:136
+msgid "uunattached"
+msgstr "uunattached"
+
+#: e2fsck/message.c:137
+msgid "vdevice"
+msgstr "vperangkat"
+
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xextent"
+
+#: e2fsck/message.c:139
+msgid "zzero-length"
+msgstr "zzero-length"
+
+#: e2fsck/message.c:150
+msgid "<The NULL inode>"
+msgstr "<Inode Kosong>"
+
+#: e2fsck/message.c:151
+msgid "<The bad blocks inode>"
+msgstr "<Bad block inode>"
+
+#: e2fsck/message.c:153
+msgid "<The ACL index inode>"
+msgstr "<ACL index inode>"
+
+#: e2fsck/message.c:154
+msgid "<The ACL data inode>"
+msgstr "<ACL data inode>"
+
+#: e2fsck/message.c:155
+msgid "<The boot loader inode>"
+msgstr "<boot loader inode>"
+
+#: e2fsck/message.c:156
+msgid "<The undelete directory inode>"
+msgstr "<undelete direktori inode>"
+
+#: e2fsck/message.c:157
+msgid "<The group descriptor inode>"
+msgstr "<inode deskripsi grup>"
+
+#: e2fsck/message.c:158
+msgid "<The journal inode>"
+msgstr "<Inode journal>"
+
+#: e2fsck/message.c:159
+msgid "<Reserved inode 9>"
+msgstr "<Inode terpesan 9>"
+
+#: e2fsck/message.c:160
+msgid "<Reserved inode 10>"
+msgstr "<Inode Terpesan 10>"
+
+#: e2fsck/message.c:323
+#, c-format
+msgid "regular file"
+msgstr "berkas biasa"
+
+#: e2fsck/message.c:325
+#, c-format
+msgid "directory"
+msgstr "direktori"
+
+#: e2fsck/message.c:327
+#, c-format
+msgid "character device"
+msgstr "karakter device"
+
+#: e2fsck/message.c:329
+#, c-format
+msgid "block device"
+msgstr "block device"
+
+#: e2fsck/message.c:331
+#, c-format
+msgid "named pipe"
+msgstr "named pipe"
+
+#: e2fsck/message.c:333
+#, c-format
+msgid "symbolic link"
+msgstr "symbolic link"
+
+#: e2fsck/message.c:335
+#, c-format
+msgid "socket"
+msgstr "socket"
+
+#: e2fsck/message.c:337
+#, c-format
+msgid "unknown file type with mode 0%o"
+msgstr "tipe file tidak diketahui dengan mode 0%o"
+
+#: e2fsck/pass1b.c:220
+msgid "multiply claimed inode map"
+msgstr "multiply diklaim inode map"
+
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
+#, c-format
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "internal error: tidak dapat menemukan dup_blk untuk %u\n"
+
+#: e2fsck/pass1b.c:757
+msgid "returned from clone_file_block"
+msgstr "kembali dari clone_file_block"
+
+#: e2fsck/pass1b.c:776
+#, c-format
+msgid "internal error: couldn't lookup EA block record for %u"
+msgstr "internal error: tidak dapat menemukan EA block record untuk %u"
+
+#: e2fsck/pass1b.c:788
+#, c-format
+msgid "internal error: couldn't lookup EA inode record for %u"
+msgstr "internal error: tidak dapat menemukan EA inode record untuk %u"
+
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
+msgid "reading directory block"
+msgstr "membaca direktori block"
+
+#: e2fsck/pass1.c:552
+msgid "in-use inode map"
+msgstr "in-use inode map"
+
+#: e2fsck/pass1.c:561
+msgid "directory inode map"
+msgstr "direktori inode map"
+
+#: e2fsck/pass1.c:569
+msgid "regular file inode map"
+msgstr "regular file inode map"
+
+#: e2fsck/pass1.c:576
+msgid "in-use block map"
+msgstr "in-use block map"
+
+#: e2fsck/pass1.c:630
+msgid "opening inode scan"
+msgstr "membuka inode scan"
+
+#: e2fsck/pass1.c:654
+msgid "getting next inode from scan"
+msgstr "memperoleh inode selanjutnya dari scan"
+
+#: e2fsck/pass1.c:1123
+msgid "Pass 1"
+msgstr "Tahap 1"
+
+#: e2fsck/pass1.c:1180
+#, c-format
+msgid "reading indirect blocks of inode %u"
+msgstr "membaca indirect block dari inode %u"
+
+#: e2fsck/pass1.c:1224
+msgid "bad inode map"
+msgstr "inode map buruk"
+
+#: e2fsck/pass1.c:1246
+msgid "inode in bad block map"
+msgstr "inode dalam bad block map"
+
+#: e2fsck/pass1.c:1266
+msgid "imagic inode map"
+msgstr "imagic inode map"
+
+#: e2fsck/pass1.c:1293
+msgid "multiply claimed block map"
+msgstr "multiply diklaim block map"
+
+#: e2fsck/pass1.c:1392
+msgid "ext attr block map"
+msgstr "ext attr block map"
+
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): diperkirakan %6lu diperoleh phys %6lu (blkcnt %lld)\n"
+
+#: e2fsck/pass1.c:2449
+msgid "block bitmap"
+msgstr "block bitmap"
+
+#: e2fsck/pass1.c:2453
+msgid "inode bitmap"
+msgstr "inode bitmap"
+
+#: e2fsck/pass1.c:2457
+msgid "inode table"
+msgstr "inode table"
+
+#: e2fsck/pass2.c:283
+msgid "Pass 2"
+msgstr "Tahap 2"
+
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Tidak dapat melanjutkan."
+
+#: e2fsck/pass3.c:76
+msgid "inode done bitmap"
+msgstr "inode selesai bitmap"
+
+#: e2fsck/pass3.c:84
+msgid "Peak memory"
+msgstr "Puncak pemakaian memori"
+
+#: e2fsck/pass3.c:134
+msgid "Pass 3"
+msgstr "Tahap 3"
+
+#: e2fsck/pass3.c:320
+msgid "inode loop detection bitmap"
+msgstr "inode deteksi loop bitmap"
+
+#: e2fsck/pass4.c:191
+msgid "Pass 4"
+msgstr "Tahap 4"
+
+#: e2fsck/pass5.c:64
+msgid "Pass 5"
+msgstr "Tahap 5"
+
+#: e2fsck/problem.c:50
+msgid "(no prompt)"
+msgstr "(tidak ada prompt)"
+
+#: e2fsck/problem.c:51
+msgid "Fix"
+msgstr "Betulkan"
+
+#: e2fsck/problem.c:52
+msgid "Clear"
+msgstr "Dihapus"
+
+#: e2fsck/problem.c:53
+msgid "Relocate"
+msgstr "Dipindahkan"
+
+#: e2fsck/problem.c:54
+msgid "Allocate"
+msgstr "Dialokasikan"
+
+#: e2fsck/problem.c:55
+msgid "Expand"
+msgstr "Diexpand"
+
+#: e2fsck/problem.c:56
+msgid "Connect to /lost+found"
+msgstr "Menyambungkan ke /lost+found"
+
+#: e2fsck/problem.c:57
+msgid "Create"
+msgstr "Membuat"
+
+#: e2fsck/problem.c:58
+msgid "Salvage"
+msgstr "Mengambil"
+
+#: e2fsck/problem.c:59
+msgid "Truncate"
+msgstr "Truncate"
+
+#: e2fsck/problem.c:60
+msgid "Clear inode"
+msgstr "Menghapus inode"
+
+#: e2fsck/problem.c:61
+msgid "Abort"
+msgstr "Membatalkan"
+
+#: e2fsck/problem.c:62
+msgid "Split"
+msgstr "Membagi"
+
+#: e2fsck/problem.c:63
+msgid "Continue"
+msgstr "Melanjutkan"
+
+#: e2fsck/problem.c:64
+msgid "Clone multiply-claimed blocks"
+msgstr "Kopi multiply-claimed blocks"
+
+#: e2fsck/problem.c:65
+msgid "Delete file"
+msgstr "Hapus berkas"
+
+#: e2fsck/problem.c:66
+msgid "Suppress messages"
+msgstr "Suppress pesan"
+
+#: e2fsck/problem.c:67
+msgid "Unlink"
+msgstr "Unlink"
+
+#: e2fsck/problem.c:68
+msgid "Clear HTree index"
+msgstr "Hapus HTree index"
+
+#: e2fsck/problem.c:69
+msgid "Recreate"
+msgstr "Buat kembali"
+
+#: e2fsck/problem.c:78
+msgid "(NONE)"
+msgstr "(KOSONG)"
+
+#: e2fsck/problem.c:79
+msgid "FIXED"
+msgstr "DIBETULKAN"
+
+#: e2fsck/problem.c:80
+msgid "CLEARED"
+msgstr "DIHAPUS"
+
+#: e2fsck/problem.c:81
+msgid "RELOCATED"
+msgstr "DIPINDAHKAN"
+
+#: e2fsck/problem.c:82
+msgid "ALLOCATED"
+msgstr "DIALOKASIKAN"
+
+#: e2fsck/problem.c:83
+msgid "EXPANDED"
+msgstr "DIEXPAND"
+
+#: e2fsck/problem.c:84
+msgid "RECONNECTED"
+msgstr "DIHUBUNGKAN"
+
+#: e2fsck/problem.c:85
+msgid "CREATED"
+msgstr "DIBUAT"
+
+#: e2fsck/problem.c:86
+msgid "SALVAGED"
+msgstr "DIAMANKAN"
+
+#: e2fsck/problem.c:87
+msgid "TRUNCATED"
+msgstr "DIPOTONG"
+
+#: e2fsck/problem.c:88
+msgid "INODE CLEARED"
+msgstr "INODE DIHAPUS"
+
+#: e2fsck/problem.c:89
+msgid "ABORTED"
+msgstr "DIBATALKAN"
+
+#: e2fsck/problem.c:90
+msgid "SPLIT"
+msgstr "DIBAGI"
+
+#: e2fsck/problem.c:91
+msgid "CONTINUING"
+msgstr "MELANJUTKAN"
+
+#: e2fsck/problem.c:92
+msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
+msgstr "MULTIPLY-CLAIMED BLOK DIKOPI"
+
+#: e2fsck/problem.c:93
+msgid "FILE DELETED"
+msgstr "BERKAS DIHAPUS"
+
+#: e2fsck/problem.c:94
+msgid "SUPPRESSED"
+msgstr "DIAKHIRI"
+
+#: e2fsck/problem.c:95
+msgid "UNLINKED"
+msgstr "DILEPAS"
+
+#: e2fsck/problem.c:96
+msgid "HTREE INDEX CLEARED"
+msgstr "HTREE INDEX DIHAPUS"
+
+#: e2fsck/problem.c:97
+msgid "WILL RECREATE"
+msgstr "AKAN MEMBUAT KEMBALI"
+
+#. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:106
+msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "@b @B untuk @g %g tidak dalam @g. (@b %b)\n"
+
+#. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:110
+msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "@i @B untuk @G %G tidak dalam @g. (@b %b)\n"
+
+#. @-expanded: inode table for group %g is not in group.  (block %b)\n
+#. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
+#: e2fsck/problem.c:115
+msgid ""
+"@i table for @g %g is not in @g.  (@b %b)\n"
+"WARNING: SEVERE DATA LOSS POSSIBLE.\n"
+msgstr ""
+"@i table untuk @g %g tidak berada dalam @g. (@b %b)\n"
+"PERINGATAN: KEMUNGKINAN KEHILANGAN DATA BESAR.\n"
+
+#. @-expanded: \n
+#. @-expanded: The superblock could not be read or does not describe a correct ext2\n
+#. @-expanded: filesystem.  If the device is valid and it really contains an ext2\n
+#. @-expanded: filesystem (and not swap or ufs or something else), then the superblock\n
+#. @-expanded: is corrupt, and you might try running e2fsck with an alternate superblock:\n
+#. @-expanded:     e2fsck -b %S <device>\n
+#. @-expanded: \n
+#: e2fsck/problem.c:121
+#, c-format
+msgid ""
+"\n"
+"The @S could not be read or does not describe a correct ext2\n"
+"@f.  If the @v is valid and it really contains an ext2\n"
+"@f (and not swap or ufs or something else), then the @S\n"
+"is corrupt, and you might try running e2fsck with an alternate @S:\n"
+"    e2fsck -b %S <@v>\n"
+"\n"
+msgstr ""
+"\n"
+"@S tidak dapat dibaca atau tidak dapat menjelaskan ext2 dengan benar\n"
+"@f. Jika @v tidak valid dan ini berisi sebuah ext2\n"
+"@f (dan bukan swap atau ufs atau sesuatu yang lain), maka @S\n"
+"korup, dan anda mungkin bisa mencoba menjalankan e2fsck secara alternatif @S:\n"
+"     e2fsck -b %S <@v>\n"
+"\n"
+
+#. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
+#. @-expanded: The physical size of the device is %c blocks\n
+#. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
+#: e2fsck/problem.c:130
+msgid ""
+"The @f size (according to the @S) is %b @bs\n"
+"The physical size of the @v is %c @bs\n"
+"Either the @S or the partition table is likely to be corrupt!\n"
+msgstr ""
+"Ukuran @f (menurut dari @S) adalah %b @bs\n"
+"Ukuran fisik dari @v adalah %c @bs\n"
+"Kalau nggak @S atau tabel partisi yang mungkin korup!\n"
+
+#. @-expanded: superblock block_size = %b, fragsize = %c.\n
+#. @-expanded: This version of e2fsck does not support fragment sizes different\n
+#. @-expanded: from the block size.\n
+#: e2fsck/problem.c:137
+msgid ""
+"@S @b_size = %b, fragsize = %c.\n"
+"This version of e2fsck does not support fragment sizes different\n"
+"from the @b size.\n"
+msgstr ""
+"@S @b_size = %b, fragsize = %c.\n"
+"Versi e2fsck ini tidak mengimplementasikan untuk ukuran fragment yang berbeda\n"
+"dari @b.\n"
+
+#. @-expanded: superblock blocks_per_group = %b, should have been %c\n
+#: e2fsck/problem.c:144
+msgid "@S @bs_per_group = %b, should have been %c\n"
+msgstr "@S @bs_per_group = %b, seharusnya %c\n"
+
+#. @-expanded: superblock first_data_block = %b, should have been %c\n
+#: e2fsck/problem.c:149
+msgid "@S first_data_@b = %b, should have been %c\n"
+msgstr "@S first_data_@b = %b, seharusnya %c\n"
+
+#. @-expanded: filesystem did not have a UUID; generating one.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:154
+msgid ""
+"@f did not have a UUID; generating one.\n"
+"\n"
+msgstr ""
+"@f tidak memiliki sebuah UUID; membuat satu.\n"
+"\n"
+
+#: e2fsck/problem.c:159
+#, c-format
+msgid ""
+"Note: if several inode or block bitmap blocks or part\n"
+"of the inode table require relocation, you may wish to try\n"
+"running e2fsck with the '-b %S' option first.  The problem\n"
+"may lie only with the primary block group descriptors, and\n"
+"the backup block group descriptors may be OK.\n"
+"\n"
+msgstr ""
+"Catatan: jika beberapa inode atau blok bitmap blok atau bagian\n"
+"dari tabel inode membutuhkan relokasi, anda mungkin bisa mencoba\n"
+"dengan menjalankan e2fsck dengan opsi '-b %S' terlebih dahulu. Masalah\n"
+"yang mungkin timbul jika dengan menggunakan blok deskripsi utama, dan\n"
+"blok cadangan grup deskripsi mungkin OK.\n"
+"\n"
+
+#. @-expanded: Corruption found in superblock.  (%s = %N).\n
+#: e2fsck/problem.c:168
+msgid "Corruption found in @S.  (%s = %N).\n"
+msgstr "Korupsi ditemukan di @S. (%s = %N).\n"
+
+#. @-expanded: Error determining size of the physical device: %m\n
+#: e2fsck/problem.c:173
+#, c-format
+msgid "Error determining size of the physical @v: %m\n"
+msgstr "Error menentukan ukuran dari phisik @v: %m\n"
+
+#. @-expanded: inode count in superblock is %i, should be %j.\n
+#: e2fsck/problem.c:178
+msgid "@i count in @S is %i, @s %j.\n"
+msgstr "@i terhitung dalam @S adalah %i, @s %j.\n"
+
+#: e2fsck/problem.c:182
+msgid "The Hurd does not support the filetype feature.\n"
+msgstr "Hurd tidak mendukung layanan filetype.\n"
+
+#. @-expanded: superblock has an invalid journal (inode %i).\n
+#: e2fsck/problem.c:187
+#, c-format
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "@S memiliki sebuah @n @j (@i %i).\n"
+
+#. @-expanded: External journal has multiple filesystem users (unsupported).\n
+#: e2fsck/problem.c:192
+msgid "External @j has multiple @f users (unsupported).\n"
+msgstr "External @j memiliki multiple @f dari pengguna (tidak dilayani).\n"
+
+#. @-expanded: Can't find external journal\n
+#: e2fsck/problem.c:197
+msgid "Can't find external @j\n"
+msgstr "Tidak dapat menemukan external @j\n"
+
+#. @-expanded: External journal has bad superblock\n
+#: e2fsck/problem.c:202
+msgid "External @j has bad @S\n"
+msgstr "External @j memiliki bad @S\n"
+
+#. @-expanded: External journal does not support this filesystem\n
+#: e2fsck/problem.c:207
+msgid "External @j does not support this @f\n"
+msgstr "External @j tidak melayani ini @f\n"
+
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
+#. @-expanded: format.\n
+#. @-expanded: It is also possible the journal superblock is corrupt.\n
+#: e2fsck/problem.c:212
+msgid ""
+"@f @j @S is unknown type %N (unsupported).\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
+"It is also possible the @j @S is corrupt.\n"
+msgstr ""
+"@f @j @S memiliki tipe yang tidak diketahui %N (tidak disupport).\n"
+"Ini sangat memungkinkan jika salinan dari e2fsck sudah lama dan/atau tidak melayani format @j ini.\n"
+"Ini juga mungkin jika @j @S telah terkorupsi.\n"
+
+#. @-expanded: journal superblock is corrupt.\n
+#: e2fsck/problem.c:220
+msgid "@j @S is corrupt.\n"
+msgstr "@j @S telah terkorupsi.\n"
+
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
+#: e2fsck/problem.c:225
+#, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "@S tanda has_@j hilang, tetapi @j %s ada.\n"
+
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
+#: e2fsck/problem.c:230
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "@S tanda needs_recovery ada, tetapi tidak memiliki @j.\n"
+
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
+#: e2fsck/problem.c:235
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "@S tanda need_recovery sudah hilang, tetapi @j memiliki data.\n"
+
+#. @-expanded: Clear journal
+#: e2fsck/problem.c:240
+msgid "Clear @j"
+msgstr "Hapus @j"
+
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "@f memiliki feature flag(s) set, tetapi memiliki sebuah revisi 0 @f."
+
+#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
+#: e2fsck/problem.c:250
+msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, ukuran=%Is)\n"
+
+#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:255
+msgid "@I @b #%B (%b) found in @o @i %i.\n"
+msgstr "@I @b #%B (%b) ditemukan dalam @o @i %i.\n"
+
+#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:260
+msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
+msgstr "Sudah dihapus @b #%B (%b) ditemukan dalam @o @i %i.\n"
+
+#. @-expanded: illegal orphaned inode %i in superblock.\n
+#: e2fsck/problem.c:265
+#, c-format
+msgid "@I @o @i %i in @S.\n"
+msgstr "@I @o @i %i dalam @S.\n"
+
+#. @-expanded: illegal inode %i in orphaned inode list.\n
+#: e2fsck/problem.c:270
+#, c-format
+msgid "@I @i %i in @o @i list.\n"
+msgstr "@I @i %i dalam daftar @o @i.\n"
+
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "@j @S memiliki sebuah feature yang tidak diketahui aktif.\n"
+
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "@j @S memiliki sebuah feature yang tidak kompatibel yang tidak diketahui aktif.\n"
+
+#. @-expanded: journal version not supported by this e2fsck.\n
+#: e2fsck/problem.c:285
+msgid "@j version not supported by this e2fsck.\n"
+msgstr "versi @j tidak disupport oleh e2fsck ini.\n"
+
+#. @-expanded: Moving journal from /%s to hidden inode.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:290
+#, c-format
+msgid ""
+"Moving @j from /%s to hidden @i.\n"
+"\n"
+msgstr ""
+"Memindahkan @j dari /%s ke tersembunyi @i.\n"
+"\n"
+
+#. @-expanded: Error moving journal: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:295
+#, c-format
+msgid ""
+"Error moving @j: %m\n"
+"\n"
+msgstr ""
+"Error memindahkan @j: %m\n"
+"\n"
+
+#. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
+#. @-expanded: Clearing fields beyond the V1 journal superblock...\n
+#. @-expanded: \n
+#: e2fsck/problem.c:300
+msgid ""
+"Found @n V2 @j @S fields (from V1 @j).\n"
+"Clearing fields beyond the V1 @j @S...\n"
+"\n"
+msgstr ""
+"Menemukan @n V2 @j @S fields (dari V1 @j).\n"
+"Menghapus field diatas dari V1 @j @S...\n"
+"\n"
+
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Jalankan @j bagaimanapun"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Recovery flag tidak diset dalam backup @S, jadi menjalankan @j bagaimanapun.\n"
+
+#. @-expanded: Backing up journal inode block information.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:316
+msgid ""
+"Backing up @j @i @b information.\n"
+"\n"
+msgstr ""
+"Menyimpan informasi @j @i @b.\n"
+"\n"
+
+#. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
+#. @-expanded: is %N; should be zero.  
+#: e2fsck/problem.c:321
+msgid ""
+"@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
+"is %N; @s zero.  "
+msgstr ""
+"@f tidak memiliki resize_@i aktif, tetapi _reserved_gdt_@bs\n"
+"adalah %N; @s nol. "
+
+#. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
+#: e2fsck/problem.c:327
+msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
+msgstr "Resize_@i tidak aktif, tetapi resize @i bukan nol.  "
+
+#. @-expanded: Resize inode not valid.  
+#: e2fsck/problem.c:332
+msgid "Resize @i not valid.  "
+msgstr "Resize @i tidak valid.  "
+
+#. @-expanded: superblock last mount time is in the future.  
+#: e2fsck/problem.c:337
+msgid "@S last mount time is in the future.  "
+msgstr "@S terakhir waktu dimount berisi waktu yang akan datang.  "
+
+#. @-expanded: superblock last write time is in the future.  
+#: e2fsck/problem.c:342
+msgid "@S last write time is in the future.  "
+msgstr "@S terakhir waktu menulis berisi waktu yang akan datang"
+
+#. @-expanded: superblock hint for external superblock should be %X.  
+#: e2fsck/problem.c:346
+#, c-format
+msgid "@S hint for external superblock @s %X.  "
+msgstr "@S petunjuk untuk superblok luar @s %X.  "
+
+#. @-expanded: Adding dirhash hint to filesystem.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:351
+msgid ""
+"Adding dirhash hint to @f.\n"
+"\n"
+msgstr ""
+"Menambahkan dirhas hint ke @f.\n"
+"\n"
+
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "@g deskripsi %g checksum tidak valid.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "@g deskripsi %g ditandai unintialisasi tanpa menset feature.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "@g %g @b @B tidak terinitialisasi tetapi @i @B sedang digunakan.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "@g deskripsi %g memiliki inode yang tidak valid terhitung %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Terakhir @g @b @B tidak terinitialisasi.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Jurnal transaksi %i terkorupsi, balasan dibatalkan.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Tanda test_fs telah aktif (dan ext4 tersedia).  "
+
+#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
+#: e2fsck/problem.c:392
+msgid "Pass 1: Checking @is, @bs, and sizes\n"
+msgstr "Tahap 1: Memeriksa @i, @bs, dan ukuran\n"
+
+#. @-expanded: root inode is not a directory.  
+#: e2fsck/problem.c:396
+msgid "@r is not a @d.  "
+msgstr "@r bukan sebuah @d.  "
+
+#. @-expanded: root inode has dtime set (probably due to old mke2fs).  
+#: e2fsck/problem.c:401
+msgid "@r has dtime set (probably due to old mke2fs).  "
+msgstr "@r memiliki dtime terset (mungkin karena penggunaan mke2fs versi lama).  "
+
+#. @-expanded: Reserved inode %i (%Q) has invalid mode.  
+#: e2fsck/problem.c:406
+msgid "Reserved @i %i (%Q) has @n mode.  "
+msgstr "Reserved @i %i (%Q) memiliki @n mode.  "
+
+#. @-expanded: deleted inode %i has zero dtime.  
+#: e2fsck/problem.c:411
+#, c-format
+msgid "@D @i %i has zero dtime.  "
+msgstr "@D @i %i memiliki dtime nol.  "
+
+#. @-expanded: inode %i is in use, but has dtime set.  
+#: e2fsck/problem.c:416
+#, c-format
+msgid "@i %i is in use, but has dtime set.  "
+msgstr "@i %i sedang digunakan, tetapi miliki dtime terset.  "
+
+#. @-expanded: inode %i is a zero-length directory.  
+#: e2fsck/problem.c:421
+#, c-format
+msgid "@i %i is a @z @d.  "
+msgstr "@i %i adalah sebuah @z @d.  "
+
+#. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:426
+msgid "@g %g's @b @B at %b @C.\n"
+msgstr "@g %g's @b @B di %b @C.\n"
+
+#. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:431
+msgid "@g %g's @i @B at %b @C.\n"
+msgstr "@g %g's @i @B di %b @C.\n"
+
+#. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:436
+msgid "@g %g's @i table at %b @C.\n"
+msgstr "@G %g's @i tabel di %b @C.\n"
+
+#. @-expanded: group %g's block bitmap (%b) is bad.  
+#: e2fsck/problem.c:441
+msgid "@g %g's @b @B (%b) is bad.  "
+msgstr "@g %g's @b @B (%b) adalah buruk.  "
+
+#. @-expanded: group %g's inode bitmap (%b) is bad.  
+#: e2fsck/problem.c:446
+msgid "@g %g's @i @B (%b) is bad.  "
+msgstr "@g %g's @i @B (%b) adalah buruk.  "
+
+#. @-expanded: inode %i, i_size is %Is, should be %N.  
+#: e2fsck/problem.c:451
+msgid "@i %i, i_size is %Is, @s %N.  "
+msgstr "@i %i, i_size adalah %Is, @s %N.  "
+
+#. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
+#: e2fsck/problem.c:456
+msgid "@i %i, i_@bs is %Ib, @s %N.  "
+msgstr "@i %i, i_@bs adalah %Ib, @s %N.  "
+
+#. @-expanded: illegal block #%B (%b) in inode %i.  
+#: e2fsck/problem.c:461
+msgid "@I @b #%B (%b) in @i %i.  "
+msgstr "@I @b #%B (%b) dalam @i %i.  "
+
+#. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
+#: e2fsck/problem.c:466
+msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
+msgstr "@b #%B (%b) saling bertumpang tindih @f metadata dalam @i %i.  "
+
+#. @-expanded: inode %i has illegal block(s).  
+#: e2fsck/problem.c:471
+#, c-format
+msgid "@i %i has illegal @b(s).  "
+msgstr "@i %i memiliki @b(s) ilegal.  "
+
+#. @-expanded: Too many illegal blocks in inode %i.\n
+#: e2fsck/problem.c:476
+#, c-format
+msgid "Too many illegal @bs in @i %i.\n"
+msgstr "Terlalu banyak ilegal @bs dalam @i %i.\n"
+
+#. @-expanded: illegal block #%B (%b) in bad block inode.  
+#: e2fsck/problem.c:481
+msgid "@I @b #%B (%b) in bad @b @i.  "
+msgstr "@I @b #%B (%b) dalam @b @i buruk.  "
+
+#. @-expanded: Bad block inode has illegal block(s).  
+#: e2fsck/problem.c:486
+msgid "Bad @b @i has illegal @b(s).  "
+msgstr "@b @i buruk memiliki ilegal @b(s).  "
+
+#. @-expanded: Duplicate or bad block in use!\n
+#: e2fsck/problem.c:491
+msgid "Duplicate or bad @b in use!\n"
+msgstr "Duplikasi atau @b buruk sedang digunakan!\n"
+
+#. @-expanded: Bad block %b used as bad block inode indirect block.  
+#: e2fsck/problem.c:496
+msgid "Bad @b %b used as bad @b @i indirect @b.  "
+msgstr "@b %b buruk yang digunakan sama buruknya dengan @b @i indirect @b.  "
+
+#. @-expanded: \n
+#. @-expanded: The bad block inode has probably been corrupted.  You probably\n
+#. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
+#. @-expanded: in the filesystem.\n
+#: e2fsck/problem.c:501
+msgid ""
+"\n"
+"The bad @b @i has probably been corrupted.  You probably\n"
+"should stop now and run e2fsck -c to scan for bad blocks\n"
+"in the @f.\n"
+msgstr ""
+"\n"
+"@b @i buruk telah terkorupsi. Anda seharusnya berhenti\n"
+"sekarang dan menjalankan e2fsck -c untuk menscan untuk\n"
+"mencari blok buruk dalam @f.\n"
+
+#. @-expanded: \n
+#. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
+#: e2fsck/problem.c:508
+msgid ""
+"\n"
+"If the @b is really bad, the @f can not be fixed.\n"
+msgstr ""
+"\n"
+"Jika @b adalah sangat buruk, @f tidak dapat dibetulkan.\n"
+
+#. @-expanded: You can remove this block from the bad block list and hope\n
+#. @-expanded: that the block is really OK.  But there are no guarantees.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:513
+msgid ""
+"You can remove this @b from the bad @b list and hope\n"
+"that the @b is really OK.  But there are no guarantees.\n"
+"\n"
+msgstr ""
+"Anda dapat menghapus @b ini dari daftar @b buruk dan berharap\n"
+"@b benar benar OK. Tetapi tidak garansi untuk hal ini.\n"
+"\n"
+
+#. @-expanded: The primary superblock (%b) is on the bad block list.\n
+#: e2fsck/problem.c:519
+msgid "The primary @S (%b) is on the bad @b list.\n"
+msgstr "@S (%b) utama berada dalam daftar @b buruk.\n"
+
+#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
+#: e2fsck/problem.c:524
+msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
+msgstr "Blok %b dalam deskripsi @g utama berada dalam daftar @b buruk\n"
+
+#. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
+#: e2fsck/problem.c:530
+msgid "Warning: Group %g's @S (%b) is bad.\n"
+msgstr "Peringatan: Grup %g's @S (b) buruk.\n"
+
+#. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
+#: e2fsck/problem.c:535
+msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
+msgstr "Peringatan: Grup %g's salinan dari deskripsi @g memiliki sebuah @b (%b) buruk.\n"
+
+#. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
+#: e2fsck/problem.c:541
+msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
+msgstr "Programming error? @b #%b terklaim untuk tidak ada alasan dalam process_bad_@b.\n"
+
+#. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
+#: e2fsck/problem.c:547
+msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
+msgstr "@A %N kontinu @b(s) dalam @b @g %g untuk %s: %m\n"
+
+#. @-expanded: error allocating block buffer for relocating %s\n
+#: e2fsck/problem.c:552
+#, c-format
+msgid "@A @b buffer for relocating %s\n"
+msgstr "@A @b buffer untuk relokasi %s\n"
+
+#. @-expanded: Relocating group %g's %s from %b to %c...\n
+#: e2fsck/problem.c:557
+msgid "Relocating @g %g's %s from %b to %c...\n"
+msgstr "Memindahkan @g %g's %s dari %b ke %c...\n"
+
+#. @-expanded: Relocating group %g's %s to %c...\n
+#: e2fsck/problem.c:562
+#, c-format
+msgid "Relocating @g %g's %s to %c...\n"
+msgstr "Memindahkan @g %g's %s ke %c...\n"
+
+#. @-expanded: Warning: could not read block %b of %s: %m\n
+#: e2fsck/problem.c:567
+msgid "Warning: could not read @b %b of %s: %m\n"
+msgstr "Peringatan: tidak dapat membaca @b %b dari %s: %m\n"
+
+#. @-expanded: Warning: could not write block %b for %s: %m\n
+#: e2fsck/problem.c:572
+msgid "Warning: could not write @b %b for %s: %m\n"
+msgstr "Peringatan: tidak dapat menulis @b %b untuk %s: %m\n"
+
+#. @-expanded: error allocating inode bitmap (%N): %m\n
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
+msgid "@A @i @B (%N): %m\n"
+msgstr "@A @i @B (%N): %m\n"
+
+#. @-expanded: error allocating block bitmap (%N): %m\n
+#: e2fsck/problem.c:582
+msgid "@A @b @B (%N): %m\n"
+msgstr "@A @b @B (%N): %m\n"
+
+#. @-expanded: error allocating icount link information: %m\n
+#: e2fsck/problem.c:587
+#, c-format
+msgid "@A icount link information: %m\n"
+msgstr "@A icount link informasi: %m\n"
+
+#. @-expanded: error allocating directory block array: %m\n
+#: e2fsck/problem.c:592
+#, c-format
+msgid "@A @d @b array: %m\n"
+msgstr "@A @d @b array: %m\n"
+
+#. @-expanded: Error while scanning inodes (%i): %m\n
+#: e2fsck/problem.c:597
+#, c-format
+msgid "Error while scanning @is (%i): %m\n"
+msgstr "Error ketika melakukan scanning @is (%i): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i: %m\n
+#: e2fsck/problem.c:602
+#, c-format
+msgid "Error while iterating over @bs in @i %i: %m\n"
+msgstr "Error ketika mengiterasi melalui @bs dalam @i %i: %m\n"
+
+#. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
+#: e2fsck/problem.c:607
+msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
+msgstr "Error menyimpan @i count informasi (@i=%i, count=%N): %m\n"
+
+#. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
+#: e2fsck/problem.c:612
+msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
+msgstr "Error menyimpan @d @b informasi (@i=%i, @b=%b, num=%N): %m\n"
+
+#. @-expanded: Error reading inode %i: %m\n
+#: e2fsck/problem.c:618
+#, c-format
+msgid "Error reading @i %i: %m\n"
+msgstr "Error membaca @i %i: %m\n"
+
+#. @-expanded: inode %i has imagic flag set.  
+#: e2fsck/problem.c:626
+#, c-format
+msgid "@i %i has imagic flag set.  "
+msgstr "@i %i memiliki flag imagic terset.  "
+
+#. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
+#. @-expanded: or append-only flag set.  
+#: e2fsck/problem.c:631
+#, c-format
+msgid ""
+"Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
+"or append-only flag set.  "
+msgstr ""
+"Spesial (@v/socket/fifo/symlink) berkas (@i %i) memiliki ketahanan\n"
+"atau append-only flag terset."
+
+#. @-expanded: inode %i has compression flag set on filesystem without compression support.  
+#: e2fsck/problem.c:637
+#, c-format
+msgid "@i %i has @cion flag set on @f without @cion support.  "
+msgstr "@i %i memiliki @cion flag terset pada @f tanpa layanan @cion.  "
+
+#. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
+#: e2fsck/problem.c:642
+#, c-format
+msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
+msgstr "Spesial (@v/socket/fifo) @i %i memiliki ukuran kosong.  "
+
+#. @-expanded: journal inode is not in use, but contains data.  
+#: e2fsck/problem.c:652
+msgid "@j @i is not in use, but contains data.  "
+msgstr "@j @i sedang tidak digunakan, tetapi berisi data.  "
+
+#. @-expanded: journal is not regular file.  
+#: e2fsck/problem.c:657
+msgid "@j is not regular file.  "
+msgstr "@j bukan sebuah file regular.  "
+
+#. @-expanded: inode %i was part of the orphaned inode list.  
+#: e2fsck/problem.c:662
+#, c-format
+msgid "@i %i was part of the @o @i list.  "
+msgstr "@i %i adalah bagian dari daftar @o @i.  "
+
+#. @-expanded: inodes that were part of a corrupted orphan linked list found.  
+#: e2fsck/problem.c:668
+msgid "@is that were part of a corrupted orphan linked list found.  "
+msgstr "@i adalah bagian dari orphan terkorupsi yang ditemukan dari linked list.  "
+
+#. @-expanded: error allocating refcount structure (%N): %m\n
+#: e2fsck/problem.c:673
+msgid "@A refcount structure (%N): %m\n"
+msgstr "@A refcount structure (%N): %m\n"
+
+#. @-expanded: Error reading extended attribute block %b for inode %i.  
+#: e2fsck/problem.c:678
+msgid "Error reading @a @b %b for @i %i.  "
+msgstr "Error membaca @a @b %b untuk @i %i.  "
+
+#. @-expanded: inode %i has a bad extended attribute block %b.  
+#: e2fsck/problem.c:683
+msgid "@i %i has a bad @a @b %b.  "
+msgstr "@i %i memiliki sebuah @a @b %b buruk."
+
+#. @-expanded: Error reading extended attribute block %b (%m).  
+#: e2fsck/problem.c:688
+msgid "Error reading @a @b %b (%m).  "
+msgstr "Error membaca @a @b %b (%m).  "
+
+#. @-expanded: extended attribute block %b has reference count %B, should be %N.  
+#: e2fsck/problem.c:693
+msgid "@a @b %b has reference count %B, @s %N.  "
+msgstr "@a @b %b memiliki referensi terhitung %B, @s %N.  "
+
+#. @-expanded: Error writing extended attribute block %b (%m).  
+#: e2fsck/problem.c:698
+msgid "Error writing @a @b %b (%m).  "
+msgstr "Error menulis @a @b %b (%m).  "
+
+#. @-expanded: extended attribute block %b has h_blocks > 1.  
+#: e2fsck/problem.c:703
+msgid "@a @b %b has h_@bs > 1.  "
+msgstr "@a @b %b memiliki h_@bs > 1.  "
+
+#. @-expanded: error allocating extended attribute block %b.  
+#: e2fsck/problem.c:708
+msgid "@A @a @b %b.  "
+msgstr "@A @a @b %b.  "
+
+#. @-expanded: extended attribute block %b is corrupt (allocation collision).  
+#: e2fsck/problem.c:713
+msgid "@a @b %b is corrupt (allocation collision).  "
+msgstr "@a @b %b adalah korup (bentrok dalam alokasi).  "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid name).  
+#: e2fsck/problem.c:718
+msgid "@a @b %b is corrupt (@n name).  "
+msgstr "@a @b %b adalah korup (@n nama).  "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid value).  
+#: e2fsck/problem.c:723
+msgid "@a @b %b is corrupt (@n value).  "
+msgstr "@a @b %b adalah korup (@n value).  "
+
+#. @-expanded: inode %i is too big.  
+#: e2fsck/problem.c:728
+#, c-format
+msgid "@i %i is too big.  "
+msgstr "@i %i terlalu besar.  "
+
+#. @-expanded: block #%B (%b) causes directory to be too big.  
+#: e2fsck/problem.c:732
+msgid "@b #%B (%b) causes @d to be too big.  "
+msgstr "@b #%B (%b) menyebabkan @d terlalu besar.  "
+
+#. @-expanded: block #%B (%b) causes file to be too big.  
+#: e2fsck/problem.c:737
+msgid "@b #%B (%b) causes file to be too big.  "
+msgstr "@b #%B (%b) menyebabkan berkas terlalu besar.  "
+
+#. @-expanded: block #%B (%b) causes symlink to be too big.  
+#: e2fsck/problem.c:742
+msgid "@b #%B (%b) causes symlink to be too big.  "
+msgstr "@b #%B (%b) menyebabkan symlink terlalu besar.  "
+
+#. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
+#: e2fsck/problem.c:747
+#, c-format
+msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
+msgstr "@i %i memiliki INDEX_FL flag terset di @f tanpa bantuan htree.\n"
+
+#. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
+#: e2fsck/problem.c:752
+#, c-format
+msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
+msgstr "@i %i memiliki INDEX_FL flag terset tetapi tidak sebuah @d\n"
+
+#. @-expanded: HTREE directory inode %i has an invalid root node.\n
+#: e2fsck/problem.c:757
+#, c-format
+msgid "@h %i has an @n root node.\n"
+msgstr "@h %i memiliki sebuah @n titik root.\n"
+
+#. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
+#: e2fsck/problem.c:762
+msgid "@h %i has an unsupported hash version (%N)\n"
+msgstr "@h %i memiliki sebuah versi hash yang tidak dilayani (%N)\n"
+
+#. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
+#: e2fsck/problem.c:767
+#, c-format
+msgid "@h %i uses an incompatible htree root node flag.\n"
+msgstr "@h %i menggunakan sebuah htree yang tidak kompatible di titik root flag.\n"
+
+#. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
+#: e2fsck/problem.c:772
+msgid "@h %i has a tree depth (%N) which is too big\n"
+msgstr "@h %i memiliki sebuah kedalaman pohon (%N) yang terlalu besar\n"
+
+#. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
+#. @-expanded: filesystem metadata.  
+#: e2fsck/problem.c:777
+msgid ""
+"Bad @b @i has an indirect @b (%b) that conflicts with\n"
+"@f metadata.  "
+msgstr ""
+"Buruk @b @i memiliki sebuah @b (%b) tidak langsung yang konflik dengan\n"
+"@f metadata.  "
+
+#. @-expanded: Resize inode (re)creation failed: %m.
+#: e2fsck/problem.c:783
+#, c-format
+msgid "Resize @i (re)creation failed: %m."
+msgstr "Resize @i gagal membuat kembali: %m."
+
+#. @-expanded: inode %i has a extra size (%IS) which is invalid\n
+#: e2fsck/problem.c:788
+msgid "@i %i has a extra size (%IS) which is @n\n"
+msgstr "@i %i memiliki sebuah ukuran extra (%IS) yang berisi @n\n"
+
+#. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
+#: e2fsck/problem.c:793
+msgid "@a in @i %i has a namelen (%N) which is @n\n"
+msgstr "@a dalam @i %i memiliki sebuah panjang nama (%N) yang berisi @n\n"
+
+#. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
+#: e2fsck/problem.c:798
+msgid "@a in @i %i has a value offset (%N) which is @n\n"
+msgstr "@a dalam @i %i memiliki nilai ofset (%N) yang berisi @n\n"
+
+#. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
+#: e2fsck/problem.c:803
+msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
+msgstr "@a dalam @i %i memiliki sebuah nilai @b (%N) yang berisi @n (seharusnya 0)\n"
+
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "@a dalam @i %i memiliki sebuah nilai yang berukuran (%N) yang berisi @n\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "@a dalam @i %i memiliki sebuah hash (%N) yang berisi @n\n"
+
+#. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
+#: e2fsck/problem.c:818
+msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "@i %i adalah sebuah %It tetapi sepertinya benar benar sebuah direktori.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Error ketika membaca diatas @x tree dalam @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Gagal mengiterasi extens dalam @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"@i %i memiliki sebuah extensi @n\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"@i %i memiliki sebuah entensi @n\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "@i %i memiliki EXTENTS_FL tanda set di @f tanpa support extensi.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "@i %i adalah sebuah format extensi, tetapi @S hilang feature EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "@i %i hilang EXTENT_FL, tetapi adalah sebuah format extensi\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Fast symlink %i memiliki EXTENT_FL terset.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"@i %i telah tidak teratur extensinya\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "@i %i memiliki sebuah titik ekstensi tidak valid (blk %b, lblk %c)\n"
+
+#. @-expanded: \n
+#. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
+#. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
+#: e2fsck/problem.c:875
+msgid ""
+"\n"
+"Running additional passes to resolve @bs claimed by more than one @i...\n"
+"Pass 1B: Rescanning for @m @bs\n"
+msgstr ""
+"\n"
+"Menjalankan tahap tambahan untuk meresolve @bs diklaim oleh lebih dari satu @i...\n"
+"Tahap 1B: Menscan kembali untuk @m @bs\n"
+
+#. @-expanded: multiply-claimed block(s) in inode %i:
+#: e2fsck/problem.c:881
+#, c-format
+msgid "@m @b(s) in @i %i:"
+msgstr "@m @b(s) dalam @i %i:"
+
+#: e2fsck/problem.c:896
+#, c-format
+msgid "Error while scanning inodes (%i): %m\n"
+msgstr "Error ketika menscan inodes (%i): %m\n"
+
+#. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
+#: e2fsck/problem.c:901
+#, c-format
+msgid "@A @i @B (@i_dup_map): %m\n"
+msgstr "@A @i @B (@i_dup_map): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
+#: e2fsck/problem.c:906
+#, c-format
+msgid "Error while iterating over @bs in @i %i (%s): %m\n"
+msgstr "Error ketika mengiterasi di @bs dalam @i %i (%s): %m\n"
+
+#. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
+msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
+msgstr "Error menyesuaikan refcount untuk @a @b %b (@i %i): %m\n"
+
+#. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
+#: e2fsck/problem.c:917
+msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
+msgstr "Tahap 1C: Memeriksa direktori untuk @is dengan @m @bs\n"
+
+#. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
+#: e2fsck/problem.c:923
+msgid "Pass 1D: Reconciling @m @bs\n"
+msgstr "Tahap 1D: Membetulkan @m @bs\n"
+
+#. @-expanded: File %Q (inode #%i, mod time %IM) \n
+#. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
+#: e2fsck/problem.c:928
+msgid ""
+"File %Q (@i #%i, mod time %IM) \n"
+"  has %B @m @b(s), shared with %N file(s):\n"
+msgstr ""
+"Berkas %Q (@i #%i, mod time %IM) \n"
+"  memiliki %B @m @b(s), dibagi dengan %N berkas:\n"
+
+#. @-expanded: \t%Q (inode #%i, mod time %IM)\n
+#: e2fsck/problem.c:934
+msgid "\t%Q (@i #%i, mod time %IM)\n"
+msgstr "\t%Q (@i #%i, mod time %IM)\n"
+
+#. @-expanded: \t<filesystem metadata>\n
+#: e2fsck/problem.c:939
+msgid "\t<@f metadata>\n"
+msgstr "\t<@f metadata>\n"
+
+#. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
+#. @-expanded: \n
+#: e2fsck/problem.c:944
+msgid ""
+"(There are %N @is containing @m @bs.)\n"
+"\n"
+msgstr ""
+"(Ada %N @is berisi @m @bs.)\n"
+"\n"
+
+#. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:949
+msgid ""
+"@m @bs already reassigned or cloned.\n"
+"\n"
+msgstr ""
+"@m @bs telah diassign atau dikopi.\n"
+"\n"
+
+#: e2fsck/problem.c:962
+#, c-format
+msgid "Couldn't clone file: %m\n"
+msgstr "Tidak dapat menyalin file: %m\n"
+
+#. @-expanded: Pass 2: Checking directory structure\n
+#: e2fsck/problem.c:968
+msgid "Pass 2: Checking @d structure\n"
+msgstr "Tahap 2: Memeriksa struktur @d\n"
+
+#. @-expanded: invalid inode number for '.' in directory inode %i.\n
+#: e2fsck/problem.c:973
+#, c-format
+msgid "@n @i number for '.' in @d @i %i.\n"
+msgstr "@n @i jumlah untuk '.' dalam @d @i %i.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
+#: e2fsck/problem.c:978
+msgid "@E has @n @i #: %Di.\n"
+msgstr "@E memiliki @n @i #: %Di.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
+#: e2fsck/problem.c:983
+msgid "@E has @D/unused @i %Di.  "
+msgstr "@E memiliki @D/tidak dipakai @i %Di.   "
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
+#: e2fsck/problem.c:988
+msgid "@E @L to '.'  "
+msgstr "@E @L ke '.'  "
+
+#. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
+#: e2fsck/problem.c:993
+msgid "@E points to @i (%Di) located in a bad @b.\n"
+msgstr "@E menunjuk ke @i (%Di) terletak di dalam @b buruk.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
+#: e2fsck/problem.c:998
+msgid "@E @L to @d %P (%Di).\n"
+msgstr "@E @L ke @d %P (%Di).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
+#: e2fsck/problem.c:1003
+msgid "@E @L to the @r.\n"
+msgstr "@E @L ke @r.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
+#: e2fsck/problem.c:1008
+msgid "@E has illegal characters in its name.\n"
+msgstr "@E memiliki karakter ilegal dalam namanya.\n"
+
+#. @-expanded: Missing '.' in directory inode %i.\n
+#: e2fsck/problem.c:1013
+#, c-format
+msgid "Missing '.' in @d @i %i.\n"
+msgstr "Hilang '.' dalam @d @i %i.\n"
+
+#. @-expanded: Missing '..' in directory inode %i.\n
+#: e2fsck/problem.c:1018
+#, c-format
+msgid "Missing '..' in @d @i %i.\n"
+msgstr "Hilang '..' dalam @d @i %i.\n"
+
+#. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
+#: e2fsck/problem.c:1023
+msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
+msgstr "Pertama @e '%Dn' (@i=%Di) dalam @d @i %i (%p) @s '.'\n"
+
+#. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
+#: e2fsck/problem.c:1028
+msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
+msgstr "Kedua @e '%Dn' (@i=%Di) dalam @d @i %i @s '..'\n"
+
+#. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
+#: e2fsck/problem.c:1033
+msgid "i_faddr @F %IF, @s zero.\n"
+msgstr "i_faddr @F %IF, @s nol.\n"
+
+#. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
+#: e2fsck/problem.c:1038
+msgid "i_file_acl @F %If, @s zero.\n"
+msgstr "i_file_acl @F %If, @s nol.\n"
+
+#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1043
+msgid "i_dir_acl @F %Id, @s zero.\n"
+msgstr "i_dir_acl @F %Id, @s nol.\n"
+
+#. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1048
+msgid "i_frag @F %N, @s zero.\n"
+msgstr "i_frag @F %N, @s nol.\n"
+
+#. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1053
+msgid "i_fsize @F %N, @s zero.\n"
+msgstr "i_fsize @F %N, @s nol.\n"
+
+#. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
+#: e2fsck/problem.c:1058
+msgid "@i %i (%Q) has @n mode (%Im).\n"
+msgstr "@i %i (%Q) memiliki mode @n (%Im).\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
+#: e2fsck/problem.c:1063
+msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
+msgstr "@d @i %i, @b %B, ofset %N: @d terkorupsi\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
+#: e2fsck/problem.c:1068
+msgid "@d @i %i, @b %B, offset %N: filename too long\n"
+msgstr "@d @i %i, @b %B, ofset %N: nama berkas terlalu panjang\n"
+
+#. @-expanded: directory inode %i has an unallocated block #%B.  
+#: e2fsck/problem.c:1073
+msgid "@d @i %i has an unallocated @b #%B.  "
+msgstr "@d @i %i memiliki @b #%B yang tidak teralokasi.  "
+
+#. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1078
+#, c-format
+msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "'.' @d @e dalam @d @i %i tidak terakhiri dengan NULL\n"
+
+#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1083
+#, c-format
+msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "'..' @d @e dalam @d @i %i tidak terakhiri dengan NULL\n"
+
+#. @-expanded: inode %i (%Q) is an illegal character device.\n
+#: e2fsck/problem.c:1088
+msgid "@i %i (%Q) is an @I character @v.\n"
+msgstr "@i %i (%Q) adalah sebuah karakter @I @v.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal block device.\n
+#: e2fsck/problem.c:1093
+msgid "@i %i (%Q) is an @I @b @v.\n"
+msgstr "@i %i (%Q) adalah sebuah @I @b @v.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
+#: e2fsck/problem.c:1098
+msgid "@E is duplicate '.' @e.\n"
+msgstr "@E adalah salinan '.' @e.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
+#: e2fsck/problem.c:1103
+msgid "@E is duplicate '..' @e.\n"
+msgstr "@E adalah duplikasi dari '..' @e.\n"
+
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
+#, c-format
+msgid "Internal error: couldn't find dir_info for %i.\n"
+msgstr "Internal error: tidak dapat mencari dir_info untuk %i.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
+#: e2fsck/problem.c:1113
+msgid "@E has rec_len of %Dr, @s %N.\n"
+msgstr "@E memiliki rec_len dari %Dr, @s %N.\n"
+
+#. @-expanded: error allocating icount structure: %m\n
+#: e2fsck/problem.c:1118
+#, c-format
+msgid "@A icount structure: %m\n"
+msgstr "struktur @A icount: %m\n"
+
+#. @-expanded: Error iterating over directory blocks: %m\n
+#: e2fsck/problem.c:1123
+#, c-format
+msgid "Error iterating over @d @bs: %m\n"
+msgstr "Error mengiterasi melalui @d @bs: %m\n"
+
+#. @-expanded: Error reading directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1128
+msgid "Error reading @d @b %b (@i %i): %m\n"
+msgstr "Error membaca @d @b %b (@i %i): %m\n"
+
+#. @-expanded: Error writing directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1133
+msgid "Error writing @d @b %b (@i %i): %m\n"
+msgstr "Error menulis @d @b %b (@i %i): %m\n"
+
+#. @-expanded: error allocating new directory block for inode %i (%s): %m\n
+#: e2fsck/problem.c:1138
+#, c-format
+msgid "@A new @d @b for @i %i (%s): %m\n"
+msgstr "@A baru @d @b untuk @i %i (%s): %m\n"
+
+#. @-expanded: Error deallocating inode %i: %m\n
+#: e2fsck/problem.c:1143
+#, c-format
+msgid "Error deallocating @i %i: %m\n"
+msgstr "Error mendealokasikan @i %i: %m\n"
+
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "@d @e untuk '.' dalam %p (%i) besar.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal FIFO.\n
+#: e2fsck/problem.c:1153
+msgid "@i %i (%Q) is an @I FIFO.\n"
+msgstr "@i %i (%Q) adalah sebuah @I FIFO.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal socket.\n
+#: e2fsck/problem.c:1158
+msgid "@i %i (%Q) is an @I socket.\n"
+msgstr "@i %i (%Q) adalah sebuah @I socket.\n"
+
+#. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
+#: e2fsck/problem.c:1163
+msgid "Setting filetype for @E to %N.\n"
+msgstr "Setting filetype untuk @E ke %N.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
+#: e2fsck/problem.c:1168
+msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
+msgstr "@E memiliki sebuah tipe berkas yang tidak benar (sebelumnya %Dt, @s %N).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
+#: e2fsck/problem.c:1173
+msgid "@E has filetype set.\n"
+msgstr "@E memiliki filetype set.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
+#: e2fsck/problem.c:1178
+msgid "@E has a @z name.\n"
+msgstr "@E memiliki sebuah nama @z.\n"
+
+#. @-expanded: Symlink %Q (inode #%i) is invalid.\n
+#: e2fsck/problem.c:1183
+msgid "Symlink %Q (@i #%i) is @n.\n"
+msgstr "Symlink %Q (@i #%i) adalah @n.\n"
+
+#. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
+#: e2fsck/problem.c:1188
+msgid "@a @b @F @n (%If).\n"
+msgstr "@a @b @F @n (%If).\n"
+
+#. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
+#: e2fsck/problem.c:1193
+msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
+msgstr "@f berisi berkas besar, tetapi kurang LARGE_FILE flag dalam @S.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
+#: e2fsck/problem.c:1198
+msgid "@p @h %d: node (%B) not referenced\n"
+msgstr "@p @h %d: titik (%B) tidak memiliki referensi\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
+#: e2fsck/problem.c:1203
+msgid "@p @h %d: node (%B) referenced twice\n"
+msgstr "@p @h %d: titik (%B) memiliki dua referensi.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
+#: e2fsck/problem.c:1208
+msgid "@p @h %d: node (%B) has bad min hash\n"
+msgstr "@p @h %d: titik (%B) memiliki min hash buruk\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
+#: e2fsck/problem.c:1213
+msgid "@p @h %d: node (%B) has bad max hash\n"
+msgstr "@p @h %d: titik (%B) memiliki max has buruk\n"
+
+#. @-expanded: invalid HTREE directory inode %d (%q).  
+#: e2fsck/problem.c:1218
+msgid "@n @h %d (%q).  "
+msgstr "@n @h %d (%q).  "
+
+#. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
+#: e2fsck/problem.c:1222
+msgid "@p @h %d (%q): bad @b number %b.\n"
+msgstr "@p @h %d (%q): buruk @b nomor %b.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
+#: e2fsck/problem.c:1232
+#, c-format
+msgid "@p @h %d: root node is @n\n"
+msgstr "@p @h %d: titik root adalah @n\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
+#: e2fsck/problem.c:1237
+msgid "@p @h %d: node (%B) has @n limit (%N)\n"
+msgstr "@p @h %d: titik (%B) memiliki @n batas (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
+#: e2fsck/problem.c:1242
+msgid "@p @h %d: node (%B) has @n count (%N)\n"
+msgstr "@p @h %d: titik (%B) memiliki @n jumlah (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
+#: e2fsck/problem.c:1247
+msgid "@p @h %d: node (%B) has an unordered hash table\n"
+msgstr "@p @h %d: titik (%B) memiliki sebuah tabel hash yang tidak terurut\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p @h %d: titik (%B) memiliki @n kedalaman (%N)\n"
+
+#. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
+#: e2fsck/problem.c:1257
+msgid "Duplicate @E found.  "
+msgstr "Duplikasi @E ditemukan.  "
+
+#. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
+#. @-expanded: Rename to %s
+#: e2fsck/problem.c:1262
+#, no-c-format
+msgid ""
+"@E has a non-unique filename.\n"
+"Rename to %s"
+msgstr ""
+"@E memiliki sebuah nama file yang tidak uniq.\n"
+"Mengubah namanya ke %s"
+
+#. @-expanded: Duplicate entry '%Dn' found.\n
+#. @-expanded: \tMarking %p (%i) to be rebuilt.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1267
+msgid ""
+"Duplicate @e '%Dn' found.\n"
+"\tMarking %p (%i) to be rebuilt.\n"
+"\n"
+msgstr ""
+"Duplikasi @e '%Dn' ditemukan.\n"
+"\t Menandai %p (%i) untuk dibuat kembali.\n"
+"\n"
+
+#. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1272
+msgid "i_blocks_hi @F %N, @s zero.\n"
+msgstr "i_blocks_hi @F %N, @s nol.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Tidak terduga @b dalam @h %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@E referensi @i %Di dalam @g %g dimana _INODE_UNINIT telah diset.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@E referensi @i %Di ditemukan dalam @g %g's di daerah inode yang tidak digunakan.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi @F %N, @s nol.\n"
+
+#. @-expanded: Pass 3: Checking directory connectivity\n
+#: e2fsck/problem.c:1298
+msgid "Pass 3: Checking @d connectivity\n"
+msgstr "Tahap 3: Memeriksa konektivitas @d\n"
+
+#. @-expanded: root inode not allocated.  
+#: e2fsck/problem.c:1303
+msgid "@r not allocated.  "
+msgstr "@r tidak dialokasikan.  "
+
+#. @-expanded: No room in lost+found directory.  
+#: e2fsck/problem.c:1308
+msgid "No room in @l @d.  "
+msgstr "Tidak ada ruang dalam @l @d.  "
+
+#. @-expanded: Unconnected directory inode %i (%p)\n
+#: e2fsck/problem.c:1313
+#, c-format
+msgid "Unconnected @d @i %i (%p)\n"
+msgstr "Tidak terhubung @d @i %i (%p)\n"
+
+#. @-expanded: /lost+found not found.  
+#: e2fsck/problem.c:1318
+msgid "/@l not found.  "
+msgstr "/@l tidak ditemukan.  "
+
+#. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
+#: e2fsck/problem.c:1323
+msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
+msgstr "'..' dalam %Q (%i) adalah %P (%j), @s %q (%d).\n"
+
+#. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
+#: e2fsck/problem.c:1328
+msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
+msgstr "Buruk atau tidak ada /@l. Tidak dapat dihubungkan kembali.\n"
+
+#. @-expanded: Could not expand /lost+found: %m\n
+#: e2fsck/problem.c:1333
+#, c-format
+msgid "Could not expand /@l: %m\n"
+msgstr "Tidak dapat mengexpan /@l: %m\n"
+
+#: e2fsck/problem.c:1338
+#, c-format
+msgid "Could not reconnect %i: %m\n"
+msgstr "Tidak dapat menghubungkan %i: %m\n"
+
+#. @-expanded: Error while trying to find /lost+found: %m\n
+#: e2fsck/problem.c:1343
+#, c-format
+msgid "Error while trying to find /@l: %m\n"
+msgstr "Error ketika mencoba mencari /@l: %m\n"
+
+#. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1348
+#, c-format
+msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@b: %m ketika mencoba untuk membuat /@l @d\n"
+
+#. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1353
+#, c-format
+msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@i: %m ketika mencoba untuk membuat /@l @d\n"
+
+#. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
+#: e2fsck/problem.c:1358
+#, c-format
+msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
+msgstr "ext2fs_new_dir_@b: %m ketika membuat @d @b baru\n"
+
+#. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
+#: e2fsck/problem.c:1363
+#, c-format
+msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
+msgstr "ext2fs_write_dir_@b: %m ketika menulis @d @b untuk /@l\n"
+
+#. @-expanded: Error while adjusting inode count on inode %i\n
+#: e2fsck/problem.c:1368
+#, c-format
+msgid "Error while adjusting @i count on @i %i\n"
+msgstr "Error ketika menyesuaikan jumlah @i di @i %i\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1373
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: %m\n"
+"\n"
+msgstr ""
+"Tidak dapat membetulkan parent dari @i %i: %m\n"
+"\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1378
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
+"\n"
+msgstr ""
+"Tidak dapat membetulkan parent dari @i %i: Tidak dapat mencari parent @d @e\n"
+"\n"
+
+#. @-expanded: Error creating root directory (%s): %m\n
+#: e2fsck/problem.c:1388
+#, c-format
+msgid "Error creating root @d (%s): %m\n"
+msgstr "Error membuat root @d (%s): %m\n"
+
+#. @-expanded: Error creating /lost+found directory (%s): %m\n
+#: e2fsck/problem.c:1393
+#, c-format
+msgid "Error creating /@l @d (%s): %m\n"
+msgstr "Error membuat /@l @d (%s): %m\n"
+
+#. @-expanded: root inode is not a directory; aborting.\n
+#: e2fsck/problem.c:1398
+msgid "@r is not a @d; aborting.\n"
+msgstr "@r bukan sebuah @d: membatalkan.\n"
+
+#. @-expanded: Cannot proceed without a root inode.\n
+#: e2fsck/problem.c:1403
+msgid "Cannot proceed without a @r.\n"
+msgstr "Tidak dapat melanjutkan tanpa sebuah @r.\n"
+
+#. @-expanded: /lost+found is not a directory (ino=%i)\n
+#: e2fsck/problem.c:1413
+#, c-format
+msgid "/@l is not a @d (ino=%i)\n"
+msgstr "/@l bukan sebuah @d (ino=%i)\n"
+
+#: e2fsck/problem.c:1420
+msgid "Pass 3A: Optimizing directories\n"
+msgstr "Tahap 3A: Mengoptimasi direktori\n"
+
+#: e2fsck/problem.c:1425
+#, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Gagal membuat peng-iterasi dirs_to_hash: %m\n"
+
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Gagal mengoptimasi direktori %q (%d): %m\n"
+
+#: e2fsck/problem.c:1435
+msgid "Optimizing directories: "
+msgstr "Mengoptimasi direktori: "
+
+#: e2fsck/problem.c:1452
+msgid "Pass 4: Checking reference counts\n"
+msgstr "Tahap 4: Memeriksa jumlah referensi\n"
+
+#. @-expanded: unattached zero-length inode %i.  
+#: e2fsck/problem.c:1457
+#, c-format
+msgid "@u @z @i %i.  "
+msgstr "@u @z @i %i.  "
+
+#. @-expanded: unattached inode %i\n
+#: e2fsck/problem.c:1462
+#, c-format
+msgid "@u @i %i\n"
+msgstr "@u @i %i\n"
+
+#. @-expanded: inode %i ref count is %Il, should be %N.  
+#: e2fsck/problem.c:1467
+msgid "@i %i ref count is %Il, @s %N.  "
+msgstr "@i %i ref count adalah %Il, @s %N.  "
+
+#. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
+#. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
+#. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
+#: e2fsck/problem.c:1471
+msgid ""
+"WARNING: PROGRAMMING BUG IN E2FSCK!\n"
+"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
+"@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
+msgstr ""
+"PERINGATAN: BUG DALAM PEMROGRAMAN E2FSCK!\n"
+"\tATAU SEORANG BONEHEAD (ANDA) SEDANG MEMERIKAN SEBUAH FILESYSTEM (HIDUP) YANG TERPASANG.\n"
+"@i_link_info[%i] adalah %N, @i.i_links_count adalah %Il. Mereka @s adalah sama!\n"
+
+#. @-expanded: Pass 5: Checking group summary information\n
+#: e2fsck/problem.c:1481
+msgid "Pass 5: Checking @g summary information\n"
+msgstr "Tahap 5: Memeriksa ringkasan informasi @g\n"
+
+#. @-expanded: Padding at end of inode bitmap is not set. 
+#: e2fsck/problem.c:1486
+msgid "Padding at end of @i @B is not set. "
+msgstr "Menambahkan pad diakhir dari @i @B yang tidak terset.  "
+
+#. @-expanded: Padding at end of block bitmap is not set. 
+#: e2fsck/problem.c:1491
+msgid "Padding at end of @b @B is not set. "
+msgstr "Menambahkan pad di akhir dari @b @B adalah ter set.  "
+
+#. @-expanded: block bitmap differences: 
+#: e2fsck/problem.c:1496
+msgid "@b @B differences: "
+msgstr "@b @B perbedaan: "
+
+#. @-expanded: inode bitmap differences: 
+#: e2fsck/problem.c:1516
+msgid "@i @B differences: "
+msgstr "@i @B perbedaan: "
+
+#. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1536
+msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Kosong @is terhitung salah untuk @g #%g (%i, terhitung=%j).\n"
+
+#. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1541
+msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Direktori terhitung salah untuk @g #%g (%i, terhitung=%j).\n"
+
+#. @-expanded: Free inodes count wrong (%i, counted=%j).\n
+#: e2fsck/problem.c:1546
+msgid "Free @is count wrong (%i, counted=%j).\n"
+msgstr "Kosong @is terhitung salah (%i, terhitung=%j).\n"
+
+#. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
+#: e2fsck/problem.c:1551
+msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
+msgstr "Kosong @bs terhitung salah untuk @g #%g (%b, terhitung=%c).\n"
+
+#. @-expanded: Free blocks count wrong (%b, counted=%c).\n
+#: e2fsck/problem.c:1556
+msgid "Free @bs count wrong (%b, counted=%c).\n"
+msgstr "Kosong @bs terhitung salah (%b, terhitung=%c).\n"
+
+#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
+#. @-expanded: endpoints (%i, %j)\n
+#: e2fsck/problem.c:1561
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) tidak dapat mencocokan perhitungan @B titik ujung (%i, %j)\n"
+
+#: e2fsck/problem.c:1567
+msgid "Internal error: fudging end of bitmap (%N)\n"
+msgstr "Internal error: fudging berakhir dari bitmap (%N)\n"
+
+#. @-expanded: Error copying in replacement inode bitmap: %m\n
+#: e2fsck/problem.c:1572
+#, c-format
+msgid "Error copying in replacement @i @B: %m\n"
+msgstr "Error menyalin dalam mengganti @i @B: %m\n"
+
+#. @-expanded: Error copying in replacement block bitmap: %m\n
+#: e2fsck/problem.c:1577
+#, c-format
+msgid "Error copying in replacement @b @B: %m\n"
+msgstr "Error menyalin dalam mengganti @b @B: %m\n"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "@g %g @b(s) sedang digunakan tetapi @g tertanda BLOCK_UNINIT\n"
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "@g %g @i(s) sedang digunakan tetapi @g tertanda INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Membuat kembali @j"
+
+#: e2fsck/problem.c:1732
+#, c-format
+msgid "Unhandled error code (0x%x)!\n"
+msgstr "Kode error tidak tertangani (0x%x)!\n"
+
+#: e2fsck/problem.c:1827
+msgid "IGNORED"
+msgstr "DIABAIKAN"
+
+#: e2fsck/scantest.c:81
+#, c-format
+msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
+msgstr "Memori yang digunakan: %d, waktu yang digunakan: %6.3f/%6.3f/%6.3f\n"
+
+#: e2fsck/scantest.c:100
+#, c-format
+msgid "size of inode=%d\n"
+msgstr "ukuran dari inode=%d\n"
+
+#: e2fsck/scantest.c:121
+msgid "while starting inode scan"
+msgstr "ketika memulai scan dari inode"
+
+#: e2fsck/scantest.c:132
+msgid "while doing inode scan"
+msgstr "ketika melakukan pemeriksaan inode"
+
+#: e2fsck/super.c:187
+#, c-format
+msgid "while calling ext2fs_block_iterate for inode %d"
+msgstr "ketika memanggil ext2fs_block_iterate untuk inode %d"
+
+#: e2fsck/super.c:209
+#, c-format
+msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
+msgstr "ketika memanggil ext2fs_adjust_ea_refcount untuk inode %d"
+
+#: e2fsck/super.c:267
+msgid "Truncating"
+msgstr "Truncating"
+
+#: e2fsck/super.c:268
+msgid "Clearing"
+msgstr "Menghapus"
+
+#: e2fsck/unix.c:76
+#, c-format
+msgid ""
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
+"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extended-options] device\n"
+msgstr ""
+"Penggunaan: %s [-panyrcdfvtDFV] [-b superblok] [-B ukuran blok]\n"
+"\t\t[-I inode_buffer_block] [-P process_inode_size]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extendend-options] perangkat\n"
+
+#: e2fsck/unix.c:82
+#, c-format
+msgid ""
+"\n"
+"Emergency help:\n"
+" -p                   Automatic repair (no questions)\n"
+" -n                   Make no changes to the filesystem\n"
+" -y                   Assume \"yes\" to all questions\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
+" -f                   Force checking even if filesystem is marked clean\n"
+msgstr ""
+"\n"
+"Pertolongan darurat:\n"
+" -p                   Otomatis perbaikan (tanpa pertanyaan)\n"
+" -n                   Tidak membuat perubahan di filesystem\n"
+" -y                   Mengasumsi \"yes\" untuk semua pertanyaan\n"
+" -c                   Memeriksa blok buruk dan menambahkan hasilnya ke daftar blok buruk\n"
+" -f                   Memaksa memeriksa walaupun filesystem ditandai bersih\n"
+
+#: e2fsck/unix.c:88
+#, c-format
+msgid ""
+" -v                   Be verbose\n"
+" -b superblock        Use alternative superblock\n"
+" -B blocksize         Force blocksize when looking for superblock\n"
+" -j external_journal  Set location of the external journal\n"
+" -l bad_blocks_file   Add to badblocks list\n"
+" -L bad_blocks_file   Set badblocks list\n"
+msgstr ""
+" -v                   Tampilkan pesan pesan\n"
+" -b super blok        Gunakan superblok lain\n"
+" -B ukuran blok       Paksa menggunakan ukuran blok ketika mencari super blok\n"
+" -j external_journal  Set lokasi dari journal luar\n"
+" -l bad_blok_file     Tambahkan ke daftar blok buruk\n"
+" -L bad_blok_file     Set daftar blok buruk\n"
+
+#: e2fsck/unix.c:132
+#, c-format
+msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
+msgstr "%s: %u/%u berkas (%0d.%d%% tidak kontinu), %u/%u blok\n"
+
+#: e2fsck/unix.c:150
+#, c-format
+msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "         # dari inodes dengan ind/dind/tind blok: %u/%u/%u\n"
+
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Kedalaman Extensi histogram: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
+#, c-format
+msgid "while determining whether %s is mounted."
+msgstr "ketika sedang menentukan apakah %s sedang dimount."
+
+#: e2fsck/unix.c:225
+#, c-format
+msgid "Warning!  %s is mounted.\n"
+msgstr "Peringatan! %s sedang dimount.\n"
+
+#: e2fsck/unix.c:229
+#, c-format
+msgid "%s is mounted.  "
+msgstr "%s sedang dimount.   "
+
+#: e2fsck/unix.c:231
+msgid ""
+"Cannot continue, aborting.\n"
+"\n"
+msgstr ""
+"Tidak dapat melanjutkan, membatalkan.\n"
+"\n"
+
+#: e2fsck/unix.c:232
+#, c-format
+msgid ""
+"\n"
+"\n"
+"\a\a\a\aWARNING!!!  Running e2fsck on a mounted filesystem may cause\n"
+"SEVERE filesystem damage.\a\a\a\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"\a\a\a\aPERINGATAN!!! Menjalankan e2fsck di sebuah filesystem yang sedang dimount bisa menyebabkan\n"
+"kerusakan PARAH di filesystem.\a\a\a\n"
+"\n"
+
+#: e2fsck/unix.c:235
+msgid "Do you really want to continue"
+msgstr "Apakah anda yakin ingin melanjutkan"
+
+#: e2fsck/unix.c:237
+#, c-format
+msgid "check aborted.\n"
+msgstr "pemeriksaan dibatalkan.\n"
+
+#: e2fsck/unix.c:310
+msgid " contains a file system with errors"
+msgstr " berisi sebuah file system dengan errors"
+
+#: e2fsck/unix.c:312
+msgid " was not cleanly unmounted"
+msgstr " tidak bersih setelah diunmount."
+
+#: e2fsck/unix.c:314
+msgid " primary superblock features different from backup"
+msgstr " superblok utama memiliki feature berbeda dari backup"
+
+#: e2fsck/unix.c:318
+#, c-format
+msgid " has been mounted %u times without being checked"
+msgstr " telah dimount %u kali tanpa dilakukan pemeriksaan"
+
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " memiliki filesystem yang waktu terakhir diperiksa berada di masa yang akan datang"
+
+#: e2fsck/unix.c:330
+#, c-format
+msgid " has gone %u days without being checked"
+msgstr " telah lewat %u hari tanpa dilakukan pemeriksaan"
+
+#: e2fsck/unix.c:339
+msgid ", check forced.\n"
+msgstr ", pemeriksaan dipaksakan.\n"
+
+#: e2fsck/unix.c:342
+#, c-format
+msgid "%s: clean, %u/%u files, %u/%u blocks"
+msgstr "%s: bersih, %u/%u berkas, %u/%u blok"
+
+#: e2fsck/unix.c:359
+msgid " (check deferred; on battery)"
+msgstr " (pemeriksaan dibatalkan; power menggunakan batere)"
+
+#: e2fsck/unix.c:362
+msgid " (check after next mount)"
+msgstr " (pemeriksaan dilakukan setelah mount selanjutnya)"
+
+#: e2fsck/unix.c:364
+#, c-format
+msgid " (check in %ld mounts)"
+msgstr " (pemeriksaan dilakukan dalam %ld mounts)"
+
+#: e2fsck/unix.c:511
+#, c-format
+msgid "ERROR: Couldn't open /dev/null (%s)\n"
+msgstr "ERROR: Tidak dapat membuka /dev/null (%s)\n"
+
+#: e2fsck/unix.c:581
+#, c-format
+msgid "Invalid EA version.\n"
+msgstr "Versi EA tidak valid.\n"
+
+#: e2fsck/unix.c:590
+#, c-format
+msgid "Unknown extended option: %s\n"
+msgstr "Opsi extended tidak diketahui: %s\n"
+
+#: e2fsck/unix.c:612
+#, c-format
+msgid ""
+"Syntax error in e2fsck config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Syntax error dalam berkas konfigurasi e2fsck (%s, baris #%d)\n"
+"\t%s\n"
+
+#: e2fsck/unix.c:680
+#, c-format
+msgid "Error validating file descriptor %d: %s\n"
+msgstr "Error memvalidasi berkas deskripsi %d: %s\n"
+
+#: e2fsck/unix.c:684
+msgid "Invalid completion information file descriptor"
+msgstr "Informasi File berkas completion tidak valid"
+
+#: e2fsck/unix.c:699
+msgid "Only one of the options -p/-a, -n or -y may be specified."
+msgstr "Hanya salah satu dari opsi -p/-a, -n atau -y yang boleh dispesifikasikan."
+
+#: e2fsck/unix.c:720
+#, c-format
+msgid "The -t option is not supported on this version of e2fsck.\n"
+msgstr "Opsi -t tidak dilayani dalam versi e2fsck ini.\n"
+
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr "Tidak dapat meresolve '%s'"
+
+#: e2fsck/unix.c:830
+#, c-format
+msgid "The -c and the -l/-L options may not be both used at the same time.\n"
+msgstr "Opsi -c dan -l/-L tidak boleh digunakan secara bersamaan dalam satu waktu.\n"
+
+#: e2fsck/unix.c:878
+#, c-format
+msgid ""
+"E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
+"\n"
+msgstr ""
+"E2FSCK_JBD_DEBUG \"%s\" bukan sebuah integer\n"
+"\n"
+
+#: e2fsck/unix.c:887
+#, c-format
+msgid ""
+"\n"
+"Invalid non-numeric argument to -%c (\"%s\")\n"
+"\n"
+msgstr ""
+"\n"
+"Argument bukan numerik tidak valid untuk -%c (\"%s\")\n"
+"\n"
+
+#: e2fsck/unix.c:961
+#, c-format
+msgid "Error: ext2fs library version out of date!\n"
+msgstr "Error: ext2fs versi librari ketinggalan jaman!\n"
+
+#: e2fsck/unix.c:969
+msgid "while trying to initialize program"
+msgstr "ketika mencoba untuk menginisialisasi aplikasi"
+
+#: e2fsck/unix.c:980
+#, c-format
+msgid "\tUsing %s, %s\n"
+msgstr "\tMenggunakan %s, %s\n"
+
+#: e2fsck/unix.c:992
+msgid "need terminal for interactive repairs"
+msgstr "butuh terminal untuk reparasi interactive"
+
+#: e2fsck/unix.c:1021
+#, c-format
+msgid "%s: %s trying backup blocks...\n"
+msgstr "%s: %s mencoba membackup blok...\n"
+
+#: e2fsck/unix.c:1023
+msgid "Superblock invalid,"
+msgstr "Superblok tidak valid,"
+
+#: e2fsck/unix.c:1024
+msgid "Group descriptors look bad..."
+msgstr "Deskripsi grup terlihat buruk..."
+
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: kembali ke superblock asli\n"
+
+#: e2fsck/unix.c:1060
+#, c-format
+msgid ""
+"The filesystem revision is apparently too high for this version of e2fsck.\n"
+"(Or the filesystem superblock is corrupt)\n"
+"\n"
+msgstr ""
+"Revisi filesystem kelihatannya terlalu tinggi untuk versi e2fsck ini.\n"
+"(Atau filesystem superblok terkorupsi)\n"
+"\n"
+
+#: e2fsck/unix.c:1066
+#, c-format
+msgid "Could this be a zero-length partition?\n"
+msgstr "Mungkinkan ini sebuah partisi dengan panjang nol?\n"
+
+#: e2fsck/unix.c:1068
+#, c-format
+msgid "You must have %s access to the filesystem or be root\n"
+msgstr "Anda harus memiliki %s akses ke filesystem atau menjadi root\n"
+
+#: e2fsck/unix.c:1073
+#, c-format
+msgid "Possibly non-existent or swap device?\n"
+msgstr "Mungkin tidak ada atau sebuah perangkat swap?\n"
+
+#: e2fsck/unix.c:1075
+#, c-format
+msgid "Filesystem mounted or opened exclusively by another program?\n"
+msgstr "Filesystem dimount atau dibuka secara exclusively oleh aplikasi lain?\n"
+
+#: e2fsck/unix.c:1079
+#, c-format
+msgid ""
+"Disk write-protected; use the -n option to do a read-only\n"
+"check of the device.\n"
+msgstr ""
+"Disk terproteksi untuk ditulis; gunakan opsi -n untuk melakukan secara baca-saja\n"
+"dalam memeriksa perangkat.\n"
+
+#: e2fsck/unix.c:1143
+msgid "Get a newer version of e2fsck!"
+msgstr "Dapatkan versi yang lebih baru dari e2fsck!"
+
+#: e2fsck/unix.c:1173
+#, c-format
+msgid "while checking ext3 journal for %s"
+msgstr "ketika memeriksa ext3 jurnal untuk %s"
+
+#: e2fsck/unix.c:1184
+#, c-format
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Peringatan: melewatkan recovery jurnal karena sedang melakukan pemeriksaan di filesystem yang baca-saja (read-only).\n"
+
+#: e2fsck/unix.c:1197
+#, c-format
+msgid "unable to set superblock flags on %s\n"
+msgstr "tidak dapat menset superblok flag di %s\n"
+
+#: e2fsck/unix.c:1203
+#, c-format
+msgid "while recovering ext3 journal of %s"
+msgstr "ketika merecovery ext3 jurnal dari %s"
+
+#: e2fsck/unix.c:1228
+#, c-format
+msgid "%s has unsupported feature(s):"
+msgstr "%s memiliki feature yang tidak disupport:"
+
+#: e2fsck/unix.c:1244
+msgid "Warning: compression support is experimental.\n"
+msgstr "Peringatan: support untuk kompresi adalah experimental.\n"
+
+#: e2fsck/unix.c:1249
+#, c-format
+msgid ""
+"E2fsck not compiled with HTREE support,\n"
+"\tbut filesystem %s has HTREE directories.\n"
+msgstr ""
+"E2fsck tidak dikompilasi dengan layanan HTREE,\n"
+"\t tetapi filesystem %s memiliki direktori HTREE.\n"
+
+#: e2fsck/unix.c:1302
+msgid "while reading bad blocks inode"
+msgstr "ketika sedang membaca inode blok buruk"
+
+#: e2fsck/unix.c:1304
+#, c-format
+msgid "This doesn't bode well, but we'll try to go on...\n"
+msgstr "Ini bukan pertanda baik, tapi kita akan tetap mencoba untuk meneruskan...\n"
+
+#: e2fsck/unix.c:1330
+msgid "Couldn't determine journal size"
+msgstr "Tidak dapat menentukan ukuran jurnal"
+
+#: e2fsck/unix.c:1333
+#, c-format
+msgid "Creating journal (%d blocks): "
+msgstr "Membuat jurnal (%d blok): "
+
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
+msgid ""
+"\n"
+"\twhile trying to create journal"
+msgstr ""
+"\n"
+"\tketika mencoba untuk membuat jurnal"
+
+#: e2fsck/unix.c:1343
+#, c-format
+msgid " Done.\n"
+msgstr " Selesai.\n"
+
+#: e2fsck/unix.c:1344
+#, c-format
+msgid ""
+"\n"
+"*** journal has been re-created - filesystem is now ext3 again ***\n"
+msgstr ""
+"\n"
+"*** jurnal telah dibuat kembali - filesystem sekarang ext3 lagi ***\n"
+
+#: e2fsck/unix.c:1351
+#, c-format
+msgid "Restarting e2fsck from the beginning...\n"
+msgstr "Mengulang kembali e2fsck dari awal...\n"
+
+#: e2fsck/unix.c:1355
+msgid "while resetting context"
+msgstr "ketika mereset context"
+
+#: e2fsck/unix.c:1362
+#, c-format
+msgid "%s: e2fsck canceled.\n"
+msgstr "%s: e2fsck dibatalkan.\n"
+
+#: e2fsck/unix.c:1367
+msgid "aborted"
+msgstr "dibatalkan"
+
+#: e2fsck/unix.c:1379
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
+msgstr ""
+"\n"
+"%s: ***** FILE SYSTEM TELAH TERMODIFIKASI *****\n"
+
+#: e2fsck/unix.c:1382
+#, c-format
+msgid "%s: ***** REBOOT LINUX *****\n"
+msgstr "%s: ***** REBOOT LINUX *****\n"
+
+#: e2fsck/unix.c:1390
+#, c-format
+msgid ""
+"\n"
+"%s: ********** WARNING: Filesystem still has errors **********\n"
+"\n"
+msgstr ""
+"\n"
+"%s: ********** PERINGATAN: Filesystem masih memiliki errors *********\n"
+"\n"
+
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "ketika sedang menset informasi checksum di grup blok"
+
+#: e2fsck/util.c:138 misc/util.c:68
+msgid "yY"
+msgstr "yY"
+
+#: e2fsck/util.c:139
+msgid "nN"
+msgstr "nN"
+
+#: e2fsck/util.c:153
+msgid "<y>"
+msgstr "<y>"
+
+#: e2fsck/util.c:155
+msgid "<n>"
+msgstr "<n>"
+
+#: e2fsck/util.c:157
+msgid " (y/n)"
+msgstr "(y/n)"
+
+#: e2fsck/util.c:172
+msgid "cancelled!\n"
+msgstr "dibatalkan!\n"
+
+#: e2fsck/util.c:187
+msgid "yes\n"
+msgstr "ya\n"
+
+#: e2fsck/util.c:189
+msgid "no\n"
+msgstr "tidak\n"
+
+#: e2fsck/util.c:199
+#, c-format
+msgid ""
+"%s? no\n"
+"\n"
+msgstr ""
+"%s? tidak\n"
+"\n"
+
+#: e2fsck/util.c:203
+#, c-format
+msgid ""
+"%s? yes\n"
+"\n"
+msgstr ""
+"%s? ya\n"
+"\n"
+
+#: e2fsck/util.c:207
+msgid "yes"
+msgstr "ya"
+
+#: e2fsck/util.c:207
+msgid "no"
+msgstr "tidak"
+
+#: e2fsck/util.c:221
+#, c-format
+msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
+msgstr "e2fsck_read_bitmaps: ilegal bitmap blok untuk %s"
+
+#: e2fsck/util.c:226
+msgid "reading inode and block bitmaps"
+msgstr "membaca inode dan blok bitmap"
+
+#: e2fsck/util.c:231
+#, c-format
+msgid "while retrying to read bitmaps for %s"
+msgstr "ketika sedang mencoba untuk membaca bitmap untuk %s"
+
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "menulis blok dan inode bitmaps"
+
+#: e2fsck/util.c:248
+#, c-format
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "ketika mencoba untuk menulis blok dan inode bitmap untuk %s"
+
+#: e2fsck/util.c:260
+#, c-format
+msgid ""
+"\n"
+"\n"
+"%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n"
+"\t(i.e., without -a or -p options)\n"
+msgstr ""
+"\n"
+"\n"
+"%s: TERJADI INKONSITENSI YANG TIDAK DIHARAPKAN; JALANKAN fsck SECARA MANUAL.\n"
+"\t(i.e, tanpa opsi -a atau -p)\n"
+
+#: e2fsck/util.c:341
+#, c-format
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Memori yang digunakan: %luk/%luk (%luk/%luk), "
+
+#: e2fsck/util.c:345
+#, c-format
+msgid "Memory used: %lu, "
+msgstr "Memori yang digunakan: %lu, "
+
+#: e2fsck/util.c:352
+#, c-format
+msgid "time: %5.2f/%5.2f/%5.2f\n"
+msgstr "waktu: %5.2f/%5.2f/%5.2f\n"
+
+#: e2fsck/util.c:357
+#, c-format
+msgid "elapsed time: %6.3f\n"
+msgstr "waktu yang dijalani: %6.3f\n"
+
+#: e2fsck/util.c:391 e2fsck/util.c:405
+#, c-format
+msgid "while reading inode %lu in %s"
+msgstr "ketika  membaca inode %lu dalam %s"
+
+#: e2fsck/util.c:419 e2fsck/util.c:432
+#, c-format
+msgid "while writing inode %lu in %s"
+msgstr "ketika menulis inode %lu dalam %s"
+
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "ketika mengalokasikan zeroizing buffer"
+
+#: misc/badblocks.c:66
+msgid "done                                \n"
+msgstr "selesai                              \n"
+
+#: misc/badblocks.c:89
+#, c-format
+msgid ""
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
+msgstr ""
+"Penggunaan: %s [-b ukuran_blok] [-i berkas_masukan] [-o berkas_keluaran] [-svwnf]\n"
+"       [-c blok_di_sekali] [-p jumlah_tahap] [-e maksimal_blok_buruk] [-d faktor_delay_antara_baca]\n"
+"       [-e pattern_tes] [-t pattern_test [...]]]\n"
+"       perangkat [blok_terakhir [blok_pertama]]\n"
+
+#: misc/badblocks.c:100
+#, c-format
+msgid ""
+"%s: The -n and -w options are mutually exclusive.\n"
+"\n"
+msgstr ""
+"%s: Opsi -n dan -w adalah mutually exclusive.\n"
+"\n"
+
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "%6.2f%% selesai, %s berjalan"
+
+#: misc/badblocks.c:293
+msgid "Testing with random pattern: "
+msgstr "Memeriksa dengan pattern random: "
+
+#: misc/badblocks.c:311
+msgid "Testing with pattern 0x"
+msgstr "Memeriksa dengan pattern 0x"
+
+#: misc/badblocks.c:339 misc/badblocks.c:408
+msgid "during seek"
+msgstr "ketika mencari(seek)"
+
+#: misc/badblocks.c:350
+#, c-format
+msgid "Weird value (%ld) in do_read\n"
+msgstr "Nilai aneh (%ld) dalam do_read\n"
+
+#: misc/badblocks.c:428
+msgid "during ext2fs_sync_device"
+msgstr "ketika ext2fs_sync_device"
+
+#: misc/badblocks.c:447 misc/badblocks.c:711
+msgid "while beginning bad block list iteration"
+msgstr "ketika di awal iterasi daftara blok buruk"
+
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
+msgid "while allocating buffers"
+msgstr "ketika mengalokasikan buffer"
+
+#: misc/badblocks.c:465
+#, c-format
+msgid "Checking blocks %lu to %lu\n"
+msgstr "Memeriksa blok %lu ke %lu\n"
+
+#: misc/badblocks.c:470
+msgid "Checking for bad blocks in read-only mode\n"
+msgstr "Memeriksa blok buruk dalam mode baca-saja (read-only)\n"
+
+#: misc/badblocks.c:479
+msgid "Checking for bad blocks (read-only test): "
+msgstr "Memeriksa blok buruk (pemeriksaan baca-saja): "
+
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Terlalu banyak blok buruk, membatalkan pemeriksaan\n"
+
+#: misc/badblocks.c:570
+msgid "Checking for bad blocks in read-write mode\n"
+msgstr "Memeriksa untuk blok buruk dalam mode baca-tulis\n"
+
+#: misc/badblocks.c:572 misc/badblocks.c:734
+#, c-format
+msgid "From block %lu to %lu\n"
+msgstr "Dari blok %lu ke %lu\n"
+
+#: misc/badblocks.c:630
+msgid "Reading and comparing: "
+msgstr "Membaca dan membandingkan: "
+
+#: misc/badblocks.c:733
+msgid "Checking for bad blocks in non-destructive read-write mode\n"
+msgstr "Memeriksa untuk blok buruk dalal mode tidak-merusak baca-tulis\n"
+
+#: misc/badblocks.c:739
+msgid "Checking for bad blocks (non-destructive read-write test)\n"
+msgstr "Memeriksa untuk blok buruk (pemeriksaan tidak-merusak baca-tulis)\n"
+
+#: misc/badblocks.c:746
+msgid ""
+"\n"
+"Interrupt caught, cleaning up\n"
+msgstr ""
+"\n"
+"Interupsi tertangkap, membersihkan\n"
+
+#: misc/badblocks.c:822
+#, c-format
+msgid "during test data write, block %lu"
+msgstr "ketika memerikas data ditulis, blok %lu"
+
+#: misc/badblocks.c:933 misc/util.c:156
+#, c-format
+msgid "%s is mounted; "
+msgstr "%s sedang dimount; "
+
+#: misc/badblocks.c:935
+msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "badbloks tetap dipaksakan. Mudah-mudahan /etc/mtab tidak benar\n"
+
+#: misc/badblocks.c:940
+msgid "it's not safe to run badblocks!\n"
+msgstr "ini tidak aman untuk menjalankan badblocks!\n"
+
+#: misc/badblocks.c:945 misc/util.c:167
+#, c-format
+msgid "%s is apparently in use by the system; "
+msgstr "%s kelihatannya sedang digunakan oleh system; "
+
+#: misc/badblocks.c:948
+msgid "badblocks forced anyway.\n"
+msgstr "badblocks dipaksakan saja.\n"
+
+#: misc/badblocks.c:968
+#, c-format
+msgid "invalid %s - %s"
+msgstr "tidak valid %s - %s"
+
+#: misc/badblocks.c:1077
+#, c-format
+msgid "can't allocate memory for test_pattern - %s"
+msgstr "tidak dapat mengalokasikan memori untuk test_pattern - %s"
+
+#: misc/badblocks.c:1104
+msgid "Maximum of one test_pattern may be specified in read-only mode"
+msgstr "Maksimum dari satu test_pattern boleh dispesifikasi dalam mode baca-saja"
+
+#: misc/badblocks.c:1110
+msgid "Random test_pattern is not allowed in read-only mode"
+msgstr "Random test_pattern tidak diperbolehkan dalam mode baca-saja"
+
+#: misc/badblocks.c:1124
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size manually\n"
+msgstr ""
+"Tidak dapat menentukan ukuran perangkat; anda harus menspesifikasikan\n"
+"ukuran perangkat secara manual\n"
+
+#: misc/badblocks.c:1130
+msgid "while trying to determine device size"
+msgstr "ketika mencoba untuk menentukakn ukuran perangkat"
+
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "blok terakhir"
+
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "blok pertama"
+
+#: misc/badblocks.c:1144
+#, c-format
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "awal blok tidak valid (%lu): harus lebih kecil dari %lu"
+
+#: misc/badblocks.c:1200
+msgid "while creating in-memory bad blocks list"
+msgstr "ketika membuat daftar blok buruk dalam memori"
+
+#: misc/badblocks.c:1215
+msgid "while adding to in-memory bad block list"
+msgstr "ketika menambahkan daftar blok buruk dalam memori"
+
+#: misc/badblocks.c:1239
+#, c-format
+msgid "Pass completed, %u bad blocks found.\n"
+msgstr "Tahap selesai, %u blok buruk ditemukan.\n"
+
+#: misc/chattr.c:85
+#, c-format
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Penggunaan: %s [-RVf] [-+=AacDdeijsSu] [-v versi] berkas...\n"
+
+#: misc/chattr.c:153
+#, c-format
+msgid "bad version - %s\n"
+msgstr "versi buruk - %s\n"
+
+#: misc/chattr.c:200 misc/lsattr.c:115
+#, c-format
+msgid "while trying to stat %s"
+msgstr "ketika mencoba untuk melakukan statistik %s"
+
+#: misc/chattr.c:207
+#, c-format
+msgid "while reading flags on %s"
+msgstr "ketika membaca flags di %s"
+
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "Menghapus tanda ekstensi yang tidak didukung di %s"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Flags dari %s diset sebagai "
+
+#: misc/chattr.c:249
+#, c-format
+msgid "while setting flags on %s"
+msgstr "ketika menset flags di %s"
+
+#: misc/chattr.c:257
+#, c-format
+msgid "Version of %s set as %lu\n"
+msgstr "Versi dari %s diset sebagai %lu\n"
+
+#: misc/chattr.c:261
+#, c-format
+msgid "while setting version on %s"
+msgstr "ketika menset versi di %s"
+
+#: misc/chattr.c:281
+#, c-format
+msgid "Couldn't allocate path variable in chattr_dir_proc"
+msgstr "Tidak dapat mengalokasikan variable path di chattr_dir_proc"
+
+#: misc/chattr.c:320
+msgid "= is incompatible with - and +\n"
+msgstr "= tidak kompatibel dengan - dan +\n"
+
+#: misc/chattr.c:328
+msgid "Must use '-v', =, - or +\n"
+msgstr "Harus menggunakan '-v', =, - atau +\n"
+
+#: misc/dumpe2fs.c:53
+#, c-format
+msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
+msgstr "Penggunaan: %s [-bfhixV] [-ob superblok] [-oB ukuranblok] perangkat\n"
+
+#: misc/dumpe2fs.c:168
+#, c-format
+msgid "Group %lu: (Blocks "
+msgstr "Grup %lu: (blok "
+
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Checksum 0x%04x, inode yang tidak digunakan %d\n"
+
+#: misc/dumpe2fs.c:178
+#, c-format
+msgid "  %s superblock at "
+msgstr "  %s superblok di "
+
+#: misc/dumpe2fs.c:179
+msgid "Primary"
+msgstr "Utama"
+
+#: misc/dumpe2fs.c:179
+msgid "Backup"
+msgstr "Cadangan"
+
+#: misc/dumpe2fs.c:183
+#, c-format
+msgid ", Group descriptors at "
+msgstr ", Grup deskripsi di "
+
+#: misc/dumpe2fs.c:187
+#, c-format
+msgid ""
+"\n"
+"  Reserved GDT blocks at "
+msgstr ""
+"\n"
+"  Reserved GDT blok di "
+
+#: misc/dumpe2fs.c:194
+#, c-format
+msgid " Group descriptor at "
+msgstr " Grup deskripsi di "
+
+#: misc/dumpe2fs.c:200
+msgid "  Block bitmap at "
+msgstr "  Blok bitmap di "
+
+#: misc/dumpe2fs.c:205
+msgid ", Inode bitmap at "
+msgstr ", Inode bitmap di "
+
+#: misc/dumpe2fs.c:210
+msgid ""
+"\n"
+"  Inode table at "
+msgstr ""
+"\n"
+"  Inode tabel di "
+
+#: misc/dumpe2fs.c:217
+#, c-format
+msgid ""
+"\n"
+"  %u free blocks, %u free inodes, %u directories%s"
+msgstr ""
+"\n"
+"  %u blok bebas, %u inode bebas, %u direktori%s"
+
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u inode yang tidak digunakan\n"
+
+#: misc/dumpe2fs.c:227
+msgid "  Free blocks: "
+msgstr "  Blok bebas: "
+
+#: misc/dumpe2fs.c:237
+msgid "  Free inodes: "
+msgstr "  Inode bebas: "
+
+#: misc/dumpe2fs.c:268
+msgid "while printing bad block list"
+msgstr "ketika mencetak daftar blok buruk"
+
+#: misc/dumpe2fs.c:274
+#, c-format
+msgid "Bad blocks: %u"
+msgstr "Blok buruk: %u"
+
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
+msgid "while reading journal inode"
+msgstr "ketika membaca jurnal inode"
+
+#: misc/dumpe2fs.c:300
+msgid "Journal size:             "
+msgstr "Ukuran jurnal:            "
+
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
+msgid "while reading journal superblock"
+msgstr "ketikan membaca superblok jurnal"
+
+#: misc/dumpe2fs.c:332
+msgid "Couldn't find journal superblock magic numbers"
+msgstr "Tidak dapat mencari nomor magic di jurnal superblok"
+
+#: misc/dumpe2fs.c:336
+#, c-format
+msgid ""
+"\n"
+"Journal block size:       %u\n"
+"Journal length:           %u\n"
+"Journal first block:      %u\n"
+"Journal sequence:         0x%08x\n"
+"Journal start:            %u\n"
+"Journal number of users:  %u\n"
+msgstr ""
+"\n"
+"Ukuran blok jurnal:       %u\n"
+"Panjang jurnal:           %u\n"
+"Blok pertama jurnal:      %u\n"
+"Urutan jurnal:            0x%08x\n"
+"Awal dari jurnal:         %u\n"
+"Jumlah pengguna dari jurnal: %u\n"
+
+#: misc/dumpe2fs.c:349
+#, c-format
+msgid "Journal users:            %s\n"
+msgstr "Pengguna jurnal:         %s\n"
+
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
+#, c-format
+msgid "Couldn't allocate memory to parse options!\n"
+msgstr "Tidak dapat mengalokasikan memori untuk memparse opsi!\n"
+
+#: misc/dumpe2fs.c:391
+#, c-format
+msgid "Invalid superblock parameter: %s\n"
+msgstr "Parameter superblok tidak valid: %s\n"
+
+#: misc/dumpe2fs.c:406
+#, c-format
+msgid "Invalid blocksize parameter: %s\n"
+msgstr "Parameter ukuran-blok tidak valid: %s\n"
+
+#: misc/dumpe2fs.c:417
+#, c-format
+msgid ""
+"\n"
+"Bad extended option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tsuperblock=<superblock number>\n"
+"\tblocksize=<blocksize>\n"
+msgstr ""
+"\n"
+"Opsi extended buruk dispesifikasikan: %s\n"
+"\n"
+"Opsi extended dipisahkan dengan koma, dan boleh membawa argument dimana\n"
+"\tini di set off oleh sebuah tanda sama dengan ('=').\n"
+"\n"
+"Opsi extended yang valid adalah:\n"
+"\tsuperblock=<nomor superblok>\n"
+"\tblocksize=<besar blok>\n"
+
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
+#, c-format
+msgid "\tUsing %s\n"
+msgstr "\tMenggunakan %s\n"
+
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
+#, c-format
+msgid "Couldn't find valid filesystem superblock.\n"
+msgstr "Tidak dapat mencari superblok filesystem yang valid.\n"
+
+#: misc/dumpe2fs.c:537
+#, c-format
+msgid ""
+"\n"
+"%s: %s: error reading bitmaps: %s\n"
+msgstr ""
+"\n"
+"%s: %s: error membaca bitmaps: %s\n"
+
+#: misc/e2image.c:52
+#, c-format
+msgid "Usage: %s [-rsI] device image_file\n"
+msgstr "Penggunaan: %s [-rsI] perangkat image_file\n"
+
+#: misc/e2image.c:64
+msgid "Couldn't allocate header buffer\n"
+msgstr "Tidak dapat mengalokasikan buffer header\n"
+
+#: misc/e2image.c:83
+#, c-format
+msgid "short write (only %d bytes) for writing image header"
+msgstr "menulis pendek (hanya %d bytes) untuk menulis header image"
+
+#: misc/e2image.c:102
+msgid "while writing superblock"
+msgstr "ketika menulis superblok"
+
+#: misc/e2image.c:110
+msgid "while writing inode table"
+msgstr "ketika menulis tabel inode"
+
+#: misc/e2image.c:117
+msgid "while writing block bitmap"
+msgstr "ketika menulis blok bitmap"
+
+#: misc/e2image.c:124
+msgid "while writing inode bitmap"
+msgstr "ketika menulis inode bitmap"
+
+#: misc/e2label.c:57
+#, c-format
+msgid "e2label: cannot open %s\n"
+msgstr "e2label: tidak dapat membuka %s\n"
+
+#: misc/e2label.c:62
+#, c-format
+msgid "e2label: cannot seek to superblock\n"
+msgstr "e2label: tidak dapat mencari superblok\n"
+
+#: misc/e2label.c:67
+#, c-format
+msgid "e2label: error reading superblock\n"
+msgstr "e2label: error membaca superblok\n"
+
+#: misc/e2label.c:71
+#, c-format
+msgid "e2label: not an ext2 filesystem\n"
+msgstr "e2label: bukan sebuah ext2 filesystem\n"
+
+#: misc/e2label.c:96 misc/tune2fs.c:1670
+#, c-format
+msgid "Warning: label too long, truncating.\n"
+msgstr "Peringatan: label terlalu panjang, memotong.\n"
+
+#: misc/e2label.c:99
+#, c-format
+msgid "e2label: cannot seek to superblock again\n"
+msgstr "e2label: tidak dapat mencari superblok lagi\n"
+
+#: misc/e2label.c:104
+#, c-format
+msgid "e2label: error writing superblock\n"
+msgstr "e2label: error menulis superblok\n"
+
+#: misc/e2label.c:116 misc/tune2fs.c:542
+#, c-format
+msgid "Usage: e2label device [newlabel]\n"
+msgstr "Penggunaan: e2label perangkat [labelbaru]\n"
+
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Penggunaan: %s <berkas transaksi> <filesystem>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Gagal membaca data filesystem \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Gagal tdb_fetch %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Filesystem waktu mount tidak cocok %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "Filesystem UUID tidak cocok \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "Gagal tdb_open %s\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Error ketika menentukan apakah %s sudah dimount.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo seharusnya hanya dijalankan di filesystem yang sudah diunmount\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Gagal membuka %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Balasan ukuran transaksi %zd di lokasi %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Gagal menulis %s\n"
+
+#: misc/fsck.c:343
+#, c-format
+msgid "WARNING: couldn't open %s: %s\n"
+msgstr "PERINGATAN: tidak dapat membuka %s: %s\n"
+
+#: misc/fsck.c:353
+#, c-format
+msgid "WARNING: bad format on line %d of %s\n"
+msgstr "PERINGATAN: format buruk di bari %d dari %s\n"
+
+#: misc/fsck.c:368
+msgid ""
+"\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
+"\tfield.  I will kludge around things for you, but you\n"
+"\tshould fix your /etc/fstab file as soon as you can.\n"
+"\n"
+msgstr ""
+"\a\a\aPERINGATAN: /etc/fstab anda tidak berisi fsck passno\n"
+"\topsi. Saya akan klude around things untuk anda, tetapi anda\n"
+"\tseharusnya membetulkan berkas /etc/fstab anda secepatnya.\n"
+"\n"
+
+#: misc/fsck.c:477
+#, c-format
+msgid "fsck: %s: not found\n"
+msgstr "fsck: %s: tidak ditemukan\n"
+
+#: misc/fsck.c:593
+#, c-format
+msgid "%s: wait: No more child process?!?\n"
+msgstr "%s: tunggu: Tidak ada lagi proses anak?!?\n"
+
+#: misc/fsck.c:615
+#, c-format
+msgid "Warning... %s for device %s exited with signal %d.\n"
+msgstr "Peringatan... %s untuk perangkat %s keluar dengan sinyal %d.\n"
+
+#: misc/fsck.c:621
+#, c-format
+msgid "%s %s: status is %x, should never happen.\n"
+msgstr "%s %s: status adalah %x, seharusnya tidak pernah terjadi.\n"
+
+#: misc/fsck.c:660
+#, c-format
+msgid "Finished with %s (exit status %d)\n"
+msgstr "Berakhir dengan %s (status keluar %d)\n"
+
+#: misc/fsck.c:720
+#, c-format
+msgid "%s: Error %d while executing fsck.%s for %s\n"
+msgstr "%s: Error %d ketika menjalankan fsck.%s untuk %s\n"
+
+#: misc/fsck.c:741
+msgid ""
+"Either all or none of the filesystem types passed to -t must be prefixed\n"
+"with 'no' or '!'.\n"
+msgstr ""
+"Semua atau tidak sama sekali dari tipe filesystem dilewatkan melalui opsi -t harus diwali\n"
+"dengan 'no' atau '!'.\n"
+
+#: misc/fsck.c:760
+msgid "Couldn't allocate memory for filesystem types\n"
+msgstr "Tidak dapat mengalokasikan memori untuk tipe filesystem\n"
+
+#: misc/fsck.c:883
+#, c-format
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: melewatkan baris buruk di /etc/fstab: bind mount dengan tidak nol fsck tahap nomor\n"
+
+#: misc/fsck.c:910
+#, c-format
+msgid "fsck: cannot check %s: fsck.%s not found\n"
+msgstr "fsck: tidak dapat memeriksa %s: fsck.%s tidak ditemukan\n"
+
+#: misc/fsck.c:966
+msgid "Checking all file systems.\n"
+msgstr "Memeriksa semua filesytem.\n"
+
+#: misc/fsck.c:1057
+#, c-format
+msgid "--waiting-- (pass %d)\n"
+msgstr "--menunggu-- (tahap %d)\n"
+
+#: misc/fsck.c:1077
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Penggunaan: fsck [-AMNPRTV] -C [fd] ] [-t fstype] [fs-opsi] [filesys ...]\n"
+
+#: misc/fsck.c:1119
+#, c-format
+msgid "%s: too many devices\n"
+msgstr "%s: terlalu banyak perangkat\n"
+
+#: misc/fsck.c:1152 misc/fsck.c:1238
+#, c-format
+msgid "%s: too many arguments\n"
+msgstr "%s: terlalu banyak argumen\n"
+
+#: misc/lsattr.c:73
+#, c-format
+msgid "Usage: %s [-RVadlv] [files...]\n"
+msgstr "Penggunaan: %s [-RVadlv] [berkas...]\n"
+
+#: misc/lsattr.c:83
+#, c-format
+msgid "While reading flags on %s"
+msgstr "Ketika membaca flags di %s"
+
+#: misc/lsattr.c:90
+#, c-format
+msgid "While reading version on %s"
+msgstr "Ketika membaca versi di %s"
+
+#: misc/mke2fs.c:104
+#, c-format
+msgid ""
+"Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
+"\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
+"\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
+msgstr ""
+"Penggunaan: %s [-c|-l namafile] [-b ukuran-blok] [-f ukuran-fragmen]\n"
+"\t[-i bytes-per-inode] [-I ukuran-inode] [-J opsi-jurnal]\n"
+"\t[-G ukuran meta grup] [-N jumlah-dari-inode]\n"
+"\t[-m persentasi-reserved-blok] [-o os-pembuat]\n"
+"\t[-g blok-per-grup] [-L label-volume] [-M direktori-terakhir-dimount]\n"
+"\t[-O feature[,...]] [-r revisi-fs] [-E opsi-extended[,...]]\n"
+"\t[-T type-fs] [-U UUID] [-jnqvFSV] perangkat [jumlah-blok]\n"
+
+#: misc/mke2fs.c:206
+#, c-format
+msgid "Running command: %s\n"
+msgstr "Menjalankan perintah: %s\n"
+
+#: misc/mke2fs.c:210
+#, c-format
+msgid "while trying to run '%s'"
+msgstr "ketika mencoba untuk menjalankan '%s'"
+
+#: misc/mke2fs.c:217
+msgid "while processing list of bad blocks from program"
+msgstr "ketika memproses daftar dari blok buruk dari aplikasi"
+
+#: misc/mke2fs.c:244
+#, c-format
+msgid "Block %d in primary superblock/group descriptor area bad.\n"
+msgstr "Blok %d dalam daerah deskripsi superblok/grup utama buruk.\n"
+
+#: misc/mke2fs.c:246
+#, c-format
+msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
+msgstr "Blok %u sampai %u harus dalam keadaan baik untuk membuat sebuah filesystem.\n"
+
+#: misc/mke2fs.c:249
+msgid "Aborting....\n"
+msgstr "Membatalkan...\n"
+
+#: misc/mke2fs.c:269
+#, c-format
+msgid ""
+"Warning: the backup superblock/group descriptors at block %u contain\n"
+"\tbad blocks.\n"
+"\n"
+msgstr ""
+"Peringatan: deskripsi superblok/grup cadangan di blok %u berisi\n"
+"\tblok buruk.\n"
+"\n"
+
+#: misc/mke2fs.c:288
+msgid "while marking bad blocks as used"
+msgstr "ketika menandai blok buruk sebagai digunakan"
+
+#: misc/mke2fs.c:346
+msgid "done                            \n"
+msgstr "selesai                        \n"
+
+#: misc/mke2fs.c:360
+msgid "Writing inode tables: "
+msgstr "Menulis tabel inode: "
+
+#: misc/mke2fs.c:383
+#, c-format
+msgid ""
+"\n"
+"Could not write %d blocks in inode table starting at %u: %s\n"
+msgstr ""
+"\n"
+"Tidak dapat menulis %d blok dalam tabel inode dimulai di %u: %s\n"
+
+#: misc/mke2fs.c:407
+msgid "while creating root dir"
+msgstr "ketika membuat direktori root"
+
+#: misc/mke2fs.c:414
+msgid "while reading root inode"
+msgstr "ketika membaca inode root"
+
+#: misc/mke2fs.c:428
+msgid "while setting root inode ownership"
+msgstr "ketika menset kepemilikan inode root"
+
+#: misc/mke2fs.c:446
+msgid "while creating /lost+found"
+msgstr "ketika membuat /lost+found"
+
+#: misc/mke2fs.c:453
+msgid "while looking up /lost+found"
+msgstr "ketika mencari /lost+found"
+
+#: misc/mke2fs.c:466
+msgid "while expanding /lost+found"
+msgstr "ketika mengekspansi /lost+found"
+
+#: misc/mke2fs.c:481
+msgid "while setting bad block inode"
+msgstr "ketika menset inode blok buruk"
+
+#: misc/mke2fs.c:508
+#, c-format
+msgid "Out of memory erasing sectors %d-%d\n"
+msgstr "Kehabisan memori menghapus sektor %d-%d\n"
+
+#: misc/mke2fs.c:518
+#, c-format
+msgid "Warning: could not read block 0: %s\n"
+msgstr "Peringatan: tidak dapat membaca blok 0: %s\n"
+
+#: misc/mke2fs.c:534
+#, c-format
+msgid "Warning: could not erase sector %d: %s\n"
+msgstr "Peringatan: tidak dapat menghapus sektor %d: %s\n"
+
+#: misc/mke2fs.c:550
+msgid "while initializing journal superblock"
+msgstr "ketika menginisialisasi jurnal superblok"
+
+#: misc/mke2fs.c:556
+msgid "Zeroing journal device: "
+msgstr "Mengosongkan perangkat jurnal: "
+
+#: misc/mke2fs.c:569
+#, c-format
+msgid "while zeroing journal device (block %u, count %d)"
+msgstr "ketika mengosongkan perangkat jurnal (blok %u, jumlah %d)"
+
+#: misc/mke2fs.c:585
+msgid "while writing journal superblock"
+msgstr "ketika menulis jurnal superblok"
+
+#: misc/mke2fs.c:601
+#, c-format
+msgid ""
+"warning: %u blocks unused.\n"
+"\n"
+msgstr ""
+"peringatan: %u blok tidak digunakan.\n"
+"\n"
+
+#: misc/mke2fs.c:606
+#, c-format
+msgid "Filesystem label=%s\n"
+msgstr "Filesystem label=%s\n"
+
+#: misc/mke2fs.c:607
+msgid "OS type: "
+msgstr "Tipe OS: "
+
+#: misc/mke2fs.c:612
+#, c-format
+msgid "Block size=%u (log=%u)\n"
+msgstr "Ukuran blok=%u (log=%u)\n"
+
+#: misc/mke2fs.c:614
+#, c-format
+msgid "Fragment size=%u (log=%u)\n"
+msgstr "Ukuran pecahan=%u (log=%u)\n"
+
+#: misc/mke2fs.c:616
+#, c-format
+msgid "%u inodes, %u blocks\n"
+msgstr "%u inodes, %u blok\n"
+
+#: misc/mke2fs.c:618
+#, c-format
+msgid "%u blocks (%2.2f%%) reserved for the super user\n"
+msgstr "%u blok (%2.2f%%) reserved untuk super user\n"
+
+#: misc/mke2fs.c:621
+#, c-format
+msgid "First data block=%u\n"
+msgstr "Data blok pertama=%u\n"
+
+#: misc/mke2fs.c:623
+#, c-format
+msgid "Maximum filesystem blocks=%lu\n"
+msgstr "Maksimum blok filesystem=%lu\n"
+
+#: misc/mke2fs.c:627
+#, c-format
+msgid "%u block groups\n"
+msgstr "%u grup blok\n"
+
+#: misc/mke2fs.c:629
+#, c-format
+msgid "%u block group\n"
+msgstr "%u grup blok\n"
+
+#: misc/mke2fs.c:630
+#, c-format
+msgid "%u blocks per group, %u fragments per group\n"
+msgstr "%u blok per grup, %u potongan per grup\n"
+
+#: misc/mke2fs.c:632
+#, c-format
+msgid "%u inodes per group\n"
+msgstr "%u inode per grup\n"
+
+#: misc/mke2fs.c:639
+#, c-format
+msgid "Superblock backups stored on blocks: "
+msgstr "Cadangan superblok disimpan di blok: "
+
+#: misc/mke2fs.c:718
+#, c-format
+msgid "Invalid stride parameter: %s\n"
+msgstr "Parameter stride tidak valid: %s\n"
+
+#: misc/mke2fs.c:733
+#, c-format
+msgid "Invalid stripe-width parameter: %s\n"
+msgstr "Parameter stripe-width tidak valid: %s\n"
+
+#: misc/mke2fs.c:755
+#, c-format
+msgid "Invalid resize parameter: %s\n"
+msgstr "Parameter resize tidak valid: %s\n"
+
+#: misc/mke2fs.c:762
+#, c-format
+msgid "The resize maximum must be greater than the filesystem size.\n"
+msgstr "Resize maksimum harus lebih besar daripada ukuran filesystem.\n"
+
+#: misc/mke2fs.c:786
+#, c-format
+msgid "On-line resizing not supported with revision 0 filesystems\n"
+msgstr "On-line resizing tidak dilayani dengan filesystem revisi 0\n"
+
+#: misc/mke2fs.c:808
+#, c-format
+msgid ""
+"\n"
+"Bad option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk data chunk in blocks>\n"
+"\tstripe-width=<RAID stride * data disks in blocks>\n"
+"\tresize=<resize maximum size in blocks>\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+"\ttest_fs\n"
+"\n"
+msgstr ""
+"\n"
+"Opsi buruk dispesifikasikan: %s\n"
+"\n"
+"Opsi extended dipisahkan dengan koma, dan boleh menggunakan argumen yang\n"
+"\tdi set off oleh tanda sama dengan ('=').\n"
+"\n"
+"Opsi extended yang valid adalah:\n"
+"\tstride=<RAID per-disk data chunk dalam blok>\n"
+"\tstripe-width=<RAID stride * data disk dalam blok>\n"
+"\tresize=<resize ukuran maksimum dalam blok>\n"
+"\tlazy_itable_init=<0 untuk menonaktifkan, 1 untuk mengaktifkan>\n"
+"\ttest_fs\n"
+"\n"
+
+#: misc/mke2fs.c:824
+#, c-format
+msgid ""
+"\n"
+"Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
+"\n"
+msgstr ""
+"\n"
+"Peringatan: RAID stripe-width %u bukan sebuah even multiple dari stride %u.\n"
+"\n"
+
+#: misc/mke2fs.c:856
+#, c-format
+msgid ""
+"Syntax error in mke2fs config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Syntax error dalam mke2fs berkas konfigurasi (%s, baris #%d)\n"
+"\t%s\n"
+
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
+#, c-format
+msgid "Invalid filesystem option set: %s\n"
+msgstr "Opsi filesystem tidak valid diset: %s\n"
+
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Peringatan! Berkas mke2fs.conf anda tidak mendefinisikan tipe filesystem %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Anda mungkin butuh untuk memasang sebuah update dari berkas mke2fs.conf.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
+#, c-format
+msgid "invalid block size - %s"
+msgstr "Ukuran blok tidak valid - %s"
+
+#: misc/mke2fs.c:1180
+#, c-format
+msgid "Warning: blocksize %d not usable on most systems.\n"
+msgstr "Peringatan: ukuranblok %d tidak berguna dalam kebanyakan system.\n"
+
+#: misc/mke2fs.c:1196
+#, c-format
+msgid "invalid fragment size - %s"
+msgstr "ukuran potongan/fragmen tidak valid - %s"
+
+#: misc/mke2fs.c:1202
+#, c-format
+msgid "Warning: fragments not supported.  Ignoring -f option\n"
+msgstr "Peringatan: fragment tidak dilayani. Mengabaikan opsi -f\n"
+
+#: misc/mke2fs.c:1209
+msgid "Illegal number for blocks per group"
+msgstr "Jumlah ilegal untuk blok per grup"
+
+#: misc/mke2fs.c:1214
+msgid "blocks per group must be multiple of 8"
+msgstr "blok per grup harus kelipatan dari 8"
+
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Jumlah ilegal untuk ukuran flex_bg"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "ukuran flex_bg harus kelipatan dari 2"
+
+#: misc/mke2fs.c:1238
+#, c-format
+msgid "invalid inode ratio %s (min %d/max %d)"
+msgstr "rasio dari inode tidak valid %s (min %d/max %d)"
+
+#: misc/mke2fs.c:1255
+msgid "in malloc for bad_blocks_filename"
+msgstr "dalam malloc untuk bad_block_filename"
+
+#: misc/mke2fs.c:1265
+#, c-format
+msgid "invalid reserved blocks percent - %s"
+msgstr "persentasi reserved blok tidak valid - %s"
+
+#: misc/mke2fs.c:1283
+#, c-format
+msgid "bad revision level - %s"
+msgstr "level revisi buruk - %s"
+
+#: misc/mke2fs.c:1295
+#, c-format
+msgid "invalid inode size - %s"
+msgstr "ukuran inode tidak valid - %s"
+
+#: misc/mke2fs.c:1315
+#, c-format
+msgid "bad num inodes - %s"
+msgstr "jumlah inode buruk - %s"
+
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
+#, c-format
+msgid "while trying to open journal device %s\n"
+msgstr "ketika mencoba membuka perangkat jurnal %s\n"
+
+#: misc/mke2fs.c:1386
+#, c-format
+msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
+msgstr "Perangkat jurnal ukuranblok (%d) lebih kecil daripada minimum ukuranblok %d\n"
+
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Menggunakan perangkat jurnal ukuranblok: %d\n"
+
+#: misc/mke2fs.c:1401
+#, c-format
+msgid "%d-byte blocks too big for system (max %d)"
+msgstr "%d-byte bloks terlalu besar untuk system (maksimal %d)"
+
+#: misc/mke2fs.c:1405
+#, c-format
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Peringatan: %d-byte blok terlalu besar untuk system (maksimal %d), dipaksa untuk melanjutkan\n"
+
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "jumlah blok tidak valid - %s"
+
+#: misc/mke2fs.c:1423
+msgid "filesystem"
+msgstr "filesystem"
+
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Ukuran dari perangkat %s terlalu besar untuk diexpresikan dalam 32 bit\n"
+"\tmenggunakan sebuah ukuranblok dari %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:374
+msgid "while trying to determine filesystem size"
+msgstr "ketika mencoba untuk menentukan ukuran filesystem"
+
+#: misc/mke2fs.c:1475
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size of the filesystem\n"
+msgstr ""
+"Tidak dapat menentukan ukuran perangkat; anda harus menspesifikasikan\n"
+"ukuran dari filesystem\n"
+
+#: misc/mke2fs.c:1482
+msgid ""
+"Device size reported to be zero.  Invalid partition specified, or\n"
+"\tpartition table wasn't reread after running fdisk, due to\n"
+"\ta modified partition being busy and in use.  You may need to reboot\n"
+"\tto re-read your partition table.\n"
+msgstr ""
+"Ukuran perangkat yang dilaporkan nol. Partisi yang dispesifikasikan tidak valid, atau\n"
+"\ttabel partisi tidak dibaca kembali setelah menjalankan fdisk, karena\n"
+"\tpartisi yang diubah sedang sibuk dan sedang digunakan. Anda bisa melakukan reboot\n"
+"\tuntuk membaca kembali tabel partisi.\n"
+
+#: misc/mke2fs.c:1500
+msgid "Filesystem larger than apparent device size."
+msgstr "Filesystem lebih besar dari ukuran perangkat yang terlihat."
+
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Gagal untuk memparse daftar type fs\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types untuk mke2fs.conf resolution: "
+
+#: misc/mke2fs.c:1547
+#, c-format
+msgid "Filesystem features not supported with revision 0 filesystems\n"
+msgstr "Filesystem features tidak dilayani dengan filesystem revisi 0\n"
+
+#: misc/mke2fs.c:1554
+#, c-format
+msgid "Sparse superblocks not supported with revision 0 filesystems\n"
+msgstr "Sparse superblok tidak dilayani dengan filesystem revisi 0\n"
+
+#: misc/mke2fs.c:1566
+#, c-format
+msgid "Journals not supported with revision 0 filesystems\n"
+msgstr "Jurnal tidak dilayani dengan filesystem revisi 0\n"
+
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"resize_inode dan meta_bg feature tidak saling kompatibel.\n"
+"Meraka tidak dapat diaktifkan secara bersamaan.\n"
+
+#: misc/mke2fs.c:1601
+msgid "while trying to determine hardware sector size"
+msgstr "ketika mencoba untuk menentukan ukuran sektor perangkat"
+
+#: misc/mke2fs.c:1658
+msgid "reserved online resize blocks not supported on non-sparse filesystem"
+msgstr "reserved online resize blok tidak dilayani di non-sparse filesystem"
+
+#: misc/mke2fs.c:1667
+msgid "blocks per group count out of range"
+msgstr "jumlah blok per grup diluar jangkauan"
+
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Flex_bg feature tidak diaktifkan, jadi ukuran flex_bw mungkin tidak dapat dispesifikasikan"
+
+#: misc/mke2fs.c:1694
+#, c-format
+msgid "invalid inode size %d (min %d/max %d)"
+msgstr "ukuran inode tidak valid %d (min %d/max %d)"
+
+#: misc/mke2fs.c:1708
+#, c-format
+msgid "too many inodes (%llu), raise inode ratio?"
+msgstr "terlalu banyak inode (%llu), naikkan rasio inode?"
+
+#: misc/mke2fs.c:1713
+#, c-format
+msgid "too many inodes (%llu), specify < 2^32 inodes"
+msgstr "terlalu banyak inode (%llu), spesifikasikan < 2³2 inode"
+
+#: misc/mke2fs.c:1728
+#, c-format
+msgid ""
+"inode_size (%u) * inodes_count (%u) too big for a\n"
+"\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
+"\tor lower inode count (-N).\n"
+msgstr ""
+"inode_size (%u) * inode_count (%u) terlalu besar untuk sebuah\n"
+"\tfilesystem dengan %lu blok, spesifikan lebih tinggi inode_ratio (-i)\n"
+"\tatau lebih rendah jumlah inode (-N).\n"
+
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Tidak dapat mengalokasikan memori untuk nama berkas tdb\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "ketika mencoba untuk menghapus %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Memaksa menulis filesystem yang sudah ada; ini tidak dapat diundo dengan perintah:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1893
+msgid "while setting up superblock"
+msgstr "ketika mensetup superblok"
+
+#: misc/mke2fs.c:1952
+#, c-format
+msgid "unknown os - %s"
+msgstr "os tidak diketahui - %s"
+
+#: misc/mke2fs.c:2006
+msgid "while trying to allocate filesystem tables"
+msgstr "ketika mencoba mengalokasikan tabel filesystem"
+
+#: misc/mke2fs.c:2037
+#, c-format
+msgid "while zeroing block %u at end of filesystem"
+msgstr "ketika mengkosongkan blok %u di akhir dari filesystem"
+
+#: misc/mke2fs.c:2050
+msgid "while reserving blocks for online resize"
+msgstr "ketika menreserve blok untuk online resize"
+
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
+msgid "journal"
+msgstr "jurnal"
+
+#: misc/mke2fs.c:2073
+#, c-format
+msgid "Adding journal to device %s: "
+msgstr "Menambahkan jurnal ke perangkat %s: "
+
+#: misc/mke2fs.c:2080
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to add journal to device %s"
+msgstr ""
+"\n"
+"\tketika mencoba untuk menambahkan jurnal ke perangkat %s"
+
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
+#, c-format
+msgid "done\n"
+msgstr "selesai\n"
+
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "Melewatkan pembuatan jurnal dalam mode super-saja\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Membuat jurnal (%u blok): "
+
+#: misc/mke2fs.c:2122
+#, c-format
+msgid "Writing superblocks and filesystem accounting information: "
+msgstr "Menulis superblok dan informasi akuntasi filesystem: "
+
+#: misc/mke2fs.c:2127
+#, c-format
+msgid ""
+"\n"
+"Warning, had trouble writing out superblocks."
+msgstr ""
+"\n"
+"Peringatan, memiliki masalah menulis diluar superblok."
+
+#: misc/mke2fs.c:2130
+#, c-format
+msgid ""
+"done\n"
+"\n"
+msgstr ""
+"selesai\n"
+"\n"
+
+#: misc/mklost+found.c:49
+#, c-format
+msgid "Usage: mklost+found\n"
+msgstr "Penggunaan: mklost+found\n"
+
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Penggunaan: %s perangkat...\n"
+"\n"
+"Tampilkan informasi partisi untuk setiap perangkat yang diberikan.\n"
+"Contoh: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "tidak dapat membuka %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Tidak dapat memperoleh geometry dari %s; %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Tidak dapat memperoleh ukuran dari %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   awal=%8d ukuran=%8lu akhir=%6d\n"
+
+#: misc/tune2fs.c:96
+msgid "Please run e2fsck on the filesystem.\n"
+msgstr "Tolong jalankan e2fsck untuk filesystem.\n"
+
+#: misc/tune2fs.c:105
+#, c-format
+msgid ""
+"Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
+"\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
+"\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
+msgstr ""
+"Penggunaan: %s [-c jumlah_max_mount] [-e errors_behavior] [-g grup]\n"
+"\t[-t interval[d|m|w]] [-j] [-J opsi_jurnal] [-l]\n"
+"\t[-m persentasi_reserved_blok] [-o [^]opsi_mount[,...]] \n"
+"\t[-r jumlah_reserved_blok] [-u pengguna] [-C jumlah_mount] [-L label_volume]\n"
+"\t[-E opsi-extended[,...]] [-T waktu_terakhir_diperiksa] [-U UUID]\n"
+"\t[-I ukuran_inode_baru] perangkat\n"
+
+#: misc/tune2fs.c:190
+msgid "while trying to open external journal"
+msgstr "ketika mencoba membuka jurnal external"
+
+#: misc/tune2fs.c:194
+#, c-format
+msgid "%s is not a journal device.\n"
+msgstr "%s bukan sebuah perangkat jurnal.\n"
+
+#: misc/tune2fs.c:209
+msgid "Journal superblock not found!\n"
+msgstr "Jurnal superblok tidak ditemukan!\n"
+
+#: misc/tune2fs.c:221
+msgid "Filesystem's UUID not found on journal device.\n"
+msgstr "Filesystem's UUID tidak ditemukan dalam perangkat jurnal.\n"
+
+#: misc/tune2fs.c:242
+msgid "Journal NOT removed\n"
+msgstr "Jurnal TIDAK dihapus\n"
+
+#: misc/tune2fs.c:248
+msgid "Journal removed\n"
+msgstr "Jurnal dihapus\n"
+
+#: misc/tune2fs.c:288
+msgid "while reading bitmaps"
+msgstr "ketika membaca bitmap"
+
+#: misc/tune2fs.c:296
+msgid "while clearing journal inode"
+msgstr "ketika menghapus inode jurnal"
+
+#: misc/tune2fs.c:307
+msgid "while writing journal inode"
+msgstr "ketika menulis inode jurnal"
+
+#: misc/tune2fs.c:322
+#, c-format
+msgid "Invalid mount option set: %s\n"
+msgstr "opsi mount tidak valid diset: %s\n"
+
+#: misc/tune2fs.c:358
+#, c-format
+msgid "Clearing filesystem feature '%s' not supported.\n"
+msgstr "Menghapus feature filesystem '%s' tidak dilayani.\n"
+
+#: misc/tune2fs.c:364
+#, c-format
+msgid "Setting filesystem feature '%s' not supported.\n"
+msgstr "Menset filesystem feature '%s' tidak dilayani.\n"
+
+#: misc/tune2fs.c:373
+msgid ""
+"The has_journal feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Has_journal feature mungkin hanya bisa dihapus ketika filesystem sedang\n"
+"dimount baca-saja atau tidak dimount.\n"
+
+#: misc/tune2fs.c:381
+msgid ""
+"The needs_recovery flag is set.  Please run e2fsck before clearing\n"
+"the has_journal flag.\n"
+msgstr ""
+"Needs_recovery flag diset. Tolong jalankan e2fsck sebelum menghapus\n"
+"has_journal flag.\n"
+
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Menghapus flex_bg flag akan mengakibatkan filesystem menjadi\n"
+"tidak konsisten.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Huge_file feature hanya boleh dihapus ketika filesystem sedang\n"
+"dimount baca-saja atau tidak dimount.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(dan reboot setelah ini!)\n"
+
+#: misc/tune2fs.c:474
+msgid "The filesystem already has a journal.\n"
+msgstr "Filesystem telah memiliki sebuah jurnal.\n"
+
+#: misc/tune2fs.c:492
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to open journal on %s\n"
+msgstr ""
+"\n"
+"\tketika mencoba untuk membuka jurnal di %s\n"
+
+#: misc/tune2fs.c:496
+#, c-format
+msgid "Creating journal on device %s: "
+msgstr "Membuat jurnal di perangkat %s: "
+
+#: misc/tune2fs.c:504
+#, c-format
+msgid "while adding filesystem to journal on %s"
+msgstr "ketika menambahkan filesystem di jurnal di %s"
+
+#: misc/tune2fs.c:510
+msgid "Creating journal inode: "
+msgstr "Membuat jurnal inode: "
+
+#: misc/tune2fs.c:519
+msgid ""
+"\n"
+"\twhile trying to create journal file"
+msgstr ""
+"\n"
+"\tketika mencoba membuat file jurnal"
+
+#: misc/tune2fs.c:585
+#, c-format
+msgid "Couldn't parse date/time specifier: %s"
+msgstr "Tidak dapat memparse date/time specifier: %s"
+
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
+#, c-format
+msgid "bad mounts count - %s"
+msgstr "jumlah mount buruk - %s"
+
+#: misc/tune2fs.c:638
+#, c-format
+msgid "bad error behavior - %s"
+msgstr "perilaku error buruk - %s"
+
+#: misc/tune2fs.c:665
+#, c-format
+msgid "bad gid/group name - %s"
+msgstr "nama gid/grup buruk - %s"
+
+#: misc/tune2fs.c:698
+#, c-format
+msgid "bad interval - %s"
+msgstr "interval buruk - %s"
+
+#: misc/tune2fs.c:727
+#, c-format
+msgid "bad reserved block ratio - %s"
+msgstr "rasio reserved blok buruk - %s"
+
+#: misc/tune2fs.c:742
+msgid "-o may only be specified once"
+msgstr "-o hanya boleh dispesifikasikan sekali"
+
+#: misc/tune2fs.c:752
+msgid "-O may only be specified once"
+msgstr "-O hanya boleh dispesifikasikan sekali"
+
+#: misc/tune2fs.c:762
+#, c-format
+msgid "bad reserved blocks count - %s"
+msgstr "jumlah reserved blok buruk - %s"
+
+#: misc/tune2fs.c:791
+#, c-format
+msgid "bad uid/user name - %s"
+msgstr "nama uid/pengguna buruk - %s"
+
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "ukuran inode buruk - %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Ukuran inode harus kelipatan dari dua - %s"
+
+#: misc/tune2fs.c:904
+#, c-format
+msgid "Invalid RAID stride: %s\n"
+msgstr "Invalid RAID stride: %s\n"
+
+#: misc/tune2fs.c:919
+#, c-format
+msgid "Invalid RAID stripe-width: %s\n"
+msgstr "Invalid RAID stripe-width: %s\n"
+
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Algoritma hash tidak valid: %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Menset default algoritma hash ke %s (%d)\n"
+
+#: misc/tune2fs.c:948
+#, c-format
+msgid ""
+"\n"
+"Bad options specified.\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk chunk size in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+msgstr ""
+"\n"
+"Opsi buruk dispesifikasikan.\n"
+"\n"
+"Opsi extended dipisahkan oleh koma, dan boleh mengambil argumen\n"
+"\tyang di set of oleh sebuah tanda sama dengan ('=').\n"
+"\n"
+"Opsi extended yang valid adalah:\n"
+"\tstride=<RAID per-disk ukuran chunk dalam blok>\n"
+"\tstripe-width=<RAID stride*data disk dalam blok>\n"
+"\thash_alg=<algoritma_hash>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "blok akan dipindahkan"
+
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Untuk mengembalikan operasi tune2fs mohon jalankan perintah\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "Ukuran inode telah %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Mengecilkan ukuran inode yang tidak dilayani\n"
+
+#: misc/tune2fs.c:1594
+#, c-format
+msgid "Setting maximal mount count to %d\n"
+msgstr "Menset maksimal jumlah mount ke %d\n"
+
+#: misc/tune2fs.c:1600
+#, c-format
+msgid "Setting current mount count to %d\n"
+msgstr "Menset jumlah mount sekarang ke %d\n"
+
+#: misc/tune2fs.c:1605
+#, c-format
+msgid "Setting error behavior to %d\n"
+msgstr "Menset perilaku error ke %d\n"
+
+#: misc/tune2fs.c:1610
+#, c-format
+msgid "Setting reserved blocks gid to %lu\n"
+msgstr "Menset gid reserved blok ke %lu\n"
+
+#: misc/tune2fs.c:1615
+#, c-format
+msgid "Setting interval between checks to %lu seconds\n"
+msgstr "Menset interval diantara check ke %lu detik\n"
+
+#: misc/tune2fs.c:1622
+#, c-format
+msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
+msgstr "Menset persentasi reserved blok ke %g%% (%u blok)\n"
+
+#: misc/tune2fs.c:1629
+#, c-format
+msgid "reserved blocks count is too big (%lu)"
+msgstr "jumlah reserved blok terlalu besar (%lu)"
+
+#: misc/tune2fs.c:1635
+#, c-format
+msgid "Setting reserved blocks count to %lu\n"
+msgstr "Menset jumlah reserved blok ke %lu\n"
+
+#: misc/tune2fs.c:1641
+msgid ""
+"\n"
+"The filesystem already has sparse superblocks.\n"
+msgstr ""
+"\n"
+"Filesystem telah memiliki sparse superblok.\n"
+
+#: misc/tune2fs.c:1648
+#, c-format
+msgid ""
+"\n"
+"Sparse superblock flag set.  %s"
+msgstr ""
+"\n"
+"Sparse superblok flag diset. %s"
+
+#: misc/tune2fs.c:1653
+msgid ""
+"\n"
+"Clearing the sparse superflag not supported.\n"
+msgstr ""
+"\n"
+"Menghapus sparse superflag tidak dilayani.\n"
+
+#: misc/tune2fs.c:1660
+#, c-format
+msgid "Setting time filesystem last checked to %s\n"
+msgstr "Menset waktu filesystem terakhir diperiksa ke %s\n"
+
+#: misc/tune2fs.c:1666
+#, c-format
+msgid "Setting reserved blocks uid to %lu\n"
+msgstr "Menset uid reserved blok ke %lu\n"
+
+#: misc/tune2fs.c:1717
+msgid "Invalid UUID format\n"
+msgstr "Invalid format UUID\n"
+
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "Ukuran inode mungkin akan berubah ketika filesystem tidak dimount.\n"
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Pengubahan ukuran inode tidak didukung untuk sistem berkas dengan flex_bg\n"
+"fitur aktif.\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Error dalam mengubah ukuran dari ukuran inode.\n"
+"Jalankan e2undo untuk undo perubahan filesystem.\n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Menset ukuran inode %lu\n"
+
+#: misc/tune2fs.c:1762
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr "Menset ukuran stride ke %d\n"
+
+#: misc/tune2fs.c:1767
+#, c-format
+msgid "Setting stripe width to %d\n"
+msgstr "Menset lebar stripe ke %d\n"
+
+#: misc/util.c:72
+msgid "Proceed anyway? (y,n) "
+msgstr "Jalankan saja? (y,n) "
+
+#: misc/util.c:93
+#, c-format
+msgid "Could not stat %s --- %s\n"
+msgstr "Tidak dapat melakukan statistik %s --- %s\n"
+
+#: misc/util.c:96
+msgid ""
+"\n"
+"The device apparently does not exist; did you specify it correctly?\n"
+msgstr ""
+"\n"
+"Perangkat kelihatannya tidak ada; apakah anda menspesifikasikannya dengan benar?\n"
+
+#: misc/util.c:107
+#, c-format
+msgid "%s is not a block special device.\n"
+msgstr "%s bukan sebuah perangkat blok spesial.\n"
+
+#: misc/util.c:136
+#, c-format
+msgid "%s is entire device, not just one partition!\n"
+msgstr "%s adalah seluruh perangkatm bukan hanya sebuah partisi!\n"
+
+#: misc/util.c:158
+msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "mke2fs dipaksakan saja. Mudah mudahan /etc/mtab tidak benar.\n"
+
+#: misc/util.c:163
+#, c-format
+msgid "will not make a %s here!\n"
+msgstr "tidak akan membuat sebuah %s disini!\n"
+
+#: misc/util.c:170
+msgid "mke2fs forced anyway.\n"
+msgstr "mke2fs dipaksakan saja.\n"
+
+#: misc/util.c:186
+msgid "Couldn't allocate memory to parse journal options!\n"
+msgstr "Tidak dapat mengalokasikan memori untuk memparse opsi jurnal!\n"
+
+#: misc/util.c:228
+msgid ""
+"\n"
+"Bad journal options specified.\n"
+"\n"
+"Journal options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid journal options are:\n"
+"\tsize=<journal size in megabytes>\n"
+"\tdevice=<journal device>\n"
+"\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
+"\n"
+msgstr ""
+"\n"
+"Opsi jurnal buruk dispesifikasikan.\n"
+"\n"
+"Opsi jurnal dipisahkan dengan koma, dan boleh menggunakan argumen yang\n"
+"\tdiset off dengan sebuah tanda sama dengan ('=').\n"
+"\n"
+"Opsi jurnal valid adalah:\n"
+"\tsize=<ukuran jurnal dalam megabytes>\n"
+"\tdevice=<perangkat jurnal>\n"
+"\n"
+"Ukuran jurnal harus diantara 1024 dan 10240000 filesystem blok.\n"
+"\n"
+
+#: misc/util.c:258
+msgid ""
+"\n"
+"Filesystem too small for a journal\n"
+msgstr ""
+"\n"
+"Filesystem terlalu kecil untuk sebuah jurnal\n"
+
+#: misc/util.c:265
+#, c-format
+msgid ""
+"\n"
+"The requested journal size is %d blocks; it must be\n"
+"between 1024 and 10240000 blocks.  Aborting.\n"
+msgstr ""
+"\n"
+"Ukuran jurnal yang diminta adalah %d blok; ini harus berada\n"
+"diantara 1024 dan 10240000 blok. Membatalkan.\n"
+
+#: misc/util.c:273
+msgid ""
+"\n"
+"Journal size too big for filesystem.\n"
+msgstr ""
+"\n"
+"Ukuran jurnal terlalu besar untuk filesystem.\n"
+
+#: misc/util.c:283
+#, c-format
+msgid ""
+"This filesystem will be automatically checked every %d mounts or\n"
+"%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
+msgstr ""
+"Filesystem ini akan secara otomatis diperiksa setiap %d mounts atau\n"
+"%g hari, yang mana yang datang lebih dulu. Gunakan tune2fs -c atau -i\n"
+"untuk mengubahnya.\n"
+
+#: misc/uuidgen.c:31
+#, c-format
+msgid "Usage: %s [-r] [-t]\n"
+msgstr "Penggunaan: %s [-r] [-t]\n"
+
+#: resize/extent.c:196
+msgid "# Extent dump:\n"
+msgstr "# Extent dump:\n"
+
+#: resize/extent.c:197
+#, c-format
+msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
+msgstr "#\tNum=%d, Ukuran=%d, Cursor=%d, Sorted=%d\n"
+
+#: resize/extent.c:200
+#, c-format
+msgid "#\t\t %u -> %u (%d)\n"
+msgstr "#\t\t %u -> %u (%d)\n"
+
+#: resize/main.c:42
+#, c-format
+msgid ""
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
+"\n"
+msgstr ""
+"Penggunaan: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] perangkat [ukuran_baru]\n"
+"\n"
+
+#: resize/main.c:64
+msgid "Extending the inode table"
+msgstr "Memperbesar tabel inode"
+
+#: resize/main.c:67
+msgid "Relocating blocks"
+msgstr "Memindahkan blok"
+
+#: resize/main.c:70
+msgid "Scanning inode table"
+msgstr "Memeriksa tabel inode"
+
+#: resize/main.c:73
+msgid "Updating inode references"
+msgstr "Memperbarui referensi inode"
+
+#: resize/main.c:76
+msgid "Moving inode table"
+msgstr "Memindahkan tabel inode"
+
+#: resize/main.c:79
+msgid "Unknown pass?!?"
+msgstr "Tahap tidak diketahui?!?"
+
+#: resize/main.c:82
+#, c-format
+msgid "Begin pass %d (max = %lu)\n"
+msgstr "Awal tahap %d (max = %lu)\n"
+
+#: resize/main.c:265
+#, c-format
+msgid "while opening %s"
+msgstr "ketika membuka %s"
+
+#: resize/main.c:277
+#, c-format
+msgid "while getting stat information for %s"
+msgstr "ketika memperoleh informasi statistik untuk %s"
+
+#: resize/main.c:338
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinasi dari flex_bg dan\n"
+"\t!resize_inode features tidak dilayani oleh resize2fs.\n"
+
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Estimasi minimum dari ukuran filesystem: %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Ukuran inode baru tidak valid: %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "Ukuran baru lebih kecil daripada minimum (%u)\n"
+
+#: resize/main.c:402
+msgid "Invalid stride length"
+msgstr "Panjang stride tidak valid"
+
+#: resize/main.c:426
+#, c-format
+msgid ""
+"The containing partition (or device) is only %u (%dk) blocks.\n"
+"You requested a new size of %u blocks.\n"
+"\n"
+msgstr ""
+"Partisi (atau perangkat) hanya berisi %u (%dk) blok.\n"
+"Anda meminta ukuran baru %u blok.\n"
+
+#: resize/main.c:433
+#, c-format
+msgid ""
+"The filesystem is already %u blocks long.  Nothing to do!\n"
+"\n"
+msgstr ""
+"Filesystem telah memiliki panjang %u blok. Tidak ada yang harus dilakukan !\n"
+"\n"
+
+#: resize/main.c:444
+#, c-format
+msgid ""
+"Please run 'e2fsck -f %s' first.\n"
+"\n"
+msgstr ""
+"Tolong jalankan 'e2fsck -f %s' terlebih dahulu.\n"
+"\n"
+
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "Mengubah sistem berkas di %s ke %u (%dk) blok.\n"
+
+#: resize/main.c:457
+#, c-format
+msgid "while trying to resize %s"
+msgstr "ketika mencoba untuk mengubah ukuran %s"
+
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Mohon jalankan 'e2fsck -fy %s' untuk membetulkan sistem berkas\n"
+"setelah pembatalan operasi pengubahan ukuran.\n"
+
+#: resize/main.c:466
+#, c-format
+msgid ""
+"The filesystem on %s is now %u blocks long.\n"
+"\n"
+msgstr ""
+"Filesystem di %s sekarang memiliki panjang %u blok.\n"
+"\n"
+
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "ketika mencoba untuk memotong %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Filesystem di %s dimount di %s; on-line resizing dibutuhkan\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "On-line shrinking dari %u ke %u tidak dilayani.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Filesystem tidak melayani online resizing"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "ketika mencoba membuka mountpoint %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Ijin ditolak ketika mengubah ukuran filesystem"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Kernel tidak melayani online resizing"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Ketika memeriksa untuk layanan on-line resizing"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Menjalankan sebuah on-line resize dari %s ke %u (%dk) blok.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Ketika mencoba untuk mengexten grup terakhir"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Ketika mencoba untuk menambahkan grup #%d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Filesystem di %s dimount di %s, dan on-line resizing tidak disupport di system ini.\n"
+
+#: resize/resize2fs.c:350
+#, c-format
+msgid "inodes (%llu) must be less than %u"
+msgstr "inode (%llu) harus lebih kecil dari %u"
+
+#: resize/resize2fs.c:582
+msgid "reserved blocks"
+msgstr "reserved blok"
+
+#: resize/resize2fs.c:795
+msgid "meta-data blocks"
+msgstr "meta-data blok"
+
+#: resize/resize2fs.c:1752
+#, c-format
+msgid "Should never happen: resize inode corrupt!\n"
+msgstr "Seharusnya tidak pernah terjadi: resize inode corrupt!\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "@S tidak memiliki @j tanda, tetapi memiliki ext3 @j %s.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Error ketika menghapus extensi: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr "Membuat kembali jurnal untuk membuat filesystem ext3 lagi?\n"
+
+#~ msgid "bad block size - %s"
+#~ msgstr "ukuran blok buruk - %s"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "ketika sedang mencoba untuk menulis blok bitmap untuk %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "menulis inode bitmap"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s gagal untuk %s: %s\n"
+
+#~ msgid "open"
+#~ msgstr "buka"
+
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "HDIO_GETGEO ioctl"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "BLKGETSIZE ioctl"
diff --git a/po/it.gmo b/po/it.gmo
index bef36c2..47e0da3 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 3173109..144d8d2 100644
--- a/po/it.po
+++ b/po/it.po
@@ -66,7 +66,7 @@
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.36-b2\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
 "PO-Revision-Date: 2005-01-18 17:52+0100\n"
 "Last-Translator: Andrea Spadaccini <lupin85@email.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -75,7 +75,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Blocco non valido %u fuori dall'intervallo; ignorato.\n"
@@ -89,10 +89,10 @@
 msgstr "durante la lettura dell'inode numero 1"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "durante l'apertura di %s"
@@ -102,7 +102,7 @@
 msgid "while trying popen '%s'"
 msgstr "provando ad effettuare il popen di '%s'"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "durante la lettura della lista di blocchi non validi da file"
 
@@ -117,30 +117,30 @@
 "Attenzione blocco illegale %u trovato nell'inode di un blocco difettoso. "
 "Azzerato.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Errore durante la lettura del blocco %lu (%s) durante %s. "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Errore durante la lettura del blocco %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignora l'errore"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Forza la riscrittura"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Errore durante la scrittura del blocco %lu (%s) mentre %s."
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Errore durante la scrittura del blocco %lu (%s). "
@@ -188,21 +188,21 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Utilizzo: %s [-F] [-I blocchi_buffer_inode] device\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "aprendo %s per lo svuotamento"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
 msgstr "provando a svuotare %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
 msgstr "avviando la scansione degli inode"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
 msgstr "leggendo l'inode successivo"
 
@@ -211,228 +211,233 @@
 msgid "%u inodes scanned.\n"
 msgstr "%d inode analizzati.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "lettura del superblocco del journal\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: non è stato trovato un superblocco valido del journal\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal troppo corto\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: ripristino del journal\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: impossibile ripritinare il journal in modalità sola lettura\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "durante la riapertura di %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aattributo esteso"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Aerrore allocando"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bblocco"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bmappa dei bit"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ccomprimi"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Centra in conflitto con altri @b(i) del fs"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "iinode"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Iillegale"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dcancellato"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "ddirectory"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "eelemento"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' in %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "ffilesystem"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fper l'@i %i (%Q) è"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggruppo"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "h@i della @d HTREE"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lè un collegamento"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 #, fuzzy
 msgid "mmultiply-claimed"
 msgstr "mappa degli inode richiesta più volte"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr ""
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oorfano"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblema in"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "r@i root"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "sdovrebbe essere"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr ""
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vdevice"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+#, fuzzy
+msgid "xextent"
+msgstr "eelemento"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zlunghezza-zero"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<Inode NULL>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<Inode numero 1>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<Inode dell'indice ACL>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<Inode dei dati ACL>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<Inode del boot loader>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<Inode della directory undelete>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<Inode del descrittore di gruppo>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<Inode del journal>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Inode riservato 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Inode riservato 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, fuzzy, c-format
 msgid "regular file"
 msgstr "mappa degli inode dei file regolari"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, fuzzy, c-format
 msgid "directory"
 msgstr "ddirectory"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr ""
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, fuzzy, c-format
 msgid "block device"
 msgstr "vdevice"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr ""
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr ""
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr ""
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
@@ -441,101 +446,113 @@
 msgid "multiply claimed inode map"
 msgstr "mappa degli inode richiesta più volte"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
 #, fuzzy, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "errore interno; impossibile trovare dup_blk per %d\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
 msgstr "ritornato da clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:762
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "Errore interno: impossibile trovare dir_info per %i.\n"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:774
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "Errore interno: impossibile trovare dir_info per %i.\n"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 #, fuzzy
 msgid "reading directory block"
 msgstr "lettura dei blocchi indiretti dell'inode %u"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "mappa degli inode in utilizzo"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "mappa degli inode delle directory"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "mappa degli inode dei file regolari"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "mappa dei blocchi in utilizzo"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 #, fuzzy
 msgid "opening inode scan"
 msgstr "scansione degli inode"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 #, fuzzy
 msgid "getting next inode from scan"
 msgstr "leggendo l'inode successivo"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "Passo 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lettura dei blocchi indiretti dell'inode %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
 msgstr "mappa degli inode non valida"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
 msgstr "inode nella mappa dei blocchi difettosi"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
 msgstr "mappa degli inode imagic"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
 msgstr "mappa dei blocchi richiesta più volte"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "mappa dei bit del blocco"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "mappa dei bit dell'inode"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "tavola degli inode"
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "Passo 2"
 
+#: e2fsck/pass2.c:803
+#, fuzzy
+msgid "Can not continue."
+msgstr ""
+"Impossibile continuare, operazione annullata.\n"
+"\n"
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
 msgstr ""
@@ -544,16 +561,16 @@
 msgid "Peak memory"
 msgstr "Memoria di picco"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "Passo 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 #, fuzzy
 msgid "inode loop detection bitmap"
 msgstr "mappa dei bit del ciclo di rilevamento inode"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "Passo 4"
 
@@ -855,10 +872,10 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Il kernel Hurd non supporta la caratteristica filetype.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, fuzzy, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
 msgstr "Il @S ha un @j ext3 non valido (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
@@ -881,13 +898,14 @@
 msgid "External @j does not support this @f\n"
 msgstr "Il @j esterno non supporta questo @f\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
+#, fuzzy
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
@@ -897,26 +915,28 @@
 "formato di @j.\n"
 "E' anche possibile che il @S del @j sia corrotto.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
+#, fuzzy
+msgid "@j @S is corrupt.\n"
 msgstr "Il @S del @j ext3 è corrotto.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "Il @S non ha il flag has_@j, ma ha il @j ext3 %s.\n"
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "flag del recupero ext3 pulito, ma il @j contiene ancora dati.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Il @S ha il flag ext3 needs_recovery impostato, ma non ha @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
 #, fuzzy
-msgid "ext3 recovery flag is clear, but @j has data.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "flag del recupero ext3 pulito, ma il @j contiene ancora dati.\n"
 
 #. @-expanded: Clear journal
@@ -962,22 +982,22 @@
 msgstr "@i @I %i nella lista degli @i @o.\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr ""
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
 #, fuzzy
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
+msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 "Il @S del @j ext3 ha impostato il flag a sola lettura di una caratteristica "
 "sconosciuta.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
 #, fuzzy
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "Il @S del @j ext3 ha impostato il flag di una caratteristica non "
 "compatibile.\n"
@@ -1075,123 +1095,160 @@
 "\n"
 msgstr ""
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr ""
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr ""
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Passo 1: Controllo di @i, @b(i) e dimensioni\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "L'@r non è una @d. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr ""
 "L'@r ha il dtime impostato (probabilmente a causa di un vecchio mke2fs)."
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 #, fuzzy
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "L'@i riservato %i %Q ha una modalità errata. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "L'@i @D  %i ha dtime zero. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, fuzzy, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "L'@i %i è una @d a @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "La @B dei @b(i) del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "La @B degli @i del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "La tavola degli @i del @g %g a %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "La @B dei @b(i) del @g %g (%b) non è valida. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "La @B degli @i del @g %g (%b) non è valida. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size è %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 #, fuzzy
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_blocks è %Ib, @s %N. "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@b @I #%B (%b) nell'@i %i. "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "L'@i %i ha @b(i) illegali. "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Troppi @b(i) illegali in @i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 #, fuzzy
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "@b @I #%B (%b) nell'@i del @b non valido. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 #, fuzzy
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "L'@i del @b non valido ha @b(i) illegali. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b duplicato o non valido in uso!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 #, fuzzy
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Il @b %b usa come @i del @b non valido un @b indiretto. "
@@ -1200,7 +1257,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1214,7 +1271,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1225,7 +1282,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 #, fuzzy
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
@@ -1238,24 +1295,24 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Il @S primario (%b) è nella listi dei @b(i) non validi.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Il blocco %b nei descrittori primari del @g è nella lista dei @b(i) non "
 "validi\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Attenzione: Il @S (%b) del gruppo %g non è valido.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 #, fuzzy
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
@@ -1263,107 +1320,107 @@
 "valido.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Errore di programmazione? @b #%b reclamato senza ragione in process_bad_@b.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 #, fuzzy
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N @b(i) contigui nel @g di @b %g per %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A il buffer @b per la rilocazione di %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Rilocazione del %s del @g %g da %b a %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, fuzzy, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Rilocazione del %s del @g %g in %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Attenzione: impossibile leggere @b %b di %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Attenzione: impossibile scrivere @b %b per %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A la @B dell'@i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 #, fuzzy
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A la @B dell'@i (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, fuzzy, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A le informazioni del collegamento icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, fuzzy, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A l'array dei @b di @d: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Errore analizzando @is (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Errore scorrendo i @b(i) nell'@i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Errore salvando le informazioni sul numero di @i (@i=%i, numero=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 #, fuzzy
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Errore salvando le informazioni sui @b(i) di @d (@i=%i, @b=%b, num=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Errore durante la lettura dell'@i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "L'@i %i ha il flag imagic impostato. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1373,13 +1430,13 @@
 "immutable o append-only impostato. "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, fuzzy, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr ""
@@ -1387,154 +1444,154 @@
 "immutable o append-only impostato. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 #, fuzzy
 msgid "@j @i is not in use, but contains data.  "
 msgstr "L'@i %i è in uso, ma ha il dtime impostato. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "Il @j non è un file regolare. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, fuzzy, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "L'@i %i faceva parte della lista degli @i orfani. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 #, fuzzy
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr ""
 "trovati @i che facevano parte di una lista di orfani corrotti collegati. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 #, fuzzy
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 #, fuzzy
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Errore leggendo l'@a di @b %b per l'@i %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 #, fuzzy
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "L'@i %i ha un @a di @b %b non valido. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 #, fuzzy
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Errore leggendo l'@a di @b %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 #, fuzzy
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "L'@a di @b %b è contato come %b, dovrebbe essere %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 #, fuzzy
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Errore scrivendo l'@a @b %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 #, fuzzy
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "L'@a @b %b ha il valore h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 #, fuzzy
 msgid "@A @a @b %b.  "
 msgstr "L'@i %i ha un @a di @b %b non valido. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 #, fuzzy
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "L'@a di @b %b è corrotto (collisione di allocazione). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 #, fuzzy
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "L'@a di @b %b è corrotto (nome non valido). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 #, fuzzy
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "L'@a di @b %b è corrotto (valore non valido). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "L'@i %i è troppo grande. "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il @d troppo grande. "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il file troppo grande. "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "Il @b #%B (%b) fa diventare il link simbolico troppo grande. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
 "L'@i %i ga il flag INDEX_FL impostato nel @f senza il supporto htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "L'@i %i ha il flag INDEX_FL impostato, ma non è un @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, fuzzy, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "L'@h %i ha un nodo root non valido.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "L'@h %i ha una versione dell'hash non supportata (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "L'@h %i usa un flag di nodo htree di root non compatibile.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1543,56 +1600,123 @@
 "conflitto con il metadata del @f. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr ""
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 #, fuzzy
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 #, fuzzy
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 #, fuzzy
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 #, fuzzy
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 #, fuzzy
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
 #, fuzzy
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+msgid "@a in @i %i has a hash (%N) which is @n\n"
 msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, fuzzy, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Errore scorrendo i @b(i) nell'@i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, fuzzy, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"L'@i %i ga il flag INDEX_FL impostato nel @f senza il supporto htree.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1600,51 +1724,51 @@
 msgstr ""
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, fuzzy, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b @I #%B (%b) nell'@i %i. "
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Errore analizzando gli inode (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, fuzzy, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A la @B degli @i (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Errore scorrendo i @b(i) nell'@i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 #, fuzzy
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Errore sistemando il conteggio dei riferimenti per il @b @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 #, fuzzy
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 "Passo 1C: Analisi delle directory relativa agli @i con @b(i) duplicati.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 #, fuzzy
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Passo 1D: Riconciliamento del @b(i) duplicati\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 #, fuzzy
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
@@ -1654,18 +1778,18 @@
 "  ha %b @b(i) duplicati, condivisi con %N file:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, ultima modifica %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadata del @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 #, fuzzy
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
@@ -1676,7 +1800,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 #, fuzzy
 msgid ""
 "@m @bs already reassigned or cloned.\n"
@@ -1685,340 +1809,341 @@
 "@b(i) duplicati già riassegnati o clonati.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Impossibile clonare il file: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Passo 2: Analisi della struttura delle @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, fuzzy, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Numero di @i non valido per '.' nell'@i @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 #, fuzzy
 msgid "@E has @n @i #: %Di.\n"
 msgstr "L'@E ha un @i non valido #: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 #, fuzzy
 msgid "@E has @D/unused @i %Di.  "
 msgstr "L'@E ha @i non utilizzato/@D %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "L'@E @L a '.' "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "L'@E punta all'@i (%Di), posizionato in un @b non valido.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "L'@E @L alla @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "L'@E @L all'@r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "L'@E ha caratteri non validi nel suo nome.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "'.' mancante nell'@i %i della @d.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "'..' mancante nell'@i %i della @d.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 #, fuzzy
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Il primo @e '%Dn' (inode=%Di) nell'@i %i della @d (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 #, fuzzy
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Il secondo @e '%Dn' (inode=%Di) nell'@i %i della @d (%p) @s '.'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 #, fuzzy
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF @s zero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 #, fuzzy
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If @s zero.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 #, fuzzy
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl @F %Id @s zero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 #, fuzzy
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N @s zero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 #, fuzzy
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N @s zero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 #, fuzzy
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "L'@o %i (%Q) ha una modalità non valida (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "@i %i della @d, offset %N: @d corrotta\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "@i %i della @d, offset %N: nome file troppo lungo\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 #, fuzzy
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "L'@i %i della @d ha un @b (#%B) non allocato. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e della @d '.' nell'@i %i della @d non è terminato da NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "L'@e della @d '..' nell'@i %i della @d non è terminato da NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "L'@i %i (%Q) è un @v a caratteri @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "L'@i %i (%Q) è un @v a @b(i) @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 #, fuzzy
 msgid "@E is duplicate '.' @e.\n"
 msgstr "L'@E è un duplicato dell'@e '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "L'@E è un duplicato dell'@e '..'.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Errore interno: impossibile trovare dir_info per %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 #, fuzzy
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "L'@E ha rec_len di %Dr, dovrebbe essere %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A la struttura icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Errore scorrendo i @b(i) delle @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Errore leggendo il @b della @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Errore scrivendo il @b della @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A un nuovo @b della @d per l'@i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, fuzzy, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Errore deallocando l'@i %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, fuzzy, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "L'@e della @d di '.' è grande. "
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "L'@i %i (%Q) è una FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "L'@i %i (%Q) è un socket @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Impostazione del tipo di file per l'@E a %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 #, fuzzy
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "L'@E non è del giusto tipo di file (era %Dt, dovrebbe essere %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "E' impostato il tipo di file per l'@E.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 #, fuzzy
 msgid "@E has a @z name.\n"
 msgstr "Il nome dell'@E è di lunghezza nulla.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 #, fuzzy
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Il symlink %Q (@i #%i) non è valido.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "Il @f contiene files di grandi dimensioni, ma nel @S non è specificato il "
 "flag LARGE_FILE.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 #, fuzzy
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "@p un @h (%d): nodo (%B) non referenziato\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 #, fuzzy
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "@p un @h (%d): nodo (%b) referenziato due volte\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 #, fuzzy
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "@p un @h (%d): nodo (%B) con hash minimo non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 #, fuzzy
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "@p un @h (%d): nodo (%b) con hash massimo non valido\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 #, fuzzy
 msgid "@n @h %d (%q).  "
 msgstr "@h %d non valido (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p un @h %d (%q): @b non valido numero %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, fuzzy, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p un @h (%d): nodo root non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 #, fuzzy
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "@p un @h (%d): nodo (%B) con limite non valido (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 #, fuzzy
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "@p un @h (%d): numero (%N) di nodo (%B) non valido\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "@p un @h (%d): nodo (%B) con tabella hash non ordinata\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
 #, fuzzy
-msgid "@p @h %d: node (%B) has @n depth\n"
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
 msgstr "@p un @h (%d): nodo (%B) con profondità non valida\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Trovato @E duplicato. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -2030,7 +2155,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 #, fuzzy
 msgid ""
 "Duplicate @e '%Dn' found.\n"
@@ -2042,98 +2167,114 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 #, fuzzy
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_fsize @F %N @s zero.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+#, fuzzy
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "@h %d non valido (%q). "
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1293
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Passo 3: Controllo della connettività di @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
 msgstr "@r non allocato."
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
 msgstr "Non c'è spazio nella @d @l"
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
 msgstr "/@l non trovata. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' in %Q (%i) è %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 #, fuzzy
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/@l non valida o inesistente. Impossibile riconnettere.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Impossibile espandere /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, fuzzy, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Impossibile riconnettere %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Errore cercando /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, fuzzy, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m cercando di creare la @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m cercando di creare la @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, fuzzy, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2f_new_dir_block: %m creando un nuovo @b @d\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, fuzzy, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m scrivendo il @b @d per /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Errore aggiustando il numero @i nell'@i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2142,7 +2283,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2150,69 +2291,70 @@
 msgstr ""
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Errore creando la @d root (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Errore creando la @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 #, fuzzy
 msgid "@r is not a @d; aborting.\n"
 msgstr "L'@r non è una @d; cancellazione.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
 msgstr "Impossibile procedere senza un @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l non è una @d (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Passo 3A: Ottimizzazione delle directory\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Impossibile creare un iteratore dirs_to_hash: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Impossibile ottimizzare la directory %q (%d): %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "Ottimizzazione delle directory: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Pass 4: Controllo del numero dei riferimenti\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, fuzzy, c-format
 msgid "@u @z @i %i.  "
 msgstr "@i @o @I %i nel @S.\n"
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
 msgstr ""
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 #, fuzzy
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Il contatore riferimenti dell'@i %i è %Il, @s %N. "
@@ -2220,7 +2362,7 @@
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 #, fuzzy
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
@@ -2232,94 +2374,108 @@
 "@i_link_info[%i] è %N, @i.i_links_count è %Il. Dovrebbero essere identici!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 #, fuzzy
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Passo 5: Controllo del riepilogo delle informazioni del @g\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 #, fuzzy
 msgid "Padding at end of @i @B is not set. "
 msgstr "Riempimento alla fine di @i @B non impostato. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 #, fuzzy
 msgid "Padding at end of @b @B is not set. "
 msgstr "Riempimento alla fine di @b @B non impostato. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr "Differenze nella @B dei @b: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr "Differenze nella @B degli @i: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Numero degli @i liberi errato per il @g #%g (%i, contati=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Numero delle directory errato per il @g #%g (%i, contati=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Numero degli @i liberi errato (%i, contati=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Numero dei @b(i) liberi errato per il @g #%g (%b, contati=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Numero dei @b(i) liberi errato (%b, contati=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1556
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 #, fuzzy
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 "Errore interno: impossibile individuare la fine della mappa di bit (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, fuzzy, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Errore durante la lettura dell'@i %i: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Ricrea"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Codice errore non gestito (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "IGNORATO"
 
@@ -2346,63 +2502,23 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "chiamando ext2fs_block_iterate per l'inode %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, fuzzy, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "chiamando ext2fs_adjust_ea_refocunt per l'inode %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr ""
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr ""
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "chiamando ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "chiamando la funzione iteratrice"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "allocando il buffer inode"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "leggendo la tavola degli inode (gruppo %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "scrivendo la tavola degli inode (gruppo %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Pass 0: Esecuzione del byte-swap del filesystem\n"
-
-#: e2fsck/swapfs.c:233
-#, c-format
-msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: il filesystem dev'essere controllato da poco utilizzando fsck\n"
-"e dev'essere smontato prima di provare ad eseguirne il byte-swap.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Byte-swap"
-
-#: e2fsck/unix.c:74
+#: e2fsck/unix.c:76
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
@@ -2412,7 +2528,7 @@
 "\t\t[-l|-L file_blocchi_non_validi] [-C fd] [-j ext-journal]\n"
 "\t\t[-E opzioni-estese] device\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2434,7 +2550,7 @@
 " -f                   Forza il controllo anche se il filesystem è segnato "
 "come pulito\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, fuzzy, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2452,33 +2568,38 @@
 " -l file_bad_blocks   Aggiungi alla lista dei blocchi non validi\n"
 " -L file_bad_blocks   Imposta la lista dei blocchi non validi\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %d/%d files (%0d.%d%% non contigui), %d/%d blocchi\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, fuzzy, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         # di inode con blocchi ind/dind/tind: %d/%d/%d\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr ""
+
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "determinando se %s è montato."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Attenzione! %s è montato.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s è montato. "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2486,7 +2607,7 @@
 "Impossibile continuare, operazione annullata.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2501,130 +2622,126 @@
 "causare SERI danni al filesystem.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Continuare"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "controllo annullato.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " contiene un filesystem con errori"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " non è stato smontato in maniera corretta"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " è stato montato %u volte senza essere controllato"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+#, fuzzy
+msgid " has filesystem last checked time in the future"
+msgstr ""
+"Impostazione di data ed ora dell'ultimo controllo del filesystem a %s\n"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " non è stato controllato negli ultimi %u giorni"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", controllo forzato.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: a posto, %d/%d file, %d/%d blocchi"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 #, fuzzy
 msgid " (check deferred; on battery)"
 msgstr " (controllo dopo il prossimo mount)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (controllo dopo il prossimo mount)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (controllo tra %ld mount)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERRORE: Impossibile aprire /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Versione EA non valida.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Errore convalidando il descrittore di file %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 #, fuzzy
 msgid "Invalid completion information file descriptor"
 msgstr "Informazioni di completamento descrittore di file non valide"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 #, fuzzy
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Solo una tra le opzioni -p/-a, -n o -y può essere specificata."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'opzione -t non è supportata da questa versione di e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Impossibile risolvere '%s'"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr ""
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Le opzioni -c e -I/-L non possono essere usate contemporaneamente.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
@@ -2632,38 +2749,38 @@
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Errore: versione obsoleta della libreria ext2fs!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "tentando di inizializzare il programma"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUtilizzando %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
 msgstr "serve il terminale per il riparo interattivo"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1010
 #, fuzzy, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s cercando tra i blocchi di backup...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1013
 msgid "Group descriptors look bad..."
 msgstr "I descrittori di gruppo sembrano non validi..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2675,27 +2792,27 @@
 "(O il superblocco del filesystem è corrotto)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "E' possibile che questa sia una partizione di dimensione zero?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Serve accesso di tipo %s al filesystem, o è necessario essere root\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Device non esistente o di swap?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2704,16 +2821,16 @@
 "Disco protetto da scrittura: usare l'opzione -n per controllare\n"
 "in modalità sola lettura.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
 msgstr "Utilizzare una versione più nuova di e2fsck."
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "controllando il journal ext3 per %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
@@ -2723,26 +2840,26 @@
 "ripristinato.\n"
 
 # fuzzy
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1171
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "impossibile impostarei i flag del superblocco a %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1177
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "ripristinando il journal ext3 di %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1201
 #, fuzzy, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "L'@h %i ha una versione dell'hash non supportata (%N)\n"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
 msgstr "Attenzione: il supporto per la compressione è sperimentale.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2751,30 +2868,25 @@
 "E2fsck non è stato compilato con il supporto HTREE,\n"
 "\tma il filesystem %s contiene directory HTREE.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: Ordine dei byte del filesystem già normalizzato.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
 msgstr "leggendo l'inode numero 1"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Questo non è un buon segno, ma si tenterà di continuare...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
 msgstr ""
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Creazione del journal (%d blocchi): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2782,37 +2894,37 @@
 "\n"
 "\tcercando di creare il journal"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1317
 #, fuzzy, c-format
 msgid " Done.\n"
 msgstr "fatto\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Riavvio di e2fsck dall'inizio...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "resettando il contesto"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck cancellato.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
 msgstr "annullato"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -2821,12 +2933,12 @@
 "\n"
 "%s: ***** IL FILESYSTEM E' STATO MODIFICATO *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** RIAVVIARE LINUX *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
@@ -2838,39 +2950,44 @@
 "************\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1400
+#, fuzzy
+msgid "while setting block group checksum info"
+msgstr "impostando l'inode del blocco difettoso"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "sS"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<s>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (s/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "cancellato!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "sì\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "no\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2879,7 +2996,7 @@
 "%s? no\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2888,48 +3005,40 @@
 "%s? sì\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "sì"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "no"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "lettura delle mappe di bit inode e blocco"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "riprovando a leggere le mappe di bit per %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
+#: e2fsck/util.c:243
+#, fuzzy
+msgid "writing block and inode bitmaps"
 msgstr "scrivendo le mappe di bit di blocco"
 
-#: e2fsck/util.c:242
-#, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "riprovando a scrivere le mappe di bit di blocco per %s"
-
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "scrivendo le mappe di bit di inode"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
+#: e2fsck/util.c:248
+#, fuzzy, c-format
+msgid "while rewriting block and inode bitmaps for %s"
 msgstr "riprovando a scrivere le mappe di bit di inode per %s"
 
 # fuzzy
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2942,129 +3051,144 @@
 "%s: INCONSISTENZA INASPETTATA: ESEGUIRE fsck MANUALMENTE.\n"
 "\t(es., senza le opzioni -a o -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:336
 #, c-format
 msgid "Memory used: %dk/%dk (%dk/%dk), "
 msgstr "Memoria usata: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:340
 #, c-format
 msgid "Memory used: %d, "
 msgstr "Memoria usata: %d, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "durata: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "tempo rimanente: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
 msgstr "leggendo l'inode %ld in %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
 msgstr "scrivendo l'inode %ld in %s"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "allocando i buffer zeroizing"
+
+#: misc/badblocks.c:66
 #, fuzzy
 msgid "done                                \n"
 msgstr "fatto                           \n"
 
-#: misc/badblocks.c:80
-#, c-format
+#: misc/badblocks.c:89
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Uso: %s [-b dim_blocco] [-i file_di_input] [-o file_di_output] [-svwnf]\n"
 " [-c blocks_at_once] [-p num_passi] [-t modello_di_prova [-t "
 "modello_di_prova [...]]]\n"
 " device [blocco_finale [blocco_iniziale]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
 msgstr "Controllo con un modello casuale: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
 msgstr "Controllo con modello 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
 msgstr "durante la ricerca"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Valore strano (%ld) nella do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
 msgstr "durante la ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
 msgstr "iniziando a scorrere la lista dei blocchi difettosi"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
 msgstr "allocando i buffer"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Controllo dei blocchi da %lu a %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Ricerca dei blocchi non validi in modalità sola lettura\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Ricerca dei blocchi non validi (test a sola lettura): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr ""
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Ricerca dei blocchi non validi in modalità lettura-scrittura\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Dal blocco %lu al blocco %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
 msgstr "Lettura e confronto: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr ""
 "Ricerca dei blocchi non validi in modalità lettura-scrittura non "
 "distruttiva\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr ""
 "Ricerca dei blocchi non validi (test in moalità lettura-scrittura non "
 "distruttiva)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3072,60 +3196,60 @@
 "\n"
 "Rilevato interrupt, pulizia in corso\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "durante la scrittura dei dati del test, blocco %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s è montato: "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:923
 #, fuzzy
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "forzato comunque badblocks. Speriamo che /etc/mtab si errato.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:928
 msgid "it's not safe to run badblocks!\n"
 msgstr "non è sicuro eseguire badblocks!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:933 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr ""
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:936
 #, fuzzy
 msgid "badblocks forced anyway.\n"
 msgstr "forzato comunque badblocks. Speriamo che /etc/mtab si errato.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:956
+#, fuzzy, c-format
+msgid "invalid %s - %s"
+msgstr "dimensione del blocco difettoso - %s"
+
+#: misc/badblocks.c:1015
 #, c-format
 msgid "bad block size - %s"
 msgstr "dimensione del blocco difettoso - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "impossibile allocare memoria per il modello di prova - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "modello di prova non valido: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr ""
 "E' possibile specificare un solo modello di prova in modalità sola lettura"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Modello di prova casuale non consentito in modalità sola lettura"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3133,91 +3257,91 @@
 "Impossibile determinare la dimensione del device:\n"
 "specificarla manualmente\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
 msgstr "tentando di determinare la dimensione del device"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, fuzzy, c-format
-msgid "invalid blocks count - %s"
-msgstr "numero dei blocchi non validi - %s"
+#: misc/badblocks.c:1128
+#, fuzzy
+msgid "last block"
+msgstr "Rilocazione dei blocchi"
+
+#: misc/badblocks.c:1134
+#, fuzzy
+msgid "first block"
+msgstr "Primo blocco dati=%u\n"
 
 # fuzzy
-#: misc/badblocks.c:1009
+#: misc/badblocks.c:1137
 #, fuzzy, c-format
-msgid "invalid starting block - %s"
+msgid "invalid starting block (%lu): must be less than %lu"
 msgstr "blocco iniziale non valido - %s"
 
-#: misc/badblocks.c:1015
-#, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr ""
-
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 #, fuzzy
 msgid "while creating in-memory bad blocks list"
 msgstr "creando la lista dei blocchi non validi in memoria"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 #, fuzzy
 msgid "while adding to in-memory bad block list"
 msgstr "aggiungendo un elemento alla lista dei blocchi difettosi in memoria"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Passo completato. %u blocchi non validi trovati.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, fuzzy, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
 msgstr "uso: %s [-RV] [-+=AacDdijsSu] [-v versione] file...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
 msgstr "versione non valida - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
 msgstr "tentando di fare lo stat di %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
 msgstr "flag di %s impostati come"
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
 msgstr "leggendo i flag di %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
 msgstr "impostando i flag di %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Versione di %s impostata a %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
 msgstr "impostando la versione a %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Impossibile allocare la variabile di percorso nella chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
 msgstr "= è incompatibile con + e -\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
 msgstr "Si deve usare '-v', =, - o +\n"
 
@@ -3226,50 +3350,55 @@
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr "Uso: %s [-bfhixV] [-ob superblocco] [-oB dim_blocco] device\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Gruppo %lu: (Blocchi "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr " superblocco %s a "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primario"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Backup"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Descrittori di gruppo a "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, fuzzy, c-format
 msgid ""
 "\n"
 "  Reserved GDT blocks at "
 msgstr "blocchi riservati"
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Descrittori di gruppo a"
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Mappa dei bit di blocco a  "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", mappa dei bit inode a "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3277,49 +3406,54 @@
 "\n"
 "  Tavola degli inode a "
 
-#: misc/dumpe2fs.c:207
-#, c-format
+#: misc/dumpe2fs.c:217
+#, fuzzy, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
 "  %d blocchi liberi, %d inode liberi, %d directory\n"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Blocchi liberi: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Inode liberi: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
 msgstr "stampando la lista dei blocchi difettosi"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:270
 #, fuzzy, c-format
 msgid "Bad blocks: %u"
 msgstr "Blocchi non validi: %d"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
 msgstr "leggendo l'inode del journal"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
 msgstr ""
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
 msgstr "leggendo il superblocco del journal"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Impossibile trovare i magic numbers del superblocco del journal"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:331
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3338,27 +3472,27 @@
 "Inizio del journal:                   %d\n"
 "Numero di utenti del journal:         %d\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, fuzzy, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Impossibile allocare memoria per fare il parsing delle opzioni raid!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:386
 #, fuzzy, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:401
 #, fuzzy, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:412
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3381,22 +3515,18 @@
 "\tstride=lunghezza stride in blocchi>\n"
 "\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUsando %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Impossibile trovare un valido superblocco per il filesystem.\n"
 
-#: misc/dumpe2fs.c:496
-#, fuzzy, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Nota: Questo è un filesystem a byte scambiati\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
@@ -3405,33 +3535,33 @@
 "\n"
 "%s: %s: errore leggendo le mappe di bit: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, fuzzy, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Uso: %s [-r] dispositivo file_immagine\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Impossibile allocare il buffer d'intestazione\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr ""
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "scrivendo il superblocco"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "scrivendo la tavola degli inode"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "scrivendo la mappa dei bit del blocco"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "scrivendo la mappa dei bit dell'inode"
 
@@ -3455,7 +3585,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: non è un filesystem ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Attenzione: troncamento dell'etichetta, troppo lunga.\n"
@@ -3470,22 +3600,75 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: errore durante la scrittura del superblocco\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Uso: e2label device [nuova_etichetta]\n"
 
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr ""
+
+#: misc/e2undo.c:52
+#, fuzzy
+msgid "Failed to read the file system data \n"
+msgstr "Impossibile creare un iteratore dirs_to_hash: %m"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr ""
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+
+#: misc/e2undo.c:161
+#, fuzzy, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "avviando la scansione degli inode"
+
+#: misc/e2undo.c:167
+#, fuzzy, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "determinando se %s è montato."
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+
+#: misc/e2undo.c:182
+#, fuzzy, c-format
+msgid "Failed to open %s\n"
+msgstr "durante l'apertura di %s"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr ""
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
 msgstr "ATTENZIONE: impossibile aprire %s: %s\n"
 
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
 msgstr "ATTENZIONE: formato non valido alla linea %d di %s\n"
 
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
@@ -3497,37 +3680,37 @@
 "\tessere sistemato al più presto.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: non trovato\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: aspetta: Non ci sono processi figli?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Attenzione... %s per il device %s è uscito con il segnale %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: lo stato è %x, non dovrebbe avvenire mai.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Terminato con %s (stato di uscita %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Errore %d eseguendo fsck. %s per %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3536,43 +3719,43 @@
 "preceduti\n"
 "da 'no' o '!'.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Impossibile allocare memoria per i tipi di filesystem\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: impossibile controllare %s: fsck.%s non trovato\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
 msgstr "Controllo di tutti i filesystem.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--attesa-- (passo %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1081
 #, fuzzy
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr "Uso: fsck [-ACNPRTV] [-t tipofs] [opzioni-fs] [filesys ...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: troppi device\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: troppi parametri\n"
@@ -3592,15 +3775,16 @@
 msgid "While reading version on %s"
 msgstr "Durante la lettura della versione di %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Uso: %s [-c|-t|-l nomefile] [-b dim_blocchi] [-f dim_frammento]\n"
 "\t[-i byte-per-inode] [-j] [-J opzioni-journal] [-N numero-di-inode]\n"
@@ -3609,38 +3793,38 @@
 "\t[-L etichetta-volume] [-M ultima-dir-montata] [-O caratteristica[,...]]\n"
 "\t[-r revisione-fs] [-R opz_raid] [-qvSV] device [numero-blocchi]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Esecuzione del comando: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, fuzzy, c-format
 msgid "while trying to run '%s'"
 msgstr "provando a caricare '%s'"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "analizzando una lista di blocchi non validi dal programma"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 "Blocco %d non valido nel superblocco primario/area del descrittore di "
 "gruppo.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, fuzzy, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "I blocchi da %d a %d devono essere validi per costruire un filesystem.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Annullamento....\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, fuzzy, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3651,23 +3835,19 @@
 "\tcontengono blocchi non validi.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "contrassegnando i blocchi non validi come utilizzati"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "fatto                           \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "allocando i buffer zeroizing"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Scrittura delle tavole degli inode: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3677,67 +3857,67 @@
 "Impossibile scrivere %d blocchi nella tavola degli inode iniziando da %d: %"
 "s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "creando la directory root"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "creando l'inode root"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "impostando i permessi dell'inode root"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "creando /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "cercando /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "espandendo /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "impostando l'inode del blocco difettoso"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Fine memoria cancellando i settori %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Attenzione: impossibile leggere il blocco 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Attenzione: impossibile cancellare il settore %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "inizializzando il superblocco del journal"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Azzeramento del device di journaling: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, fuzzy, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "azzerando il device di journaling (blocco %u, numero %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "scrivendo il superblocco del journal"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, fuzzy, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3746,96 +3926,96 @@
 "attenzione: %d blocchi inutilizzati.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etichetta del filesystem=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Tipo SO: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Dimensione blocco=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Dimensione frammento=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u inode, %u blocchi\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blocchi (%2.2f%%) riservati per l'utente root\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Primo blocco dati=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, fuzzy, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Etichetta del filesystem=%s\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u gruppi di blocchi\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, fuzzy, c-format
 msgid "%u block group\n"
 msgstr "%u gruppo di blocchi\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocchi per gruppo, %u frammenti per gruppo\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inode per gruppo\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Backup del superblocco salvati nei blocchi: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, fuzzy, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, fuzzy, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, fuzzy, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3848,8 +4028,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Opzioni raid non valide.\n"
@@ -3861,7 +4042,7 @@
 "\tstride=lunghezza stride in blocchi>\n"
 "\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3869,94 +4050,122 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Set di opzioni del filesystem non valido: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1177
 #, fuzzy, c-format
 msgid "invalid block size - %s"
 msgstr "dimensione del blocco difettoso - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Attenzione: la dimensione di blocco %d non è utilizzabile su molti sistemi.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, fuzzy, c-format
 msgid "invalid fragment size - %s"
 msgstr "dimensione del frammento non valida - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Attenzione: frammenti non supportati. Opzione -f ignorata\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
 msgstr "Numero di blocchi per gruppo non valido"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
 msgstr "i blocchi per gruppo devono essere multipli di 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+#, fuzzy
+msgid "Illegal number for flex_bg size"
+msgstr "Numero di blocchi non valido!\n"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr ""
+
+#: misc/mke2fs.c:1239
 #, fuzzy, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "tasso di inode non valido %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
 msgstr "nella malloc per bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, fuzzy, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "percentuale di blocchi riservati non valida - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, fuzzy, c-format
 msgid "bad revision level - %s"
 msgstr "versione non valida - %s\n"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, fuzzy, c-format
 msgid "invalid inode size - %s"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, fuzzy, c-format
 msgid "bad num inodes - %s"
 msgstr "dimensione inode non valida - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "durante l'apertura del dispositivo di journaling %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "Dimensione dei blocchi del device di journaling (%d) minore della dim minima "
 "dei blocchi %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, fuzzy, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Aggiunta del journal al device %s: "
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "blocchi di %d byte troppo grandi per il sistema (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -3964,15 +4173,27 @@
 "Attenzione: blocchi di %d bytes troppo grandi per il sistema (max %d), "
 "continuo comunque\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, fuzzy, c-format
+msgid "invalid blocks count - %s"
+msgstr "numero dei blocchi non validi - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "filesystem"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1468 resize/main.c:371
 msgid "while trying to determine filesystem size"
 msgstr "tentando di determinare la dimensione del filesystem"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3980,7 +4201,7 @@
 "Impossibile determinare la dimensione del device: bisogna\n"
 "specificare la dimensione del filesystem\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3993,76 +4214,75 @@
 "\tdi fdisk, poiché una partizione modificata era occupata. Potrebbe essere\n"
 "\tnecessario riavviare per rileggere la tabella delle partizioni.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Il filesystem è più grande della dimensione apparente del device."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr ""
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1568
 #, fuzzy, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "\n"
 "Dimensione del journal troppo grande per il filesystem.\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1603
 msgid "while trying to determine hardware sector size"
 msgstr "provando a determinare la dimensione del settore hardware"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
 msgstr "conteggio dei blocchi per gruppo fuori dall'intervallo"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, fuzzy, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "dimensione dell'inode non valida: %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, fuzzy, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr ""
-"Attenzione: gli inode di %d byte non sono utilizzabili su molti sistemi\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4070,40 +4290,53 @@
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, fuzzy, c-format
+msgid "while trying to delete %s"
+msgstr "provando a ridimensionare %s"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1885
 #, fuzzy
 msgid "while setting up superblock"
 msgstr "impostando il superblocco"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "so sconosciuto - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "tentando di allocare le tabelle del filesystem"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "azzerando il blocco %u alla fine del filesystem"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 #, fuzzy
 msgid "while reserving blocks for online resize"
 msgstr "leggendo l'inode dei blocchi non validi"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Aggiunta del journal al device %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
@@ -4112,19 +4345,24 @@
 "\n"
 "\tcercando di agigungere il journal al device %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
 msgstr "fatto\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, fuzzy, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Creazione del journal (%d blocchi): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Scrittura delle informazioni dei superblocchi e dell'accounting del "
 "filesystem: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
@@ -4133,7 +4371,7 @@
 "\n"
 "Attenzione, problemi durante la scrittura dei superblocchi."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -4147,11 +4385,49 @@
 msgid "Usage: mklost+found\n"
 msgstr "Uso: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, fuzzy, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Uso: %s <dev1> <dev2> <dev3>\n"
+"\n"
+"Questo programma stampa le informazioni di partizione per un insieme di "
+"device\n"
+"Un utilizzo comune di questo programma è:\n"
+"\n"
+"\t%s /dev/hda?\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, fuzzy, c-format
+msgid "Cannot open %s: %s"
+msgstr "e2label: impossibile aprire %s\n"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr ""
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Eseguire e2fsck sul filesystem.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:103
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4159,7 +4435,8 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Uso: %s [-c max-numero-mount] [-e comportamento-errori] [-g gruppo]\n"
 "\t[-i intervallo[d|m|w]] [-j] [-J opzioni-journal]\n"
@@ -4169,68 +4446,69 @@
 "montata]\n"
 "\t[-O [^]caratteristica[,...]] [-T ultimo-controllo] [-U UUID] device\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
 msgstr "cercando di aprire il journal esterno"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s non è un dispositivo di journaling.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
 msgstr "Superblocco del journal non trovato!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID del filesystem non trovato sul dispositivo di journaling.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
 msgstr "Journal NON rimosso\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
 msgstr "Journal rimosso\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:286
 msgid "while reading bitmaps"
 msgstr "leggendo le mappe dei bit"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:294
 msgid "while clearing journal inode"
 msgstr "azzerando l'inode del journal"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:305
 msgid "while writing journal inode"
 msgstr "scrivendo l'inode del journal"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Insieme di opzioni di mount non valido: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:362
 #, fuzzy, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del filesystem a %s\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
+#, fuzzy
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 "Il flag has_journal può essere azzerato quando il filesystem non\n"
 "è montato o è montato solo in lettura.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4238,11 +4516,31 @@
 "Il flag needs_recovery è impostato. Eseguire e2fsck prima di azzerare\n"
 "il flag has_journal.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+
+#: misc/tune2fs.c:423
+#, fuzzy
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Il flag has_journal può essere azzerato quando il filesystem non\n"
+"è montato o è montato solo in lettura.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr ""
+
+#: misc/tune2fs.c:472
 msgid "The filesystem already has a journal.\n"
 msgstr "Il filesystem ha già un journal.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
@@ -4251,21 +4549,21 @@
 "\n"
 "\ttentando di aprire il journal in %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Creando il journal per il device %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "aggiungendo un filesystem al journal in %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
 msgstr "Creazione dell'inode del journal: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4273,65 +4571,85 @@
 "\n"
 "\tcercando di creare il file di journal"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Impossibile comprendere il formato di data/ora: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "numero di mount non validi - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, fuzzy, c-format
 msgid "bad error behavior - %s"
 msgstr "comportamento relativo ad un errore non valido - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "gid/nome gruppo non valido - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervallo non valido - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "percentuale di blocchi riservati non valida - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
 msgstr "-o può essere specificata solo una volta"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
 msgstr "-O può essere specificata solo una volta"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "numero di blocchi riservati non valido - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "uid/nome utente non valido - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:806
+#, fuzzy, c-format
+msgid "bad inode size - %s"
+msgstr "dimensione inode non valida - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr ""
+
+#: misc/tune2fs.c:900
 #, fuzzy, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Insieme di opzioni di mount non valido: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:915
 #, fuzzy, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Parametro di stride non valido.\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:930
+#, fuzzy, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Parametro di stride non valido.\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:944
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -4342,7 +4660,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4356,53 +4675,71 @@
 "\tstride=lunghezza stride in blocchi>\n"
 "\n"
 
-#: misc/tune2fs.c:927
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "blocchi da spostare"
+
+#: misc/tune2fs.c:1471
 #, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
 msgstr ""
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1534
+#, fuzzy, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr ""
+"Impostazione di data ed ora dell'ultimo controllo del filesystem a %s\n"
+
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Impostazione del numero massimo di mount a %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Impostazione del numero attuale di mount a %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, fuzzy, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Impostazione del comportamento da errore a %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, fuzzy, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Impostazione dell'intervallo tra i controlli a %lu secondi\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, fuzzy, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr ""
 "Impostazione della percentuale di blocchi riservati a %lu (%u blocchi)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "il numero di blocchi riservati è troppo alto (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Impostazione del numero di blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4410,40 +4747,64 @@
 "\n"
 "Il filesystem ha già dei superblocchi sparsi.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 "Impostazione di data ed ora dell'ultimo controllo del filesystem a %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Impostazione dell'uid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
 msgstr "Formato UUID non valido\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1712
+#, fuzzy
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"Il flag has_journal può essere azzerato quando il filesystem non\n"
+"è montato o è montato solo in lettura.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+
+#: misc/tune2fs.c:1735
+#, fuzzy, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
+
+#: misc/tune2fs.c:1745
 #, fuzzy, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1750
 #, fuzzy, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Impostazione del gid dei blocchi riservati a %lu\n"
@@ -4495,6 +4856,7 @@
 "Impossibile allocare memoria per fare il parsing delle opzioni del journal!\n"
 
 #: misc/util.c:228
+#, fuzzy
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -4506,7 +4868,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4581,65 +4943,79 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, fuzzy, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
 "Uso: %s [-d flag_di_debug] [-f] [-F] [-p] device [nuova-dimensione]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Estensione della tavola degli inode"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Rilocazione dei blocchi"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Scansione della tavola degli inode"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Aggiornamento dei riferimenti degli inode"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Spostamento della tavola degli inode"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Passo sconosciuto?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Inizio del passo %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:264
 #, fuzzy, c-format
 msgid "while opening %s"
 msgstr "avviando la scansione degli inode"
 
-#: resize/main.c:265
+#: resize/main.c:276
 #, fuzzy, c-format
 msgid "while getting stat information for %s"
 msgstr "impostando la versione a %s"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "dimensione filesystem non valida - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
 
-#: resize/main.c:353
+#: resize/main.c:345
+#, fuzzy, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr ""
+"%s è montato; impossibile ridimensionare un filesystem montato!\n"
+"\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "dimensione inode non valida - %s"
+
+#: resize/main.c:394
 #, fuzzy
 msgid "Invalid stride length"
 msgstr "Parametro di stride non valido.\n"
 
-#: resize/main.c:377
+#: resize/main.c:418
 #, fuzzy, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4650,7 +5026,7 @@
 "E' stata richiesta una nuova dimensione di %d blocchi.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:425
 #, fuzzy, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4659,7 +5035,7 @@
 "Il filesystem è già lungo %d blocchi. Nulla da fare!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4668,12 +5044,12 @@
 "Eseguire prima 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
 msgstr "provando a ridimensionare %s"
 
-#: resize/main.c:411
+#: resize/main.c:452
 #, fuzzy, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4682,28 +5058,140 @@
 "Il filesystem su %s è ora lungo %d blocchi.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr ""
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr ""
+
+#: resize/online.c:68
+#, fuzzy, c-format
+msgid "while trying to open mountpoint %s"
+msgstr ""
+"\n"
+"\ttentando di aprire il journal in %s\n"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr ""
+
+#: resize/online.c:79
+#, fuzzy
+msgid "Kernel does not support online resizing"
+msgstr "Il @j esterno non supporta questo @f\n"
+
+#: resize/online.c:82
+#, fuzzy
+msgid "While checking for on-line resizing support"
+msgstr "leggendo l'inode dei blocchi non validi"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/online.c:121
+#, fuzzy
+msgid "While trying to extend the last group"
+msgstr "cercando di aprire il journal esterno"
+
+#: resize/online.c:180
+#, fuzzy, c-format
+msgid "While trying to add group #%d"
+msgstr "durante l'apertura di %s"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+
+#: resize/resize2fs.c:322
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr ""
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "blocchi riservati"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "blocchi da spostare"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "Il @S non ha il flag has_@j, ma ha il @j ext3 %s.\n"
+
+#, fuzzy
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr "L'@h %i ha un livello di profondità (%N) troppo elevato\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "chiamando ext2fs_block_iterate"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "chiamando la funzione iteratrice"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "allocando il buffer inode"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "leggendo la tavola degli inode (gruppo %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "scrivendo la tavola degli inode (gruppo %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr "Pass 0: Esecuzione del byte-swap del filesystem\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s: il filesystem dev'essere controllato da poco utilizzando fsck\n"
+#~ "e dev'essere smontato prima di provare ad eseguirne il byte-swap.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Byte-swap"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr "%s: Ordine dei byte del filesystem già normalizzato.\n"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "riprovando a scrivere le mappe di bit di blocco per %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "scrivendo le mappe di bit di inode"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "modello di prova non valido: %s\n"
+
+#, fuzzy
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Nota: Questo è un filesystem a byte scambiati\n"
+
+#, fuzzy
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr ""
+#~ "Attenzione: gli inode di %d byte non sono utilizzabili su molti sistemi\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "dimensione filesystem non valida - %s"
+
 #~ msgid "Clone duplicate/bad blocks"
 #~ msgstr "Clona i blocchi duplicati/non validi"
 
@@ -4782,24 +5270,6 @@
 #~ msgid "%s failed for %s: %s\n"
 #~ msgstr "%s è fallito per %s: %s\n"
 
-#~ msgid ""
-#~ "Usage: %s <dev1> <dev2> <dev3>\n"
-#~ "\n"
-#~ "This program prints out the partition information for a set of devices\n"
-#~ "A common way to use this program is:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Uso: %s <dev1> <dev2> <dev3>\n"
-#~ "\n"
-#~ "Questo programma stampa le informazioni di partizione per un insieme di "
-#~ "device\n"
-#~ "Un utilizzo comune di questo programma è:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-
 #, fuzzy
 #~ msgid "HDIO_GETGEO ioctl"
 #~ msgstr "ioctl HDIO_GETGEO"
@@ -4815,13 +5285,6 @@
 #~ "\n"
 #~ "Il filesystem ha già dei superblocchi sparsi disattivati.\n"
 
-#~ msgid ""
-#~ "%s is mounted; can't resize a mounted filesystem!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "%s è montato; impossibile ridimensionare un filesystem montato!\n"
-#~ "\n"
-
 #~ msgid "resize2fs %s (%s)\n"
 #~ msgstr "resize2fs %s (%s)\n"
 
diff --git a/po/nl.gmo b/po/nl.gmo
index e91168a..ed1a5e9 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 8c53d32..cebc878 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,6 +1,7 @@
-# Dutch translations for e2fsprogs.
+# Dutch translations for e2fsprogs-1.41.1.
 # Copyright (C) 2008 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
+#
 # Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
@@ -63,10 +64,10 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.40.7\n"
+"Project-Id-Version: e2fsprogs-1.41.1\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-08 19:45+0100\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
+"PO-Revision-Date: 2008-09-05 20:10+0200\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "MIME-Version: 1.0\n"
@@ -75,7 +76,7 @@
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Slecht blok %u ligt buiten bereik; genegeerd.\n"
@@ -89,10 +90,10 @@
 msgstr "tijdens lezen van de slechte-blokken-inode"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "tijdens openen van %s"
@@ -102,7 +103,7 @@
 msgid "while trying popen '%s'"
 msgstr "tijdens een popen() van %s"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "tijdens lezen van lijst van slechte blokken uit bestand"
 
@@ -113,32 +114,33 @@
 #: e2fsck/badblocks.c:130
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr "Waarschuwing: ongeldig blok %u gevonden in inode van slecht blok.  Gewist.\n"
+msgstr ""
+"Waarschuwing: ongeldig blok %u gevonden in inode van slecht blok.  Gewist.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Fout tijdens lezen van blok %lu (%s) tijdens %s.  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Fout tijdens lezen van blok %lu (%s).  "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Fout negeren"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Herschrijven afdwingen"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Fout tijdens schrijven van blok %lu (%s) tijdens %s.  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Fout tijdens schrijven van blok %lu (%s).  "
@@ -179,28 +181,29 @@
 #: e2fsck/flushb.c:63
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr "ioctl(BLKFLSBUF) wordt niet ondersteund!  Kan buffers niet leegmaken.\n"
+msgstr ""
+"ioctl(BLKFLSBUF) wordt niet ondersteund!  Kan buffers niet leegmaken.\n"
 
 #: e2fsck/iscan.c:46
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Gebruik:  %s [-F] [-I inodebufferblokken] apparaat\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "tijdens openen van %s om deze leeg te maken"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
 msgstr "tijdens leegmaken van %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
 msgstr "tijdens openen voor inode-scan"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
 msgstr "tijdens halen van volgende inode"
 
@@ -209,228 +212,232 @@
 msgid "%u inodes scanned.\n"
 msgstr "%u inodes gescand.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "lezen van journal-superblok...\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: geen geldig journal-superblok gevonden\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journal is te kort\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: herstellen van journal...\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: geen herstelling van journal bij alleen-lezen\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "tijdens heropenen van %s"
 
 # Behalve E en F worden de volgende 30 letterafkortingen niet gebruikt.
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "a<fout>"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "A<fout>"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "b<fout>"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "B<fout>"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "c<fout>"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "C<fout>"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "i<fout>"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "I<fout>"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "j<fout>"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "D<fout>"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "d<fout>"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "e<fout>"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "EItem '%Dn' in %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "f<fout>"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fvoor inode %i (%Q)"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "g<fout>"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "h<fout>"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "l<fout>"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "L<fout>"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "m<fout>"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "n<fout>"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "o<fout>"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "p<fout>"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "r<fout>"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "s<fout>"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "S<fout>"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "u<fout>"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "v<fout>"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "x<fout>"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "z<fout>"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<de NULL-inode>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<de slechte-blokken-inode>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<de ACL-index-inode>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<de ACL-data-inode>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<de opstart-inode>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<de wis-ongedaanmakingsmap-inode>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<de groepsbeschrijver-inode>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<de journal-inode>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<gereserveerde inode 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<gereserveerde inode 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "normaal bestand"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "map"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "byte-apparaat"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "blok-apparaat"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "benoemde pijp"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "symbolische koppeling"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "socket"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "onbekend bestandstype met modus 0%o"
@@ -439,98 +446,107 @@
 msgid "multiply claimed inode map"
 msgstr "kaart van meervoudig-geclaimde inodes"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "*interne fout*: kan geen 'dup_blk' voor %u vinden\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
 msgstr "### teruggekeerd van clone_file_block()"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:762
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "*interne fout*: kan de record van EA-blokken voor %u niet opvragen"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:774
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "*interne fout*: kan de record van EA-inodes voor %u niet opvragen"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 msgid "reading directory block"
 msgstr "tijdens lezen van mapblok"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "bitkaart van gebruikte inodes"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "bitkaart van mappen"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "bitkaart van normale bestanden"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "bitkaart van gebruikte blokken"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
 msgstr "tijdens starten van inode-scan"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
 msgstr "tijdens halen van volgende inode"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "Stap 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "lezen van indirecte blokken van inode %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
 msgstr "bitkaart van slechte inodes"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
 msgstr "inode staat in kaart van slechte blokken"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
 msgstr "imagic-inodekaart"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
 msgstr "kaart van meervoudig-geclaimde blokken"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr "kaart van blokken met uitgebreide kenmerken"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, fuzzy, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu: verwachtte %6lu, kreeg %6lu (blokkenaantal %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "blok-bitkaart"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "inode-bitkaart"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "inodetabel"
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "Stap 2"
 
+#: e2fsck/pass2.c:803
+msgid "Can not continue."
+msgstr "Kan niet verdergaan."
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
 msgstr "bitkaart van behandelde inodes"
@@ -539,15 +555,15 @@
 msgid "Peak memory"
 msgstr "Piekgeheugengebruik"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "Stap 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 msgid "inode loop detection bitmap"
 msgstr "bitkaart van inode-lusdetectie"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "Stap 4"
 
@@ -842,12 +858,12 @@
 
 #: e2fsck/problem.c:182
 msgid "The Hurd does not support the filetype feature.\n"
-msgstr "De Hurd ondersteunt geen bestandstypen.\n"
+msgstr "De Hurd ondersteunt de bestandstypenfumctie niet.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
-#, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
 msgstr "Superblok heeft een ongeldig ext3-journal (inode %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
@@ -872,40 +888,47 @@
 msgid "External @j does not support this @f\n"
 msgstr "Het externe journal ondersteunt dit bestandssysteem niet.\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
+#, fuzzy
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
+"@f @j @S is unknown type %N (unsupported).\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
+"format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "Superblok van ext3-journal is van onbekend en niet-ondersteund type %N.\n"
-"Waarschijnlijk gebruikt u een ouder e2fsck-programma dat deze journal-indeling\n"
-"niet ondersteunt.  Het kan ook zijn dat het journal-superblok beschadigd is.\n"
+"Waarschijnlijk gebruikt u een ouder e2fsck-programma dat deze journal-"
+"indeling\n"
+"niet ondersteunt.  Het kan ook zijn dat het journal-superblok beschadigd "
+"is.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
+#, fuzzy
+msgid "@j @S is corrupt.\n"
 msgstr "Het superblok van het ext3-journal is beschadigd.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "Superblok heeft geen journalvlag gezet, maar heeft wel een ext3-journal %s.\n"
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "Journal-reddingsvlag is niet gezet, maar het journal bevat gegevens.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr "Superblok heeft journalreddingsvlag gezet, maar heeft geen journal.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "Superblok heeft journal-reddingsvlag gezet, maar heeft geen journal.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr "Journalreddingsvlag is niet gezet, maar het journal bevat gegevens.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "Journal-reddingsvlag is niet gezet, maar het journal bevat gegevens.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
@@ -952,19 +975,23 @@
 msgstr "Ongeldige inode %i in lijst van verweesde inodes.\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "Bestandssysteem is een versie 0, maar heeft functievlag(gen) gezet.  "
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr "Journal-superblok heeft een onbekende alleen-lezen-functievlag gezet.\n"
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr ""
+"Journal-superblok heeft een onbekende alleen-lezen-functievlag gezet.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr "Journal-superblok heeft een onbekende en incompatibele functievlag gezet.\n"
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr ""
+"Journal-superblok heeft een onbekende en incompatibele functievlag gezet.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:295
@@ -1023,13 +1050,15 @@
 "@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
 "is %N; @s zero.  "
 msgstr ""
-"Bestandssysteem heeft geen 'resize_inode'-vlag gezet,\n"
+"Bestandssysteem heeft functie 'resize_inode' uitgeschakeld,\n"
 "maar 's_reserved_gdt_blocks' is %N; zou nul moeten zijn.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:327
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr "'Resize_inode'-vlag is niet gezet, maar de 'resize'-inode is niet nul.  "
+msgstr ""
+"Functie 'resize_inode' is uitgeschakeld, maar de 'resize'-inode is niet "
+"nul.  "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:332
@@ -1062,126 +1091,173 @@
 "Toevoegen van 'dirhash'-hint aan bestandssysteem.\n"
 "\n"
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Groepsbeschrijver %g heeft een ongeldige controlesom.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+"Groepsbeschrijver %g is gemarkeerd als ongeïnitialiseerd zonder functies.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+"Groepsbeschrijver %g heeft een ongeïnitialiseerde blok-bitkaart maar de "
+"inode-bitkaart is in gebruik.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+"Groepsbeschrijver %g heeft een ongeldig aantal (%b) ongebruikte inodes.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Blok-bitkaart van laatste groepsbeschrijver is ongeïnitialiseerd.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Journal-transactie %i is beschadigd; het afspelen is afgebroken.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Stap 1: Controle van inodes, blokken, en groottes\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
-msgstr "De root-inode is geen map.  "
+msgstr "De hoofd-inode is geen map.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr "De verwijderingstijd van de root-inode is niet nul (waarschijnlijk veroorzaakt door een oude mke2fs).  "
+msgstr ""
+"De verwijderingstijd van de hoofd-inode is niet nul (waarschijnlijk "
+"veroorzaakt door een oude mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Gereserveerde inode %i %Q heeft een ongeldige modus.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "De verwijderingstijd van verwijderde inode %i is nul.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr "Inode %i is in gebruik, maar heeft de verwijderingstijd gezet.  "
+msgstr "Inode %i is in gebruik, maar heeft een ingevulde verwijderingstijd.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "Inode %i is een map met lengte nul.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr "De blok-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
+msgstr ""
+"De blok-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr "De inode-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
+msgstr ""
+"De inode-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "De inodetabel van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "De blok-bitkaart %b van groep %g is ongeldig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "De inode-bitkaart %b van groep %g is ongeldig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Inode %i, 'i_size' is %Is, zou %N moeten zijn.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Inode %i, 'i_blocks' is %Ib, zou %N moeten zijn.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "Ongeldig blok #%B (%b) in inode %i.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "Blok #%B (%b) overlapt metadata van bestandssysteem in inode %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Inode %i bevat ongeldig(e) blok(ken).  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Te veel ongeldige blokken in inode %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "Ongeldig blok #%B (%b) in slechte-blokken-inode.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Slechte-blokken-inode bevat ongeldig(e) blok(ken).  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Een dubbel of slecht blok is in gebruik!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr "Slecht blok %b is in gebruik als indirect blok voor de slechte-blokken-inode.  "
+msgstr ""
+"Slecht blok %b is in gebruik als indirect blok voor de slechte-blokken-"
+"inode.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1195,18 +1271,19 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Als het blok echt slecht is, kan het bestandssysteem niet gerepareerd worden.\n"
+"Als het blok echt slecht is, kan het bestandssysteem niet gerepareerd "
+"worden.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1217,122 +1294,129 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Het primaire superblok (%b) staat in de lijst van slechte blokken.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr "Een groepsbeschrijversblok (%b) staat in de lijst van slechte blokken.\n"
+msgstr ""
+"Een groepsbeschrijversblok (%b) staat in de lijst van slechte blokken.\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Waarschuwing: groep %g heeft een slecht superblok (%b).\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr "Waarschuwing: groep %g bevat een slecht blok (%b) in de groepsbeschrijvers.\n"
+msgstr ""
+"Waarschuwing: groep %g bevat een slecht blok (%b) in de groepsbeschrijvers.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr "Interne fout?: blok %b is zonder reden geclaimd in process_bad_block().\n"
+msgstr ""
+"Interne fout?: blok %b is zonder reden geclaimd in process_bad_block().\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr "Fout tijdens reserveren van %N aaneengsloten blokken in groep %g voor %s: %m\n"
+msgstr ""
+"Fout tijdens reserveren van %N aaneengsloten blokken in groep %g voor %s: %"
+"m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Fout tijdens reserveren van buffer voor verplaatsen van %s.\n"
 
 # src/delegate.c:368
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Bezig met verplaatsen van groep %g's %s van %b naar %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Bezig met verplaatsen van groep %g's %s naar %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Waarschuwing: kan blok %b van %s niet lezen: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Waarschuwing: kan blok %b van %s niet schrijven: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
 msgstr "Fout tijdens reserveren van inode-bitkaart (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "Fout tijdens reserveren van blok-bitkaart (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "Fout tijdens reserveren van 'icount'-link-informatie: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Fout tijdens reserveren van blokreeks voor map: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Fout tijdens scannen van inodes (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Fout tijdens langslopen van blokken van inode %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Fout tijdens opslaan van inodetal (inode=%i, aantal=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr "Fout tijdens opslaan van mapblokkeninformatie (inode=%i, blok=%b, aantal=%N): %m\n"
+msgstr ""
+"Fout tijdens opslaan van mapblokkeninformatie (inode=%i, blok=%b, aantal=%"
+"N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fout tijdens lezen van inode %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Inode %i heeft de imagic-vlag gezet.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1342,151 +1426,162 @@
 "of de alleen-toevoegenvlag gezet (inode %i).  "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr "Inode %i heeft de compressievlag gezet op een bestandssysteem zonder compressie-ondersteuning.  "
+msgstr ""
+"Inode %i heeft de compressievlag gezet op een bestandssysteem zonder "
+"compressie-ondersteuning.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Speciale inode %i (apparaat/socket/fifo) heeft niet lengte nul.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Journal-inode is niet in gebruik, maar bevat gegevens.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "Journal is geen normaal bestand.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Inode %i was deel van de lijst van verweesde inodes.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr "Inodes gevonden die deel waren van een beschadigde lijst van verweesde inodes.  "
+msgstr ""
+"Inodes gevonden die deel waren van een beschadigde lijst van verweesde "
+"inodes.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Fout tijdens reserveren van 'refcount'-structuur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr "Fout tijdens lezen van blok %b met uitgebreide kenmerken voor inode %i.  "
+msgstr ""
+"Fout tijdens lezen van blok %b met uitgebreide kenmerken voor inode %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Inode %i bevat een slecht blok %b met uitgebreide kenmerken.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Fout tijdens lezen van blok %b met uitgebreide kenmerken: %m  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
-msgstr "Blok %b met uitgebreide kenmerken heeft verwijzingstal %B, zou %N moeten zijn.  "
+msgstr ""
+"Blok %b met uitgebreide kenmerken heeft verwijzingstal %B, zou %N moeten "
+"zijn.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Fout tijdens schrijven van blok %b met uitgebreide kenmerken: %m  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Blok %b met uitgebreide kenmerken heeft h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "Fout tijdens reserveren van blok %b met uitgebreide kenmerken.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr "Blok %b met uitgebreide kenmerken is beschadigd (reserveringsoverlap).  "
+msgstr ""
+"Blok %b met uitgebreide kenmerken is beschadigd (reserveringsoverlap).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Blok %b met uitgebreide kenmerken is beschadigd (ongeldige naam).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Blok %b met uitgebreide kenmerken is beschadigd (ongeldige waarde).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "Inode %i is te groot.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "Blok #%B (%b) maakt map te groot.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "Blok #%B (%b) maakt bestand te groot.  "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "Blok #%B (%b) maakt symbolische koppeling te groot.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr "Inode %i heeft de 'index_fl'-vlag gezet op een bestandssysteem zonder 'htree'-ondersteuning.\n"
+msgstr ""
+"Inode %i heeft de 'INDEX_FL'-vlag gezet op een bestandssysteem zonder "
+"'htree'-ondersteuning.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr "Inode %i heeft de 'index_fl'-vlag gezet maar het is geen map.\n"
+msgstr "Inode %i heeft de 'INDEX_FL'-vlag gezet maar het is geen map.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
-msgstr "Inode %i van 'htree'-map heeft een ongeldige wortelnode.\n"
+msgstr "Inode %i van 'htree'-map heeft een ongeldige wortelknoop.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr "Inode %i van 'htree'-map gebruikt een niet-ondersteunde hash-versie (%N).\n"
+msgstr ""
+"Inode %i van 'htree'-map gebruikt een niet-ondersteunde hash-versie (%N).\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr "Inode %i van 'htree'-map gebruikt een incompatibele wortelnodevlag.\n"
+msgstr "Inode %i van 'htree'-map gebruikt een incompatibele wortelknoopvlag.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "Inode %i van 'htree'-map heeft een te grote boomdiepte (%N).\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1495,101 +1590,188 @@
 "is met de metagegevens van het bestandssysteem.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Aanmaken van 'resize'-inode is mislukt: %m"
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "Inode %i heeft een ongeldige extra grootte (%IS).\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige naamlengte (%N).\n"
+msgstr ""
+"Een uitgebreid kenmerk in inode %i heeft een ongeldige naamlengte (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige waardegrootte (%N).\n"
+msgstr ""
+"Een uitgebreid kenmerk in inode %i heeft een ongeldige waardegrootte (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige waardeoffset (%N).\n"
+msgstr ""
+"Een uitgebreid kenmerk in inode %i heeft een ongeldige waardeoffset (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldig waardeblok (%N, moet 0 zijn).\n"
+msgstr ""
+"Een uitgebreid kenmerk in inode %i heeft een ongeldig waardeblok (%N, moet 0 "
+"zijn).\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige hashwaarde (%N, moet 0 zijn).\n"
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr ""
+"Een uitgebreid kenmerk in inode %i heeft een ongeldige hash-waarde (%N).\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
-msgstr "Inode %i is gemarkeerd als een %It, maar lijkt feitelijk een map te zijn.\n"
+msgstr ""
+"Inode %i is gemarkeerd als een %It, maar lijkt feitelijk een map te zijn.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Fout tijdens doorlezen van extents-boom in inode %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"Inode %i heeft een ongeldige extent\n"
+"  (logisch blok %c, ongeldig fysiek blok %b, lengte %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"Inode %i heeft een ongeldige extent\n"
+"  (logisch blok %c, fysiek blok %b, ongeldige lengte %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"Inode %i heeft de 'EXTENTS_FL'-vlag gezet op een bestandssysteem zonder "
+"'htree'-ondersteuning.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+"Inode %i heeft extent-opmaak, maar superblok heeft EXTENTS-functievlag niet "
+"gezet.\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+"Inode %i heeft extent-opmaak, maar heeft 'EXTENT_FL'-vlag niet gezet.\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Snelle symbolische koppeling %i heeft 'EXTENT_FL'-vlag gezet.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"Inode %i heeft extents die niet op volgorde liggen\n"
+"  (ongeldig logisch blok %c, fysiek blok %b, lengte %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
 
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Er zijn extra stappen nodig voor het verzoenen van blokken die door\n"
+"Er zijn extra stappen nodig voor het ontwarren van blokken die door\n"
 "meer dan één inode geclaimd worden...\n"
 "Stap 1B: Opnieuw zoeken naar meervoudig-geclaimde blokken\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Meervoudig-geclaimd blok (of blokken) in inode %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Fout tijdens scannen van inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Fout tijdens reserveren van vervangende inode-bitkaart: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Fout tijdens langslopen van blokken van inode %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr "Fout tijdens bijstellen van verwijzingstal van blok %b met uitgebreide kenmerken (inode %i): %m\n"
+msgstr ""
+"Fout tijdens bijstellen van verwijzingstal van blok %b met uitgebreide "
+"kenmerken (inode %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr "Stap 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n"
+msgstr ""
+"Stap 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Stap 1D: Verzoenen van meervoudig-geclaimde blokken\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1598,18 +1780,18 @@
 "    bevat %B meervoudig-geclaimd(e) blok(ken), gedeeld met %N bestand(en):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (inode %i, wijzigingstijd %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metagegevens van bestandssysteem>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1619,7 +1801,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1627,314 +1809,327 @@
 "Meervoudig-geclaimde blokken zijn al gekloond of opnieuw toegekend.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kan bestand niet klonen: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Stap 2: Controle van mappenstructuur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Ongeldig inodenummer voor '.' in map-inode %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E heeft een ongeldig inodenummer: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E bevat een verwijderde of ongebruikte inode %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "@E is een koppeling naar '.'  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E verwijst naar een inode (%Di) in een slecht blok.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E is een koppeling naar map %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
-msgstr "@E is een koppeling naar de root-inode.\n"
+msgstr "@E is een koppeling naar de hoofd-inode.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E bevat ongeldige tekens in de naam.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Ontbrekende '.' in map-inode %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Ontbrekende '..' in map-inode %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Eerste item '%Dn' (inode=%Di) in map-inode %i (%p) moet '.' zijn.\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Tweede item '%Dn' (inode=%Di) in map-inode %i moet '..' zijn.\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "'i_faddr' @F is %IF, moet nul zijn.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "'i_file_acl' @F is %If, moet nul zijn.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "'i_dir_acl' @F is %Id, moet nul zijn.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "'i_frag' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "'i_fsize' @F is %N, moet nul zijn.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Inode %i (%Q) heeft een ongeldige modus (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "Map-inode %i, blok %B, offset %N: map is beschadigd\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "Map-inode %i, blok %B, offset %N: bestandsnaam is te lang\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "Map-inode %i bevat een ongereserveerd blok %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Item '.' in map-inode %i eindigt niet op NULL.\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Item '..' in map-inode %i eindigt niet op NULL.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Inode %i (%Q) is een ongeldig byte-apparaat.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Inode %i (%Q) is een ongeldig blok-apparaat.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E is een duplicaat-'.'-item.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E is een duplicaat-'..'-item.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "*Interne fout*: kan 'dir_info' voor %i niet vinden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E heeft een 'rec_len' van %Dr, zou %N moeten zijn.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "Fout tijdens reserveren van 'icount'-structuur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fout tijdens langslopen van mapblokken: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Fout tijdens lezen van mapblok %b (inode %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Fout tijdens schrijven van mapblok %b (inode %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Fout tijdens reserveren van nieuw mapblok voor inode %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fout tijdens vrijgeven van inode %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "Mapitem voor '.' is groot.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Mapitem voor '.' in %p (%i) is groot.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Inode %i (%Q) is een ongeldige FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Inode %i (%Q) is een ongeldige socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Bestandstype van @E wordt op %N gezet.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E heeft een ongeldig bestandstype (%Dt, zou %N moeten zijn).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "@E heeft een ingevuld bestandstype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "@E heeft een naam met lengte nul.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symbolische koppeling %Q (inode %i) is ongeldig.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "Blok van uitgebreide kenmerken @F is ongeldig (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr "Bestandssysteem bevat grote bestanden, maar heeft in het superblok niet de 'large-file'-vlag gezet.\n"
+msgstr ""
+"Bestandssysteem bevat grote bestanden, maar heeft in het superblok niet de "
+"'large-file'-vlag gezet.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
-msgstr "Probleem in 'htree'-map %d: naar node %B wordt niet verwezen.\n"
+msgstr "Probleem in 'htree'-map-inode %d: naar knoop %B wordt niet verwezen.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
-msgstr "Probleem in 'htree'-map %d: naar node %B wordt twee keer verwezen.\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: naar knoop %B wordt twee keer verwezen.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeldige minimum hash.\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeldige minimum "
+"hash.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeldige maximum hash.\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeldige maximum "
+"hash.\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
-msgstr "Ongeldige 'htree'-map %d (%q).  "
+msgstr "Ongeldige 'htree'-map-inode %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
-msgstr "Probleem in 'htree'-map %d (%q): slecht blok (nummer %b).\n"
+msgstr "Probleem in 'htree'-map-inode %d (%q): ongeldig bloknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
-msgstr "Probleem in 'htree'-map %d: de root-node is ongeldig.\n"
+msgstr "Probleem in 'htree'-map-inode %d: de wortelknoop is ongeldig.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeldige limiet (%N).\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeldige limiet (%N).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeldig aantal (%N).\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeldig aantal (%N).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeordende hash-tabel.\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeordende hash-"
+"tabel.\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "Probleem in 'htree'-map %d: node %B heeft een ongeldige diepte.\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr ""
+"Probleem in 'htree'-map-inode %d: knoop %B heeft een ongeldige diepte (%N).\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Dubbel item '%Dn' in %p (%i) gevonden.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1946,7 +2141,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1957,96 +2152,116 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "'i_blocks_hi' @F is %N, moet nul zijn.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Onverwacht blok in 'htree'-map-inode %d (%q)\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+#, fuzzy
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "Inode %i is gevonden in groep %g die gemarkeerd is als INODE_UNINIT.  "
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+#, fuzzy
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+"Inode %i is gevonden in het gebied met ongebruikte inodes van groep %g.  "
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1293
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Stap 3: Controle van verbindingen tussen mappen\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
-msgstr "Root-inode is niet gereserveerd.  "
+msgstr "Hoofd-inode is niet gereserveerd.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
 msgstr "Geen ruimte meer in /lost+found.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Onverbonden map-inode %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
 msgstr "/lost+found niet gevonden.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' in %Q (%i) is %P (%j), moet %q (%d) zijn.\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr "Beschadigde of niet-bestaande /lost+found.  Kan inode niet herverbinden.\n"
+msgstr ""
+"Beschadigde of niet-bestaande /lost+found.  Kan inode niet herverbinden.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Kan /lost+found niet uitbreiden: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Kan inode %i niet herverbinden: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Fout tijdens zoeken van /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block(): %m tijdens maken van /lost+found\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode(): %m tijdens maken van /lost+found\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block(): %m tijdens maken van nieuw mapblok\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr "ext2fs_write_dir_block(): %m tijdens maken van mapblok voor /lost+found\n"
+msgstr ""
+"ext2fs_write_dir_block(): %m tijdens maken van mapblok voor /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fout tijdens bijwerken van inodetal van inode %i.\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2057,85 +2272,87 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Kan ouderverwijzing van inode %i niet herstellen: kan de oudermap niet vinden.\n"
+"Kan ouderverwijzing van inode %i niet herstellen: kan de oudermap niet "
+"vinden.\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
-msgstr "Fout tijdens maken van rootmap (%s): %m\n"
+msgstr "Fout tijdens maken van hoofdmap (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fout tijdens maken van /lost+found-map (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 msgid "@r is not a @d; aborting.\n"
-msgstr "De root-inode is geen map.  Gestopt.\n"
+msgstr "De hoofd-inode is geen map.  Gestopt.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
-msgstr "Kan niet verder zonder een root-inode.\n"
+msgstr "Kan niet verder zonder een hoofd-inode.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found (inode %i) is geen map\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Stap 3A: Optimalisatie van mappen\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "Maken van 'dirs_to_hash-iterator' is mislukt: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Optimaliseren van map %q (%d) is mislukt: %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "Optimaliseren van mappen: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Stap 4: Controle van verwijzingsaantallen\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "Onverbonden inode %i met lengte nul.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
 msgstr "Onverbonden inode %i.\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Verwijzingsaantal van inode %i is %Il, zou %N moeten zijn.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2148,87 +2365,108 @@
 "Deze horen hetzelfde te zijn!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Stap 5: Controle van groepssamenvattingen\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 msgid "Padding at end of @i @B is not set. "
 msgstr "Opvulling aan het eind van inode-bitkaart is niet gezet. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @b @B is not set. "
 msgstr "Opvulling aan het eind van blok-bitkaart is niet gezet. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr "Blok-bitkaart-verschillen: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr "Inode-bitkaart-verschillen: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Verkeerd aantal vrije inodes voor groep #%g (%i, geteld=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Verkeerd aantal mappen voor groep #%g (%i, geteld=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Verkeerd aantal inodes (%i, geteld=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Verkeerd aantal blokken voor groep #%g (%b, geteld=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Verkeerd aantal blokken (%b, geteld=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
-msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
-msgstr "PROGRAMMAFOUT in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten (%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n"
+#: e2fsck/problem.c:1556
+msgid ""
+"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
+"endpoints (%i, %j)\n"
+msgstr ""
+"PROGRAMMAFOUT in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten "
+"(%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "*Interne fout*: einde van bitmap is gefoezeld (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fout tijdens kopiëren naar vervangende inode-bitkaart: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Fout tijdens kopiëren naar vervangende blok-bitkaart: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr "Het journal heraanmaken om het bestandssysteem weer ext3 te maken?\n"
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Heraanmaken"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr ""
+"Blok(ken) van groep %g in gebruik, maar groep is gemarkeerd als "
+"BLOCK_UNINIT\n"
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+"Inode(s) van groep %g in gebruik, maar groep is gemarkeerd als INODE_UNINIT\n"
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Onbekende foutcode (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "GENEGEERD"
 
@@ -2255,63 +2493,23 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "tijdens aanroep van ext2fs_block_iterate() voor inode %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "tijdens aanroep van ext2fs_adjust_ea_refcount() voor inode %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Afkappen"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Wissen"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "tijdens aanroep van ext2fs_block_iterate()"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "tijdens aanroep van iterator-functie"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "tijdens reserveren van inodebuffer"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "tijdens lezen van inodetabel (groep %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "tijdens schrijven van inodetabel (groep %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Stap 0: Omwisseling van hoge en lage bytes in hele bestandssysteem\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: het bestandssysteem dient opnieuw gecontroleerd te worden met 'fsck'\n"
-"en niet aangekoppeld te worden voordat de byte-omwisseling gebeurd is.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Byte-omwisseling"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
@@ -2319,9 +2517,10 @@
 "Gebruik:  %s [-cdfknpstvyDFSV] [-b superblok] [-B blokgrootte]\n"
 "          [-C bestandsdescriptor] [-E uitgebreide_opties]\n"
 "          [-I inodebufferblokken] [-j extern_journal]\n"
-"          [-l|-L slechte_blokkenbestand]  apparaat\n"
+"          [-l|-L slechte_blokkenbestand] [-P procesinode-grootte]\n"
+"          apparaat\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2329,7 +2528,8 @@
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock list\n"
+" -c                   Check for bad blocks and add them to the badblock "
+"list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2340,7 +2540,7 @@
 " -c   Op slechte blokken controleren en deze aan lijst toevoegen.\n"
 " -f   Een controle afdwingen, ook als het bestandssysteem schoon is.\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2350,40 +2550,46 @@
 " -l bad_blocks_file   Add to badblocks list\n"
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
-" -v   Breedsprakige uitvoer.\n"
+" -v   Gedetailleerde uitvoer produceren.\n"
 " -b superblok        Dit superblok gebruiken.\n"
 " -B blokgrootte      Deze blokgrootte gebruiken bij zoeken naar superblok.\n"
 " -j extern_journal   Dit externe journal gebruiken.\n"
-" -l slechte_blokkenbestand   Deze lijst aan de slechte_blokkenlijst toevoegen.\n"
+" -l slechte_blokkenbestand   Deze lijst aan de slechte_blokkenlijst "
+"toevoegen.\n"
 " -L slechte_blokkenbestand   Deze slechte_blokkenlijst gebruiken.\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %u/%u bestanden (%0d.%d%% niet-aaneengesloten), %u/%u blokken\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         aantal inodes met ind/dind/tind-blokken: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Extents-dieptehistogram: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "tijdens bepalen of %s aangekoppeld is."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "WAARSCHUWING: %s is aangekoppeld!\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s is aangekoppeld.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2391,7 +2597,7 @@
 "Kan niet verder.  Gestopt.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2407,75 +2613,81 @@
 "kan tot ZWARE beschadigingen leiden.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Wilt u echt doorgaan"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "controle is afgebroken.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " bevat een bestandssysteem met fouten"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " is niet goed ontkoppeld"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
-msgstr " het primaire superblok heeft andere functievlaggen gezet dan de reserveblokken"
+msgstr ""
+" het primaire superblok heeft andere functievlaggen gezet dan de "
+"reserveblokken"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " is %u keer aangekoppeld geweest zonder controle"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " is schijnbaar het laatst gecontroleerd in de toekomst"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " is gedurende %u dagen niet gecontroleerd"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", gedwongen controle.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: schoon, %u/%u bestanden, %u/%u blokken"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (controle uitgesteld; op accu draaiend)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (controle bij volgende aankoppeling)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (controle na %ld aankoppelingen)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FOUT: kan /dev/null niet openen (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Ongeldige versie van uitgebreide kenmerken.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Onbekende uitgebreide optie: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2484,45 +2696,35 @@
 "Syntaxfout in e2fsck-configuratiebestand (%s, regel #%d)\n"
 "    %s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fout tijdens valideren van bestandsdesriptor %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Ongeldige completeringsinformatie voor bestandsdescriptor."
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Slechts één van de opties -p, -a, -n of -y mag worden opgegeven."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "De optie '-t' wordt niet ondersteund door deze versie van e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr "Byte-omwisseling is niet mogelijk met deze versie van e2fsck.\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan apparaat '%s' niet vinden."
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Bij byte-omwisseling zijn botsende opties niet toegestaan.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "De opties -c en -l/-L kunnen niet samen gebruikt worden.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2531,7 +2733,7 @@
 "E2FSCK_JBD_DEBUG -- \"%s\" is geen geheel getal\n"
 "\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
@@ -2542,38 +2744,40 @@
 "Ongeldig niet-numeriek argument van '-%c': \"%s\"\n"
 "\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fout: de ext2fs-bibliotheek is te oud!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "tijdens programma-initialisatie"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tgebruik makend van %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
 msgstr "voor interactieve reparaties is een terminal vereist"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1010
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s reservekopieblokken worden bekeken...\n"
 
-#: e2fsck/unix.c:985
+# Gebruik van '--' in deze en volgende string is opzettelijk;
+# één van deze strings wordt ingevuld voor de tweede %s hierboven.
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
 msgstr "Superblok is ongeldig --"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1013
 msgid "Group descriptors look bad..."
 msgstr "Groepsbeschrijvers zien er slecht uit --"
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2584,27 +2788,29 @@
 "(Of het superblok is beschadigd.)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Is dit misschien een partitie met lengte nul?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
-msgstr "U dient %s-toegang tot het bestandssyteem te hebben, of root te zijn.\n"
+msgstr ""
+"U dient %s-toegang tot het bestandssyteem te hebben, of root te zijn.\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Mogelijk een niet-bestaand apparaat of een swap-apparaat?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr "Bestandssysteem exclusief aangekoppeld of geopend door een ander programma?\n"
+msgstr ""
+"Bestandssysteem exclusief aangekoppeld of geopend door een ander programma?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2613,42 +2819,45 @@
 "De schijf is schrijfbeveiligd.  Gebruik de optie '-n' om een\n"
 "alleen-lezencontrole van het apparaat uit te voeren.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
 msgstr "Installeer een nieuwere versie van e2fsck!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "tijdens controle van het ext3-journal van %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
-msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgid ""
+"Warning: skipping journal recovery because doing a read-only filesystem "
+"check.\n"
 msgstr ""
 "Waarschuwing: afspelen van journal wordt overgeslagen\n"
 "omdat een alleen-lezencontrole uitgevoerd wordt.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1171
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Kan superblokvlaggen van %s niet zetten.\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1177
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "tijdens afspelen van het ext3-journal van %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1201
 #, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund worden:"
+msgstr ""
+"Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund worden:"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
 msgstr "Waarschuwing: compressie-ondersteuning is nog experimenteel.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2657,30 +2866,25 @@
 "Deze e2fsck is niet gecompileerd met 'htree'-ondersteuning,\n"
 "maar het bestandssysteem %s bevat 'htree'-mappen.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: bytevolgorde van bestandssysteem is al genormaliseerd.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
 msgstr "tijdens lezen van slechte-blokken-inode"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Dit ziet er niet goed uit, maar we zullen doorgaan...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
 msgstr "Kan journal-grootte niet bepalen"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Aanmaken van journal (%d blokken): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2688,39 +2892,40 @@
 "\n"
 "    tijdens aanmaken van journal"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1317
 #, c-format
 msgid " Done.\n"
 msgstr " voltooid.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 "\n"
-"*** journal is opnieuw aangemaakt -- het bestandssysteem is nu weer ext3 ***\n"
+"*** journal is opnieuw aangemaakt -- het bestandssysteem is nu weer ext3 "
+"***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "E2fsck wordt opnieuw gestart vanaf het begin...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "tijdens wissen van de context"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck is geannuleerd.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
 msgstr "afgebroken"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -2729,12 +2934,12 @@
 "\n"
 "%s: ***** BESTANDSSYSTEEM IS VERANDERD *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** HERSTART UW SYSTEEM *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
@@ -2745,43 +2950,47 @@
 "%s: ********** WAARSCHUWING: bestandssysteem bevat nog fouten **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
-msgid "yY"
-msgstr "jJ"
+#: e2fsck/unix.c:1400
+msgid "while setting block group checksum info"
+msgstr "tijdens zetten van controlesom van blokgroep"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:138 misc/util.c:68
+msgid "yY"
+msgstr "jJyY"
+
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "geannuleerd!\n"
 
 # src/main.c:417 src/main.c:418 src/main.c:483 src/main.c:484 src/main.c:489
 # src/main.c:490 src/main.c:574
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "ja\n"
 
 # src/main.c:417 src/main.c:418 src/main.c:432 src/main.c:483 src/main.c:484
 # src/main.c:489 src/main.c:490 src/main.c:574
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "nee\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2790,7 +2999,7 @@
 "%s? nee\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2799,47 +3008,38 @@
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "nee"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps(): ongeldige bitkaartblokken voor %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "lezen van inode- en blok-bitkaarten"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "tijdens herlezen van bitkaarten voor %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "schrijven van blok-bitkaarten"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "schrijven van blok- en inode-bitkaarten"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "tijdens herschrijven van blok-bitkaarten voor %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "tijdens herschrijven van blok- en inode-bitkaarten voor %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "schrijven van inode-bitkaarten"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "tijdens herschrijven van inode-bitkaarten voor %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2852,52 +3052,61 @@
 "%s: ONVERWACHTE INCONSISTENTIE; voer 'fsck' met de hand uit\n"
 "    (dat wil zeggen: zonder de opties '-a' of '-p').\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:336
 #, c-format
 msgid "Memory used: %dk/%dk (%dk/%dk), "
 msgstr "Gebruikt geheugen: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:340
 #, c-format
 msgid "Memory used: %d, "
 msgstr "Gebruikt geheugen: %d, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "tijd: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "verlopen tijd: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
 msgstr "tijdens lezen van inode %ld in %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
 msgstr "tijdens schrijven van inode %ld in %s"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "tijdens reserveren van nulmakingsbuffer"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr "voltooid                            \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Gebruik:  %s [-b blokgrootte] [-i invoerbestand] [-o uitvoerbestand]\n"
-"          [-svwnf] [-c aantal_blokken_tegelijk] [-p aantal_doorlopen]\n"
-"          [-t testpatroon [-t ...]]  apparaat  [laatste_blok [beginblok]]\n"
+"          [-c aantal_blokken_tegelijk] [-d "
+"vertragingsfactor_tussen_leesacties]\n"
+"          [-e maximum_aantal_slechte_blokken] [-p aantal_controles]\n"
+"          [-t testpatroon [-t testpatroon [...]]]  [-fnsvw]\n"
+"          apparaat  [eindblok [beginblok]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -2906,70 +3115,83 @@
 "%s: De opties '-n' en '-w' gaan niet samen.\n"
 "\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
 msgstr "Test wordt uitgevoerd met dit willekeurige patroon: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
 msgstr "Test wordt uitgevoerd met patroon 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
 msgstr "tijdens 'seek'"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Vreemde waarde (%ld) bij leespoging\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
 msgstr "tijdens leegmaken van de buffers"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
-msgstr "tijdens voorbereiding van het langslopen van de lijst met slechte blokken"
+msgstr ""
+"tijdens voorbereiding van het langslopen van de lijst met slechte blokken"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
 msgstr "tijdens reserveren van buffers"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Controleren van blokken %lu tot %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Zoeken naar slechte blokken in alleen-lezen-modus\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Zoeken naar slechte blokken (alleen-lezen-test): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Te veel slechte blokken -- controle is afgebroken\n"
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Zoeken naar slechte blokken in lezen-en-schrijven-modus\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Van blok %lu tot %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
 msgstr "Lezen en vergelijken: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr "Zoeken naar slechte blokken in niet-destructieve lezen-en-schrijven-modus\n"
+msgstr ""
+"Zoeken naar slechte blokken in niet-destructieve lezen-en-schrijven-modus\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr "Zoeken naar slechte blokken (niet-destructieve lezen-en-schrijven-test)\n"
+msgstr ""
+"Zoeken naar slechte blokken (niet-destructieve lezen-en-schrijven-test)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2977,146 +3199,144 @@
 "\n"
 "Interrupt ontvangen, bezig met opschonen...\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "tijdens schrijven van testpatroon, blok %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s is aangekoppeld; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:923
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "maar 'badblocks' wordt gedwongen uitgevoerd.\n"
 "Hoop dat /etc/mtab onjuist is.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:928
 msgid "it's not safe to run badblocks!\n"
 msgstr "het is niet veilig om 'badblocks' uit te voeren!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:933 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s wordt blijkbaar gebruikt door het systeem; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:936
 msgid "badblocks forced anyway.\n"
 msgstr "maar 'badblocks' wordt gedwongen uitgevoerd.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:956
+#, c-format
+msgid "invalid %s - %s"
+msgstr "ongeldige %s: %s"
+
+#: misc/badblocks.c:1015
 #, c-format
 msgid "bad block size - %s"
 msgstr "ongeldige blokgrootte: %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "kan geen geheugen reserveren voor testpatroon -- %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "ongeldig testpatroon: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "In alleen-lezen-modus mag slechts één testpatroon gegeven worden"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "In alleen-lezen-modus is een willekeurig testpatroon niet toegestaan"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "Kan de apparaatgrootte niet bepalen; geef de grootte handmatig op.\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
 msgstr "tijdens bepalen van apparaatgrootte"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "ongeldig blokkenaantal: %s"
+#: misc/badblocks.c:1128
+msgid "last block"
+msgstr "laatste blok"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "ongeldig beginblok: %s"
+#: misc/badblocks.c:1134
+msgid "first block"
+msgstr "eerste blok"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1137
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "ongeldig beginblok: %d -- moet kleiner dan %lu zijn"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "ongeldig beginblok: %lu -- moet kleiner dan %lu zijn"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 msgid "while creating in-memory bad blocks list"
 msgstr "tijdens opstellen van lijst van slechte blokken in geheugen"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 msgid "while adding to in-memory bad block list"
 msgstr "tijdens toevoegen aan lijst van slechte blokken in geheugen"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
-msgstr "Doorloop voltooid, %u slechte blokken gevonden.\n"
+msgstr "Controle voltooid; %u slechte blokken gevonden.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Gebruik:  %s [-RV] [-+=AacDdijsSu] [-v versie] bestanden...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
+msgstr "Gebruik:  %s [-RVf] [-+=AacDdijsSu] [-v versie] bestanden...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
 msgstr "ongeldige versie: %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
 msgstr "tijdens opvragen van de status van %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Vlaggen van %s gezet als "
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
 msgstr "tijdens lezen van vlaggen op %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
 msgstr "tijdens zetten van vlaggen op %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Versie van %s gezet als %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
 msgstr "tijdens zetten van versie op %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Kan geen padvariabele reserveren in chattr_dir_proc()"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
 msgstr "'=' gaat niet samen met '-' en '+'\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
 msgstr "Gebruik '-v', '=', '-' of '+'.\n"
 
@@ -3125,30 +3345,35 @@
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr "Gebruik:  %s [-bfhixV] [-ob superblok] [-oB blokgrootte] apparaat\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Groep %lu: (Blokken "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Controlesom 0x%04x, ongebruikte inodes %d\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %s superblok op "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primair"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Reservekopie"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Groepsbeschrijvers op "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3157,20 +3382,20 @@
 "\n"
 "  Blokken voor groepsbeschrijverstabel gereserveerd op "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Groepsbeschrijver op "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Blok-bitkaart op "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", Inode-bitkaart op "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3178,49 +3403,54 @@
 "\n"
 "  Inodetabel op "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d vrije blokken, %d vrije inodes, %d mappen\n"
+"  %u vrije blokken, %u vrije inodes, %u mappen%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u ongebruikte inodes\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Vrije blokken: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Vrije inodes: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
 msgstr "tijdens printen van lijst van slechte blokken"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:270
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Slechte blokken: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
 msgstr "tijdens lezen van journal-inode"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
 msgstr "Grootte van journal:        "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
 msgstr "tijdens lezen van journal-superblok"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Kan magische getallen van journal-superblok niet vinden"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:331
 #, c-format
 msgid ""
 "\n"
@@ -3234,32 +3464,32 @@
 "\n"
 "Blokgrootte in journal:     %u\n"
 "Lengte van journal:         %u\n"
-"Eerste journalblok:         %u\n"
-"Kopcode van journalreeks:   0x%08x\n"
+"Eerste journal-blok:        %u\n"
+"Kopcode van journal-reeks:  0x%08x\n"
 "Begin van journal:          %u\n"
 "Aantal journal-gebruikers:  %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Journal-gebruikers:       %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Kan geen geheugen reserveren om opties te ontleden!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:386
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Ongeldig superblok opgegeven: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:401
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ongeldige blokgrootte opgegeven: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:412
 #, c-format
 msgid ""
 "\n"
@@ -3282,22 +3512,18 @@
 "    superblock=<superbloknummer>\n"
 "    blocksize=<blokgrootte>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tgebruik makend van %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Kan geen geldig bestandssysteem-superblok vinden.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Opmerking: dit is een byte-verwisseld bestandssysteem.\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
@@ -3306,33 +3532,33 @@
 "\n"
 "%s: %s: fout tijdens lezen van bitkaarten: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Gebruik:  %s [-rsI] apparaat imagebestand\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Kan geen headerbuffer reserveren.\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "onvolledig blok (slechts %d bytes) tijdens schrijven van image-kop"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "tijdens schrijven van superblok"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "tijdens aanmaken van inodetabel"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "tijdens schrijven van blok-bitkaart"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "tijdens schrijven van inode-bitkaart"
 
@@ -3354,9 +3580,9 @@
 #: misc/e2label.c:71
 #, c-format
 msgid "e2label: not an ext2 filesystem\n"
-msgstr "e2label: geen ext2-bestandssysteem\n"
+msgstr "e2label: dit is geen ext2-bestandssysteem\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Waarschuwing: label is te lang, wordt afgekapt.\n"
@@ -3371,22 +3597,77 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: fout tijdens schrijven van superblok\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
-msgstr "Gebruik:  e2label apparaat [nieuwlabel]\n"
+msgstr "Gebruik:  e2label apparaat [nieuw_label]\n"
 
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Gebruik:  %s <transactiebestand> <bestandssysteem>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Lezen van bestandssysteemgegevens is mislukt \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Lezen van transactiegegevens is mislukt: %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+"aankoppelingstijd van bestandssysteem komt niet overeen met %u uit "
+"transactiebestand\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+"UUID's van bestandssysteem en uit transactiebestand komen niet overeen\n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "Openen van transactiebestand %s is mislukt\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Fout tijdens bepalen of %s aangekoppeld is.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "Voer 'e2undo' alleen uit op een niet-aangekoppeld bestandssysteem.\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Openen van %s is mislukt\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Een transactie met grootte %zd is afgespeeld op locatie %ld.\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Schrijven is mislukt: %s\n"
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
 msgstr "WAARSCHUWING: kan %s niet openen: %s\n"
 
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
 msgstr "WAARSCHUWING: foute indeling op regel %d van %s\n"
 
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
@@ -3398,37 +3679,37 @@
 "    de eerstvolgende gelegenheid toe dienen te voegen.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: niet gevonden\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: geen dochterprocessen meer?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Waarschuwing: %s voor apparaat %s werd beëindigd met signaal %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: de status is %x, dit zou nooit voor mogen komen.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Afgesloten met %s (afsluitwaarde %d).\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fout %d tijdens uitvoering van fsck.%s voor %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3436,43 +3717,46 @@
 "Óf geen óf alle bestandsssysteemsoorten bij optie -t\n"
 "dienen voorafgegaan te worden door 'no' of '!'.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kan geen geheugen reserveren voor bestandssysteemsoorten.\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
-msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgid ""
+"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
+"number\n"
 msgstr ""
 "%s: ongeldige regel in /etc/fstab wordt overgeslagen:\n"
 "zesde veld van 'bind'-aankoppeling is niet nul (fsck-volgnummer)\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kan %s niet controleren: fsck.%s niet gevonden\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
 msgstr "Alle bestandssystemen worden gecontroleerd.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--wachten-- (volgnummer %d)\n"
 
-#: misc/fsck.c:1066
-msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+#: misc/fsck.c:1081
+msgid ""
+"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Gebruik:  fsck [-AMNPRTV] [-C [descriptor]] [-t bestandssysteemsoort]\n"
 "          [bestandssysteemopties] [bestandssysteem...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: te veel apparaten\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: te veel argumenten\n"
@@ -3492,55 +3776,59 @@
 msgid "While reading version on %s"
 msgstr "Tijdens lezen van versie op %s"
 
-#: misc/mke2fs.c:97
-#, c-format
+#: misc/mke2fs.c:104
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Gebruik:  %s [-b blokgrootte] [-c|-l bestandsnaam] [-f fragmentgrootte]\n"
-"          [-g blokken_per_groep] [-i bytes_per_inode] [-I inode-grootte]\n"
-"          [-J journalopties] [-L label] [-M laatste_aankoppelingspunt]\n"
-"          [-m percentage_gereserveerde_blokken] [-N aantal_inodes]\n"
+"          [-g blokken_per_groep] [-G metagroepgrootte] [-i bytes_per_inode]\n"
+"          [-I inode-grootte] [-J journal-opties] [-L label] [-N "
+"aantal_inodes]\n"
+"          [-m percentage_gereserveerde_blokken] [-M "
+"laatste_aankoppelingspunt]\n"
 "          [-o naam_van_aanmakende_besturingssyteem] [-O functie[,...]]\n"
 "          [-r bestandssysteemversie] [-T bestandssysteemtype] [-jnqvFSV]\n"
 "          [-E uitgebreide_optie[,...]]  apparaat  [aantal_blokken]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uitgevoerde opdracht is: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "tijdens uitvoering van '%s'"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "tijdens verwerken van de gemaakte lijst van slechte blokken"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr "Blok %d in het primaire superblok of de groepsbeschrijvers is slecht.\n"
+msgstr ""
+"Blok %d in het primaire superblok of de groepsbeschrijvers is slecht.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Blokken %u tot en met %u moeten goed zijn\n"
 "om een bestandssysteem aan te kunnen maken.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Gestopt...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3551,23 +3839,19 @@
 "beginnend bij blok %u, bevat slechte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "tijdens het markeren van slechte blokken (als zijnde in gebruik)"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "voltooid                        \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "tijdens reserveren van nulmakingsbuffer"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Schrijven van inodetabellen: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3576,67 +3860,67 @@
 "\n"
 "Kan %d blokken in inodetabel niet schrijven, beginnend bij %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
-msgstr "tijdens aanmaken van root-map"
+msgstr "tijdens aanmaken van hoofdmap"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
-msgstr "tijdens lezen van root-inode"
+msgstr "tijdens lezen van hoofd-inode"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
-msgstr "tijdens zetten van eigenaar van root-inode"
+msgstr "tijdens zetten van eigenaar van hoofd-inode"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "tijdens aanmaken van /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "tijdens zoeken van /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "tijdens uitbreiden van /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "tijdens zetten van slechte-blokken-inode"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Onvoldoende geheugen tijdens wissen van sectoren %d-%d.\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Waarschuwing: kan blok 0 niet lezen: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Waarschuwing: kan sector %d niet wissen: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "tijdens initialiseren van het journal-superblok"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Nulmaken van journal-apparaat: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "tijdens nulmaken van journal-apparaat (blok %u, nummer %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "tijdens schrijven van journal-superblok"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3645,97 +3929,100 @@
 "Waarschuwing: %u ongebruikte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Bestandssysteemlabel=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Soort besturingssysteem: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u inodes, %u blokken\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blokken (%2.2f%%) gereserveerd voor systeembeheer\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Eerste gegevensblok=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum aantal bestandssysteemblokken=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokgroepen\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokgroep\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blokken per groep, %u fragmenten per groep\n"
 
 # src/main.c:425
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inodes per groep\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblokreservekopieën opgeslagen in blokken: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
-msgstr "Ongeldig argument van 'stripe-width': %s\n"
+msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ongeldig argument van 'resize': %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr "De maximum grootte moet groter zijn dan de huidige bestandssysteemgrootte.\n"
+msgstr ""
+"De maximum grootte moet groter zijn dan de huidige bestandssysteemgrootte.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr "Vergroten en verkleinen zijn niet mogelijk op een bestandssysteem van versie 0.\n"
+msgstr ""
+"Online vergroten of verkleinen is niet mogelijk op een bestandssysteem van "
+"versie 0.\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3748,8 +4035,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Ongeldige optie opgegeven: %s\n"
@@ -3758,12 +4046,15 @@
 "hun argument wordt voorafgegaan door een '='-teken.\n"
 "\n"
 "Geldige uitgebreide opties zijn:\n"
-"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/geschreven>\n"
-"    stripe-width=<aantal blokken per stripe> (meestal stride × aantal schijven)\n"
+"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/"
+"geschreven>\n"
+"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal "
+"schijven)\n"
 "    resize=<maximum grootte van bestandssysteem in blokken>\n"
+"    lazy_itable_init=<0 voor uitschakelen, 1 voor inschakelen>\n"
 "    test_fs\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3774,7 +4065,7 @@
 "Waarschuwing: 'stripe'-breedte %u is geen even veelvoud van 'stride' %u.\n"
 "\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3783,101 +4074,151 @@
 "Syntaxfout in mke2fs-configuratiebestand (%s, regel #%d)\n"
 "    %s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+# Dit gaat over het argument van optie -O.
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
-msgstr "Ongeldige optie van bestandssysteem: %s\n"
+msgstr "Ongeldige bestandssysteemfunctie: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Waarschuwing!  Uw mke2fs.conf definieert geen bestandssysteemtype %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"U dient waarschijnlijk een nieuwer mke2fs.conf-bestand te installeren.\n"
+"\n"
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid "invalid block size - %s"
 msgstr "ongeldige blokgrootte: %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
-msgstr "Waarschuwing: blokgrootte %d is op de meeste systemen niet bruikbaar.\n"
+msgstr ""
+"Waarschuwing: blokgrootte %d is op de meeste systemen niet bruikbaar.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "ongeldige fragmentgrootte: %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
-msgstr "Waarschuwing: fragmenten worden niet ondersteund; optie -f wordt genegeerd\n"
+msgstr ""
+"Waarschuwing: fragmenten worden niet ondersteund; optie -f wordt genegeerd\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
 msgstr "Ongeldig aantal blokken per groep"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
 msgstr "argument van -g (blokken per groep) is geen veelvoud van 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+msgid "Illegal number for flex_bg size"
+msgstr "Ongeldig getal voor metagroepgrootte"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr "Metagroepgrootte moet een macht van 2 zijn"
+
+#: misc/mke2fs.c:1239
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ongeldige inodeverhouding %s (min %d / max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
 msgstr "onvoldoende geheugen in bad_blocks_filename()"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ongeldig percentage gereserveerde blokken: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ongeldig versienummer: %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ongeldige grootte van inode: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ongeldig aantal inodes: %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "tijdens openen van journal-apparaat %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr "Blokgrootte %d van journal-apparaat is kleiner dan minimum blokgrootte %d.\n"
+msgstr ""
+"Blokgrootte %d van journal-apparaat is kleiner dan minimum blokgrootte %d.\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Blokgrootte van het journal-apparaat wordt gebruikt: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Blokken van %d bytes zijn te groot voor dit systeem (max %d)."
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
-msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgid ""
+"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Waarschuwing: blokken van %d bytes zijn te groot voor dit systeem,\n"
 "het maximum is %d -- maar 'mke2fs' wordt gedwongen uitgevoerd.\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "ongeldig blokkenaantal: %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "bestandssysteem"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Grootte van apparaat %s kan niet uitgedrukt worden in 32 bits;\n"
+"    een blokgrootte van %d wordt gebruikt.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:371
 msgid "while trying to determine filesystem size"
 msgstr "tijdens bepalen van grootte van bestandssysteem"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3885,7 +4226,7 @@
 "Kan de grootte van het apparaat niet bepalen;\n"
 "u dient zelf de grootte van het bestandssysteem aan te geven.\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3898,79 +4239,82 @@
 "    in-gebruik-zijn van een gewijzigde partitie.  Mogelijk dient u uw\n"
 "    computer te herstarten om de juiste partitietabel te verkrijgen.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Bestandssysteem is groter dan de schijnbare apparaatgrootte."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Verwerken van lijst met bestandssysteemsoorten is mislukt\n"
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "Lijst met bestandssysteemsoorten voor mke2fs.conf: "
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr "Sommige functies worden niet ondersteund op een bestandssysteem van versie 0.\n"
+msgstr ""
+"Extra functies worden niet ondersteund op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr "Schaarse superblokken zijn niet mogelijk op een bestandssysteem van versie 0.\n"
+msgstr ""
+"Schaarse superblokken zijn niet mogelijk op een bestandssysteem van versie "
+"0.\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1568
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Een journal is niet mogelijk op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"De functies 'resize_inode' en 'meta_bg' gaan niet samen.\n"
+"Ze kunnen niet beide ingeschakeld worden.\n"
+
+#: misc/mke2fs.c:1603
 msgid "while trying to determine hardware sector size"
 msgstr "tijdens bepalen van de grootte van een sector"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr "het reserveren van blokken voor bestandssysteemvergroting wordt niet ondersteund op een niet-schaars bestandssysteem"
+msgstr ""
+"het reserveren van blokken voor bestandssysteemvergroting wordt niet "
+"ondersteund op een niet-schaars bestandssysteem"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
 msgstr "teller van blokken-per-groep ligt buiten het toegestane bereik"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
-"Bestandssysteem is te groot.  Momenteel zijn niet meer dan\n"
-"2**31-1 blokken mogelijk (8TB bij een blokgrootte van 4K)."
+"De functie 'flex_bg' is niet ingeschakeld, dus de metagroepgrootte mag niet "
+"opgegeven worden"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Waarschuwing: sommige 2.4-kernels ondersteunen voor ext3 geen\n"
-"blokgroottes groter dan 4096.  Gebruik in dat geval '-b 4096'.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ongeldige inode-grootte %d (min %d / max %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Waarschuwing: inodes van %d bytes zijn onbruikbaar op oudere systemen\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "te veel inodes (%llu) -- inodeverhouding verhogen?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "te veel inodes (%llu) -- geef minder dan 2^32 op"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3982,57 +4326,79 @@
 "   geef een hogere bytes-per-inodeverhouding op (-i),\n"
 "   of verklein het aantal inodes (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, c-format
+msgid "while trying to delete %s"
+msgstr "tijdens verwijderen van %s"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Een bestaand bestandssysteem wordt overschreven;\n"
+"dit kan ongedaan gemaakt worden met de opdracht:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1885
 msgid "while setting up superblock"
 msgstr "tijdens aanmaken van superblok"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "onbekend besturingssysteem: %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "tijdens reserveren van bestandssysteemtabellen"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "tijdens nulmaken van blok %u aan het eind van het bestandssysteem"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 msgid "while reserving blocks for online resize"
 msgstr "tijdens reserveren van uitbreidingsblokken"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Toevoegen van journal aan apparaat %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 "\n"
-"\ttijdens toevoegen van journal aan apparaat %s"
+"    tijdens toevoegen van journal aan apparaat %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
 msgstr "voltooid\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Aanmaken van journal (%u blokken): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Schrijven van superblokken en bestandssysteem-metagegevens: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
@@ -4041,7 +4407,7 @@
 "\n"
 "Waarschuwing: problemen tijdens schrijven van superblokken."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -4055,11 +4421,47 @@
 msgid "Usage: mklost+found\n"
 msgstr "Gebruik:  mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Gebruik:  %s apparaat...\n"
+"\n"
+"Toont de partitie-informatie voor elk gegeven apparaat.\n"
+"\n"
+"Voorbeeld:  %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Kan %s niet openen: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Kan geometrie van %s niet bepalen: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Kan grootte van %s niet bepalen: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: kop=%3d sec=%3d cil=%4d   begin=%8d grootte=%8lu einde=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Controleer het bestandssysteem met 'e2fsck'.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:103
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4067,89 +4469,114 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Gebruik:  %s [-c maximum_aantal_aankoppelingen] [-C aankoppelingental]\n"
-"          [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]] [-f] [-g groep]\n"
+"          [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]] [-f] [-g "
+"groep]\n"
 "          [-i interval[d|w|m]] [-j] [-J journal-opties] [-l] [-L label]\n"
-"          [-m percentage_gereserveerde_blokken] [-M laatste_aankoppelingspunt]\n"
+"          [-m percentage_gereserveerde_blokken] [-M "
+"laatste_aankoppelingspunt]\n"
 "          [-o [^]aankoppelingsopties[,...]] [-O [^]functie[,...]]\n"
-"          [-r aantal_gereserveerde_blokken] [-T tijdstip_van_laatste_controle]\n"
-"          [-u gebruiker] [-U UUID]  apparaat\n"
+"          [-r aantal_gereserveerde_blokken] [-T "
+"tijdstip_van_laatste_controle]\n"
+"          [-u gebruiker] [-U UUID] [-I nieuwe_inode-grootte]  apparaat\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
 msgstr "tijdens openen van extern journal"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s: is geen journal-apparaat.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
 msgstr "Geen journal-superblok gevonden!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID van bestandssysteem niet gevonden op journal-apparaat.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
 msgstr "Journal is NIET verwijderd.\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
 msgstr "Journal is verwijderd.\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:286
 msgid "while reading bitmaps"
 msgstr "tijdens lezen van bitkaarten"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:294
 msgid "while clearing journal inode"
 msgstr "tijdens wissen van journal-inode"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:305
 msgid "while writing journal inode"
 msgstr "tijdens schrijven van journal-inode"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ongeldige aankoppelingsoptie: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Het uitschakelen van bestandssysteemfunctie '%s' is niet mogelijk.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:362
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Het inschakelen van bestandssysteemfunctie '%s' is niet mogelijk.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"De journalvlag mag alleen gewist worden wanneer het bestandssysteem\n"
-"ontkoppeld is of als alleen-lezen aangekoppeld is.\n"
+"De journal-vlag mag alleen gewist worden wanneer het bestandssysteem\n"
+"ontkoppeld is of aangekoppeld als alleen-lezen.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
-"De journalreddingsvlag is gezet.  Voer eerst 'e2fsck' uit,\n"
-"voordat u de journalvlag wist.\n"
+"De journal-reddingsvlag is gezet.  Voer eerst 'e2fsck' uit,\n"
+"voordat u de journal-vlag wist.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Het uitschakelen van bestandssysteemfunctie 'flex_bg' zou het\n"
+"bestandssysteem inconsistent maken.\n"
+
+#: misc/tune2fs.c:423
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"De 'huge_file'-functievlag mag alleen gewist worden wanneer het\n"
+"bestandssysteem ontkoppeld is of aangekoppeld als alleen-lezen.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(En herstart daarna uw computer!)\n"
+
+#: misc/tune2fs.c:472
 msgid "The filesystem already has a journal.\n"
 msgstr "Het bestandssysteem heeft al een journal.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
@@ -4158,21 +4585,21 @@
 "\n"
 "    tijdens openen van journal op %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Aanmaken van journal op apparaat %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "tijdens toevoegen van bestandssysteem aan journal op %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
 msgstr "Aanmaken van journal-inode: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4180,66 +4607,86 @@
 "\n"
 "    tijdens aanmaken van journal-inode"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kan datum/tijd-specificatie niet ontleden: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "onjuist aankoppelingenaantal: %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "onjuist argument van -e (gedrag bij een fout): %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "onjuiste GID of groepsnaam: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
 msgstr "onjuist interval: %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "onjuiste verhouding (%s) voor gereserveerde blokken"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
 msgstr "-o mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
 msgstr "-O mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "onjuist aantal gereserveerde blokken: %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "onjuiste UID of gebruikersnaam: %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:806
+#, c-format
+msgid "bad inode size - %s"
+msgstr "ongeldige grootte van inode: %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Inode-grootte moet een macht van 2 zijn -- niet %s"
+
+#: misc/tune2fs.c:900
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:915
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
-msgstr "Ongeldig argument van 'stripe-width': %s\n"
+msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:930
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Ongeldig hash-algoritme: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Het standaard-hash-algoritme is op %s (%d) gezet\n"
+
+#: misc/tune2fs.c:944
 #, c-format
 msgid ""
 "\n"
@@ -4250,7 +4697,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4261,57 +4709,81 @@
 "hun argument wordt voorafgegaan door een '='-teken.\n"
 "\n"
 "Geldige uitgebreide opties zijn:\n"
-"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/geschreven>\n"
-"    stripe-width=<aantal blokken per stripe> (meestal stride × aantal schijven)\n"
+"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/"
+"geschreven>\n"
+"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal "
+"schijven)\n"
+"    hash_alg=<hash-algoritme>\n"
 "    test_fs\n"
 "    ^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr "Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund worden.\n"
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "te verplaatsen blokken"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1471
+#, fuzzy, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"De veranderingen die door 'tune2fs' gemaakt zijn\n"
+"kunnen ongedaan gemaakt worden met de opdracht:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr "De inode-grootte is al %d\n"
+
+#: misc/tune2fs.c:1534
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Het verkleinen van de inode-grootte is niet mogelijk.\n"
+
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Het maximum aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Het huidige aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Gedrag bij fouten is op %d gezet\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "GID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Interval tussen controles is op %lu seconden gezet\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Percentage gereserveerde blokken is op %g%% gezet (%u blokken)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "Het aantal gereserveerde blokken is te groot (%lu)."
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Het aantal gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4319,7 +4791,7 @@
 "\n"
 "Het bestandssysteem is al zuinig met superblokken.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
@@ -4328,7 +4800,7 @@
 "\n"
 "De zuinig-met-superblokkenvlag is aangezet.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -4336,26 +4808,51 @@
 "\n"
 "Het uitzetten van de zuinig-met-superblokkenvlag is niet mogelijk.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Tijd van laatste controle is op %s gezet\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "UID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
 msgstr "Onjuiste UUID-indeling\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1712
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"De inode-grootte mag alleen gewijzigd worden wanneer het bestandssysteem\n"
+"ontkoppeld is.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Fout tijdens veranderen van de inode-grootte.\n"
+"Voer 'e2undo' uit om de bestandssysteemwijzigingen ongedaan te maken. \n"
+
+#: misc/tune2fs.c:1735
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "De inode-groote is op %lu gezet\n"
+
+#: misc/tune2fs.c:1745
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "De 'stride'-lengte is op %d gezet\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1750
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "De 'stripe'-breedte is op %d gezet\n"
@@ -4416,7 +4913,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4429,7 +4926,7 @@
 "    size=<journal-grootte in megabytes>\n"
 "    device=<journal-apparaat>\n"
 "\n"
-"De grootte van het journal is minimaal 1024 en maximaal 102400 blokken.\n"
+"De grootte van het journal is minimaal 1024 en maximaal 10240000 blokken.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4466,7 +4963,7 @@
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
 "Dit bestandssysteem zal automatisch gecontroleerd worden na elke\n"
-"%d aankoppelingen of %g dagen, afhankelijk van wat het eerste voorkomt.\n"
+"%d aankoppelingen of na %g dagen, afhankelijk van wat het eerst voorkomt.\n"
 "U kunt 'tune2fs' met '-c' of '-i' gebruiken om dit bij te stellen.\n"
 
 #: misc/uuidgen.c:31
@@ -4488,64 +4985,78 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "# (debug)\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Gebruik:  %s [-d debugvlaggen] [-f] [-F] [-p] apparaat [nieuwe_grootte]\n"
+"Gebruik:  %s [-d debugvlaggen] [-fFMpP] apparaat [nieuwe_grootte]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Uitbreiden van inodetabel"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Verplaatsen van blokken"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Scannen van inodetabel"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Bijwerken van inode-verwijzingen"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Verplaatsen van inodetabel"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Onbekende stap?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Begin van stap %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:264
 #, c-format
 msgid "while opening %s"
 msgstr "tijdens openen van %s"
 
-#: resize/main.c:265
+#: resize/main.c:276
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "tijdens opvragen van status van %s"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "onjuiste groote van bestandssysteem: %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: De functie 'flex_bg' zonder de functie 'resize_inode'\n"
+"    wordt door 'resize2fs' niet ondersteund.\n"
 
-#: resize/main.c:353
+#: resize/main.c:345
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Geschatte minimum grootte van het bestandssysteem: %u\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "ongeldige grootte van inode: %s"
+
+#: resize/main.c:394
 msgid "Invalid stride length"
 msgstr "Ongeldige lengte voor 'stride'"
 
-#: resize/main.c:377
+#: resize/main.c:418
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4556,7 +5067,7 @@
 "U vroeg om een nieuwe grootte van %u blokken.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:425
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4565,7 +5076,7 @@
 "Het bestandssysteem is al %u blokken groot.  Er is niets te doen!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4574,12 +5085,12 @@
 "Voer eerst 'e2fsck -f %s' uit.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
 msgstr "tijdens veranderen van de grootte van %s"
 
-#: resize/main.c:411
+#: resize/main.c:452
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4588,24 +5099,188 @@
 "Het bestandssysteem op %s is nu %u blokken groot.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+"Bestandssysteem op %s is aangekoppled op %s;\n"
+"het vergroten/verkleinen moet online gedaan worden.\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Het online krimpen van %u naar %u wordt niet ondersteund.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Bestandssysteem ondersteunt online vergroten/verkleinen niet"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "tijdens openen van aankoppelingspunt %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Toegang geweigerd voor het vergroten/verkleinen van bestandssysteem"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "De kernel ondersteunt het online vergroten/verkleinen niet"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Tijdens controle op ondersteuning voor online vergroten/verkleinen"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Uitvoeren van online verandering van %s naar %u (%dk) blokken.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Tijdens uitbreiden van de laatste groep"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Tijdens toevoegen van groep #%d"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+"Bestandssysteem op %s is aangekoppled op %s;\n"
+"op dit systeem is online vergroten/verkleinen niet mogelijk.\n"
+
+#: resize/resize2fs.c:322
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "aantal inodes (%llu) moet kleiner zijn dan %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "gereserveerde blokken"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "te verplaatsen blokken"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr "blokken voor metagegevens"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Zou nooit mogen gebeuren: de 'resize'-inode is beschadigd!\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr ""
+#~ "Superblok heeft journal-vlag niet gezet, maar heeft wel een ext3-journal %"
+#~ "s.\n"
+
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Fout tijdens verwijderen van extent: %m\n"
+
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr ""
+#~ "Het journal heraanmaken om het bestandssysteem weer ext3 te maken?\n"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "tijdens herschrijven van blok-bitkaarten voor %s"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "schrijven van inode-bitkaarten"
+
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s is mislukt voor %s: %s\n"
+
+#~ msgid "open"
+#~ msgstr "Openen"
+
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "Opvragen van geometrie"
+
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "Opvragen van grootte"
+
+#~ msgid "Filesystem %s has unsupported features enabled.\n"
+#~ msgstr ""
+#~ "Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund "
+#~ "worden.\n"
+
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr ""
+#~ "Een uitgebreid kenmerk in inode %i heeft een ongeldige hashwaarde (%N, "
+#~ "moet 0 zijn).\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "tijdens aanroep van ext2fs_block_iterate()"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "tijdens aanroep van iterator-functie"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "tijdens reserveren van inodebuffer"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "tijdens lezen van inodetabel (groep %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "tijdens schrijven van inodetabel (groep %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr ""
+#~ "Stap 0: Omwisseling van hoge en lage bytes in hele bestandssysteem\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s: het bestandssysteem dient opnieuw gecontroleerd te worden met 'fsck'\n"
+#~ "en niet aangekoppeld te worden voordat de byte-omwisseling gebeurd is.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Byte-omwisseling"
+
+#~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#~ msgstr "Byte-omwisseling is niet mogelijk met deze versie van e2fsck.\n"
+
+#~ msgid "Incompatible options not allowed when byte-swapping.\n"
+#~ msgstr "Bij byte-omwisseling zijn botsende opties niet toegestaan.\n"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr "%s: bytevolgorde van bestandssysteem is al genormaliseerd.\n"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "ongeldig testpatroon: %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "ongeldig beginblok: %s"
+
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Opmerking: dit is een byte-verwisseld bestandssysteem.\n"
+
+#~ msgid ""
+#~ "Filesystem too large.  No more than 2**31-1 blocks\n"
+#~ "\t (8TB using a blocksize of 4k) are currently supported."
+#~ msgstr ""
+#~ "Bestandssysteem is te groot.  Momenteel zijn niet meer dan\n"
+#~ "2**31-1 blokken mogelijk (8TB bij een blokgrootte van 4K)."
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
+#~ "\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Waarschuwing: sommige 2.4-kernels ondersteunen voor ext3 geen\n"
+#~ "blokgroottes groter dan 4096.  Gebruik in dat geval '-b 4096'.\n"
+#~ "\n"
+
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr ""
+#~ "Waarschuwing: inodes van %d bytes zijn onbruikbaar op oudere systemen\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "onjuiste grootte van bestandssysteem: %s"
diff --git a/po/pl.gmo b/po/pl.gmo
index 9c40e24..648e131 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 872f8a8..4e8ae46 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,7 +1,7 @@
 # Polish translation for e2fsprogs.
-# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Theodore Tso (msgids)
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2008.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2009.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -63,10 +63,10 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.7\n"
+"Project-Id-Version: e2fsprogs 1.41.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-09 00:10+0100\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-11-27 15:29+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -74,7 +74,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Wadliwy blok %u poza zakresem - zignorowany.\n"
@@ -88,10 +88,10 @@
 msgstr "podczas odczytu i-wêz³a wadliwych bloków"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr "podczas próby otworzenia %s"
@@ -101,7 +101,7 @@
 msgid "while trying popen '%s'"
 msgstr "podczas próby popen '%s'"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "podczas wczytywania z pliku listy wadliwych bloków"
 
@@ -114,30 +114,30 @@
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Uwaga: znaleziono niedopuszczalny blok %u w i-wê¼le wadliwego bloku. Wyczyszczono.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "B³±d przy odczycie bloku %lu (%s) podczas %s. "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "B³±d przy odczycie bloku %lu (%s). "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Zignorowaæ b³±d"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Wymusiæ ponowny zapis"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "B³±d przy zapisie bloku %lu (%s) podczas %s. "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "B³±d przy zapisie bloku %lu (%s). "
@@ -185,21 +185,21 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Sk³adnia: %s [-F] [-I bloki_bufora_i-wêz³ów] urz±dzenie\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "podczas otwierania %s w celu opró¿nienia"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr "podczas próby opró¿nienia %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
 msgstr "podczas otwierania obrazu i-wêz³ów"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
 msgstr "podczas pobierania nastêpnego i-wêz³a"
 
@@ -208,320 +208,329 @@
 msgid "%u inodes scanned.\n"
 msgstr "Przeszukano i-wêz³ów: %u.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "odczyt superbloku kroniki\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: nie znaleziono poprawnego superbloku kroniki\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: kronika za krótka\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: odtwarzanie z kroniki\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: odtworzenie z kroniki nie zostanie wykonane w trybie tylko do odczytu\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "podczas próby ponownego otwarcia %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "arozszerzony atrybut"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Ab³±d podczas przydzielania"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bbitmapa"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ckompresja"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonflikt z innym @biem systemu plików"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "ii-wêze³"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Iniedopuszczalny"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jkronika"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dusuniêty"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "dkatalog"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "ewpis"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' w %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fsystem plików"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fdla i-wêz³a %i (%Q) wynosi"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggrupa"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "h@i @du HTREE"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Ljest dowi±zaniem"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mwielokrotnie zadeklarowany"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "nb³êdny"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oosierocony"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblem w"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "rg³ówny @i"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "spowinno byæ"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuper@b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "uniedo³±czony"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vurz±dzenie"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xfragment"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zzerowej d³ugo¶ci"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<pusty i-wêze³>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<i-wêze³ wadliwych bloków>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<i-wêze³ indeksu ACL>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<i-wêze³ danych ACL"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<i-wêze³ boot-loadera>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<i-wêze³ katalogu undelete>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<i-wêze³ deskryptora grupy>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<i-wêze³ kroniki>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<zarezerwowany i-wêze³ 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<zarezerwowany i-wêze³ 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "plik zwyk³y"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "katalog"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "urz±dzenie znakowe"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "urz±dzenie blokowe"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "nazwany potok"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "dowi±zanie symboliczne"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "gniazdo"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "nieznany rodzaj pliku typu 0%o"
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr "wielokrotnie zadeklarowana mapa i-wêz³ów"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "b³±d wewnêtrzny; nie mo¿na znale¼æ dup_blk dla %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr "powrót z clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:776
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "b³±d wewnêtrzny: nie mo¿na znale¼æ rekordu bloku EA dla %u"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:788
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "B³±d wewnêtrzny: nie mo¿na znale¼æ rekordu i-wêz³a EA dla %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
 msgid "reading directory block"
 msgstr "odczytu bloku katalogu"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "mapa u¿ywanych i-wêz³ów"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "mapa i-wêz³ów katalogów"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "mapa i-wêz³ów zwyk³ych plików"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "mapa u¿ywanych bloków"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
 msgstr "rozpoczynania przeszukiwania i-wêz³ów"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
 msgstr "pobierania nastêpnego i-wêz³a"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1123
 msgid "Pass 1"
 msgstr "Przebieg 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1180
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "odczytu niebezpo¶rednich bloków i-wêz³a %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1224
 msgid "bad inode map"
 msgstr "b³êdna mapa i-wêz³ów"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1246
 msgid "inode in bad block map"
 msgstr "i-wêze³ w mapie wadliwych bloków"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1266
 msgid "imagic inode map"
 msgstr "mapa i-wêz³ów imagic"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1293
 msgid "multiply claimed block map"
 msgstr "wielokrotnie zadeklarowana mapa bloków"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1392
 msgid "ext attr block map"
 msgstr "mapa bloków rozszerzonych atrybutów"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): oczekiwano %6lu, otrzymano phys %6lu (blkcnt %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "bitmapa bloków"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "bitmapa i-wêz³ów"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "tablica i-wêz³ów"
 
@@ -529,27 +538,31 @@
 msgid "Pass 2"
 msgstr "Przebieg 2"
 
-#: e2fsck/pass3.c:79
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Nie mo¿na kontynuowaæ."
+
+#: e2fsck/pass3.c:76
 msgid "inode done bitmap"
 msgstr "bitmapa wykonanych i-wêz³ów"
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr "Najwiêksze u¿ycie pamiêci"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr "Przebieg 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
 msgstr "bitmapa wykrywania pêtli i-wêz³ów"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr "Przebieg 4"
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr "Przebieg 5"
 
@@ -842,11 +855,11 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd nie obs³uguje w³asno¶ci filetype.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr "@S ma b³êdn± kronikê ext3 (@i %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "@S ma b³êdn± kronikê (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
@@ -868,109 +881,97 @@
 msgid "External @j does not support this @f\n"
 msgstr "Zewnêtrzna @j nie obs³uguje tego systemu plików\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"@S kroniki ext3 ma nieznany typ %N (nie obs³ugiwany).\n"
+"@S kroniki systemu plików ma nieznany typ %N (nie obs³ugiwany).\n"
 "Mo¿liwe, ¿e ta kopia e2fsck jest stara i/lub nie obs³uguje tego formatu\n"
 "kroniki.\n"
 "Mo¿liwe te¿, ¿e @S kroniki jest uszkodzony.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "@S kroniki ext3 jest uszkodzony.\n"
+msgid "@j @S is corrupt.\n"
+msgstr "@S kroniki jest uszkodzony.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
 #, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "@S nie ma flagi has_journal, ale ma kronikê ext3 %s.\n"
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "flaga has_journal @Su jest wyzerowana, ale @j %s istnieje.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "@S ma ustawion± flagê needs_recovery, ale nie ma kroniki.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr "flaga odtworzenia ext3 wyzerowana, ale @j zawiera dane.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "flaga needs_recovery @Su jest wyzerowana, ale @j zawiera dane.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
 msgstr "Wyczy¶ciæ kronikê"
 
-#. @-expanded: Run journal anyway
-#: e2fsck/problem.c:245
-msgid "Run @j anyway"
-msgstr "Wykonaæ zapisy z kroniki"
-
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:250
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"Flaga odtworzenia nie ustawiona w zapasowym @Su,\n"
-"wiêc wykonujê zapisy z kroniki mimo to.\n"
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "@f ma ustawione flagi cech, ale ma wersjê 0 systemu plików. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:255
+#: e2fsck/problem.c:250
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, uprawnienia=%Im, rozmiar=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:260
+#: e2fsck/problem.c:255
 msgid "@I @b #%B (%b) found in @o @i %i.\n"
 msgstr "znaleziono @I @b #%B (%b) w @om i-wê¼le %i.\n"
 
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:265
+#: e2fsck/problem.c:260
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
 msgstr "Ju¿ wyczyszczono @b #%B (%b) znaleziony w @om i-wê¼le %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:270
+#: e2fsck/problem.c:265
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@I @o @i %i w @Su.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:275
+#: e2fsck/problem.c:270
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i w li¶cie @och i-wêz³ów.\n"
 
-#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
-msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "@f ma ustawione flagi cech, ale ma wersjê 0 systemu plików. "
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "@S kroniki ma ustawion± nieznan± flagê tylko do odczytu.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr "@S kroniki ext3 ma ustawion± nieznan± flagê tylko do odczytu.\n"
-
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr "@S kroniki ext3 ma ustawion± flagê nieznanej cechy.\n"
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "@S kroniki ma ustawion± flagê nieznanej cechy.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:295
+#: e2fsck/problem.c:285
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Wersja kroniki nie obs³ugiwana przez ten e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -981,7 +982,7 @@
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -993,7 +994,7 @@
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1003,6 +1004,18 @@
 "Czyszczenie pól spoza @Su kroniki V1...\n"
 "\n"
 
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Wykonaæ zapisy z kroniki"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr ""
+"Flaga odtworzenia nie ustawiona w zapasowym @Su,\n"
+"wiêc wykonujê zapisy z kroniki mimo to.\n"
+
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 #: e2fsck/problem.c:316
@@ -1057,118 +1070,155 @@
 "Dodawanie podpowiedzi dirhash do systemu plików.\n"
 "\n"
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Suma kontrolna deskryptora grupy %g jest b³êdna. "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "Deskryptor grupy %g oznaczony jako nie zainicjowany bez zbioru cech.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "Bitmapa bloku grupy %g nie zainicjowana, ale @i @By jest u¿ywany.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "Deskryptor grupy %g ma b³êdn± liczbê nie u¿ywanych i-wêz³ów %b. "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "@B @bu ostatniej grupy niezainicjowana. "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Transakcja %i kroniki by³a uszkodzona, odtwarzanie przerwano.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Flags test_fs jest ustawiona (i ext4 jest dostêpny). "
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Przebieg 1: Sprawdzanie i-wêz³ów, @bów i rozmiarów\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "@r nie jest @diem. "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r ma ustawiony dtime (zapewne przez stary mke2fs). "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Zarezerwowany @i %i (%Q) ma b³êdne uprawnienia. "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@D @i %i ma zerowy dtime. "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i jest u¿ywany, ale ma ustawiony dtime. "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i jest @diem @z. "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@B @bów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@B i-wêz³ów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "tablica i-wêz³ów grupy %g w %b jest w konflikcie z innym @biem.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@B @bów grupy %g (%b) jest b³êdna. "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@B i-wêz³ów grupy %g (%b) jest b³êdna. "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size wynosi %Is, @s %N. "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_blocks wynosi %Ib, @s %N. "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@I @b #%B (%b) w i-wê¼le %i. "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "@b #%B (%b) nak³ada siê na metadane systemu plików w i-wê¼le %i. "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i ma niedopuszczalne @bi. "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Za du¿o niedopuszczalnych @bów w i-wê¼le %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "@I @b #%B (%b) w i-wê¼le wadliwych @bów. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "I-wêze³ wadliwych @bów ma niedopuszczalne @bi. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Podwójny lub wadliwy @b jest u¿ywany!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Wadliwy @b %b jest u¿ywany jako niebiezpo¶redni @b i-wê¼³a z wadliwym @biem. "
 
@@ -1176,7 +1226,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1190,7 +1240,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1201,7 +1251,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1212,121 +1262,121 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "G³ówny @S (%b) jest na li¶cie wadliwych @bów.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Blok %b z deskryptorów g³ównej grupy jest na li¶cie wadliwych @bów\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Uwaga: w grupie %g @S (%b) jest wadliwy.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Uwaga: kopia deskryptorów grupy %g ma b³êdny @b (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "B³±d programu? @b #%b uznany bez powodu w process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N ci±g³ych @bów w grupie @bów %g dla %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A bufora @bów do przenoszenia %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Przenoszenie w grupie %g %s z %b do %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Przenoszenie w grupie %g %s do %c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Uwaga: nie mo¿na odczytaæ @bu %b z %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Uwaga: nie mo¿na zapisaæ @bu %b do %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A bitmapy i-wêz³ów (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A bitmapy i-wêz³ów (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A informacji o liczniku dowi±zañ (icount): %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A tablicy @dch @bów: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "B³±d podczas przeszukiwania i-wêz³ów (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "B³±d podczas iteracji po @bach w i-wê¼le %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "B³±d podczas zapisu informacji o liczbie i-wêz³ów (@i=%i, liczba=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "B³±d podczas zapisu informacji o @dch @bach (@i=%i, @b=%b, liczba=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "B³±d podczas odczytu i-wêz³a %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i ma ustawion± flagê imagic. "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1336,7 +1386,7 @@
 "flagê nienaruszalno¶ci (immutable) lub dopisywania (append-only). "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
@@ -1344,145 +1394,145 @@
 "kompresji. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Specjalny (@v/gniazdo/potok/dowi±zanie) @i %i ma niezerowy rozmiar. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@i kroniki nie jest u¿ywany, ale zawiera dane. "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "@j nie jest zwyk³ym plikiem. "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i by³ czê¶ci± listy osieroconych i-wêz³ów. "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Znaleziono i-wêz³y, które by³y czê¶ci± uszkodzonej listy sierot. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A struktury refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "B³±d podczas odczytu @bu rozszerzonych atrybutów %b dla i-wêz³a %i. "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i ma b³êdny @b rozszerzonych atrybutów %b. "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "B³±d podczas odczytu @bu rozszerzonych atrybutów %b (%m). "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "@b rozszerzonych atrybutów %b ma liczbê odniesieñ %B, powinno byæ %N. "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "B³±d podczas zapisu @bu rozszerzonych atrybutów %b (%m). "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b rozszerzonych atrybutów %b ma h_blocks > 1. "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "@A @bu rozszerzonych atrybutów %b. "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (kolizja przydzielania). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (b³êdna nazwa). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (b³êdna warto¶æ). "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i jest zbyt du¿y. "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "@b #%B (%b) powoduje, ¿e @d jest zbyt du¿y. "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "@b #%B (%b) powoduje, ¿e plik jest zbyt du¿y. "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "@b #%B (%b) powoduje, ¿e dowi±zanie jest zbyt du¿e. "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i ma ustawion± flagê INDEX_FL na systemie plików bez obs³ugi htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i ma ustawion± flagê INDEX_FL, ale nie jest @diem.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i ma b³êdny g³ówny wêze³.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i ma nie obs³ugiwan± wersjê hasza (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i u¿ywa niekompatybilnej flagi g³ównego wêz³a htree.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i ma zbyt du¿± g³êboko¶æ drzewa (%N)\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1491,50 +1541,124 @@
 "w konflikcie z metadanymi systemu plików. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Tworzenie/odtwarzanie i-wêz³a zmiany rozmiaru nie powiod³o siê: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i ma dodatkowy rozmiar (%IS), co jest b³êdne\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a w i-wê¼le %i ma namelen (%N), co jest b³êdne\n"
 
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "@a w i-wê¼le %i ma rozmiar warto¶ci (%N), co jest b³êdne\n"
-
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a w i-wê¼le %i ma przesuniêcie warto¶ci (%N), co jest b³êdne\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@a w i-wê¼le %i ma @b warto¶ci (%N), co jest b³êdne (musi byæ 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "@a w i-wê¼le %i ma hasza (%N), co jest b³êdne (musi byæ 0)\n"
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "@a w i-wê¼le %i ma rozmiar warto¶ci (%N), co jest b³êdne\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "@a w i-wê¼le %i ma hash (%N), co jest b³êdne\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i to %It, ale wygl±da jakby w rzeczywisto¶ci by³ katalogiem.\n"
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "B³±d podczas czytania po @xach w i-wê¼le %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Nie uda³o siê przej¶æ fragmentów w i-wê¼le %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"@i %i ma @n fragment\n"
+"\t(@b logiczny %c, @n @b fizyczny %b, d³ugo¶æ %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"@i %i ma b³êdny fragment\n"
+"\t(@b logiczny %c, @b fizyczny %b, b³êdna d³ugo¶æ %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "@i %i ma ustawion± flagê EXTENTS_FL na systemie plików bez obs³ugi fragmentów.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "@i %i ma format z fragmentami, ale w superbloku brakuje w³a¶ciwo¶ci EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "@i %i nie ma flagi EXTENT_FL, ale jest w formacie z fragmentami\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Szybkie dowi±zanie symboliczne %i ma ustawion± flagê EXTENT_FL. "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"@i %i ma fragmenty spoza kolejno¶ci\n"
+"\t(@b @b logiczny %c, @b fizyczny %b, d³ugo¶æ %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "@i %i ma b³êdny wêze³ fragmentu (blk %b, lblk %c)\n"
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1546,46 +1670,46 @@
 "Przebieg 1B: Ponowne przeszukiwanie @mch @bów\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@m @b(i) w i-wê¼le %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "B³±d podczas szukania i-wêz³a (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A bitmapy i-wêz³ów (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "B³±d podczas iteracji po @bach w i-wê¼le %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "B³±d podczas poprawiania refcount dla @bu rozszerzonych atrybutów %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Przebieg 1C: Przeszukiwanie katalogów pod k±tem i-wêz³ów z @mmi @bami\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Przebieg 1D: Uzgadnianie @mch @bów\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1594,18 +1718,18 @@
 "  ma %B @mch @bów, dzielonych z %N plikami:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, czas modyfikacji %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<metadane systemu plików>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1615,7 +1739,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1623,314 +1747,315 @@
 "Podwójnie zadeklarowane @bi ju¿ przepisane lub sklonowane.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Nie mo¿na sklonowaæ pliku: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Przebieg 2: Sprawdzanie struktury @dów\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "B³êdny numer i-wêz³a dla '.' w i-wê¼le @du %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E ma b³êdny numer i-wêz³a: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E ma @D/nie u¿ywany @i %Di. "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "@E @L do '.' "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E wskazuje na @i (%Di) po³o¿ony w wadliwym @b.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L do @du %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "@E @L do g³ównego katalogu.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E ma niedopuszczalne znaki w nazwie.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Brakuje '.' w i-wê¼le @du %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Brakuje '..' w i-wê¼le @du %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Pierwszym @eem '%Dn' (@i=%Di) w i-wê¼le @du %i (%p) @s '.'\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Drugim @eem '%Dn' (@i=%Di) w i-wê¼le @du %i @s '..'\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr @F %IF, @s zero.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s zero.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl @F %Id, @s zero.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s zero.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s zero.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) ma b³êdne uprawnienia (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "@i @du %i, @b %B, offset %N: @d uszkodzony\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "@i @du %i, @b %B, offset %N: nazwa pliku zbyt d³uga\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "@i @du %i ma nie przydzielony @b #%B. "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @du '.' w i-wê¼le @du %i nie jest zakoñczony przez NULL\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @du '..' w i-wê¼le @du %i nie jest zakoñczony przez NULL\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) jest @Im @vm znakowym.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) jest @Im @vm @bowym.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E jest powielonym @eem '.'.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E jest powielonym @eem '..'.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "B³±d wewnêtrzny: nie mo¿na znale¼æ dir_info dla %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E ma rec_len %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A struktury icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "B³±d podczas iteracji po @bach @du: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "B³±d podczas odczytu @b %b @du (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "B³±d podczas zapisu @b %b @du (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A nowego @bu @du dla i-wêz³a %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "B³±d podczas zwalniania i-wêz³a %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "@e @du dla '.' jest du¿y. "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "@e @du dla '.' w %p (%i) jest du¿y.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) jest @Im FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) jest @Im gniazdem.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Ustawiono filetype dla @eu '%Dn' w %p (%i) na %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E ma b³êdny filetype (by³ %Dt, powinien byæ %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "@E ma ustawione filetype.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "@E ma nazwê zerowej d³ugo¶ci.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Dowi±zanie symboliczne %Q (@i #%i) jest b³êdne.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "@b rozszerzonych atrybutów dla i-wêz³a %i (%Q) jest b³êdny (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f zawiera du¿e pliki, ale brak flagi LARGE_FILE w @Su.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "@p i-wê¼le @du HTREE %d: brak odwo³añ do wêz³a (%B)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "@p i-wê¼le @du HTREE %d: dwa odwo³ania do wêz³a (%B)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdny minimalny hasz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdny maksymalny hasz\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "B³êdne @h %d (%q). "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p i-wê¼le @du HTREE %d (%q): b³êdny numer @bu %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p i-wê¼le @du HTREE %d: g³ówny wêze³ jest b³êdny\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdny limit (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdny licznik (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma nie uporz±dkowan± tablicê haszuj±c±\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdn± g³êboko¶æ\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p i-wê¼le @du HTREE %d: wêze³ (%B) ma b³êdn± g³êboko¶æ (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Znaleziono podwójny @E. "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1942,7 +2067,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1953,96 +2078,116 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s zero.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Nieoczekiwany @b w i-wê¼le @du HTREE %d (%q)\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@i %Di znaleziony w grupie %g, która ma ustawion± flagê _INONE_UNINIT.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@i %Di znaleziony w grupie %g obszaru nie u¿ywanych i-wêz³ów.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi @F %N, @s zero.\n"
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1298
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Przebieg 3: Sprawdzanie ³±czno¶ci @dów\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1303
 msgid "@r not allocated.  "
 msgstr "@r jest nie przydzielony. "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1308
 msgid "No room in @l @d.  "
 msgstr "Brak miejsca w @du @l. "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1313
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Nie pod³±czony @i @du %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1318
 msgid "/@l not found.  "
 msgstr "Nie znaleziono /@l. "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1323
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "'..' w %Q (%i) jest %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1328
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "B³êdny lub nie istniej±cy /@l. Nie mo¿na pod³±czyæ.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Nie mo¿na rozszerzyæ /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Nie mo¿na pod³±czyæ %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "B³±d podczas szukania /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m podczas próby utworzenia @du /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m podczas próby utworzenia @du /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m podczas tworzenia nowego @bu @du\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m podczas zapisu @bu @du dla /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1368
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "B³±d podczas poprawiania liczby i-wêz³ów w i-wê¼le %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2053,7 +2198,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1378
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2063,75 +2208,75 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "B³±d podczas tworzenia g³ównego @du (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "B³±d podczas tworzenia @du /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1398
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r nie jest @diem; przerwanie.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1403
 msgid "Cannot proceed without a @r.\n"
 msgstr "Nie mo¿na kontynuowaæ bez g³ównego katalogu.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1413
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l nie jest @diem (@i=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1420
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Przebieg 3A: Optymalizacja katalogów\n"
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1425
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr "Tworzenie iteratora dirs_to_hash nie powiod³o siê: %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Tworzenie iteratora dirs_to_hash nie powiod³o siê: %m\n"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr "Optymalizacja katalogu %q (%d) nie powiod³a siê: %m"
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Optymalizacja katalogu %q (%d) nie powiod³a siê: %m\n"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1435
 msgid "Optimizing directories: "
 msgstr "Optymalizacja katalogów: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1452
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Przebieg 4: Sprawdzanie liczników odwo³añ\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@u @i @z %i. "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1462
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@u @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1467
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "licznik odwo³añ i-wêz³a %i wynosi %Il, @s %N. "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1471
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2142,87 +2287,100 @@
 "inode_link_info[%i]=%N, inode.i_links_count=%Il. Powinny byæ takie same!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1481
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Przebieg 5: Sprawdzanie sumarycznych informacji o @gch\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @i @B is not set. "
 msgstr "Wype³nienie na koñcu bitmapy i-wêz³ów nie jest ustawione. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1491
 msgid "Padding at end of @b @B is not set. "
 msgstr "Wype³nienie na koñcu bitmapy @bów nie jest ustawione. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1496
 msgid "@b @B differences: "
 msgstr "Ró¿nice bitmapy @bów: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1516
 msgid "@i @B differences: "
 msgstr "Ró¿nice bitmapy i-wêz³ów: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1536
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "B³êdna liczba wolnych i-wêz³ów dla grupy #%g (%i, naliczono %j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1541
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "B³êdna liczba katalogów dla grupy #%g (%i, naliczono %j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1546
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "B³êdna liczba wolnych i-wêz³ów (%i, naliczono %j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "B³êdna liczba wolnych @bów dla grupy #%g (%b, naliczono %c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1556
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "B³êdna liczba wolnych @bów (%b, naliczono %c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1561
 msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr "B£¡D PROGRAMU: koñce bitmap systemu plików (#%N) (%b, %c) nie zgadzaj± siê z policzonymi koñcami bitmap (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1567
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "B³±d wewnêtrzny: fa³szywy koniec bitmapy (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "B³±d podczas kopiowania w zastêpczej bitmapie i-wêz³ów: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1577
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "B³±d podczas kopiowania w zastêpczej bitmapie @bów: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr "Utworzyæ ponownie kronikê, aby uzyskaæ z powrotem system plików ext3?\n"
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "@b(i) grupy %g s± u¿ywane, ale @g ma flagê BLOCK_UNINIT\n"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "i-wêz³y grupy %g s± u¿ywane, ale @g ma flagê INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Odtworzyæ kronikê"
+
+#: e2fsck/problem.c:1732
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Nie obs³u¿ony kod b³êdu (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1827
 msgid "IGNORED"
 msgstr "ZIGNOROWANO"
 
@@ -2249,73 +2407,33 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "podczas wywo³ania ext2fs_block_iterate dla i-wêz³a %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "podczas wywo³ania ext2fs_adjust_ea_refcount dla i-wêz³a %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Skracanie"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Czyszczenie"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "podczas wywo³ania ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "podczas wywo³ania funkcji iteratora"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "podczas przydzielania bufora i-wêz³ów"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "podczas odczytu tablicy i-wêz³ów (grupy %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "podczas zapisu tablicy i-wêz³ów (grupy %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Przebieg 0: Wykonywanie zamiany bajtów systemu plików\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: system plików musi byæ ¶wie¿o sprawdzony przy u¿yciu fsck\n"
-"i nie podmontowany przed prób± zamiany bajtów w nim.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Zamiana bajtów"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Sk³adnia: %s [-panyrcdfvstDFSV] [-b superblok] [-B rozm_bloku]\n"
+"Sk³adnia: %s [-panyrcdfvtDFV] [-b superblok] [-B rozm_bloku]\n"
 "\t\t[-I bloków_bufora_i-wêz³ów] [-P rozmiar_i-wêz³a]\n"
 "\t\t[-l|-L plik_wadliwych_bloków] [-C fd] [-j zewn-kronika]\n"
 "\t\t[-E rozszerzone-opcje] urz±dzenie\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2334,7 +2452,7 @@
 " -c                   Szukanie wadliwych bloków i dodanie ich do listy\n"
 " -f                   Wymuszenie sprawdzenia nawet \"czystego\" systemu plików\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2351,33 +2469,38 @@
 " -l plik_z³ych_bloków Dodanie do listy wadliwych bloków\n"
 " -L plik_z³ych_bloków Ustawienie listy wadliwych bloków\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %u/%u plików (%0d.%d%% nieci±g³ych), %u/%u bloków\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         liczba i-wêz³ów z blokami ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Histogram g³êboko¶ci fragmentów: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "podczas sprawdzania, czy %s jest podmontowany."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Uwaga! %s jest podmontowany.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s jest podmontowany. "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2385,7 +2508,7 @@
 "Nie mo¿na kontynuowaæ, przerwano.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2400,75 +2523,79 @@
 "mo¿e spowodowaæ POWA¯NE uszkodzenie systemu plików.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Naprawdê kontynuowaæ?"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "sprawdzanie przerwane.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " zawiera system plików z b³êdami"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " nie by³ czysto odmontowany"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr " cechy g³ównego superbloku ró¿ni± siê od kopii zapasowej"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " by³ montowany %u razy bez sprawdzania"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " ma czas ostatniego sprawdzenia systemu plików w przysz³o¶ci"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " przetrwa³ %u dni bez sprawdzania"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", wymuszono sprawdzenie.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: czysty, %u/%u plików, %u/%u bloków"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (sprawdzenie wstrzymane; zasilanie z baterii)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (sprawdzenie po nastêpnym montowaniu)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr "(sprawdzenie za %ld montowañ)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "B£¡D: Nie mo¿na otworzyæ /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "B³êdna wersja EA.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Nieznana opcja rozszerzona: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2477,45 +2604,35 @@
 "B³±d sk³adni w pliku konfiguracyjnym e2fsck (%s, linia %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "B³±d podczas kontroli deskryptora pliku %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "B³êdne informacje dope³niaj±ce deskryptora plików"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Mo¿na podaæ tylko jedn± z opcji -p/-a, -n lub -y."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Opcja -t nie jest obs³ugiwana przez tê wersjê e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr "Zamiana bajtów systemu plików nie wkompilowana w tê wersjê e2fsck\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nie uda³o siê rozwi±zaæ '%s'"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Niekompatybilne opcje nie s± dozwolone przy zamianie bajtów.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Opcje -c oraz -l/-L nie mog± byæ podane jednocze¶nie.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:878
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2524,7 +2641,7 @@
 "E2FSCK_JBD_DEBUG \"%s\" nie jest liczb± ca³kowit±\n"
 "\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:887
 #, c-format
 msgid ""
 "\n"
@@ -2535,38 +2652,43 @@
 "B³êdny argument nieliczbowy dla -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:961
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "B³±d: wersja biblioteki ext2fs jest za stara!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:969
 msgid "while trying to initialize program"
 msgstr "podczas próby inicjalizacji programu"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:980
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tU¿ywane %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:992
 msgid "need terminal for interactive repairs"
 msgstr "interaktywna naprawa wymaga terminala"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1021
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s: %s podczas próby wykonania kopii zapasowej bloków...\n"
+msgstr "%s: %s próba u¿ycia zapasowych bloków...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1023
 msgid "Superblock invalid,"
 msgstr "Superblok b³êdny,"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1024
 msgid "Group descriptors look bad..."
 msgstr "Deskryptory grup wygl±daj± ¼le..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: powracanie do oryginalnego superbloku\n"
+
+#: e2fsck/unix.c:1060
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2577,27 +2699,27 @@
 "(lub superblok systemu plików jest uszkodzony)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1066
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Czy to mo¿e jest partycja zerowej d³ugo¶ci?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1068
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Trzeba mieæ dostêp %s do systemu plików lub byæ rootem\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1073
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Zapewne nie istniej±ce urz±dzenie lub swap?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1075
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "System plików podmontowany lub otwarty na wy³±czno¶æ przez inny program?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1079
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2606,42 +2728,42 @@
 "Dysk zabezpieczony przed zapisem; mo¿na u¿yæ opcji -n aby sprawdziæ\n"
 "urz±dzenie w trybie tylko do odczytu.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1143
 msgid "Get a newer version of e2fsck!"
 msgstr "Potrzeba nowszej wersji e2fsck!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1173
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "podczas sprawdzania kroniki ext3 dla %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1184
 #, c-format
 msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Uwaga: pominiêto odtwarzanie z kroniki z powodu sprawdzania w trybie tylko\n"
 "do odczytu.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1197
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nie mo¿na ustawiæ flag superbloku na %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1203
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "podczas odtwarzania z kroniki ext3 dla %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1228
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s ma w³±czone nie obs³ugiwane cechy:"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1244
 msgid "Warning: compression support is experimental.\n"
 msgstr "Uwaga: obs³uga kompresji jest eksperymentalna.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1249
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2650,30 +2772,25 @@
 "E2fsck skompilowany bez obs³ugi HTREE,\n"
 "\tale system plików %s ma katalogi HTREE.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: kolejno¶æ bajtów w systemie plików ju¿ znormalizowana.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1302
 msgid "while reading bad blocks inode"
 msgstr "podczas odczytu i-wêz³a wadliwych bloków"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1304
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Nie wró¿y to dobrze, ale spróbujê kontynuowaæ...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1330
 msgid "Couldn't determine journal size"
 msgstr "Nie uda³o siê okre¶liæ rozmiaru kroniki"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1333
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Tworzenie kroniki (%d bloków): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2681,12 +2798,12 @@
 "\n"
 "\tpodczas próby utworzenia kroniki"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1343
 #, c-format
 msgid " Done.\n"
 msgstr " Wykonano.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1344
 #, c-format
 msgid ""
 "\n"
@@ -2695,25 +2812,25 @@
 "\n"
 "*** kronika zosta³a ponownie utworzona - system plików to znowu ext3 ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1351
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Restart e2fsck od pocz±tku...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1355
 msgid "while resetting context"
 msgstr "podczas resetowania kontekstu"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1362
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck przerwany.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1367
 msgid "aborted"
 msgstr "przerwano"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1379
 #, c-format
 msgid ""
 "\n"
@@ -2722,12 +2839,12 @@
 "\n"
 "%s: ***** SYSTEM PLIKÓW ZMODYFIKOWANY *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** WYMAGANY RESTART LINUKSA *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1390
 #, c-format
 msgid ""
 "\n"
@@ -2738,39 +2855,43 @@
 "%s: ********** UWAGA: System plików nadal ma b³êdy **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "podczas ustawiania informacji o sumie kontrolnej grupy bloków"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "tTyY"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<t>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (t/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "anulowano!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "tak\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "nie\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2779,7 +2900,7 @@
 "%s? nie\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2788,47 +2909,38 @@
 "%s? tak\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "tak"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "nie"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: niedopuszczalne bloki bitmapy dla %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "odczytu bitmap i-wêz³ów i bloków"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "podczas ponawiania próby odczytu bitmap dla %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "zapisu bitmap bloków"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "zapisu bitmap bloków i i-wêz³ów"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "podczas ponawiania próby zapisu bitmap bloków dla %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "podczas ponownego zapisu bitmap blików i i-wêz³ów dla %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "zapisu bitmap i-wêz³ów"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "podczas ponawiania próby zapisu bitmap i-wêz³ów dla %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2841,52 +2953,59 @@
 "%s: NIEOCZEKIWANA NIESPÓJNO¦Æ; TRZEBA URUCHOMIÆ fsck RÊCZNIE.\n"
 "\t(tzn. bez opcji -a ani -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr "U¿yta pamiêæ: %dk/%dk (%dk/%dk), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "U¿yta pamiêæ: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
-msgstr "U¿yta pamiêæ: %d, "
+msgid "Memory used: %lu, "
+msgstr "U¿yta pamiêæ: %lu, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "czas: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "up³yn±³ czas: %6.f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
-msgstr "podczas odczytu i-wêz³a %ld w %s"
+msgid "while reading inode %lu in %s"
+msgstr "podczas odczytu i-wêz³a %lu w %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
-msgstr "podczas zapisu i-wêz³a %ld w %s"
+msgid "while writing inode %lu in %s"
+msgstr "podczas zapisu i-wêz³a %lu w %s"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "podczas przydzielania bufora zeruj±cego"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr "zakoñczono                          \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Sk³adnia: %s [-b rozm_bloku] [-i plik_wej] [-o plik_wyj] [-svwnf]\n"
-" [-c bloków_naraz] [-p przebiegów] [-t wzór_testowy [-t wzór_testowy [...]]]\n"
-" urz±dzenie [ostatni_blok [pocz±tek]]\n"
+"       [-c bloków_naraz] [-d wsp_opó¼n_miêdzy_odczytami]\n"
+"       [-e maks_b³êdnych_bloków] [-p przebiegów]\n"
+"       [-t wzór_testowy [-t wzór_testowy [...]]]\n"
+"       urz±dzenie [ostatni_blok [pierwszy_blok]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -2895,70 +3014,80 @@
 "%s: Opcje -n i -w wykluczaj± siê wzajemnie.\n"
 "\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "Gotowe w %6.2f%%, minê³o %s"
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr "Testowanie wzorcem losowym: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr "Testowanie wzorcem 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr "podczas przeskakiwania"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Dziwna warto¶æ (%ld) w do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr "podczas ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr "podczas rozpoczynania iteracji po li¶cie wadliwych bloków"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr "podczas przydzielania buforów"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Sprawdzanie bloków od %lu do %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie tylko do odczytu\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Poszukiwanie wadliwych bloków (tylko odczyt): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Zbyt du¿o wadliwych bloków, przerwanie testu\n"
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie odczytu i zapisu\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Od bloku %lu do %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr "Odczyt i porównywanie: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Poszukiwanie wadliwych bloków w trybie z niedestruktywnym zapisem\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Poszukiwanie wadliwych bloków (odczyt i niedestruktywny zapis)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2967,57 +3096,52 @@
 "Otrzymano przerwanie, sprz±tam\n"
 "\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "podczas zapisu testowych danych, blok %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s jest podmontowany; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks wymuszone mimo to. Mam nadziejê, ¿e /etc/mtab siê myli.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr "nie jest bezpiecznie uruchamiaæ badblocks!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s jest najwyra¼niej u¿ywany przez system; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks wymuszone mimo to.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
-msgstr "rozmiar wadliwego bloku - %s"
+msgid "invalid %s - %s"
+msgstr "b³êdny %s - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "nie mo¿na przydzieliæ pamiêci na wzorzec_testowy - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "b³êdy wzorzec_testowy: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "W trybie odczytu-zapisu mo¿na podaæ najwy¿ej jeden wzorzec testowy"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "W trybie samego odczytu nie mo¿na podaæ wzorca_testowego"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3025,88 +3149,91 @@
 "Nie mo¿na okre¶liæ rozmiaru urz±dzenia; trzeba podaæ\n"
 "rozmiar rêcznie\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr "podczas próby okre¶lenia rozmiaru urz±dzenia"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "b³êdna liczba bloków - %s"
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "ostatni blok"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "b³êdny pocz±tkowy blok - %s"
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "pierwszy blok"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "b³êdny pocz±tkowy blok (%d): musi byæ mniejszy ni¿ %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "b³êdny pocz±tkowy blok (%lu): musi byæ mniejszy ni¿ %lu"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr "podczas tworzenia listy wadliwych bloków w pamiêci"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr "podczas dodawania do listy wadliwych bloków w pamiêci"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Przebieg zakoñczony, znaleziono %u wadliwych bloków.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Sk³adnia: %s [-RV] [-+=AacDdijsSu] [-v wersja] pliki...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Sk³adnia: %s [-RVf] [-+=AacDdeijsSu] [-v wersja] pliki...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr "b³êdna wersja - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr "podczas próby stat %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr "Flagi %s ustawiono jako "
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr "podczas odczytu flag %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "Usuwanie flagi extent nie jest obs³ugiwane na %s"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Flagi %s ustawiono jako "
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr "podczas ustawiania flag %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Wersja %s ustawiona jako %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr "podczas ustawiania wersji %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nie mo¿na przydzieliæ zmiennej path w chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr "= jest niekompatybilne z - i +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr "Trzeba u¿yæ '-v', =, - lub +\n"
 
@@ -3115,30 +3242,35 @@
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr "Sk³adnia: %s [-bfhixV] [-ob superblok] [-oB rozm.bloku] urz±dzenie\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Grupa %lu: (Bloki "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Suma kontrolna 0x%04x, %d nie u¿ywanych i-wêz³ów\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %s superblok pod "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "G³ówny"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Zapasowy"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Deskryptory grup pod "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3147,20 +3279,20 @@
 "\n"
 "  Zarezerwowane bloki GDT pod "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr ", Deskryptory grup pod "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Bitmapa bloków pod "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", bitmapa i-wêz³ów pod "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3168,49 +3300,54 @@
 "\n"
 "  Tablica i-wêz³ów pod "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d wolnych bloków, %d wolnych i-wêz³ów, %d katalogów\n"
+"  %u wolnych bloków, %u wolnych i-wêz³ów, %u katalogów%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u nie u¿ywanych i-wêz³ów\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Wolne bloki: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Wolne i-wêz³y: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr "podczas wypisywania listy wadliwych bloków"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:274
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Wadliwe bloki: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
 msgid "while reading journal inode"
 msgstr "podczas odczytu i-wêz³a kroniki"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:300
 msgid "Journal size:             "
 msgstr "Rozmiar kroniki:              "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr "podczas odczytu superbloku kroniki"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:332
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Nie mo¿na znale¼æ magicznych liczb superbloku kroniki"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:336
 #, c-format
 msgid ""
 "\n"
@@ -3229,27 +3366,27 @@
 "Pocz±tek kroniki:             %u\n"
 "Liczba u¿ytkowników kroniki:  %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:349
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "U¿ytkownicy kroniki:          %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nie mo¿na przydzieliæ pamiêci do analizy opcji!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:391
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "B³êdny parametr superblock: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:406
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "B³êdny parametr blocksize: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:417
 #, c-format
 msgid ""
 "\n"
@@ -3272,22 +3409,18 @@
 "\tsuperblock=<numer superbloku>\n"
 "\tblocksize=<rozmiar bloku>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tU¿ywane %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Nie mo¿na znale¼æ poprawnego superbloku systemu plików.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Uwaga: to jest system plików z zamienionymi bajtami\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid ""
 "\n"
@@ -3296,33 +3429,33 @@
 "\n"
 "%s: %s: b³±d podczas czytania bitmap: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Sk³adnia: %s [-rsI] urz±dzenie plik_obrazu\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Nie mo¿na przydzieliæ bufora nag³ówka\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "skrócony zapis (tylko %d bajtów) podczas zapisu nag³ówka obrazu"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "podczas zapisu superbloku"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "podczas zapisu tabeli i-wêz³ów"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "podczas zapisu bitmapy bloków"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "podczas zapisu bitmapy i-wêz³ów"
 
@@ -3346,7 +3479,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: to nie jest system plików ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1670
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Uwaga: etykieta za d³uga, skrócono.\n"
@@ -3361,11 +3494,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: b³±d podczas zapisu superbloku\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Sk³adnia: e2label urz±dzenie [nowa-etykieta]\n"
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Sk³adnia: %s <plik_transakcji> <system_plików>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Nie uda³o siê odczytaæ danych systemu plików\n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "tdb_fetch %s nie powiod³o siê\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Czas montowania systemu plików nie odpowiada %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "UUID systemu plików nie pasuje\n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open %s nie powiod³o siê\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "B³±d podczas sprawdzania, czy %s jest zamontowany.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo powinno byæ uruchamiane tylko na odmontowanym systemie plików\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Nie uda³o siê otworzyæ %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Odtworzono transakcjê rozmiaru %zd w po³o¿eniu %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Nie uda³o siê zapisaæ %s\n"
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3387,37 +3572,37 @@
 "Pominê ten b³±d, ale /etc/fstab nale¿y jak najszybciej poprawiæ.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: nie znaleziono\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Nie ma wiêcej procesów potomnych?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Uwaga... %s dla urz±dzenia %s zakoñczy³ siê sygna³em %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status wynosi %x, to siê nie powinno nigdy zdarzyæ.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Skoñczono z %s (status wyj¶cia %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: B³±d %d podczas wykonywania fsck.%s dla %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3425,39 +3610,39 @@
 "Albo wszystkie, albo ¿aden rodzaj systemu plików z podanych po -t musi byæ\n"
 "poprzedzony 'no' lub '!'.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Nie mo¿na przydzieliæ pamiêci na rodzaje systemów plików\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
 msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr "%s: pominiêto b³êdn± liniê w /etc/fstab: montowanie bind z niezerowym numerem przebiegu fsck\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: nie mo¿na sprawdziæ %s: fsck.%s nie znaleziony\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr "Sprawdzanie wszystkich systemów plików.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--oczekiwanie-- (przebieg %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1077
 msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr "Sk³adnia: fsck [-AMNPRTV] [ -C [ deskryptor ] ] [-t rodzaj-fs] [opcje-fs] [system-plików ...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: za du¿o urz±dzeñ\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: za du¿o parametrów\n"
@@ -3477,52 +3662,54 @@
 msgid "While reading version on %s"
 msgstr "Podczas odczytu wersji %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Sk³adnia: %s [-c|-l nazwa-pliku] [-b rozm.bloku] [-f rozm.fragm.]\n"
 "\t[-i bajtów-na-i-wêze³] [-I rozm-i-wêz³a] [-J opcje-kroniki]\n"
-"\t[-N liczba-i-wêz³ów] [-m procent-rezerw.-bloków] [-o os-twórcy]\n"
+"\t[-G rozmiar metagrupy] [-N liczba-i-wêz³ów]\n"
+"\t[-m procent-rezerw.-bloków] [-o os-twórcy]\n"
 "\t[-g bloków-w-grupie] [-L etykieta-wolumenu] [-M ost.-mont.-katalog]\n"
 "\t[-O cecha[,...]] [-r wersja-fs] [-E opcja-rozszerzona[,...]]\n"
-"\t[-T rodzaj-fs] [-jnqvFSV] urz±dzenie [liczba-bloków]\n"
+"\t[-T rodzaj-fs] [-U UUID] [-jnqvFSV] urz±dzenie [liczba-bloków]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uruchamianie polecenia: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "podczas próby uruchomienia '%s'"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "podczas przetwarzania listy wadliwych bloków z programu"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Wadliwy blok %d w g³ównym superbloku/obszarze deskryptora grup.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Bloki od %u do %u musz± byæ dobre, aby stworzyæ system plików.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Przerwano...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3533,23 +3720,19 @@
 "\twadliwe bloki.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "podczas zaznaczania wadliwych bloków jako u¿ywane"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "zakoñczono                      \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "podczas przydzielania bufora zeruj±cego"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Zapis tablicy i-wêz³ów: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3558,67 +3741,67 @@
 "\n"
 "Nie mo¿na zapisaæ %d bloków w tablicy i-wêz³ów pocz±wszy od %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "podczas tworzenia g³ównego katalogu"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "podczas odczytu g³ównego i-wêz³a"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "podczas ustawiania w³a¶ciciela g³ównego i-wêz³a"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "podczas tworzenia /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "podczas szukania /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "podczas rozszerzania /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "podczas ustawiania i-wêz³a wadliwych bloków"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Brak pamiêci podczas czyszczenia sektorów %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Uwaga: nie mo¿na odczytaæ bloku 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Uwaga: nie mo¿na wyczy¶ciæ sektora %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "podczas inicjalizacji superbloku kroniki"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Zerowanie urz±dzenia kroniki: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "podczas zerowania urz±dzenia kroniki (blok %u, liczba %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "podczas zapisu superbloku kroniki"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3627,96 +3810,96 @@
 "uwaga: %u bloków nie u¿ywanych.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etykieta systemu plików=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Typ OS: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Rozmiar bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Rozmiar fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u i-wêz³ów, %u bloków\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u bloków (%2.2f%%) zarezerwowanych dla superu¿ytkownika\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Pierwszy blok danych=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksymalna liczba bloków systemu plików=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u grup bloków\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u grupa bloków\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloków w grupie, %u fragmentów w grupie\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-wêz³ów w grupie\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Kopie zapasowe superbloku zapisane w blokach: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "B³êdny parametr stride: %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "B³êdny parametr stripe-width: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "B³êdny parametr resize: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Maksymalny rozmiar (resize) musi byæ wiêkszy od rozmiaru systemu plików.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Zmiana rozmiaru w locie nie jest obs³ugiwana przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3729,8 +3912,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Podano b³êdne opcje: %s\n"
@@ -3742,9 +3926,10 @@
 "\tstride=<rozmiar porcji danych RAID na dysku w blokach>\n"
 "\tstripe-width=<RAID stride * liczba dysków danych w blokach>\n"
 "\tresize=<maksymalny rozmiar powiêkszenia w blokach>\n"
+"\tlazy_itable_init=<0 aby wy³±czyæ, 1 aby w³±czyæ>\n"
 "\ttest_fs\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3755,7 +3940,7 @@
 "Uwaga: RAID stripe-width %u nie jest parzyst± wielokrotno¶ci± stride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3764,97 +3949,142 @@
 "B³±d sk³adni w pliku konfiguracyjnym mke2fs (%s, linia %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ustawiona b³êdna opcja systemu plików: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Uwaga! Plik mke2fs.conf nie okre¶la typu systemu plików %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Prawdopodobnie trzeba zainstalowaæ uaktualniony plik mke2fs.conf.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
 #, c-format
 msgid "invalid block size - %s"
 msgstr "b³êdny rozmiar bloku - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1180
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Uwaga: rozmiar bloku %d nie u¿ywalny na wiêkszo¶ci systemów.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1196
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "z³y rozmiar fragmentu - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1202
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Uwaga: fragmenty nie obs³ugiwane. Opcja -f zignorowana\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1209
 msgid "Illegal number for blocks per group"
 msgstr "B³êdna liczba bloków w grupie"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1214
 msgid "blocks per group must be multiple of 8"
 msgstr "liczba bloków w grupie musi byæ wielokrotno¶ci± 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Niedopuszczalny rozmiar flex_bg"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "rozmiar flex_bg musi byæ potêg± 2"
+
+#: misc/mke2fs.c:1238
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "b³êdny stosunek i-wêz³ów %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1255
 msgid "in malloc for bad_blocks_filename"
 msgstr "w malloc dla bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "b³êdny procent zarezerwowanych bloków - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "b³êdny poziom wersji - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "b³êdny rozmiar i-wêz³a - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "b³êdna liczba i-wêz³ów - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "podczas próby otwarcia urz±dzenia kroniki %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Rozmiar bloku urz±dzenia z kronik± (%d) mniejszy od minimalnego %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "U¿ycie rozmiaru bloku urz±dzenia kroniki: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-bajtowe bloki s± zbyt du¿e dla systemu (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr "Uwaga: %d-bajtowe bloki s± zbyt du¿e dla systemu (max %d), wymuszono kontynuacjê\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "b³êdna liczba bloków - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "system plików"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Rozmiar urz±dzenia %s jest zbyt du¿y, aby wyraziæ go w 32 bitach\n"
+"\tprzy u¿yciu rozmiaru bloku %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:374
 msgid "while trying to determine filesystem size"
 msgstr "podczas próby okre¶lenia rozmiaru systemu plików"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3862,7 +4092,7 @@
 "Nie mo¿na okre¶liæ rozmiaru urz±dzenia; rozmiar systemu\n"
 "plików musi byæ podany\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3874,79 +4104,75 @@
 "\tfdiska z powodu zajêtej modyfikowanej partycji. Ponowny odczyt\n"
 "\ttablicy partycji mo¿e wymagaæ rebootu.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "System plików wiêkszy od widocznego rozmiaru urz±dzenia."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Nie uda³o siê przeanalizowaæ listy typów systemów plików\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "Rozwiniêcie fs_types dla mke2fs.conf: "
+
+#: misc/mke2fs.c:1547
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Cechy systemu plików nie obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1554
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Rzadkie superbloki nie s± obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1566
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Kroniki nie s± obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Cechy resize_inode i meta_bg nie s± kompatybilne.\n"
+"Nie mo¿na ich w³±czyæ jednocze¶nie.\n"
+
+#: misc/mke2fs.c:1601
 msgid "while trying to determine hardware sector size"
 msgstr "podczas próby okre¶lenia rozmiaru sprzêtowego sektora"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1658
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr "zarezerwowane bloki do zmiany rozmiaru w locie nie obs³ugiwane na nieci±g³ym systemie plików"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1667
 msgid "blocks per group count out of range"
 msgstr "liczba bloków w grupie spoza zakresu"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
-msgstr ""
-"System plików zbyt du¿y. Obs³ugiwane jest najwy¿ej 2**31-1 bloków\n"
-"\t (8TB przy u¿yciu rozmiaru bloku 4k)."
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Cecha flex_bg nie jest w³±czona, wiêc nie mo¿na okre¶liæ rozmiaru flex_bg"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Uwaga: niektóre j±dra 2.4 nie obs³uguj± rozmiarów bloków powy¿ej 4096\n"
-"\tprzy u¿yciu ext3. Nale¿y u¿yæ -b 4096 je¶li jest to problemem.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1694
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "b³êdny rozmiar i-wêz³a %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Uwaga: %d-bajtowe i-wêz³y bêd± nieu¿ywalne na starszych systemach\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1708
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "zbyt ma³o i-wêz³ów (%llu), zwiêkszyæ wspó³czynnik i-wêz³ów?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1713
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "zbyt du¿o i-wêz³ów (%llu), nale¿y podaæ < 2^32"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1728
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3957,38 +4183,58 @@
 "\tplików o liczbie bloków %lu, nale¿y podaæ wiêkszy wspó³czynnik (-i)\n"
 "\tlub mniejsz± liczbê i-wêz³ów (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Nie mo¿na przydzieliæ pamiêci na nazwê plików tdb\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "podczas próby usuniêcia %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Nadpisywanie istniej±cego systemu plików; mo¿na to wycofaæ poleceniem:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1893
 msgid "while setting up superblock"
 msgstr "podczas ustawiania superbloku"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1952
 #, c-format
 msgid "unknown os - %s"
 msgstr "nieznany os - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2006
 msgid "while trying to allocate filesystem tables"
 msgstr "podczas próby przydzielenia tablic systemu plików"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2037
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "podczas zerowania bloku %u na koñcu systemu plików"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2050
 msgid "while reserving blocks for online resize"
 msgstr "podczas rezerwowania bloków na zmianê rozmiaru w locie"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
 msgid "journal"
 msgstr "kronika"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2073
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Dodano kronikê do urz±dzenia %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2080
 #, c-format
 msgid ""
 "\n"
@@ -3997,17 +4243,27 @@
 "\n"
 "\tpodczas próby dodania kroniki do urz±dzenia %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr "wykonano\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "Pominiêto tworzenie kroniki w trybie super-only\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Tworzenie kroniki (%u bloków): "
+
+#: misc/mke2fs.c:2122
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapis superbloków i podsumowania systemu plików: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2127
 #, c-format
 msgid ""
 "\n"
@@ -4016,7 +4272,7 @@
 "\n"
 "Uwaga, problemy z zapisem superbloków."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2130
 #, c-format
 msgid ""
 "done\n"
@@ -4030,11 +4286,46 @@
 msgid "Usage: mklost+found\n"
 msgstr "Sk³adnia: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Sk³adnia: %s urz±dzenie...\n"
+"\n"
+"Wypisanie informacji o partycjach na ka¿dym podanym urz±dzeniu.\n"
+"Przyk³ad: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Nie mo¿na otworzyæ %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Nie mo¿na pobraæ geometrii %s: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Nie mo¿na pobraæ rozmiaru %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   pocz±tek=%8d rozmiar=%8lu koniec=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Proszê uruchomiæ e2fsck na systemie plików.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:105
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4042,76 +4333,78 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Sk³adnia: %s [-c max-licznik-montowañ] [-e trakt.-b³êdów] [-g grupa]\n"
-"\t[-i odstêp[d|m|w]] [-j] [-J opcje-kroniki] [-l]\n"
-"\t[-m procent-rezerw.-bloków] [-o [^]opcje-montowania[,...]]\n"
-"\t[-r liczba-zarez.-bloków] [-u u¿ytkownik] [-C licznik-montowañ]\n"
-"\t[-L etykieta-wolumenu] [-M ostatnio-mont.-katalog] [-O [^]cecha[,...]]\n"
-"\t[-E opcja-rozszerzona[,...]] [-T czas-ost.-sprawdz.] [-U UUID] urz±dzenie\n"
+"Sk³adnia: %s [-c max_licznik_montowañ] [-e trakt._b³êdów] [-g grupa]\n"
+"\t[-i odstêp[d|m|w]] [-j] [-J opcje_kroniki] [-l]\n"
+"\t[-m procent_rezerw._bloków] [-o [^]opcje_montowania[,...]]\n"
+"\t[-r liczba_zarez._bloków] [-u u¿ytkownik] [-C licznik_montowañ]\n"
+"\t[-L etykieta_wolumenu] [-M ostatnio_mont._katalog] [-O [^]cecha[,...]]\n"
+"\t[-E opcja_rozszerzona[,...]] [-T czas_ost._sprawdz.] [-U UUID]\n"
+"\t[-I nowy_rozmiar_i-wêz³a] urz±dzenie\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr "podczas próby otworzenia zewnêtrznej kroniki"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s nie jest urz±dzeniem kroniki.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
 msgstr "Nie znaleziono superbloku kroniki!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "UUID systemu plików nie znaleziony na urz±dzeniu kroniki.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr "Kronika NIE usuniêta\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr "Kronika usuniêta\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr "podczas odczytu bitmap"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
 msgstr "podczas czyszczenia i-wêz³a kroniki"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
 msgstr "podczas zapisu i-wêz³a kroniki"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ustawiona b³êdna opcja montowania: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:358
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Usuwanie cechy systemu plików '%s' nie jest obs³ugiwane.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:364
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Ustawianie cechy systemu plików '%s' nie jest obs³ugiwane.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 "Flaga has_journal mo¿e byæ wyczyszczona tylko kiedy system plików\n"
-"jest nie podmontowany lub podmontowany tylko do odczytu.\n"
+"jest odmontowany lub podmontowany tylko do odczytu.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4119,11 +4412,30 @@
 "Flaga needs_recovery jest ustawiona. Proszê uruchomiæ e2fsck przed\n"
 "czyszczeniem flagi has_journal.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr "Wy³±czenie flagi flex_bg spowoduje niespójno¶æ systemu plików.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Flaga huge_file mo¿e byæ wyczyszczona tylko kiedy system plików\n"
+"jest odmontowany lub podmontowany tylko do odczytu.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(proszê zrestartowaæ potem system!)\n"
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr "System plików ju¿ ma kronikê.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
@@ -4132,21 +4444,21 @@
 "\n"
 "\tpodczas próby otworzenia kroniki na %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Tworzenie kroniki na urz±dzeniu %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "podczas dodawania systemu plików do kroniki na %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
 msgstr "Tworzenie i-wêz³a kroniki: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4154,65 +4466,85 @@
 "\n"
 "\tpodczas próby utworzenia pliku kroniki"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nie mo¿na przeanalizowaæ podanej daty/czasu: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "b³êdna liczba montowañ - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "b³êdne traktowanie b³êdów - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "b³êdny gid/nazwa grupy - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr "b³êdny odstêp - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "b³êdny procent zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr "-o mo¿e byæ podane tylko raz"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr "-O mo¿e byæ podane tylko raz"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "b³êdna liczba zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "b³êdny uid/nazwa u¿ytkownika - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "b³êdny rozmiar i-wêz³a - %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Rozmiar i-wêz³a musi byæ potêg± dwójki - %s"
+
+#: misc/tune2fs.c:904
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "B³êdny parametr RAID stride: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:919
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "B³êdny parametr RAID stripe-width: %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "B³êdny algorytm haszowania: %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Ustawianie domy¶lnego algorytmu haszowania na %s (%d)\n"
+
+#: misc/tune2fs.c:948
 #, c-format
 msgid ""
 "\n"
@@ -4223,7 +4555,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4235,56 +4568,77 @@
 "\n"
 "Poprawne opcje to:\n"
 "\tstride=<rozmiar porcji danych RAID na dysku w blokach>\n"
-"\tstripe-width=<RAID stride * liczba dysków danych w blokach>\n"
+"\tstripe_width=<RAID stride * liczba dysków danych w blokach>\n"
+"\thash_alg=<algorytm haszowania>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr "System plików %s ma w³±czone nie obs³ugiwane cechy.\n"
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "bloki do przeniesienia"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Aby wycofaæ operacjê tune2fs, proszê wydaæ polecenie\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "Rozmiar i-wêz³a ju¿ wynosi %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Zmniejszanie rozmiaru i-wêz³a nie jest obs³ugiwane\n"
+
+#: misc/tune2fs.c:1594
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Ustawianie maksymalnej liczby montowañ na %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1600
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Ustawianie aktualnego licznika montowañ na %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Ustawianie traktowania b³êdów na %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1610
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Ustawianie gid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1615
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Ustawianie odstêpu pomiêdzy sprawdzeniami na %lu sekund\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1622
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Ustawianie procent zarezerwowanych bloków na %g%% (%u bloków)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "liczba zarezerwowanych bloków zbyt du¿e (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Ustawianie liczby zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1641
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4292,7 +4646,7 @@
 "\n"
 "System plików ju¿ ma rzadkie superbloki.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1648
 #, c-format
 msgid ""
 "\n"
@@ -4301,7 +4655,7 @@
 "\n"
 "Flaga rzadkich superbloków ustawiona. %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1653
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -4309,26 +4663,51 @@
 "\n"
 "Usuwanie superflagi sparse nie jest obs³ugiwane.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1660
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Ustawianie czasu ostatniego sprawdzenia systemu plików na %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1666
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Ustawianie uid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1717
 msgid "Invalid UUID format\n"
 msgstr "B³êdny format UUID-a\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "Rozmiar i-wêz³a mo¿na zmieniæ tylko na niezamontowanym systemie plików.\n"
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Zmiana rozmiaru i-wêz³a nie jest obs³ugiwana dla systemów plików\n"
+"z w³±czon± cech± flex_bg.\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"B³±d podczas zmiany rozmiaru i-wêz³a.\n"
+"Nale¿y uruchomiæ e2undo w celu wycofania zmian w systemie plików.\n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Ustawianie rozmiaru i-wêz³a na %lu\n"
+
+#: misc/tune2fs.c:1762
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Ustawianie rozmiaru stride na %d\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1767
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Ustawianie szeroko¶ci stripe na na %d\n"
@@ -4389,7 +4768,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4402,7 +4781,7 @@
 "\tsize=<rozmiar kroniki w megabajtach>\n"
 "\tdevice=<urz±dzenie kroniki>\n"
 "\n"
-"Rozmiar kroniki musi byæ pomiêdzy 1024 a 102400 blokami systemu plików.\n"
+"Rozmiar kroniki musi byæ pomiêdzy 1024 a 10240000 blokami systemu plików.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4449,7 +4828,7 @@
 
 #: resize/extent.c:196
 msgid "# Extent dump:\n"
-msgstr "# Zrzut extent:\n"
+msgstr "# Zrzut fragmentu:\n"
 
 #: resize/extent.c:197
 #, c-format
@@ -4461,64 +4840,83 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Sk³adnia: %s [-d flagi-¶ledzenia] [-f] [-F] [-p] urz±dzenie [nowy-rozm]\n"
+"Sk³adnia: %s [-d flagi_¶ledzenia] [-f] [-F] [-M] [-P] [-p] urz±dzenie [nowy_rozm]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Rozszerzanie tablicy i-wêz³ów"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Relokowanie bloków"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Przeszukiwanie tablicy i-wêz³ów"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Uaktualnianie odwo³añ do i-wêz³ów"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Przenoszenie tablicy i-wêz³ów"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Nieznany przebieg?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Pocz±tkowy przebieg %d (maksymalny = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr "podczas otwierania %s"
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "podczas pobierania informacji stat dla %s"
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "b³êdny rozmiar systemu plików - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinacja cech flex_bg i\n"
+"\t!resize_inode nie jest obs³ugiwana przez resize2fs.\n"
 
-#: resize/main.c:353
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Przybli¿ony minimalny rozmiar systemu plików: %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "B³êdny nowy rozmiar: %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "Nowy rozmiar jest mniejszy ni¿ minimalny (%u)\n"
+
+#: resize/main.c:402
 msgid "Invalid stride length"
 msgstr "B³êdna d³ugo¶æ stride"
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4529,7 +4927,7 @@
 "Za¿±dano nowego rozmiaru %u bloków.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4538,7 +4936,7 @@
 "System plików ju¿ ma wielko¶æ %u bloków. Nie ma nic do roboty!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4547,12 +4945,26 @@
 "Proszê uruchomiæ najpierw 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "Zmiana rozmiaru systemu plików %s na %u (%dk) bloków.\n"
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
 msgstr "podczas próby zmiany rozmiaru %s"
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Proszê uruchomiæ 'e2fsck -fy %s', aby naprawiæ system plików\n"
+"po przerwanej operacji zmiany rozmiaru.\n"
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4561,24 +4973,75 @@
 "System plików na %s ma teraz %u bloków.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "podczas próby skrócenia %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "System plików %s jest zamontowany pod %s; wymagana zmiana rozmiaru w locie\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Zmniejszanie w locie z %u na %u nie jest obs³ugiwane.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "System plików nie obs³uguje zmiany rozmiaru w locie"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "podczas próby otwarcia punktu montowania %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Brak uprawnieñ do zmiany rozmiaru systemu plików"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "J±dro nie obs³uguje zmiany rozmiaru w locie"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Podczas sprawdzania obs³ugi zmiany rozmiaru w locie"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Wykonywanie zmiany rozmiaru w locie %s na %u (%dk) bloków.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Podczas próby rozszerzenia ostatniej grupy"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Podczas próby dodania grupy #%d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "System plików na %s jest zamontowany pod %s, zmiana rozmiaru w locie nie jest obs³ugiwana na tym systemie.\n"
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "liczba i-wêz³ów (%llu) musi byæ mniejsza ni¿ %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "zarezerwowane bloki"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "bloki do przeniesienia"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr "bloki metadanych"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Nigdy siê nie powinno zdarzyæ: i-wêze³ zmiany rozmiaru uszkodzony!\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index d0f8f57..66a9b76 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index c8a9942..15d945e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,9 +1,9 @@
 # Swedish messages for e2fsprogs.
-# Copyright © 2003, 2005, 2006, 2008 Theodore Tso (msgids)
+# Copyright © 2003, 2005, 2006, 2008, 2009 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008.
+# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008, 2009.
 #
-# $Revision: 1.39 $
+# $Revision: 1.54 $
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -65,10 +65,10 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.7\n"
+"Project-Id-Version: e2fsprogs 1.41.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-07 22:28+0100\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-07-29 22:33+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
@@ -76,7 +76,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Dåligt block %u utanför giltigt intervall; ignoreras.\n"
@@ -90,10 +90,10 @@
 msgstr "vid läsning av inoden för dåliga block"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr "vid försök att öppna %s"
@@ -103,7 +103,7 @@
 msgid "while trying popen '%s'"
 msgstr "vid försök att använda popen \"%s\""
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "vid läsning i listan över dåliga block från fil"
 
@@ -116,30 +116,30 @@
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Varning: otillåtet block %u hittat i inoden får dåliga block.  Tömt.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Fel vid läsning av block %lu (%s) vid %s.  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Fel vid läsning av block %lu (%s).  "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Ignorera fel"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Framtvinga omskrivning"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Fel vid skrivning av block %lu (%s) vid %s.  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Fel vid skrivning av block %lu (%s).  "
@@ -187,21 +187,21 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Användning: %s [-F] [-I inodbuffertblock] enhet\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "vid öppning av %s för utskrivning"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr "vid försök att skriva ut %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
 msgstr "vid öppning av inodsökning"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
 msgstr "när nästa inod hämtades"
 
@@ -210,31 +210,31 @@
 msgid "%u inodes scanned.\n"
 msgstr "%u inoder genomsökta.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "läser journalsuperblock\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: inget giltigt journalsuperblock hittades\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: journalen för kort\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: återhämtar journalen\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: återhämtar inte journalen i skrivskyddat läge\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "vid försök att återöppna %s"
@@ -255,291 +255,300 @@
 # knappast översättningar med.  Så den bästa lösningen är nog att låta
 # systemet som sådant finnas kvar, men inte använda det alls i översatta
 # meddelanden.
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "autökat attribut"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Afel vid allokering"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bblock"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bbitkarta"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "ckomprimera"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Ckonflikt med något annat fs @b"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "iinod"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Iotillåten"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jjournal"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Draderad"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "dkatalog"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "epost"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "Epost \"%Dn\" i %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "ffilsystem"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fför inod %i (%Q) är"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggrupp"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "hHTREE katalog-inod"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lär en länk"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mflerfaldigt ianspråkstagna"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "nogiltig"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oföräldralös"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pproblem i"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "rrotinod"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "sskulle varit"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssuperblock"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "ulös"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "venhet"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xutsträckning"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "znollängds"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<Inod noll>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<Inoden för dåliga block>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<ACL-indexinoden>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<ACL-datainoden>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<Uppstartsprograminoden>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<Inoden för återhämtning av borttagna kataloger>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<Gruppidentifierarinoden>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<Journalinoden>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Reserverad inod 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Reserverad inod 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "normal fil"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "katalog"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "teckenenhet"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "blockenhet"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "namngivet rör"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "symbolisk länk"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "uttag (socket)"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "okänd filtyp med typ 0%o"
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr "karta över flerfaldigt i anspråkstagna inoder"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
-msgstr "internt fel; kan inte hitta dup_blk för %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "internt fel: kan inte hitta dup_blk för %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr "återvände från clone_file_block"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:776
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "internt fel; det gick inte att slå upp EA-blockpost för %u"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:788
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "internt fel: det gick inte att slå upp EA-inodpost för %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
 msgid "reading directory block"
 msgstr "läser katalogblock"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "karta över använda inoder"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "kataloginodskarta"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "inodskarta över reguljära filer"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "karta över använda block"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
 msgstr "öppnar inodsökning"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
 msgstr "hämtar nästa inod från sökning"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1123
 msgid "Pass 1"
 msgstr "Pass 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1180
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "läser indirektblock för inod %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1224
 msgid "bad inode map"
 msgstr "karta över dåliga inoder"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1246
 msgid "inode in bad block map"
 msgstr "inod i karta över dåliga block"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1266
 msgid "imagic inode map"
 msgstr "imagic inodskarta"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1293
 msgid "multiply claimed block map"
 msgstr "karta över flerfaldigt i anspråkstagna block"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1392
 msgid "ext attr block map"
 msgstr "karta över block för utökade attribut"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): förväntade %6lu fick fys %6lu (blkant %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "blockbitkarta"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "inodbitkarta"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "inodstabell"
 
@@ -547,27 +556,31 @@
 msgid "Pass 2"
 msgstr "Pass 2"
 
-#: e2fsck/pass3.c:79
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Kan inte fortsätta."
+
+#: e2fsck/pass3.c:76
 msgid "inode done bitmap"
 msgstr "inod klar bitkarta"
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr "Max minne"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr "Pass 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
 msgstr "bitkarta för upptäckt av inodsslingor"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr "Pass 4"
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr "Pass 5"
 
@@ -858,11 +871,11 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd stödjer inte funktionen filtyp.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr "Superblock har en ogiltig ext3-journal (inod %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "Superblock har en ogiltig journal (inod %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
@@ -884,107 +897,97 @@
 msgid "External @j does not support this @f\n"
 msgstr "Extern journal stödjer inte detta filsystem\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Ext3-journalsuperblock är av okänd typ %N (ej stött).\n"
+"Filsystemsjournalsuperblock är av okänd typ %N (ej stött).\n"
 "Det är troligt att ditt exemplar av e2fsck är gammalt och/eller inte\n"
 "stödjer detta journalformat.\n"
 "Det är också möjligt att journalsuperblocket är trasigt.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "Ext3-journalsuperblock är trasigt.\n"
+msgid "@j @S is corrupt.\n"
+msgstr "Journalsuperblock är trasigt.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
 #, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "superblock har inte har-journal-flagga, men har ext3-journal %s.\n"
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "Superblocksflagga har_journal är nollställd, men en journal %s finns.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr "superblock har ext3-behöver-rättas-flagga satt, men har ext3-journal %s.\n"
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "Superblockflagga behöver_rättas är satt, men ingen journal finns.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr "ext3-rättningsflagga är nollställd, men journal har data.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "Superblocksflagga behöver_rättas är nollställd, men journal har data.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
 msgstr "Töm journal"
 
-#. @-expanded: Run journal anyway
-#: e2fsck/problem.c:245
-msgid "Run @j anyway"
-msgstr "Kör journal ändå"
-
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:250
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr "Rättningsflagga inte satt i reservsuperblock, så kör journal ändå.\n"
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "filsystemet har funktionsflaggor satta, men är ett revision 0-filsystem.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:255
+#: e2fsck/problem.c:250
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "%s föräldralös inod %i (uid=%Iu, gid=%Ig, rättighet=%Im, storlek=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:260
+#: e2fsck/problem.c:255
 msgid "@I @b #%B (%b) found in @o @i %i.\n"
 msgstr "Ogiltigt block nummer %B (%b) hittat i föräldralös inod %i.\n"
 
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:265
+#: e2fsck/problem.c:260
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
 msgstr "Redan tömt block nummer %B (%b) hittat i föräldralös inod %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:270
+#: e2fsck/problem.c:265
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "Ogiltig föräldralös inod %i i superblock.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:275
+#: e2fsck/problem.c:270
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "Ogiltig inod %i i föräldralös inodlista.\n"
 
-#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
-msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "filsystemet har funktionsflaggor satta, men är ett revision 0-filsystem.  "
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "Journalsuperblock har okänd skrivskyddad funktionsflagga satt.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr "Ext3-journalsuperblock har okänd skrivskyddad funktionsflagga satt.\n"
-
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr "Ext3-journalsuperblock har okänd inkompatibel funktionsflagga satt.\n"
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "Journalsuperblock har okänd inkompatibel funktionsflagga satt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:295
+#: e2fsck/problem.c:285
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Journalversion stöds inte av denna e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -995,7 +998,7 @@
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -1007,7 +1010,7 @@
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1017,6 +1020,16 @@
 "Tömmer fält efter V1-journalsuperblock ...\n"
 "\n"
 
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Kör journal ändå"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Rättningsflagga inte satt i reservsuperblock, så kör journal ändå.\n"
+
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 #: e2fsck/problem.c:316
@@ -1073,118 +1086,155 @@
 "Lägger till dirhash-tips till filsystem.\n"
 "\n"
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "kontrollsumma för gruppbeskrivare %g är ogiltig.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "gruppbeskrivare %g är markerad oinitierad utan att egenskapen är satt.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "blockbitkarta för grupp %g oinitierad men inodsbitkarta används.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "gruppbeskrivare %g har ogiltigt antal oanvända inoder %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Sista gruppblockbitkarta oinitierad.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Journaltransaktion %i var trasig, återuppspelningen avbröts.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Flaggan test_fs är satt (och ext4 är tillgänligt).  "
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Pass 1: Kontrollerar inoder, block och storlekar\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "Rootinod är inte en katalog.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "rotinod har dtid satt (förmodligen på grund av gammal mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Reserverad inod %i %Q har ogiltiga rättigheter.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "Raderad inod %i har dtid noll.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Inod %i används, men har dtid satt.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "Inod %i är en nollängds katalog.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "Grupp %g:s blockbitkarta vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "Grupp %g:s inodbitkarta vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "Grupp %g:s inodtabell vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "Grupp %g:s blockbitkarta (%b) år felaktig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "Grupp %g:s inodbitkarta (%b) är felaktig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Inod %i, i_storlek är %Is, skulle varit %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Inod %i, i_block är %Ib, skulle varit %N.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "Ogiltigt block nr. %B (%b) i inod %i.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "Block nr. %B (%b) överlappar filsystemmetadata i inod %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Inod %i har ogiltiga block.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "För många ogiltiga block i inod %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "Ogiltigt block nummer %B (%b) i felaktig blockinod.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Felaktig blockinod har ogiltiga block.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Duplicerat eller felaktigt block används!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Felaktigt block %b använt som indirektblock för inod för dåliga block.  "
 
@@ -1192,7 +1242,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1206,7 +1256,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1217,7 +1267,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1228,121 +1278,121 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Det primära superblocket (%b) är på listan över dåliga block.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Block %b i de primära gruppbeskrivarna är på listan över dåliga block\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Varning: Grupp %g:s superblock (%b) är dåligt.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Varning: Grupp %g:s kopia av gruppbeskrivarna har ett dåligt block (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "Programmeringsfel?  Block nr. %b tas i anspråk utan anledning i process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "Fel vid allokering av %N konsekutiva block i blockgrupp %g för %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "Fil vid allokering av blockbuffert för relokering av %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Relokerar grupp %g:s %s från %b till %c ...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Relokerar grupp %g:s %s till %c ...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Varning: kunde inte läsa block %b av %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Varning: kunde inte skriva block %b av %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
 msgid "@A @i @B (%N): %m\n"
 msgstr "Fel vid allokering av inodbitkarta (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "Fel vid allokering av blockbitkarta (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "Fel vid allokering av icount-länkinformation: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Fel vid allokering av katalogblockvektor: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Fel vid genomsökning av inoder (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Fel vid iterering över block i inod %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Fel vid lagring av inodsräknarinformation (inod=%i, antal=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "Fel vid lagring av katalogblocksinformation (inod=%i, block=%b, antal=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Fel vid läsning av inod %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Inod %i har flaggan imagic satt.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1352,151 +1402,151 @@
 "oföränderlig eller endast tillägg satt."
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr "Inod %i har kompressionsflagga satt på filsystem utan kompressionsstöd.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Specialinod (enhet/uttag (socket)/fifo) %i har nollskild storlek.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Journalinod används, men innehåller data.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "Journal är inte en vanlig fil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Inod %i var med i listan över föräldralösa inoder.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Inoder som var med i trasig lista över föräldralösa inoder hittad.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "Fel vid allokering av referensräknarstruktur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Fel vid läsning av utökade attribut-block %b för inod %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Inod %i har ett felaktigt utökade attribut-block %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Fel vid läsning av utökade attribut-block %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "Utökade attribut-block %b har referensräknare %B, skall vara %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Fel vid skrivning av utökade attribut-block %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Utökade attribut-block %b har h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "Fel vid allokering av block för utökade attribut %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Utökade attribut-block %b är trasigt (allokeringskollision).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Utökade attribut-block %b är trasigt (ogiltigt namn).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Utökade attribut-block %b är trasigt (ogiltigt värde).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "Inod %i är för stor.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "Block nr. %B (%b) får katalog att bli för stor.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "Block nr. %B (%b) får fil att bli för stor.  "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "Block nr. %B (%b) får symlänk att bli för stor.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "Inod %i har flagga INDEX_FL satt på filsystem utan stöd för htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "Inod %i har flagga INDEX_FL satt men är inte en katalog.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "HTREE kataloginod %i har en ogiltig rotnod.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "HTREE katalog-inod %i har en hashversion som inte stöds (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "HTREE katalog-inod %i använder en inkompatibel htree rotnodsflagga.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "HTREE katalog-inod %i har ett träddjup (%N) som är för stort\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1505,50 +1555,124 @@
 "med filsystemsmetadata.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Misslyckades att återskapa storleksändringsinod: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "Inod %i har en extra storlek (%IS) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "Utökat attribut i inod %i har ett namelen (%N) som är ogiltig\n"
 
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "Utökat attribut i inod %i har ett värdestorlek (%N) som är ogiltig\n"
-
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "Utökat attribut i inod %i har en värdeposition (%N) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "Utökat attribut i inod %i har ett värdeblock (%N) som är ogiltigt (måste vara 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "Utökat attribut i inod %i har en kontrollsumma (%N) som är ogiltig (måste vara 0)\n"
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "Utökat attribut i inod %i har ett värdestorlek (%N) som är ogiltig\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "Utökat attribut i inod %i har hash (%N) som är ogiltig\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "inod %i är en %It men det ser ut som det egentligen är en katalog.\n"
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Fel vid läsning över utsträckningsträd i inod %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Misslyckades att iterera över utsträckningar i inod %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"inod %i har en ogiltig utsträckning\n"
+"\t(logiskt block %c, ogiltigt fysiskt block %b, längd %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"inod %i har en ogiltig utsträckning\n"
+"\t(logiskt block %c, fysiskt block %b, ogiltig längd %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "Inod %i har flaggan EXTENTS_FL satt på filsystemet utan stöd för utsträckningar.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "inod %i är i utsträckningsformat, men superblocket saknar egenskapen EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "inod %i saknar EXTENT_FL, men är i utsträckningsformat\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Snabb symlänk %i har EXTENT_FL satt.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"inod %i har utsträckningar i oordning\n"
+"\t(ogiltigt logiskt block %c, fysiskt block %b, längd %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "inod %i har en ogiltig utsträckningsnod (blk %b, lblk %c)\n"
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1559,46 +1683,46 @@
 "Pass 1B: Söker igen efter block som används flera gånger\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Flerfaldigt ianspråkstagna block i inod %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Fel vid genomsökning av inoder (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Fel vid allokering av inodbitkarta (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Fel vid iterering över block i inod %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Fel vid justering av referensräknare för externa attribut-block %b (inod %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Pass 1C: Söker kataloger efter inoder med flerfaldigt ianspråkstagna block\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Pass 1D: Förlikar flerfaldigt ianspråkstagna block\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1607,18 +1731,18 @@
 "  har %B flerfaldigt ianspråkstagna block, delade med %N filer:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (inod nr. %i, modifieringstid %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<filsystemsmetadata>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1628,7 +1752,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1636,318 +1760,319 @@
 "Flerfaldig ianspråkstagna block redan överlåtna eller klonade.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Kunde inte klona fil: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Pass 2: Kontrollerar katalogstruktur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Ogiltigt inodsnummer för \".\" i kataloginod %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "Post \"%Dn\" i %p (%i) har ogiltigt inodsnummer: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "Post \"%Dn\" i %p (%i) har raderad/oanvänd inod %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "Post \"%Dn\" i %p (%i) är en länk till \".\"  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "Post \"%Dn\" i %p (%i) pekar på inod (%Di) som finns i ett trasigt block.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "Post \"%Dn\" i %p (%i) är en länk till katalog %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "Post \"%Dn\" i %p (%i) är en länk till rotinoden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "Post \"%Dn\" i %p (%i) har ogiltiga tecken i namnet.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "\".\" saknas i kataloginod %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "\"..\" saknas i kataloginod %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "Första post \"%Dn\" (inod=%Di) i kataloginod %i (%p) skulle varit \".\"\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "Andra post \"%Dn\" (inod=%Di) i kataloginod %i skulle varit \"..\"\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "i_faddr för inod %i (%Q) är %IF, skulle varit noll.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl för inod %i (%Q) är %If, skulle varit noll.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl för inod %i (%Q) är %Id, skulle varit noll.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Inod %i (%Q) har ogiltiga rättigheter (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "Kataloginod %i, block %B, förskjutning %N: katalog trasig\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "Kataloginod %i, block %B, förskjutning %N: filnamn för långt\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "Kataloginod %i har ett oallokerat block nr. %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "\".\"-katalogpost i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "\"..\"-katalogpost i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Inod %i (%Q) är en ogiltig teckenenhet.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Inod %i (TQ är en ogiltig blockenhet.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "Post \"%Dn\" i %p (%i) är duplicerad \".\"-post.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "Post \"%Dn\" i %p (%i) är duplicerad \"..\"-post.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Internt fel: kunde inte hitta dir_info för %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 "Post \"%Dn\" i %p (%i) har rec_len %Dr, skulle varit %N.\n"
 "\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "Fel vid allokering av icount-struktur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Fel vid iterering över katalogblock: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Fel vid läsning av katalogblock %b (inod %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Fel vid skrivning av katalogblock %b (inod %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Fel vid allokering av nytt katalogblock för inod %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Fel vid deallokering av inod %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "Katalogpost för \".\" är stor.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Katalogpost för \".\" i %p (%i) är stor.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Inod %i (%Q) är en ogiltig FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Inod %i (%Q) är ett ogiltigt uttag (socket).\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Sätter filtyp för post \"%Dn\" i %p (%i) till %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "Post \"%Dn\" i %p (%i) har felaktig filtyp (var %Dt, skulle varit %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "Post \"%Dn\" i %p (%i) har filtyp satt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "Post \"%Dn\" i %p (%i) har nollängdsnamn.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Symlänk %Q (inod nr. %i) är ogiltig.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "Utökat attribut-block för inod %i (%Q) är ogiltigt (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "Filsystem innehåller stora filer, men saknar flaggan LARGE_FILE i superblock.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "Problem i HTREE-katalognod %d: nod (%B) inte refererad\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "Problem i HTREE-katalognod %d: nod (%B) refererad två gånger\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "Problem i HTREE-katalognod %d: nod (%B) har felaktig min-hash\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "Problem i HTREE-katalognod %d: nod (%B) inte felaktig max-hash\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "Ogiltig HTREE-katalognod %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "Problem i HTREE-katalognod %d (%q): felaktigt blocknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "Problem i HTREE-katalognod %d: ogiltig rotnod.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "Problem i HTREE-katalognod %d (%q): nod (%B) har ogiltig gräns (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr ""
 "Problem i HTREE-katalognod %d (%q): nod (%B) har ogiltigt antal (%N)\n"
 "\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "Problem i HTREE-katalognod %d (%q): not (%B) har en oordnat hash-tabell\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "Problem i HTREE-katalognod %d (%q): node (%B) har ogiltigt djup\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "Problem i HTREE-katalognod %d (%q): node (%B) har ogiltigt djup (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Duplicerad post \"%Dn\" i %p (%i) hittad.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1959,7 +2084,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1970,96 +2095,116 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi för inod %i (%Q) är %N, skulle varit noll.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Oväntat block i HTREE-katalog %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "Post \"%Dn\" i %p (%i) refererar inod %Di i grupp %g där _INODE_UNINIT är satt.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "Post \"%Dn\" i %p (%i) refererar inod %Di funnen i oanvänt inodsområde i grupp %g.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi för inod %i (%Q) är %N, skulle varit noll.\n"
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1298
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Pass 3: Kontrollerar katalogförbindelser\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1303
 msgid "@r not allocated.  "
 msgstr "Rotinod inte allokerad.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1308
 msgid "No room in @l @d.  "
 msgstr "Ingen plats i lost+found-katalog.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1313
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Oförbunden kataloginod %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1318
 msgid "/@l not found.  "
 msgstr "/lost+found inte funnen.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1323
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "\"..\" i %Q (%i) är %P (%j), skulle varit %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1328
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr "Felaktig eller ej existerande /lost+found.  Kan inte återföbinda.\n"
+msgstr "Felaktig eller ej existerande /lost+found.  Kan inte återansluta.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Kunde inte expandera /lost+found: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Kunde inte återförbinda %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Fel vid försök att hitta /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_block: %m ved försök att skapa /lost+found-katalog\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_inode: %m vid försök att skapa /lost+found-katalog\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_block: %m när nytt katalogblock skapades\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_block: %m vid skrivning av katalogblocket för /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1368
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Fel vid justering av inodräknare på inod %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2070,7 +2215,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1378
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2080,75 +2225,75 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Fel vid skapande av rotkatalog (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Fel vid skapande av /lost+found-katalog (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1398
 msgid "@r is not a @d; aborting.\n"
 msgstr "Rotinod är inte en katalog; avbryter.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1403
 msgid "Cannot proceed without a @r.\n"
 msgstr "Kan inte fortsätta utan en rotinod.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1413
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found är inte en katalog (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1420
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Pass 3A: Optimerar kataloger\n"
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1425
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr "Misslyckades att skapa dirs_to_hash-iterator: %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Misslyckades att skapa dirs_to_hash-iterator: %m\n"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr "Misslyckades att optimera katalog %q (%d): %m"
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Misslyckades att optimera katalog %q (%d): %m\n"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1435
 msgid "Optimizing directories: "
 msgstr "Optimerar kataloger: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1452
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Pass 4: Kontrollerar referensräknare\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "Lös nollängdsinod %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1462
 #, c-format
 msgid "@u @i %i\n"
 msgstr "lös inod %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1467
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Inod %i referensräknare är %Il, skulle varit %N.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1471
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2159,89 +2304,102 @@
 "inod_link_info[%i] är %N, inod.i_links_count är %Il.  De skulle vara samma!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1481
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Pass 5: Kontrollerar gruppsammanfattningsinformation\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @i @B is not set. "
 msgstr "Utfyllnad vid slutet av inodsbitkarta är inte satt. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1491
 msgid "Padding at end of @b @B is not set. "
 msgstr "Utfyllnad vid slutet av blockbitkarta är inte satt. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1496
 msgid "@b @B differences: "
 msgstr "Blockbitkarteskillnader: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1516
 msgid "@i @B differences: "
 msgstr "Inodsbitkarteskillnader: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1536
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Antal fria inoder är fel för grupp nr. %g (%i, räknade=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1541
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Katalogantal fel för grupp nr. %g (%i, räknade=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1546
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Antal fria inoder är fel (%i, räknade=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Antal fria block är fel för grupp nr. %g (%b, räknade=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1556
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Antal fria block är fel (%b, räknade=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1561
 msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr ""
 "PROGRAMMERINGSFEL: filsystem (nr. %N) bitkartas ändpunkter (%b, %c) stämmer\n"
 "inte med beräknade bitkarteändpunkter (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1567
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Internt fel: fuskar till slut på bitkarta (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Fel vid kopiering av ersättningsinodskarta: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1577
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Fel vid inkopiering av ersättningsbitkarta: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr "Återskapa journal för att göra filsystemet till ext3 igen?\n"
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "block i grupp %g används men gruppen är markerad BLOCK_UNINIT\n"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "inoder i grupp %g används men gruppen är markerad INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Återskapa journal"
+
+#: e2fsck/problem.c:1732
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Ej hanterad felkod (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1827
 msgid "IGNORED"
 msgstr "IGNORERAT"
 
@@ -2268,73 +2426,33 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "vid anrop av ext2fs_block_iterate för inod %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "vid anrop av ext2fs_adjust_ea_refcount för inod %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Kapar"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Tömmer"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "vid anrop av ext2fs_block_iterate"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "vid anrop av iteratorfunktion"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "vid allokering av inodbuffert"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "vid läsning av inodstabell (grupp %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "vid skrivning av inodstabell (grupp %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Pass 0: Byteväxlar filsystem\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: filsystemet måste vara nykontrollerat med fsck och\n"
-"inte monterat före försök att byteväxla det.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Byteväxling"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Användning: %s [-panyrcdfvstDFSV] [-b superblock] [-B blockstorlek]\n"
+"Användning: %s [-panyrcdfvtDFV] [-b superblock] [-B blockstorlek]\n"
 "\t\t[-I inodbuffertblock] [-P processinodsstorlek]\n"
 "\t\t[-l|-L dåliga_block_fil] [-C fd] [-j extern_journal]\n"
 "\t\t[-E utökade-flaggor] enhet\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2353,7 +2471,7 @@
 " -c                   Leta efter dåliga block och lägg till dem i listan\n"
 " -f                   Framtvinga kontroll även om filsystemet är markerat rent\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2370,33 +2488,38 @@
 " -l dåliga_block_fil  Lägg till till listan över dåliga block\n"
 " -L dåliga_block_fil  Ange lista över dåliga block\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %u/%u filer (%0d.%d%% ej sammanhängande), %u/%u block\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         antal inoder med ind/dind/tind-block: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Histogram över utsträckningars djup: "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "när det avgjordes om %s är monterat."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Varning!  %s är monterat.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s är monterat.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2404,7 +2527,7 @@
 "Kan inte fortsätta, avbryter.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2419,75 +2542,79 @@
 "ALLVARLIG skada på filsystemet.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Vill du verkligen fortsätta"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "kontroll avbruten.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " innehåller ett filsystem med fel"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " var inte fläckfritt avmonterat"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr " det primära superblockets egenskaper skiljer från reservens"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " har monterats %u gånger utan att kontrolleras"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " har tidpunkten för senaste filsystemskontroll i framtiden"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " har inte kontrollerats på %u dagar"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", kontroll framtvingad.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: rent, %u/%u filer, %u/%u block"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (kontroll senarelagd; på batteri)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (kontrollera efter nästa montering)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrollera om %ld monteringar)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FEL: Kunde inte öppna /dev/null (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Ogiltig EA-version.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Okänd utökad flagga: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2496,45 +2623,35 @@
 "Syntaxfel i e2fsck:s konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fel vid validering av filidentifierare %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Ogiltig filidentifierare för förloppsinformation"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Endast en av flaggorna -p/-a, -n eller -y kan anges."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Flaggan -t stödjs inte i denna version av e2fsck.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr "Byteväxling av filsystem är inte inkompilerat i denna version av e2fsck\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan inte hitta \"%s\""
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Inkompatibla flaggor inte tillåtna vid byteväxling.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Flaggorna -c och -l/-L kan inte båda användas på samma gång.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:878
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2543,7 +2660,7 @@
 "E2FSCK_JBD_DEBUG \"%s\" är inte ett heltal\n"
 "\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:887
 #, c-format
 msgid ""
 "\n"
@@ -2554,38 +2671,43 @@
 "Ogiltigt ickenumerikst argument till -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:961
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fel: ext2fs-bibliotekversion inaktuell!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:969
 msgid "while trying to initialize program"
 msgstr "vid försök att initiera program"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:980
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tAnvänder %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:992
 msgid "need terminal for interactive repairs"
 msgstr "behöver terminal för interaktiva reparationer"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1021
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s försöker med reservblock ...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1023
 msgid "Superblock invalid,"
 msgstr "Superblocket är ogiltigt,"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1024
 msgid "Group descriptors look bad..."
 msgstr "Gruppbeskrivarna ser trasiga ut ..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: går tillbaka till orginalsuperblock\n"
+
+#: e2fsck/unix.c:1060
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2596,27 +2718,27 @@
 "(Eller så är filsystemets superblock trasigt)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1066
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Kan detta vara en nollängdspartition?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1068
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Du måste ha %s-åtkomst till filsystemet eller vara root\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1073
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Kanske inte existerar eller växlingsenhet?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1075
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Filsystemet monterat eller öppnat exklusivt av ett annat program?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1079
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2625,40 +2747,40 @@
 "Skrivskyddad disk; använd flaggan -n för att göra en läsningskontroll\n"
 "av enheten.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1143
 msgid "Get a newer version of e2fsck!"
 msgstr "Hämta en nyare version av e2fsck!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1173
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "vid kontroll av ext3-journal för %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1184
 #, c-format
 msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr "Varning: hoppar över journalåterhämtning eftersom en läsningskontroll av filsystem görs.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1197
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "kan inte sätta superblocksflaggor på %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1203
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "vid återhämtning av ext3-journal för %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1228
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s har funktioner som inte stöds:"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1244
 msgid "Warning: compression support is experimental.\n"
 msgstr "Varning: komprimeringsstöd är experimentellt.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1249
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2667,30 +2789,25 @@
 "E2fsck är inte kompilerat med HTREE-stöd,\n"
 "\tmen filsystem %s har HTREE-kataloger.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: Filsystemets byteordning redan normaliserad.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1302
 msgid "while reading bad blocks inode"
 msgstr "vid läsning av inod för dåliga block"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1304
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Detta bådar inte gott, men vi skall försöka att fortsätta ...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1330
 msgid "Couldn't determine journal size"
 msgstr "Det gick inte att avgöra journalstorlek"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1333
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Skapar journal (%d block): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2698,12 +2815,12 @@
 "\n"
 "\tvid försök att skapa journal"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1343
 #, c-format
 msgid " Done.\n"
 msgstr " Klar.\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1344
 #, c-format
 msgid ""
 "\n"
@@ -2712,25 +2829,25 @@
 "\n"
 "*** journalen har återskapats - filsystemet är nu ext3 igen ***\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1351
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Startar om e2fsck från början ...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1355
 msgid "while resetting context"
 msgstr "vid återställning av omgivning"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1362
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck inställd.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1367
 msgid "aborted"
 msgstr "avbruten"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1379
 #, c-format
 msgid ""
 "\n"
@@ -2739,12 +2856,12 @@
 "\n"
 "%s: ***** FILSYSTEMET MODIFIERADES *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** STARTA OM LINUX *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1390
 #, c-format
 msgid ""
 "\n"
@@ -2755,39 +2872,43 @@
 "%s: ********** VARNING: Filsystemet har fortfarande fel **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "när kontrollsummeinformation för blockgrupp sattes"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "yYjJ"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "nN"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<j>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<n>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (j/n)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "inställd!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "ja\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "nej\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2796,7 +2917,7 @@
 "%s? nej\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2805,47 +2926,38 @@
 "%s? ja\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "ja"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "nej"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: ogiltiga bitkarteblock för %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "läser inod- och blockbitkartor"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "vid upprepat försök att läsa bitkarta för %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "läsning av blockbitkartor"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "skiver block- och inodsbitkartor"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "vid upprepat försök att skriva blockbitkartor för %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "vid omskrivning av block- och inodsbitkartor för %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "skrivning av inodbitkartor"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "vid upprepat försök att skriva inodbitkartor för %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2858,52 +2970,59 @@
 "%s: OVÄNTAD INKONSEKVENS; KÖR fsck MANUELLT.\n"
 "\t(d.v.s., utan flaggorna -a eller -p)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr "Använt minne: %d k/%d k (%d k/%d k), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Använt minne: %lu k/%lu k (%lu k/%lu k), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
-msgstr "Använt minne: %d, "
+msgid "Memory used: %lu, "
+msgstr "Använt minne: %lu, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "tid: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "förfluten tid: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
-msgstr "vid läsning av inod %ld i %s"
+msgid "while reading inode %lu in %s"
+msgstr "när inod %lu i %s lästes"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
-msgstr "vid skrivning av inod %ld i %s"
+msgid "while writing inode %lu in %s"
+msgstr "när inod %lu i %s skrevs"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "vid allokering av nollställningsbuffert"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
 msgstr "klar                                \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Användning: %s [-b blockstorlek] [-i infil] [-o utfile] [-svwnf]\n"
-" [-c block_åt_gången] [-p antal_pass] [-t testmönster [-t testmönster [...]]]\n"
-" enhet [sista_block [start_block]]\n"
+"            [-c block_åt_gången] [-d fördröjningsfaktor mellan läsningar]\n"
+"            [-e max_dåliga_block] [-p antal_pass]\n"
+"            [-t testmönster [-t testmönster [...]]]\n"
+"            enhet [sista_block [första_block]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -2912,70 +3031,80 @@
 "%s: Flaggorna -n och -w är ömsesidigt uteslutande.\n"
 "\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "%6.2f %% klar, %s har gått"
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr "Testar med slumpmönster: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr "Testar med mönster 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr "vid sökning"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Underligt värde (%ld) i do_read\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr "vid ext2fs_sync_device"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr "vid början av iteration över lista av dåliga block"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr "vid allokering av buffertar"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Kontrollerar block %lu till %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Letar efter dåliga block i skrivskyddat läge\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Letar efter dåliga block (skrivskyddad test): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "För många dåliga block, avbryter testet\n"
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Letar efter dåliga block i läs-skriv-läge\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Från block %lu till %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr "Läser och jämför: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Letar efter dåliga block i ickeförstörande läs-skriv-läge\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Letar efter dåliga block (ickeförstörande läs-skriv-test)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2983,57 +3112,52 @@
 "\n"
 "Avbrott fångat, rensar upp\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "vid testdataskrivning, block %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s är monterat, "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr "badblocks framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr "det är inte säkert att köra badblocks!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s används uppenbarligen av systemet; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks framtvingat ändå.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
-msgstr "felaktig blockstorlek - %s"
+msgid "invalid %s - %s"
+msgstr "ogiltig %s - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "kunde inte allokera minne för testmönster - %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "ogiltig testmönster: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Högst ett testmönster får anges i skrivskyddat läge"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Slumpvis testmönster är inte tillåtet i skrivskyddat läge"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3041,88 +3165,91 @@
 "Kunde inte avgöra enhetsstorlek; du måste ange\n"
 "storleken manuellt\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr "vid försök att avgöra enhetsstorlek"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "felaktigt blockantal - %s"
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "sista block"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "felaktigt startblock - %s"
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "första block"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "felaktigt startblock (%d): måste vara mindre än %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "felaktigt startblock (%lu): måste vara mindre än %lu"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr "när lista över dåliga block i minnet skapades"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr "när tillägg gjordes till lista i minnet över dåliga block gjordes"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Pass avslutat, %u dåliga block hittade.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Användning: %s [-RV] [-+=AacDdijsSu] [-v version] filer...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Användning: %s [-RVf] [-+=AacDdeijsSu] [-v version] filer...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr "felaktig version - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr "vid försök att ta status på %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr "Flaggor på %s satta som "
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr "vid läsning av flaggor på %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "Att nollställa utsträckningsflaggan stöds inte på %s"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Flaggor på %s satta som "
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr "vid sättning av flaggor på %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version av %s satt som %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr "vid sättning av version på %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Kunde inte allokera sökvägsvariabel i chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr "= är inkompatibelt med - och +\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr "Måste använda \"-v\", =, - eller +\n"
 
@@ -3131,30 +3258,35 @@
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
 msgstr "Användning: %s [-bfhixV] [-ob superblock] [-oB blockstorlek] enhet\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Grupp %lu: (Block "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Kontrollsumma 0x%04x, oanvända inoder %d\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %ssuperblock vid "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Primärt "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Reserv"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Gruppbeskrivare vid "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3163,20 +3295,20 @@
 "\n"
 "  Reserverade GDT-block vid "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Gruppbeskrivare vid "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "  Blockbitkarta vid "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", Inodsbitkarta vid "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3184,49 +3316,54 @@
 "\n"
 "  Inodstabell vid "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d fria block, %d fria inoder, %d kataloger\n"
+"  %u fria block, %u fria inoder, %u kataloger%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u oanvända inoder\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Fria block: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Fria inoder: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr "vid utskrift av lista över dåliga block"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:274
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Dåliga block: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
 msgid "while reading journal inode"
 msgstr "vid läsning av journalinod"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:300
 msgid "Journal size:             "
 msgstr "Journalstorlek:           "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr "vid läsning av journalsuperblock"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:332
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Kunde inte hitta journalsuperblockets magiska tal"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:336
 #, c-format
 msgid ""
 "\n"
@@ -3245,27 +3382,27 @@
 "Journalstart:             %u\n"
 "Journalens användarantal: %u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:349
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Journalanvändare:         %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Kunde inte allokera minne för att tolka flaggor!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:391
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Ogiltig superblockparameter: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:406
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Ogiltig blockstorleksparameter: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:417
 #, c-format
 msgid ""
 "\n"
@@ -3288,22 +3425,18 @@
 "\tsuperblock=<superblocknummer>\n"
 "\tblocksize=<blockstorlek>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tAnvänder %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Kunde inte hitta giltigt filsystemssuperblock.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Observera: Detta är ett byteväxlat filsystem\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid ""
 "\n"
@@ -3312,33 +3445,33 @@
 "\n"
 "%s: %s: fel vid läsning av bitkartor: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Användning: %s [-rsI] enhet avbildsfil\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Kunde inte allokera huvudbuffert\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "kort skrivning (endast %d byte) för skrivning av bildhuvud"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "vid skrivning av superblock"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "vid skrivning av inodtabell"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "vid skrivning av blockbitkarta"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "vid skrivning av inodbitkarta"
 
@@ -3362,7 +3495,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: inte ett ext2-filsystem\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1670
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varning: etikett för lång, avkortar.\n"
@@ -3377,11 +3510,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: fel vid skrivning av superblock\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Användning: e2label enhet [ny-etikett]\n"
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Användning: %s <transaktionsfil> <filsystem>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Misslyckades att läsa filsystemdata \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Misslyckades med tdb_fetch %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Filsystemets monterings tid stämmer inte med %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "Filsystemets UUID stämmer inte med \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open misslyckades %s\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Fel när det avgjordes om %s är monterat.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo skall endast köras på omonterade filsystem\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Det gick inte att öppna öppna %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Återuppspelning av transaktion med storlek %zd på plats %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Misslyckades skriva %s\n"
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3404,37 +3589,37 @@
 "\tbör rätta din /etc/fstab-fil så snart du kan.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: inte funnen\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: wait: Inga fler barnprocesser?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr "Varning... %s för enhet %s avlutade med singal %d.\n"
+msgstr "Varning... %s för enhet %s avslutade med signal %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: status är %x, skulle aldrig inträffa.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "Avslutade med %s (slutstatus %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Fel %d när fsck.%s kördes för %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3442,39 +3627,39 @@
 "Antingen alla eller inga av filsystemstyperna som ges till -t måste ha\n"
 "prefix \"no\" eller \"!\".\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Kunde inte allokera minne för filsystemtyper\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
 msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr "%s: hoppar över felaktig rad i /etc/fstab: bind-montering med fsck-passnummer som inte är noll\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: kan inte kontrollera %s: fsck.%s finns inte\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr "Kontrollerar alla filsystem.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--väntar-- (pass %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1077
 msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr "Användning: fsck [-AMNPRTV] [ -C [ fh ] ] [-t fstyp] [fs-flaggor] [filsys ...]\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: för många enheter\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: för många argument\n"
@@ -3494,52 +3679,54 @@
 msgid "While reading version on %s"
 msgstr "Vid läsning av version på %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Användning: %s [-c|-l filnamn] [-b blockstorlek] [-f fragmentstorlek]\n"
 "\t[-i byte-per-inod] [-I inodstorlek] [-J journalflaggor]\n"
-"\t[-N antal-inoder] [-m reservade-block-procent] [-o skapar-os]\n"
+"\t[-G metagruppstorlek] [-N antal-inoder]\n"
+"\t[-m reservade-block-procent] [-o skapar-os]\n"
 "\t[-g block-per-grupp] [-L volymetikett] [-M senast-monterad-katalog]\n"
 "\t[-O funktion[,...]] [-r fs-revision] [-E utökad-flagga[,...]]\n"
-"\t[-T fs-typ] [-jnqvFSV] enhet [blockantal]\n"
+"\t[-T fs-typ] [-U UUID] [-jnqvFSV] enhet [blockantal]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Kör kommando: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "vid försök att köra \"%s\""
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "vid bearbetning av lista över dåliga block från program"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Block %d i primär superblock-/gruppbeskrivare är felaktigt.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Block %u till %u måste vara bra för att bygga ett filsystem.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Avbryter...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3550,23 +3737,19 @@
 "\tdåliga block.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "vid markering av dåliga block som använda"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "klar                            \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "vid allokering av nollställningsbuffert"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Skriver inodstabeller: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3575,67 +3758,67 @@
 "\n"
 "Kunde inte skriva %d block i inodstabell som börjar vid %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "vid skapande av rotkatalog"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "vid läsning av rotinod"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "vid inställning av rotinodens ägarskap"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "vid skapande av /lost+found"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "vid sökning efter /lost+found"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "vid utvidgning av /lost+found"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "vid inställning av inod för dåliga block"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Slut på mine vid radering av sektorer %d-%d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varning: kune inte läsa block 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varning: kunde inte radera sektor %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "vid initiering av journalsuperblock"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Nollställer journalenhet: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "vid nollställning av journalenhet (block %u, antal %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "vid skrivning av journalsuperblock"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3644,96 +3827,96 @@
 "varning: %u block oanvända.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Filsystemsetikett=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "OS-typ: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u inoder, %u block\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u block (%2.2f%%) reserverade för superanvändaren\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Första datablock=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximalt antal filsystemsblock=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blockgrupper\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blockgrupp\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u block per grupp, %u fragment per grupp\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inoder per grupp\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblockkopior lagrade på block: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ogiltig stride-parameter: %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ogiltig remsbreddsparameter: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ogiltig storleksändringsparameter: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Storleksändringens maximum måste vara större än filsystemets storlek.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Storleksändring under drift stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3746,8 +3929,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Felaktiga flaggor angivna: %s\n"
@@ -3759,10 +3943,11 @@
 "\tstride=<RAID-datadstycken per disk i block>\n"
 "\tstripe-width=<RAID-kliv · datadiskar i block>\n"
 "\tresize=<maximal storleksändringsstorlek i block>\n"
-"\n"
+"\tlazy_itable_init=<0 för att avaktivera, 1 för att aktivera>\n"
 "\ttest_fs\n"
+"\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3773,7 +3958,7 @@
 "Varning: RAID-remsbredd %u är inte en jämn multipel av klivet %u.\n"
 "\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3782,99 +3967,144 @@
 "Syntaxfel i mke2fs konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ogiltig filsystemsflagga satt: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Varning!  Din mke2fs.conf-fil definierar inte filsystemtypen %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Du behöver förmodligen installera en uppdaterad mke2fs.conf-fil.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
 #, c-format
 msgid "invalid block size - %s"
 msgstr "felaktig blockstorlek - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1180
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Varning: blockstorlek %d är inte användbar på de flesta system.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1196
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "ogiltig fragmentstorlek - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1202
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Varning: fragment stöds inte.  Ignorerar -f-flagga\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1209
 msgid "Illegal number for blocks per group"
 msgstr "Ogiltigt antal för block per grupp"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1214
 msgid "blocks per group must be multiple of 8"
 msgstr "block per grupp måste vara en multipel av 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Felaktigt tal för flex_bg-storlek"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "storlek på flex_bg måste vara en multipel av 2"
+
+#: misc/mke2fs.c:1238
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ogiltig inodsförhållande %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1255
 msgid "in malloc for bad_blocks_filename"
 msgstr "i malloc för bad_blocks_filename"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ogiltig procentandel reserverade block - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "felaktigt versionsnivå - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ogiltig inodsstorlek - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "felaktigt antal inoder - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "vid försök att öppna journalenhet %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Journalenhetens blockstorlek (%d) mindre än minsta blockstorlek %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Använder journalenhetens blockstorlek: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-byteblock för stort för systemet (max %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr "Varning: %d-byteblock för stort för systemet (max %d), tvingas fortsätta\n"
 
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "felaktigt blockantal - %s"
+
 # "Ett" för att detta sätts in i annan sträng där det föregås av "a".
 # Även "journal" kan sättas in på samma plats.  Felrapporterat.
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "ett filsystem"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Storlek på enhet %s är för stor för att uttryckas med 32 bitar\n"
+"\tanvänder en blockstorlek på %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:374
 msgid "while trying to determine filesystem size"
 msgstr "vid försök att avgöra filsystemstorlek"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3882,7 +4112,7 @@
 "Kunde inte avgöra enhetsstorlek; du måste ange\n"
 "storleken på filsystemet\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3894,79 +4124,75 @@
 "\tav en modifierad partition används och är i bruk.  Du kan behöva\n"
 "\tstarta om för att läsa om din partitionstabell.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Filsystem större än synbar enhetsstorlek."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Misslyckades tolka fs-typlista\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "upplösning av fs_types för mke2fs.conf: "
+
+#: misc/mke2fs.c:1547
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Filsystemsfunktioner som inte stöds med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1554
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Glesa superblock stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1566
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Journaler stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Egenskaperna resize_inode och meta_bg är inte kompatibla\n"
+"De kan inte båda aktiveras samtidigt.\n"
+
+#: misc/mke2fs.c:1601
 msgid "while trying to determine hardware sector size"
 msgstr "vid försök att avgöra hårdvarusektorstorlek"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1658
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr "reserverade block för storleksändring under drift stöds inte på icke-glesa filsystem"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1667
 msgid "blocks per group count out of range"
 msgstr "antal block per grupp utanför giltigt intervall"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
-msgstr ""
-"Filsystemet är för stort.  Högst 2**31-1 block\n"
-"\t (8 TB om blockstorlek 4 kB används) stöds för närvarande."
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Funktionen flex_gb är inte aktiverad, så fleg_bg-storleg kan inte anges"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Varning: en del 2.4-kärnor stödjer inte blockstorlekar större än 4096\n"
-"        med ext3.  Använd -b 4096 om detta är ett problem för dig.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1694
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ogiltig inodstorlek %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Varning: %d-byteinoder inte användbara på äldre system\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1708
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "för många inoder (%llu), öka inodsförhållandet?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1713
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "för många inoder (%llu), ange < 2^32 inoder"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1728
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3977,40 +4203,60 @@
 "\tfilsystem med %lu block, ange högre inodsförhållande (-i)\n"
 "\teller lägre inodantal (-N).\n"
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Kunde inte allokera minne för tdb-filnamn\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "vid försök att ta bort %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Skriver över existerande filsystem, detta kan göras ogjort med kommandot:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1893
 msgid "while setting up superblock"
 msgstr "vid uppsättning av superblock"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1952
 #, c-format
 msgid "unknown os - %s"
 msgstr "okänt os - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2006
 msgid "while trying to allocate filesystem tables"
 msgstr "vid försök att allokera filsystemstabeller"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2037
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "vid nollställning av block %u vid slutet av filsystem"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2050
 msgid "while reserving blocks for online resize"
 msgstr "vid reservation av block för storleksändring under drift"
 
 # "En" för att detta sätts in i annan sträng där det föregås av "a".
 # Även "filsystem" kan sättas in på samma plats.  Felrapporterat.
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
 msgid "journal"
 msgstr "en journal"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2073
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Lägger till journal till enhet %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2080
 #, c-format
 msgid ""
 "\n"
@@ -4019,17 +4265,27 @@
 "\n"
 "\tvid försök att lägga till journal till enhet %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr "klar\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "Hoppar över att skapa jornal i läget endast super\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Skapar journal (%u block): "
+
+#: misc/mke2fs.c:2122
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Skriver superblock och filsystemsbokföringsinformation: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2127
 #, c-format
 msgid ""
 "\n"
@@ -4038,7 +4294,7 @@
 "\n"
 "Varning, hade problem att skriva ut superblock."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2130
 #, c-format
 msgid ""
 "done\n"
@@ -4052,11 +4308,46 @@
 msgid "Usage: mklost+found\n"
 msgstr "Användning: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Användning:  %s enhet...\n"
+"\n"
+"Skriv ut partitionsinformationen för varje angiven enhet.\n"
+"Till exempel: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Kan inte öppna %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Kan inte få geometrin för %s: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Kan inte få storlek av %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   start=%8d storlek=%8lu slut=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Kör e2fsck på filsystemet.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:105
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4064,76 +4355,78 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Användning: %s [-c max_antal_monteringar] [-e felbeteende] [-g grupp]\n"
 "\t[-i intervall[d|m|w]] [-j] [-J journalflaggor] [-l]\n"
 "\t[-m reserverade_block_procent] [-o [^]monteringsflaggor[,...]]\n"
 "\t[-r antal_reserverade_block] [-u användare] [-C antal_monteringar]\n"
 "\t[-L volymetikett] [-M senast_monterad_katalog] [-O [^]funktion[,...]]\n"
-"\t[-E utökad-flagga[,...]] [-T senaste_kontroll_tid] [-U UUID] enhet\n"
+"\t[-E utökad-flagga[,...]] [-T senaste_kontrolltid] [-U UUID]\n"
+"\t[ -I ny_inodstorlek ] enhet\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr "vid försök att öppna extern journal"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s är inte en journalenhet.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
 msgstr "Journalsuperblock inte funnet!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Filsystems UUID inte funnet på journalenhet.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr "Journal INTE borttagen\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr "Journal borttagen\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr "vid läsning av bitkartor"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
 msgstr "vid nollställning av journalinod"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
 msgstr "vid skrivning av journalinod"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ogiltig monteringsflagga satt: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:358
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Nollställning av filsystemsfunktion \"%s\" stöds inte.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:364
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Att sätta filsystemsfunktion \"%s\" stöds inte.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 "Flaggan has_journal får endast nollställas när filsystemet är\n"
 "omonterat eller monterat enbart för läsning.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4141,11 +4434,32 @@
 "Flaggan needs_recovery är satt.  Kör e2fsck före flaggan has_journal\n"
 "nollställs.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Att nollställa flaggan flex_bg skulle få filsystemet att bli\n"
+"inkonsistent.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Flaggan huge_file får endast nollställas när filsystemet är\n"
+"omonterat eller monterat enbart för läsning.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(och starta om efteråt!)\n"
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr "Filsystemet har redan en journal.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
@@ -4154,21 +4468,21 @@
 "\n"
 "\tvid försök att öppna journal på %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Skapar journal på enhet %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "vid tillägg av filsystem till journal på %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
 msgstr "Skapar journalinod: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4176,65 +4490,85 @@
 "\n"
 "\tvid försök att skapa journalfil"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kunde inte tolka datum-/tidsangivelse: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "felaktigt antal monteringar - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "felaktigt felbeteende - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "felaktigt gid/gruppnamn - %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr "felaktigt intervall - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "felaktig andel reserverade block - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr "-o får endast anges en gång"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr "-O får endast anges en gång"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "felaktigt antal reserverade block - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "felagtigt uid/användarnamn - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "felaktig inodsstorlek - %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Inodsstorlek måste vara en multipel av två- %s"
+
+#: misc/tune2fs.c:904
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ogiltig RAID-kliv: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:919
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ogiltig RAID-remsbredd: %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Ogiltig hash-algoritm: %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Sätter standardhashalgoritm till %s (%d)\n"
+
+#: misc/tune2fs.c:948
 #, c-format
 msgid ""
 "\n"
@@ -4245,7 +4579,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4257,56 +4592,77 @@
 "\n"
 "Giltiga utökade flaggor är:\n"
 "\tstride=<RAID-styckestorlek per disk i block>\n"
-"\tstripe-width=<RAID-kliv·datadiskar i block>\n"
+"\tstripe_width=<RAID-kliv·datadiskar i block>\n"
+"\thash_alg=<hash-algoritm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr "Filsystem %s har funktioner som inte stöds aktiverade.\n"
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "block att flytta"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"För att göra tune2fs-operationen ogjord, kör kommandot\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "Inodsstorleken är redan %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Att krympa inodsstorleken stöds inte.\n"
+
+#: misc/tune2fs.c:1594
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Sätter max antal monteringar till %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1600
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Sätter aktuellt antal monteringar till %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Sätter felbeteende till %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1610
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Sätter gid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1615
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Sätter intervall mellan kontroller till %lu sekunder\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1622
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Sätter procent reserverade block till %g%% (%u block)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "antal reserverade block för stort (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Sätter antal reserverade block till %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1641
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4314,7 +4670,7 @@
 "\n"
 "Filsystemet har redan glesa superblock.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1648
 #, c-format
 msgid ""
 "\n"
@@ -4323,7 +4679,7 @@
 "\n"
 "Flaggan för glesa superblock satt.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1653
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -4331,26 +4687,51 @@
 "\n"
 "Nollställning av superflaggan gles stöds inte.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1660
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Sätter tidpunkt för senaste filsystemskontroll till %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1666
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Sätter uid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1717
 msgid "Invalid UUID format\n"
 msgstr "Ogiltigt UUID-format\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "Inodsstorleken får endast ändras när filsystemet är omonterat.\n"
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+"Att ändra inodsstorlek stöds inte för filsystem med funktionen flex_bg\n"
+"aktiverad.\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Fel när storleken på inoder ändrades.\n"
+"Kör e2undo för att göra filsystemsändringarna ogjorda. \n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Sätter inodsstorlek till %lu\n"
+
+#: misc/tune2fs.c:1762
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Sätter klivstorlek till %d\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1767
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Sätter remsbredd till %d\n"
@@ -4414,7 +4795,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4427,7 +4808,7 @@
 "\tsize=<journalstorlek i megabyte>\n"
 "\tenhet=<journalenhet>\n"
 "\n"
-"Journalstorleken måste vara mellan 1024 och 102400 filsystemsblock.\n"
+"Journalstorleken måste vara mellan 1024 och 10240000 filsystemsblock.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4485,64 +4866,83 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Användning: %s [-d felsökningflaggor] [-f] [-F] [-p] enhet [ny-storlek]\n"
+"Användning: %s [-d felsökningflaggor] [-f] [-F] [-M] [-P] [-p] enhet [ny_storlek]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Utökar inodstabellen"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Flyttar om block"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Söker igenom inodstabell"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Uppdaterar inodsreferenser"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Flyttar inodstabell"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Okänt pass?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Börja pass %d (max = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr "när %s öppnades"
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "när statusinformation för %s hämtades"
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "felaktig filsystemsstorlek - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinationen av funktionerna flex_bg och\n"
+"\t!resize_inode stöds inte av resize2fs.\n"
 
-#: resize/main.c:353
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Uppskattad minsta storlek på filsystemet: %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Ogiltig ny storlek: %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "Ny storlek mindre än minimum (%u)\n"
+
+#: resize/main.c:402
 msgid "Invalid stride length"
 msgstr "Ogiltig stride-längd"
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4553,7 +4953,7 @@
 "De begärde en ny storlek på %u block.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4562,7 +4962,7 @@
 "Filsystemet är redan %u block långt.  Inget behöver göras!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4571,12 +4971,26 @@
 "Kör \"e2fsck -f %s\" först.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "Ändrar storlek på filsystemet på %s till %u (%d k) block.\n"
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
 msgstr "vid försök att ändra storlek på %s"
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Kör \"e2fsck -fy %s\" för att laga filsystemet\n"
+"efter den avbrutna storleksändringen.\n"
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4585,24 +4999,75 @@
 "Filsystemet på %s är nu %u block långt.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "vid försök att korta av %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Filsystem på %s är monterat på %s, on-line-storleksändring krävs\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Att krympa uppkopplat från %u till %u stöds inte.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Filsystemet stödjer inte storleksändring uppkopplat"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "vid försök att öppna monteringspunkt %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Rättighet att ändra storlek på filsystem nekas"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Kärnan stödjer inte storleksändring uppkopplat"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Vid kontroll av stöd för storleksändring uppkopplat"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Utför en storleksändring on-line av %s till %u (%d k) block.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Vid försök att utöka den sista gruppen"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Vid försök att öppna grupp nr. %d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Filsystemet på %s är monterat på %s, och storleksändring on-line stöds inte på detta system.\n"
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "inoder (%llu) måste vara mindre än %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "reserverade block"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "block att flytta"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr "metadatablock"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Skulle aldrig inträffa: storleksändringsinoden trasig!\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index fdedef2..19f7ede 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 1fb9c62..f73e370 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -64,7 +64,7 @@
 msgstr ""
 "Project-Id-Version: e2fsprogs 1.40\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
 "PO-Revision-Date: 2006-04-07 00:22+0300\n"
 "Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -74,7 +74,7 @@
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: KBabel 1.9.1\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Hatalı blok %u kapsamdışı; yoksayıldı.\n"
@@ -88,10 +88,10 @@
 msgstr "- hatalı bloklar düğümü okunurken hata oluştu"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1037 e2fsck/unix.c:1120 misc/badblocks.c:1148
+#: misc/badblocks.c:1156 misc/badblocks.c:1170 misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505 misc/e2image.c:576 misc/e2image.c:672
+#: misc/e2image.c:688 misc/mke2fs.c:181 misc/tune2fs.c:1515 resize/main.c:309
 #, c-format
 msgid "while trying to open %s"
 msgstr "- %s açılmaya çalışılırken hata oluştu"
@@ -101,7 +101,7 @@
 msgid "while trying popen '%s'"
 msgstr "- '%s' veri yolu açılmaya çalışılırken hata oluştu"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "- dosyadan hatalı bloklar listesinin okunması sırasında hata oluştu"
 
@@ -114,30 +114,30 @@
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Uyarı: Hatalı blok düğümünde %u. blok kuraldışı; temizlendi.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "%3$s işlemi sırasında blok %1$lu okunurken hata oluştu (%2$s).  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "blok %lu okunurken hata oluştu (%s).  "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Hata görmezden gelindi"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Yeniden yaz"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "%3$s işlemi sırasında blok %1$lu yazılırken hata oluştu (%2$s).  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "%lu bloğu yazılırken hata: %s.  "
@@ -185,21 +185,21 @@
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Kullanımı: %s [-F] [-I düğüm_tampon_blokları] aygıt\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:818
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "%s temizlik için açılırken hata oluştu"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:824 resize/main.c:285
 #, c-format
 msgid "while trying to flush %s"
 msgstr "%s boşaltılmaya çalışılırken hata oluştu"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:482
 msgid "while opening inode scan"
 msgstr "düğüm taraması başlatılırken hata oluştu"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:500
 msgid "while getting next inode"
 msgstr "sonraki düğüme geçilirken hata oluştu"
 
@@ -208,229 +208,234 @@
 msgid "%u inodes scanned.\n"
 msgstr "%d düğüm tarandı.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "günlük dosyası super bloğu okunuyor\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: geçerli gümlük dosyası super bloğu yok\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: gümlük dosyası çok kısa\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:858
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: günlük dosyasına göre kurtarılıyor\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: salt-okunur durumdayken günlük dosyasına göre kurtarma yapılamaz\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:881
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "%s yeniden açılmaya çalışılırken hata oluştu"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "aek özellik"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Aayrılırken hata oluştu"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bblok"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bbiteşlem"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "csıkıştırma"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Cbazı dosya sistemi blokları ile çelişiyor"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "idüğüm"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Ikuraldışı"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jgünlük"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dsilinen"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "ddizin"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "egirdi"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@E"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fdosya sistemi"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "F%i (%Q) düğümü için"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "ggrup"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "hHTREE dizin düğüm"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "llost+found"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Lbir bağdır"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mçok düğümlü"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "ngeçersiz"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "oartık"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "psorun"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "rkök düğümü"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "solmalıydı"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssüper blok"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "ubağlantısız"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vaygıt"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+#, fuzzy
+msgid "xextent"
+msgstr "egirdi"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zsıfır uzunluklu"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<NULL düğüm>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<Hatalı bloklar düğümü>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<ACL indeksinin düğümü>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<ACL verisinin düğümü>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<Önyükleyici düğümü>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<Kurtarılan dizinin düğümü>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<Grup tanımlayıcı düğümü>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<günlük düğümü>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<Yedek düğüm 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<Yedek düğüm 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, fuzzy, c-format
 msgid "regular file"
 msgstr ""
 "\n"
 "%8d normal dosya\n"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, fuzzy, c-format
 msgid "directory"
 msgstr "ddizin"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, fuzzy, c-format
 msgid "character device"
 msgstr "%8d karakter aygıtı dosyası\n"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, fuzzy, c-format
 msgid "block device"
 msgstr "%8d blok aygıtı dosyası\n"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr ""
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, fuzzy, c-format
 msgid "symbolic link"
 msgstr "%8d sembolik bağ"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, fuzzy, c-format
 msgid "socket"
 msgstr "%8d soket\n"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr ""
@@ -439,101 +444,113 @@
 msgid "multiply claimed inode map"
 msgstr "tekrarlanan blokların düğüm eşlemi"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
-#, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+#: e2fsck/pass1b.c:567 e2fsck/pass1b.c:700
+#, fuzzy, c-format
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "iç hata; %u için dup_blk bulunamıyor\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:743
 msgid "returned from clone_file_block"
 msgstr "clone_file_block işlevinden döndürüldü"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:762
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "iç hata; %u için dup_blk bulunamıyor\n"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:774
 #, fuzzy, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "İç hata: %i için dizin bilgileri bulunamıyor.\n"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:780
 #, fuzzy
 msgid "reading directory block"
 msgstr "%u düğümünün dolaylı blokları okunuyor"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "kullanımdaki düğüm eşlemi"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "dizin düğümü eşlemi"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "normal dosya düğümü eşlemi"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "kullanımdaki blok eşlemi"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 #, fuzzy
 msgid "opening inode scan"
 msgstr "düğüm taraması yapılıyor"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 #, fuzzy
 msgid "getting next inode from scan"
 msgstr "sonraki düğüme geçilirken hata oluştu"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1122
 msgid "Pass 1"
 msgstr "1. geçiş"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1181
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "%u düğümünün dolaylı blokları okunuyor"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1225
 msgid "bad inode map"
 msgstr "hatalı düğüm eşlemi"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1247
 msgid "inode in bad block map"
 msgstr "hatalı blok eşlemindeki düğüm"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1267
 msgid "imagic inode map"
 msgstr "imagic düğüm eşlemi"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1294
 msgid "multiply claimed block map"
 msgstr "tekrarlanan blokların eşlemi"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1393
 msgid "ext attr block map"
 msgstr "ek özellik bloğu eşlemi"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "blok biteşlemi"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "düğüm biteşlemi"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "düğüm tablosu"
 
-#: e2fsck/pass2.c:283
+#: e2fsck/pass2.c:284
 msgid "Pass 2"
 msgstr "2. geçiş"
 
+#: e2fsck/pass2.c:803
+#, fuzzy
+msgid "Can not continue."
+msgstr ""
+"Devam edilemiyor. çıkılıyor.\n"
+"\n"
+
 #: e2fsck/pass3.c:79
 msgid "inode done bitmap"
 msgstr "düğümleri indeksli biteşlem"
@@ -542,15 +559,15 @@
 msgid "Peak memory"
 msgstr "Doruk bellek"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:146
 msgid "Pass 3"
 msgstr "3. geçiş"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:334
 msgid "inode loop detection bitmap"
 msgstr "düğüm döngüsü saptama biteşlemi"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr "4. geçiş"
 
@@ -849,10 +866,10 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd, dosya türü özelliğini desteklemez.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
-#, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
 msgstr "Süperblok hatalı ext3 günlüğü içeriyor (düğüm %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
@@ -876,13 +893,14 @@
 msgid "External @j does not support this @f\n"
 msgstr "Dış günlük bu dosya sistemini desteklemiyor\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
+#, fuzzy
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j "
 "format.\n"
 "It is also possible the @j @S is corrupt.\n"
@@ -892,26 +910,28 @@
 "eski bir biçim gibi görünüyor.\n"
 "Ayrıca, günlük süperblokunun bozuk olması da mümkün.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
+#, fuzzy
+msgid "@j @S is corrupt.\n"
 msgstr "Ext3 günlüğü süperbloku bozuk.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
-#, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr ""
-"Süperblok has_journal bayrağı içermiyor, ama ext3 günlüğü %s içeriyor.\n"
+#, fuzzy, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "ext3 kurtarma bayrağı temiz ama günlük veri içeriyor.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr "Süperblok ext3 needs_recovery bayrağı içeriyor ama günlük yok.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
 msgstr "ext3 kurtarma bayrağı temiz ama günlük veri içeriyor.\n"
 
 #. @-expanded: Clear journal
@@ -959,20 +979,22 @@
 msgstr "artık düğüm listesindeki düğüm %i kuraldışı\n"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
+#: e2fsck/problem.c:280 e2fsck/problem.c:647
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
 msgstr "dosyasisteminin özellik bayrakları etkin ama dosyasisteminin sürümü 0."
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
 msgstr ""
 "Ext3 günlüğü süper bloğu bilinmeyen salt-okunur özellikli bir bayrak "
 "içeriyor.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
 msgstr ""
 "Ext3 günlüğünün süper bloğu bilinmeyen uyumsuz özellikli bir bayrak "
 "içeriyor.\n"
@@ -1071,126 +1093,163 @@
 "\n"
 msgstr ""
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr ""
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr ""
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "1. geçiş: düğümler, bloklar ve uzunluklar denetleniyor\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "Kök düğümü bir dizin değil.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "Kök düğümü için dtime belirtilmiş (eski mke2fs'den dolayı olabilir).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "Yedek düğüm %i (%Q) hatalı kip içeriyor.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "Silinen düğüm %i sıfır dtime içeriyor.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "Düğüm %i kullanımda, ama dtime belirtilmiş.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "Düğüm %i bir sıfır uzunluklu dizindir.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki blok biteşlemi diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki düğüm biteşlemi diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr ""
 "%g grubunun %b deki düğüm tablosu diğer dosya sistemi blokları ile "
 "çelişiyor.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "%g grubunun blok biteşlemi (%b) hatalı.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "%g grubunun düğüm biteşlemi (%b) hatalı.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "Düğüm %i düğüm uzunluğu %Is, %N olmalıydı.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "Dosya düğüm %i, blok düğümü %Ib, %N olmalıydı.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "Düğüm %i içindeki blok #%B (%b) kuraldışı.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr ""
 "Düğüm %i içindeki blok #%B (%b) dosya sistemi metaverisinin üzerine "
 "taşıyor.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "Düğüm %i kuraldışı blok(lar) içeriyor.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Düğüm %i içinde çok fazla kuraldışı blok.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "Hatalı blok düğümü içindeki blok %B (%b) kuraldışı.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "Hatalı blok düğümü kuraldışı blok(lar) içeriyor.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "Tekrarlanmış ya da hatalı blok kullanımda!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "Hatalı blok %b, hatalı blok düğümü dolaylı bloğu olarak kullanılmış."
 
@@ -1198,7 +1257,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1212,7 +1271,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1223,7 +1282,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1234,131 +1293,131 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "Birincil dosya sistemi (%b) hatalı bloklar listesinde kayıtlı.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr ""
 "Birincil grup tanımlarındaki blok %b, hatalı bloklar listesinde kayıtlı\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Uyarı: %g grubunun superbloğu (%b) hatalı.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr ""
 "Uyarı %g grubunun grup tanımları kopyası bir hatalı blok içeriyor (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr ""
 "Programlama hatası?  blok %b, hatalı blok işleminde sebepsiz olarak talep "
 "edildi.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr ""
 "%s için %g blok grubunda %N bitişik bloğa yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "%s tekrar konumlaması için blok tamponuna yer ayrılırken hata oluştu\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "%g grubunun %s %b den %c ye aktarılıyor...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "%g grubunun %s %c ye aktarılıyor...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Uyarı: %snin %b bloğu okunamadı: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Uyarı: %snin %b bloğu yazılamadı: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1378
 msgid "@A @i @B (%N): %m\n"
 msgstr "Düğüm biteşlemi (%N) ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "Düğüm biteşlemi (%N) ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "Düğüm sayısı bağ bilgisine yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "Dizin bloğu dizisine yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Düğümler (%i) taranırken hata oluştu: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr ""
 "Düğüm %i içindeki bloklar üzerinde işlemler tekrarlanırken hata oluştu: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr ""
 "Düğüm sayısı bilgisi (düğüm = %i, sayısı = %N)\n"
 "saklanırken hata oluştu: %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr ""
 "Dizin bloğu bilgisi (düğüm = %i, blok = %b, num = %N)\n"
 "saklanırken hata oluştu: %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Düğüm %i okunurken hata oluştu: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "Düğüm %i imagic bayrağı içeriyor.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1368,7 +1427,7 @@
 "salt-eklenir ya da değişmez bayrağı içeriyor.  "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr ""
@@ -1376,110 +1435,110 @@
 "içeriyor.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "Özel (aygıt/soket/fifo) düğüm %i sıfırdan farklı boyutta.  "
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "Günlük düğümü kullanımda değil ama veri içeriyor.  "
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "Günlük dosyası normal bir dosya değil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "Düğüm %i öksüz düğüm listesinin parçasıydı.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Bozuk bir artık bağlı listenin bir parçasını bulunduran düğümler.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "refcount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Düğüm %i için ek özellik bloğu %b okunurken hata oluştu.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "Düğüm %i %b hatalı ek özellik bloğunu içeriyor.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Ek özellik bloğu %b okunurken hata oluştu (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "Ek özellikler bloğu %b %B başvuru sayısına sahip, %N olmalıydı.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Ek özellik bloğu %b yazılırken hata oluştu (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "Ek özellikler bloğu %b için  h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "Ek özellikler bloğu %b ayrılırken hata.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "Ek özellik bloğu %b bozuk (tahsis çatışması).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "Ek özellikler bloğu %b bozuk (geçersiz isim).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "Ek özellikler bloğu %b bozuk (geçersiz değer).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "düğüm %i çok büyük.  "
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "Blok #%B (%b) çok büyük dizin oluşturuyor.  "
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "Blok #%B (%b) çok büyük dosya oluşturuyor.  "
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "Blok #%B (%b) çok büyük sembolik bağ oluşturuyor.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr ""
@@ -1487,37 +1546,37 @@
 "içeriyor.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "Düğüm %i INDEX_FL bayrağı içeriyor ama o bir dizin değil.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "HTREE dizin düğümü %i geçersiz bir kök düğümü içeriyor.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "HTREE dizin düğümü %i desteklenmeyen bir hash sürümü (%N) içeriyor.\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr ""
 "HTREE dizin düğümü %i uyumsuz bir htree kök düğümü bayrağı kullanıyor.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "HTREE dizin düğümü %i çok büyük bir ağaç derinliğine (%N) sahip\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1526,52 +1585,121 @@
 "bir dolaylı blok (%b) içeriyor."
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Düğümü boyutlandırmak için (tekrar) oluşturma başarısız: %m"
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "%i. düğüm geçersiz bir ek boyut içeriyor (%IS)\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir isim alanı içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value size (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir değer içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "%i. düğümdeki ek özellik geçersiz bir değer başlangıcı içeriyor (%N)\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:808
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr ""
 "%i. düğümdeki ek özellik geçersiz bir değer bloğu içeriyor (%N), 0 olmalı\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr ""
-"%i. düğümdeki ek özellik geçersiz bir çırpı (hash) içeriyor (%N), 0 olmalı\n"
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+#, fuzzy
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "%i. düğümdeki ek özellik geçersiz bir isim alanı içeriyor (%N)\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr ""
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, fuzzy, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr ""
+"Düğüm %i içindeki bloklar üzerinde işlemler tekrarlanırken hata oluştu: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, fuzzy, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+"Düğüm %i htree desteği bulunmayan dosya sisteminde INDEX_FL bayrağı "
+"içeriyor.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1583,24 +1711,24 @@
 "Geçiş 1B: Çok düğümlü bloklar yeniden taranıyor\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "Düğüm %i içinde çok düğümlü bloklar var:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Düğümler (%i) taranırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "Düğüm biteşlemi (inode_dup_map) için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
@@ -1608,25 +1736,25 @@
 "hata oluştu (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 "Ek özellikler bloğu %b (düğüm %i) için refcount ayarlanırken hata oluştu: %"
 "m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Geçiş 1C: Tekrarlanan blokların düğümleri için dizinler taranıyor.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Geçiş 1D: Çok düğümlü bloklar yeniden hallediliyor\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1635,18 +1763,18 @@
 "  %N dosya ile paylaşımlı, çok düğümlü %B blok içeriyor:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (düğüm %i, değişiklik zamanı %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<dosya sistemi metaverisi>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1656,7 +1784,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1664,325 +1792,327 @@
 "Çok düğümlü bloklar zaten yeniden atanmış ya da kopyalanmıştı.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Dosya kopyalanamadı: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Geçiş 2: Dizin yapısı denetleniyor\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içindeki '.' için düğüm numarası geçersiz.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E hatalı düğüm numarası içeriyor: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E silinmiş/kullanılmayan düğüm %Di içeriyor.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "@E '.' ya bir bağdır.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E bir hatalı blok içindeki düğümü (%Di) gösteriyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E dizin %P (%Di) için bir bağdır.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "@E kök düğümüne bir bağdır.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E isminde kuraldışı karakterler içeriyor.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içinde '.' eksik.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Dizin düğümü %i içinde '..' eksik.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 "Dizin düğümü %i (%p) içindeki ilk girdi '%Dn' (düğüm=%Di) '.' olmalıydı.\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 "Dizin düğümü %i içindeki ikinci girdi '%Dn' (düğüm=%Di) '..' olmalıydı.\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "düğüm %i (%Q) %IF için i_faddr, sıfır olmalı.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "düğüm %i (%Q) %If için i_file_acl, sıfır olmalı.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "düğüm %i (%Q) %Id için i_dir_acl, sıfır olmalı.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q) %N için i_frag, sıfır olmalı.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q)  %N için i_fsize, sıfır olmalı.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "Düğüm %i (%Q) bir hatalı kip (%Im) içeriyor.\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "Dizin düğümü %i, blok %B, konum %N: dizin bozuk\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "Dizin düğümü %i, blok %B, konum %N: dosya ismi çok uzun\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "Dizin düğümü %i bir ayrılmayan blok #%B içeriyor.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Dizin düğümü %i deki '.' dizin girdisi NULL sonlandırmalı değil\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "Dizin düğümü %i deki '..' dizin girdisi NULL sonlandırmalı değil\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı karakter aygıtı.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı blok aygıtı.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E tekrarlayan '.' girdisi içeriyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E tekrarlayan '..' girdisi içeriyor.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1403
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "İç hata: %i için dizin bilgileri bulunamıyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E %Dr kayıt uzunluğunda, %N olmalıydı.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "icount veri yapısı için yer ayrılırken hata oluştu: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Dizin blokları yinelenirken hata: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Dizin bloğu %b (düğüm %i) okunurken hata oluştu: %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Dizin bloğu %b (düğüm %i) yazılırken hata oluştu: %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "Düğüm %i için yeni dizin bloku ayrılırken hata oluştu (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Düğüm %i bırakılırken hata: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, fuzzy, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr "'.' için dizin girdisi büyük.  "
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "Düğüm %i (%Q) bir kuraldışı soket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "@E için dosya türü %N olarak belirleniyor.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E yanlış dosya türünde (%Dt idi, %N olmalıydı).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "@E için dosya türü belirtilmiş.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "@Enin ismi sıfır uzunlukta.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "%Q sembolik bağı (düğüm %i) geçersiz.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "@F ek özellik bloğu geçersiz (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 "Dosya sistemi çok büyük dosyalar içeriyor, ama süperblokta LARGE_FILE "
 "bayrağı yok\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: düğüm (%B) referanssız\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: düğüm (%B) iki kere referanslı\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatali asgari hash içeriyor\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B)  hatali azami hash içeriyor\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "HTREE dizin düğümü %d (%q) geçersiz.  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: blok numarası %b hatalı.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "HTREE dizin düğümü %d içinde sorun: kök düğümü geçersiz\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatalı sınır (%N) içeriyor\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) hatalı sayım (%N) içeriyor.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) sırasız bit hash tablosu "
 "içeriyor\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+#, fuzzy
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
 msgstr ""
 "HTREE dizin düğümü %d içinde sorun: düğüm (%B) geçersiz derinlik içeriyor\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Yinelenmiş @E bulundu.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1994,7 +2124,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -2005,66 +2135,82 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 #, fuzzy
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "düğüm %i (%Q)  %N için i_fsize, sıfır olmalı.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+#, fuzzy
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Dizin düğümü %i (%p) bağlantısız\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1293
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Geçiş 3: Dizin bağlanabilirliği denetleniyor\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1298
 msgid "@r not allocated.  "
 msgstr "Kök düğümü tahsisli değil.  "
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1303
 msgid "No room in @l @d.  "
 msgstr "lost+found dizininde yer yok.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1308
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "Dizin düğümü %i (%p) bağlantısız\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1313
 msgid "/@l not found.  "
 msgstr "/lost+found dizini yok.  "
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1318
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "%Q (%i) daki '..' %P (%j), süperblok %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1323
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "/lost+found dizini ya yok ya da hatalı. tekrar bağlanılamıyor.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1328
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "/lost+found dizini genişletilemiyor: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "%i ye tekrar bağlanılamıyor: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "/lost+found dizini bulunmaya çalışılırkan hata oluştu: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2072,7 +2218,7 @@
 "/lost+found dizini oluşturulmaya çalışılırkan hata oluştu.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
@@ -2080,7 +2226,7 @@
 "/lost+found dizini oluşturulmaya çalışılırkan hata oluştu.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
@@ -2088,7 +2234,7 @@
 "yeni dizin bloğu oluşturulurken hata.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
@@ -2096,14 +2242,14 @@
 "/lost+found için dizin bloğu yazılırken hata oluştu.\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Düğüm %i üzerinde düğüm sayısı ayarlanırken hata oluştu\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1368
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2114,7 +2260,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2124,75 +2270,76 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1383
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Kök dizini oluşturulurken hata (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "/lost+found dizini oluşturulurken hata (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1393
 msgid "@r is not a @d; aborting.\n"
 msgstr "Kök düğümü bir dizin değil; çıkılıyor.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1398
 msgid "Cannot proceed without a @r.\n"
 msgstr "Bir kök düğümü olmaksızın işlenemez.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1408
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/lost+found bir dizin değil (düğüm = %i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1415
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Pass 3A: Dizinler eniyileniyor\n"
 
-#: e2fsck/problem.c:1322
-#, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
+#: e2fsck/problem.c:1420
+#, fuzzy, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr "dirs_to_hash yineleyici oluşturulamadı: %m"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
+#: e2fsck/problem.c:1425
+#, fuzzy
+msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr "Dizin %q (%d) eniyilenemedi: %m"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1430
 msgid "Optimizing directories: "
 msgstr "Eniyilenen dizinler: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1447
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Geçiş 4: Başvuru sayısı denetleniyor\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1452
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "artık düğüm %i sıfır uzunlukta.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @i %i\n"
 msgstr "artık düğüm %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1462
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "Düğüm %i için başvuru sayısı %Il, %N olmalıydı.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1466
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2205,58 +2352,58 @@
 "Bunlar aynı olmalıydı!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1476
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "5. Geçiş: grup özet bilgileri denetleniyor\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1481
 msgid "Padding at end of @i @B is not set. "
 msgstr "Düğüm biteşleminin sonundaki alan belirlenmemiş. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @b @B is not set. "
 msgstr "Blok biteşleminin sonundaki alan belirlenmemiş. "
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1491
 msgid "@b @B differences: "
 msgstr "blok biteşlemi farkları: "
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1511
 msgid "@i @B differences: "
 msgstr "düğüm biteşlemi farkları: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1531
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "%g. grup için serbest düğüm sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1536
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "%g. grup için dizin sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1541
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Serbest düğüm sayısı yanlış (%i, sayılan = %j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1546
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "%g. grup için serbest blok sayısı yanlış (%b, sayılan = %c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Serbest blok sayısı yanlış (%b, sayılan = %c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1556
 msgid ""
 "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
 "endpoints (%i, %j)\n"
@@ -2264,32 +2411,46 @@
 "PROGRAMLAMA HATASI: dosya sistemi (#%N) biteşlem sınırları (%b, %c)\n"
 "ile hesaplanan biteşlem sınırları (%i, %j) uyuşmuyor\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1562
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "İç hata: biteşlemin sonunda bozulma (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1567
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Yedek düğüm biteşleminde kopyalama hatası: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Yedek blok biteşleminde kopyalama hatası: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+#, fuzzy
+msgid "Recreate @j"
+msgstr "Yeniden oluştur"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#: e2fsck/problem.c:1725
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Elde edilemeyen hata kodu ((0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1820
 msgid "IGNORED"
 msgstr "YOKSAYILDI"
 
@@ -2316,63 +2477,23 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "Düğüm %d için ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, fuzzy, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr "Düğüm %d için ext2fs_block_iterate işlevi çağrılırken hata oluştu"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Kırpılıyor"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Temizleniyor"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "ext2fs_block_iterate işlevi çağrılırken hata oluştu"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "- yineleme işlevi çağrılırken hata oluştu"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "- düğüm tampon belleği ayrılırken hata oluştu"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "- düğüm tablosu okunurken hata oluştu (grup %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "- düğüm tablosu yazılırken hata oluştu (grup %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Geçiş 0: dosya sisteminin bayt sıralaması düzeltiliyor\n"
-
-#: e2fsck/swapfs.c:233
-#, c-format
+#: e2fsck/unix.c:76
+#, fuzzy, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: dosya sitemi fsck kullanılarak tamamen denetlenmeli ve\n"
-"ters baytlar normal düzene döndürülmeden bağlanmamalıdır.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Ters baytlı"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
@@ -2403,7 +2524,7 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2427,7 +2548,7 @@
 "                             listesine eklenir\n"
 "   -f                        disk bölümü temiz bile olsa denetim yapılır\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2447,33 +2568,38 @@
 "   -L hatalı_bloklar_dosyası hatalı bloklar listesi belirtilen dosyadakiler\n"
 "                             ile oluşturulur\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, fuzzy, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %d/%d dosya (%%%0d.%d yanyana olmayan düğüm), %u/%u blok\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, fuzzy, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         ind/dind/tind bloklarının düğüm sayıları: %d/%d/%d\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr ""
+
+#: e2fsck/unix.c:207 misc/badblocks.c:916 misc/tune2fs.c:1567 misc/util.c:151
+#: resize/main.c:248
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "- %s'in bağlı olup olmadığı saptanmaya çalışılırken hata oluştu."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Uyarı!  %s bağlı.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s bağlandı.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2481,7 +2607,7 @@
 "Devam edilemiyor. çıkılıyor.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2496,75 +2622,80 @@
 "ÇOK CİDDİ hasarlara sebep olabilir.****\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Gerçekten devam etmek istiyor musunuz?"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "denetim durdu.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " hatalı bir dosya sistemi içeriyor"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " usulünce sistemden ayrılmamış"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " denetlenmeksizin %u kere bağlandı"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+#, fuzzy
+msgid " has filesystem last checked time in the future"
+msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " denetlenmeksizin %u gün geçti"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", denetim başlatılacak.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, fuzzy, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: temiz, %d/%d dosya, %u/%u blok"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (denetleme ertelendi; batarya)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (sistem bağlandıktan sonra denetle)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (sistem %ld kere bağlandığında denetle)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "HATA: /dev/null açılamadı (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Ek özellik sürümü geçersiz.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Bilinmeyen ek seçenek: %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2573,53 +2704,43 @@
 "e2fsck yapılandırma dosyasında (%s, %d.satırda) sözdizimi hatası\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Dosya tanımlayıcı %d değerlendirilirken hata: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Tamamlama bilgisi dosya tanımlayıcısı geçersiz"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Sadece -p/-a, -n veya -y seçeneklerinden sadece biri belirtilebilir."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr " -t seçeneği e2fsck'nın bu sürümünde desteklenmiyor.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr "e2fsck'nın bu sürümünde derlenmemiş ters baytlı sistemler \n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:549 misc/tune2fs.c:833 misc/tune2fs.c:850
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "'%s' çözümlenemiyor"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Ters baytlar düzeltilirken uyumsuz seçeneklere izin verilmez.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:831
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 " -c seçeneği ile -l ve -L seçenekleri aynı anda birlikte kullanılamaz.\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:879
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:888
 #, c-format
 msgid ""
 "\n"
@@ -2627,38 +2748,38 @@
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:929
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Hata: ext2fs kitaplık sürümü uygun değil!\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:937
 msgid "while trying to initialize program"
 msgstr "- uygulama başlatılmaya çelışılırken hata oluştu"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:951
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\t%s, %s kullanılıyor\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:963
 msgid "need terminal for interactive repairs"
 msgstr "etkileşimli onarım için uçbirim gerekli"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1010
 #, fuzzy, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s yedekleme blokları deneniyor...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1012
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1013
 msgid "Group descriptors look bad..."
 msgstr "Grup tanımlayıcılar hatalı görünüyor..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1040
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2669,29 +2790,29 @@
 "destekliyor gibi. (Ya da dosya sisteminin süperbloğu bozuk olabilir)\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1046
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Bu sıfır uzunluklu bir disk bölümü olabilir mi?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1048
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Dosya sistemine %s erişiminiz olmalı ya da root olmalısınız\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1053
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Bu mevcut olmayan bir aygıt ya da bir takas aygıtı mı acaba?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1055
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Dosyasistemi başka bir uygulama tarafından özellikle bağlanmış veya açılmış\n"
 "olabilir mi?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1059
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2700,16 +2821,16 @@
 "Disk yazma korumalı; -n seçeneğini kullanarak salt-oku kipinde\n"
 "denetim yapınız.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1123
 msgid "Get a newer version of e2fsck!"
 msgstr "e2fsck'nın daha yeni bir sürümünü alın!"
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1147
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "- %s için ext3 günlüğü denetlenirken hata oluştu"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1158
 #, c-format
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
@@ -2718,26 +2839,26 @@
 "Uyarı: Dosya sistemi salt-oku kipinde denetlendiğinden\n"
 "günlük dosyasına göre kurtarma atlanıyor.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1171
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "%s üzerine süperblok bayrakları konulamadı\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1177
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "- %s ext3 günlük dosyası kurtarılmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1201
 #, fuzzy, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "HTREE dizin düğümü %i desteklenmeyen bir hash sürümü (%N) içeriyor.\n"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1217
 msgid "Warning: compression support is experimental.\n"
 msgstr "Uyarı: sıkıştırma desteği deneyseldir.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1222
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2746,30 +2867,25 @@
 "E2fsck HTREE desteği ile derlenmemiş,\n"
 "\tama dosya sistemi %s HTREE dizinleri içeriyor.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s Dosya sisteminde baytlar zaten normal.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1276
 msgid "while reading bad blocks inode"
 msgstr "- hatalı bloklar düğümü okunmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1278
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Bu pek hayra alamet değil, ama üstüne gidilecek...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1304
 msgid "Couldn't determine journal size"
 msgstr ""
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Günlük oluşturuluyor (%d blok): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1314 misc/mke2fs.c:2091
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2777,37 +2893,37 @@
 "\n"
 "\tgünlük oluşturulmaya çalışılırken hata oluştu"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1317
 #, fuzzy, c-format
 msgid " Done.\n"
 msgstr "tamam\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1318
 #, c-format
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1325
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "e2fsck baştan başlıyor...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1329
 msgid "while resetting context"
 msgstr "- bağlam sıfırlanırken hata oluştu"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1336
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck durduruldu.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1341
 msgid "aborted"
 msgstr "çıktı"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -2816,12 +2932,12 @@
 "\n"
 "%s: ***** DOSYA SİSTEMİ DEĞİŞTİRİLDİ *****\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1356
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** MAKİNAYI YENİDEN BAŞLATIN *****\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1364
 #, c-format
 msgid ""
 "\n"
@@ -2832,39 +2948,44 @@
 "%s: ********** UYARI: Dosya sistemi hala hatalı **********\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1400
+#, fuzzy
+msgid "while setting block group checksum info"
+msgstr "- hatalı blok düğümü belirlenirken hata oluştu"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "eE"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "hH"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<e>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<h>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (e/h)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "durduruldu!\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "evet\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "hayır\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2873,7 +2994,7 @@
 "%s? hayır\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2882,47 +3003,39 @@
 "%s? evet\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "evet"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "hayır"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: %s için biteşlem blokları kuraldışı"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "düğüm ve blok biteşlemleri okunuyor"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "- %s için biteşlemlerin okunması yinelenirken hata oluştu"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
+#: e2fsck/util.c:243
+#, fuzzy
+msgid "writing block and inode bitmaps"
 msgstr "blok biteşlemleri yazılıyor"
 
-#: e2fsck/util.c:242
-#, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "- %s için blok biteşlemlerinin yazılması yinelenirken hata oluştu"
-
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "düğüm biteşlemleri yazılıyor"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
+#: e2fsck/util.c:248
+#, fuzzy, c-format
+msgid "while rewriting block and inode bitmaps for %s"
 msgstr "- %s için düğüm biteşlemlerinin yazılması yinelenirken hata oluştu"
 
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2935,48 +3048,53 @@
 "%s: BEKLENMEYEN UYGUNSUZLUK; fsck ÇALIŞTIRMALISINIZ.\n"
 "\t(-a ve -p seçeneklerini kullanmadan)\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:336
 #, c-format
 msgid "Memory used: %dk/%dk (%dk/%dk), "
 msgstr "Kullanılan bellek: %dk/%dk (%dk/%dk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:340
 #, c-format
 msgid "Memory used: %d, "
 msgstr "Kullanılan bellek: %d, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:346
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "zaman: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:351
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "geçen süre: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:385 e2fsck/util.c:399
 #, c-format
 msgid "while reading inode %ld in %s"
 msgstr "- %ld düğümü %s den okunurken hata oluştu"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:413 e2fsck/util.c:426
 #, c-format
 msgid "while writing inode %ld in %s"
 msgstr "- %ld düğümü %s e yazılırken hata oluştu"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "- sıfırlama tampon belleği ayrılırken hata oluştu"
+
+#: misc/badblocks.c:66
 #, fuzzy
 msgid "done                                \n"
 msgstr "bitti                           .\n"
 
-#: misc/badblocks.c:80
-#, c-format
+#: misc/badblocks.c:89
+#, fuzzy, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern "
-"[...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
 "Kullanımı: %s [-b blok_boyu] [-i girdi_dosyası] [-o çıktı_dosyası]\n"
 "          [-svwnf] [-c blok_sayısı] [-p geçiş_sayısı]\n"
@@ -2984,77 +3102,87 @@
 " [...]]]\n"
 "          aygıt [son_blok [ilk_blok]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
 msgid "Testing with random pattern: "
 msgstr "Rasgele şablon ile sınanıyor: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:307
 msgid "Testing with pattern 0x"
 msgstr "Sınama şablonu: 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:335 misc/badblocks.c:404
 msgid "during seek"
 msgstr "erişim sırasında"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:346
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "do_read için tuhaf değer (%ld)\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:424
 msgid "during ext2fs_sync_device"
 msgstr "ext2fs_sync_device sırasında"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:440 misc/badblocks.c:699
 msgid "while beginning bad block list iteration"
 msgstr "- hatalı blok listesi yinelemesine başlanırken hata oluştu"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:454 misc/badblocks.c:551 misc/badblocks.c:709
 msgid "while allocating buffers"
 msgstr "- tampon bellek ayrılırken hata oluştu"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:458
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "%lu ile %lu arasındaki bloklar denetleniyor\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:463
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Hatalı bloklar salt-okunur kipte denetleniyor\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:472
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Hatalı bloklar için denetleniyor (salt-oku testi): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:480 misc/badblocks.c:583 misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr ""
+
+#: misc/badblocks.c:558
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Hatalı bloklar oku-yaz kipinde denetleniyor\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:560 misc/badblocks.c:722
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Blok %lu dan %lu ya kadar\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:618
 msgid "Reading and comparing: "
 msgstr "Okunuyor ve karşılaştırılıyor: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:721
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Hatalı bloklar veri bozmayan oku-yaz kipinde denetleniyor\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:727
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Hatalı bloklar denetleniyor (yıkıcı olmayan oku-yaz sınaması)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:734
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -3062,98 +3190,98 @@
 "\n"
 "Kesme yakalandı, kaldırılıyor\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:810
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "veri yazma denemesi sırasında, blok %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:921 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s bağlandı; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:923
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "badblocks n'olursa olsun çalıştırılacak. İnşallah /etc/mtab yanlıştır.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:928
 msgid "it's not safe to run badblocks!\n"
 msgstr "'badblocks' çalıştırmak güvenli değil!\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:933 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "%s görünüşe göre sistem tarafından kullanılıyor; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:936
 msgid "badblocks forced anyway.\n"
 msgstr "badblocks n'olursa olsun çalıştırılacak.\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:956
+#, fuzzy, c-format
+msgid "invalid %s - %s"
+msgstr "blok uzunluğu hatalı - %s"
+
+#: misc/badblocks.c:1015
 #, c-format
 msgid "bad block size - %s"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1070
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "sınama şablonu - %s için bellek ayrılamadı"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "sınama şablonu geçersiz: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1097
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Salt okunur kipte en çok bir sınama şablonu belirtilebilir"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1103
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Salt okunur kipte rasgele sınama şablonu kullanımına izin verilmez"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1117
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr "Aygıt alanı saptanamadı; Elle bir değer girmelisiniz\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1123
 msgid "while trying to determine device size"
 msgstr "- aygıt alanı saptanmaya çalışılırken hata oluştu"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "blok sayısı hatalı - %s"
+#: misc/badblocks.c:1128
+#, fuzzy
+msgid "last block"
+msgstr "Bloklar yeniden konumlandırılıyor"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "başlangıç bloğu hatalı - %s"
+#: misc/badblocks.c:1134
+#, fuzzy
+msgid "first block"
+msgstr "İlk veri bloğu = %u\n"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1137
 #, fuzzy, c-format
-msgid "invalid starting block (%d): must be less than %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
 msgstr "başlangıç bloğu hatalı - %s"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1193
 msgid "while creating in-memory bad blocks list"
 msgstr "hatalı bloklar listesi bellekte oluşturulurken"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1208
 msgid "while adding to in-memory bad block list"
 msgstr "bellekteki hatalı bloklar listesine eklenirken"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1232
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Geçiş tamamlandı, %u hatalı blok bulundu.\n"
 
-#: misc/chattr.c:84
-#, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
+#: misc/chattr.c:85
+#, fuzzy, c-format
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
 msgstr ""
 "Kullanımı: %s [-RV] [-+=AacDdijsSu] [-v sürüm] dosyalar...\n"
 "\n"
@@ -3194,51 +3322,51 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:152
 #, c-format
 msgid "bad version - %s\n"
 msgstr "sürüm hatalı - %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:198 misc/lsattr.c:113
 #, c-format
 msgid "while trying to stat %s"
 msgstr "- stat %s yapılmaya çalışılırken hata oluştu"
 
-#: misc/chattr.c:208 misc/chattr.c:224
+#: misc/chattr.c:204 misc/chattr.c:222
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Belirlenen %s bayrakları: "
 
-#: misc/chattr.c:217
+#: misc/chattr.c:214
 #, c-format
 msgid "while reading flags on %s"
 msgstr "- %s üzerinde bayraklar okunurken hata oluştu"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:231
 #, c-format
 msgid "while setting flags on %s"
 msgstr "- %s üzerinde bayraklar belirlenirken hata oluştu"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:239
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "%s sürümü %lu olarak belirlendi\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:243
 #, c-format
 msgid "while setting version on %s"
 msgstr "- %s üzerinde sürüm belirlenirken hata oluştu"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:263
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "chattr_dir_proc işlevinde dosya yolu değişkenine yer ayrılamadı"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:302
 msgid "= is incompatible with - and +\n"
 msgstr "= ile + ve - uyumsuz\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:310
 msgid "Must use '-v', =, - or +\n"
 msgstr "'-v', =, - veya + kullanılmalı\n"
 
@@ -3268,32 +3396,37 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Grup %lu:  (Bloklar:  "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "   %s süperblok:  "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "  İlk"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
 msgstr "Yedek"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ""
 " \n"
 "  Grup tanımlayıcı:  "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3302,24 +3435,24 @@
 "\n"
 "  Yedek GDT blokları "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr ""
 " \n"
 "  Grup tanımlayıcı:  "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr "    Blok biteşlemi:  "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ""
 " \n"
 "   Düğüm biteşlemi:  "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3327,49 +3460,54 @@
 "\n"
 "     Düğüm tablosu:  "
 
-#: misc/dumpe2fs.c:207
-#, c-format
+#: misc/dumpe2fs.c:217
+#, fuzzy, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
 "  %d serbest blok, %d serbest düğüm, %d dizin\n"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "   Serbest bloklar:  "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
 msgstr "  Serbest düğümler:  "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:264
 msgid "while printing bad block list"
 msgstr "- hatalı bloklar listesi basılırken hata oluştu"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:270
 #, fuzzy, c-format
 msgid "Bad blocks: %u"
 msgstr "Hatalı bloklar: %d"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:292 misc/tune2fs.c:279
 msgid "while reading journal inode"
 msgstr "- günlük düğümü okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:295
 msgid "Journal size:             "
 msgstr "Günlük boyutu:            "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:319 misc/tune2fs.c:200
 msgid "while reading journal superblock"
 msgstr "- günlük dosyası süperbloğu okunurken hata oluştu"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:327
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Günlük dosyası süperbloğu tanım numarası bulunamadı"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:331
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3388,27 +3526,27 @@
 "Günlük başlangıcı:        %u\n"
 "Günlük kullanıcı sayısı:  %lu\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:344
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Günlük kullanıcıları:     %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:360 misc/mke2fs.c:693 misc/tune2fs.c:868
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Seçenekleri çözümlemek için bellek ayrılamadı!\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:386
 #, fuzzy, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:401
 #, fuzzy, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Yeniden boyutlama parametresi geçersiz: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:412
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -3432,22 +3570,18 @@
 "\tresize=<yeniden boyutlanacağı blok sayısı>\n"
 "\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:471 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\t%s kullanılıyor\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:507 misc/e2image.c:674 misc/tune2fs.c:1518
+#: resize/main.c:311
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Geçerli süperblok bulunamadı.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Bilgi: Bu bir ters-baytlı dosya sistemi\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:532
 #, c-format
 msgid ""
 "\n"
@@ -3456,7 +3590,7 @@
 "\n"
 "%s: %s: biteşlemler okunurken hata oluştu: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr ""
@@ -3471,28 +3605,28 @@
 "olacağından önerilmez. DOSYA yerine - verilirse dosya standart çıktıya\n"
 "yazılır.\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Başlık için tampon bellek ayrılamadı\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "görüntü başlığını yazmak için kısa yazma (sadece %d bayt)"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "- süperbloğa yazılırken hata oluştu"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "- düğüm tablosuna yazılırken hata oluştu"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "- blok biteşlemi yazılırken hata oluştu"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "- düğüm biteşlemi yazılırken hata oluştu"
 
@@ -3516,7 +3650,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: bir ext2 dosya sistemi değil\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1653
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Uyarı: etiket çok uzun, kırpılıyor.\n"
@@ -3531,7 +3665,7 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: süperbloğa yazılırken hata oluştu\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:541
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
@@ -3540,17 +3674,70 @@
 "AYGIT bölüm ismini atamak/okumak için kullanılır.\n"
 "\n"
 
-#: misc/fsck.c:343
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr ""
+
+#: misc/e2undo.c:52
+#, fuzzy
+msgid "Failed to read the file system data \n"
+msgstr "dirs_to_hash yineleyici oluşturulamadı: %m"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr ""
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+
+#: misc/e2undo.c:161
+#, fuzzy, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "%s açılırken"
+
+#: misc/e2undo.c:167
+#, fuzzy, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "- %s'in bağlı olup olmadığı saptanmaya çalışılırken hata oluştu."
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+
+#: misc/e2undo.c:182
+#, fuzzy, c-format
+msgid "Failed to open %s\n"
+msgstr "- %s açılmaya çalışılırken hata oluştu"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr ""
+
+#: misc/fsck.c:347
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
 msgstr "UYARI: %s açılamadı: %s\n"
 
-#: misc/fsck.c:353
+#: misc/fsck.c:357
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
 msgstr "UYARI: %2$s nin %1$d. satırında biçem hatası\n"
 
-#: misc/fsck.c:368
+#: misc/fsck.c:372
 msgid ""
 "\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
 "\tfield.  I will kludge around things for you, but you\n"
@@ -3563,37 +3750,37 @@
 "            düzeltmelisiniz.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:481
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: yok\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:597
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: bekliyor: Başka ast süreç yok?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:619
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Uyarı... %s %s aygıtı için %d sinyali ile çıktı.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:625
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: durum %x, asla olmamalıydı.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:664
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "%s ile bitti (çıkış durumu: %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:724
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Hata %d: fsck.%s %s için çalıtırılırken oluştu.\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:745
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3601,32 +3788,32 @@
 "-t ile ister tüm dosya sistemi türleri belirtilsin ister bir dosya sistemi\n"
 "türü belirtilmesin, ya 'no' ya da '!' öneki kullanılmalıdır.\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:764
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Dosya sistemi türleri için bellek ayrılamadı\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:887
 #, c-format
 msgid ""
 "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
 "number\n"
 msgstr ""
 
-#: misc/fsck.c:899
+#: misc/fsck.c:914
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: %s denetlenemiyor: fsck.%s yok\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:970
 msgid "Checking all file systems.\n"
 msgstr "Tüm dosya sistemleri denetleniyor.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1061
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--beklemede-- (%d. geçiş)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1081
 #, fuzzy
 msgid ""
 "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
@@ -3665,12 +3852,12 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1123
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: aygıt sayısı çok fazla\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1156 misc/fsck.c:1242
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: argüman sayısı fazla\n"
@@ -3704,15 +3891,16 @@
 msgid "While reading version on %s"
 msgstr "- %s üzerinde sürüm okunurken hata oluştu"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Kullanımı: %s [seçenekler] aygıt [blok-sayısı]\n"
 "\n"
@@ -3767,37 +3955,37 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Çalışan komut: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "- '%s' çalıştırılırken oldu"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "- hatalı bloklar listesi işlenirken hata oluştu"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Birincil süperblok/grup tanımı alanındaki blok %d hatalı\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, fuzzy, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Bir dosya sistemi oluşturulurken %u den %d ye kadar olan\n"
 "bloklar hatasız olmak zorundadır.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Çıkılıyor...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3808,23 +3996,19 @@
 "\thatalı bloklar içeriyor.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "- hatalı bloklar kullanılmış olarak imlenirken hata oluştu"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "bitti                           \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "- sıfırlama tampon belleği ayrılırken hata oluştu"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Düğüm tabloları yazılıyor: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3833,67 +4017,67 @@
 "\n"
 "%2$u de başlayan düğüm tablosundaki %1$d blok yazılamadı: %3$s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "- kök dizin oluşturulurken hata"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "- kök düğümü okunurken hata oluştu"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "- kök düğümünün sahibi belirlenirken hata oluştu"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "- /lost+found dizini oluşturulurken hata oluştu"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "- /lost+found dizine bakılırken hata oluştu"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "- /lost+found dizini genişletilirken hata oluştu"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "- hatalı blok düğümü belirlenirken hata oluştu"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "%d-%d arasındaki sektörler silinirken bellek yetmedi\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Uyarı: blok 0 okunamadı: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Uyarı: %d. sektör silinemedi: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "- gümlük superbloğu ilklendirilirken hata oluştu"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Günlük aygıtı temizleniyor: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "- günlük aygıtı temizlenirken (blok %u, %d blok) hata oluştu"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "- günlük süperbloğu yazılırken hata oluştu"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3902,98 +4086,98 @@
 "uyarı: %u blok kullanılmamış.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dosya sistemi ismi = %s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "İşl. Sist. türü: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blok boyu = %u (günlük kaydı = %u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Adımlama boyu = %u (günlük kaydı = %u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u düğüm, %u blok\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u blok (%%%2.2f) süper kullanıcı için ayrıldı\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "İlk veri bloğu = %u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Azami dosyasistemi bloğu sayısı = %lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blok grubu\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blok grubu\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "Grup başına %u blok ve %u sekme\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "grup başına %u düğüm\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Süperblokların bulunduğu bloklar:"
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, fuzzy, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Yeniden boyutlama parametresi geçersiz: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "Azami yeniden boyutlama değeri dosya sistemi boyutundan büyük olmalıdır.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, fuzzy, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -4006,8 +4190,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Belirtilen seçenekler hatalı.\n"
@@ -4020,7 +4205,7 @@
 "\tresize=<yeniden boyutlanacağı blok sayısı>\n"
 "\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -4028,7 +4213,7 @@
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4037,84 +4222,112 @@
 "mke2fs yapılandırma dosyasında (%s, %d.satırda) sözdizimi hatası\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:353
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Geçersiz dosya sistemi seçeneği: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1177
 #, c-format
 msgid "invalid block size - %s"
 msgstr "blok uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1181
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Uyarı: blok uzunluğu %d birçok sistemde kullanımdışıdır.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1197
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "sekme boyu hatalı - %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1203
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Uyarı: sekmeler desteklenmediğinden -f seçeneği yoksayılıyor\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1210
 msgid "Illegal number for blocks per group"
 msgstr "Grup başına blok sayısı kuraldışı"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1215
 msgid "blocks per group must be multiple of 8"
 msgstr "grup başına blok sayısı 8'in katları olmalıdır"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1223
+#, fuzzy
+msgid "Illegal number for flex_bg size"
+msgstr "Blok sayısı kuraldışı!\n"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr ""
+
+#: misc/mke2fs.c:1239
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "düğüm oranı %s hatalı (en az %d/en çok %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1256
 msgid "in malloc for bad_blocks_filename"
 msgstr "- bad_blocks_filename için bellek ayrılırken"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "yedek blok yüzdesi hatalı - %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "değişiklik seviyesi hatalı - %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "düğüm uzunluğu hatalı - %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "düğüm sayısı hatalı - %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2052
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "- %s günlük aygıtı açılmaya çalışılırken hata\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Günlük aygıtının blok boyu (%d) asgari blok boyundan (%d) küçük\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, fuzzy, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "%s'e günlük ekleniyor: "
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d baytlık bloklar sistem için çok büyük (en çok %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
@@ -4122,15 +4335,27 @@
 "Uyarı: %d baytlık bloklar sistem için çok büyük (en çok %d), ama devam "
 "ediliyor\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "blok sayısı hatalı - %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "dosya sistemi"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1468 resize/main.c:371
 msgid "while trying to determine filesystem size"
 msgstr "- dosya sistemi uzunluğu saptanmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4138,7 +4363,7 @@
 "Aygıt alanı saptanamadı; dosya sistemi için\n"
 "bir uzunluk belirtmelisiniz\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4151,84 +4376,78 @@
 "Disk bölümleme tablosunun yeniden okunması için sisteminizi yeniden\n"
 "başlatmalısınız.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Dosya sisteminin uzunluğu görünürdeki uzunluktan büyük."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr ""
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1549
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1556
 #, fuzzy, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1568
 #, fuzzy, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1603
 msgid "while trying to determine hardware sector size"
 msgstr "- donanımsal sektör boyu saptanmaya çalışılırken"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1661
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "süperblok azaltması uygulanmamış dosya sisteminde\n"
 "yedek bloklar kullanılarak yeniden boyutlama desteklenmiyor."
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1670
 msgid "blocks per group count out of range"
 msgstr "Grup başına blok sayısı kapsamdışı"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
-"Dosya sistemi çok büyük.  2**31-1 bloktan fazlası\n"
-"\t (4k'lık bloklarla 8TB mümkün) desteklenmiyor."
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Uyarı: Bazı 2.4 çekirdekler ext3 kullanırken 4096'dan daha büyük blok\n"
-"\tboylarını desteklemez. Bu sizin için de geçerliyse, -b 4096 hullanın.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1697
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "düğüm uzunluğu %d hatalı (en az %d/en çok %d)"
 
-#: misc/mke2fs.c:1510
-#, fuzzy, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Uyarı: %d baytlık düğümler bir çok sistemde kullanımdışıdır.\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1711
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1716
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1731
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4236,38 +4455,51 @@
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1828 misc/tune2fs.c:1462
+#, fuzzy, c-format
+msgid "while trying to delete %s"
+msgstr "- %s yeniden boyutlandırılırken hata oluştu"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1885
 msgid "while setting up superblock"
 msgstr "- süperblok ayarlanırken hata oluştu"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1936
 #, c-format
 msgid "unknown os - %s"
 msgstr "bilinmeyen işletim sistemi - %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:1990
 msgid "while trying to allocate filesystem tables"
 msgstr "- dosya sistemi tabloları ayrılmaya çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2021
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "- dosya sisteminin sonunda blok %u sıfırlanırken hata oluştu"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2034
 msgid "while reserving blocks for online resize"
 msgstr "- yeniden boyutlama için bloklar yedeklenirken hata oluştu"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2045 misc/tune2fs.c:477
 msgid "journal"
 msgstr "günlük"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2057
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "%s'e günlük ekleniyor: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2064
 #, c-format
 msgid ""
 "\n"
@@ -4276,17 +4508,22 @@
 "\n"
 "\tgünlük %s e eklenmeye çalışılırken hata oluştu"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2069 misc/mke2fs.c:2095 misc/tune2fs.c:506 misc/tune2fs.c:520
 #, c-format
 msgid "done\n"
 msgstr "tamam\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2083
+#, fuzzy, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Günlük oluşturuluyor (%d blok): "
+
+#: misc/mke2fs.c:2100
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Süperblokların ve dosya sisteminin hesap bilgileri yazılıyor: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2105
 #, c-format
 msgid ""
 "\n"
@@ -4295,7 +4532,7 @@
 "\n"
 "Uyarı, süperblokların tamamına yazma sorunu var."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2108
 #, c-format
 msgid ""
 "done\n"
@@ -4309,11 +4546,48 @@
 msgid "Usage: mklost+found\n"
 msgstr "Kullanımı: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, fuzzy, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Kullanımı: %s <aygıt1> <aygıt2> <aygıt3>\n"
+"\n"
+"Bir aygıt kümesi için disk bölümleme bilgilerini gösterir\n"
+"Bu uygulamanın çok kullanılan biçimi:\n"
+"\n"
+"\t%s /dev/hda?\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, fuzzy, c-format
+msgid "Cannot open %s: %s"
+msgstr "e2label: %s açılamıyor\n"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr ""
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Lütfen dosya sisteminde e2fsck çalıştırın.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:103
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4321,7 +4595,8 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Kullanımı: %s [seçenekler] aygıt\n"
 "\n"
@@ -4386,70 +4661,71 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:188
 msgid "while trying to open external journal"
 msgstr "- dış günlük açılmaya çalışılırken hata oluştu"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:192
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s bir günlükleme aygıtı değil.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:207
 msgid "Journal superblock not found!\n"
 msgstr "Günlük süperbloğu yok!\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:219
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 "Günlükleme aygıtında dosya sisteminin evrensel tek kimliği (UUID) yok.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:240
 msgid "Journal NOT removed\n"
 msgstr "Günlük silinMEdi\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:246
 msgid "Journal removed\n"
 msgstr "Günlük silindi\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:286
 msgid "while reading bitmaps"
 msgstr "- biteşlemler okunurken hata oluştu"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:294
 msgid "while clearing journal inode"
 msgstr "- günlük düğümü temizlenirken hata oluştu"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:305
 msgid "while writing journal inode"
 msgstr "- günlük düğümü yazılırken hata oluştu"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:320
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Geçersiz dosya sistemi seçeneği belirtidi: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:356
 #, fuzzy, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:362
 #, fuzzy, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:371
+#, fuzzy
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 "has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
 "bağlıyken temizlenebilir.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:379
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4457,11 +4733,31 @@
 "needs_recovery bayrağı gerekiyor. Lütfen has_journal bayrağı\n"
 "temizlenmeden önce e2fsck çalıştırın.\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+
+#: misc/tune2fs.c:423
+#, fuzzy
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
+"bağlıyken temizlenebilir.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr ""
+
+#: misc/tune2fs.c:472
 msgid "The filesystem already has a journal.\n"
 msgstr "Dosya sisteminde bir günlük dosyası zaten var.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:490
 #, c-format
 msgid ""
 "\n"
@@ -4470,21 +4766,21 @@
 "\n"
 "\t%s üzerindeki günlük açılmaya çalışılırken hata oluştu\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:494
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "%s üzerinde günlük dosyası oluşturuluyor: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:502
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "- %s üzerindeki günlük dosyasına dosya sistemi eklenirken hata oluştu"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:508
 msgid "Creating journal inode: "
 msgstr "Günlük düğümü oluşturuluyor: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:517
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4492,65 +4788,85 @@
 "\n"
 "\tgünlük dosyası oluşturulmaya çalışılırken hata oluştu"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:584
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Tarih/zaman belirteci çözümlenemedi: %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:608 misc/tune2fs.c:621
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "bağlama sayısı hatalı - %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:637
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "hata davranışı hatalı - %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:664
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "grup ismi/numarası hatalı -%s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:697
 #, c-format
 msgid "bad interval - %s"
 msgstr "süre hatalı - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:725
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "yedek blok oranı hatalı - %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:740
 msgid "-o may only be specified once"
 msgstr "-o yalnız bir kere kullanılabilir"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:750
 msgid "-O may only be specified once"
 msgstr "-O yalnız bir kere kullanılabilir"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:760
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "yedek blok sayısı hatalı - %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:789
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "kullanıcı ismi/numarası hatalı - %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:806
+#, fuzzy, c-format
+msgid "bad inode size - %s"
+msgstr "düğüm uzunluğu hatalı - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr ""
+
+#: misc/tune2fs.c:900
 #, fuzzy, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:915
 #, fuzzy, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:930
+#, fuzzy, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "'stride' parametresi geçersiz: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:944
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -4561,7 +4877,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4576,53 +4893,70 @@
 "\tresize=<yeniden boyutlanacağı blok sayısı>\n"
 "\n"
 
-#: misc/tune2fs.c:927
+#: misc/tune2fs.c:1384 misc/tune2fs.c:1389 resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "taşınacak bloklar"
+
+#: misc/tune2fs.c:1471
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1534
 #, fuzzy, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
+msgid "Shrinking the inode size is not supported\n"
 msgstr ""
 "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1577
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "En fazla bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1583
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Şimdiki bağlama sayısı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1588
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Hata davranışı %d olarak belirleniyor\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1593
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Yedek blokların grup numarası %lu olarak belirleniyor\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1598
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Denetimler arasındaki süre %lu saniye olarak belirleniyor\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Yedek blokların yüzdesi %%%g (%u blok) olarak belirleniyor\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1612
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "yedek ayrılmış blok sayısı çok büyük (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1618
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Yedek blok sayısı %lu olarak belirleniyor\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1624
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4630,7 +4964,7 @@
 "\n"
 "Dosya sistemindeki süperbloklar zaten azaltılmış.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1631
 #, c-format
 msgid ""
 "\n"
@@ -4639,32 +4973,56 @@
 "\n"
 "Süperblok azaltma bayrağı konuldu.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1636
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1643
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Dosya sisteminin son denetim zamanı %s yapılıyor\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1649
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Ayrılan blokların kullanıcı numarası %lu olarak ayarlanıyor\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1700
 msgid "Invalid UUID format\n"
 msgstr "Geçersiz UUID biçemi\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1712
+#, fuzzy
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"has_journal bayrağı sadece dosya sistemi bağlı değilken ya da salt-okunur\n"
+"bağlıyken temizlenebilir.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+
+#: misc/tune2fs.c:1735
+#, fuzzy, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Yedek blokların grup numarası %lu olarak belirleniyor\n"
+
+#: misc/tune2fs.c:1745
 #, fuzzy, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Yedek blokların grup numarası %lu olarak belirleniyor\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1750
 #, fuzzy, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Yedek blokların grup numarası %lu olarak belirleniyor\n"
@@ -4714,6 +5072,7 @@
 msgstr "Günlük seçenekleri için bellek ayrılamadı!\n"
 
 #: misc/util.c:228
+#, fuzzy
 msgid ""
 "\n"
 "Bad journal options specified.\n"
@@ -4725,7 +5084,7 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
@@ -4807,10 +5166,10 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
-#, c-format
+#: resize/main.c:42
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
 "Kullanımı: %s [seçenekler] aygıt [yeni-boyut]\n"
@@ -4829,56 +5188,68 @@
 "Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Dosya indeksi tablosu genişletiliyor"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Bloklar yeniden konumlandırılıyor"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Dosya indeksi tablosu taranıyor"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Dosya indeksi başvuruları güncelleniyor"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Dosya indeksi tablosu taşınıyor"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "bilinmeyen geçiş?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Geçiş %d başlıyor (en çok = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:264
 #, c-format
 msgid "while opening %s"
 msgstr "%s açılırken"
 
-#: resize/main.c:265
+#: resize/main.c:276
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "%s için durum bilgisi alınırken"
 
-#: resize/main.c:339
+#: resize/main.c:337
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "dosya sistemi uzunluğu hatalı - %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
 
-#: resize/main.c:353
+#: resize/main.c:345
+#, fuzzy, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "%s bağlı; bağlı bir dosya sistemi yeniden boyutlandırılamaz!\n"
+
+#: resize/main.c:381
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "düğüm uzunluğu hatalı - %s"
+
+#: resize/main.c:394
 #, fuzzy
 msgid "Invalid stride length"
 msgstr "'stride' parametresi geçersiz: %s\n"
 
-#: resize/main.c:377
+#: resize/main.c:418
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4889,7 +5260,7 @@
 "Siz ise %u blokluk bir boyut istediniz.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:425
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4898,7 +5269,7 @@
 "Dosya sistemi zaten %u blok uzunlukta.  Hiçbir şey yapılmadı!\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:436
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -4907,12 +5278,12 @@
 "Lütfen önce 'e2fsck -f %s' komutunu çalıştırın.\n"
 "\n"
 
-#: resize/main.c:406
+#: resize/main.c:447
 #, c-format
 msgid "while trying to resize %s"
 msgstr "- %s yeniden boyutlandırılırken hata oluştu"
 
-#: resize/main.c:411
+#: resize/main.c:452
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4921,28 +5292,175 @@
 "%s üzerindeki dosya sistemi şimdi %u blok uzunlukta.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+
+#: resize/online.c:41
+#, fuzzy, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr ""
+"Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
+
+#: resize/online.c:61
+#, fuzzy
+msgid "Filesystem does not support online resizing"
+msgstr ""
+"Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
+
+#: resize/online.c:68
+#, fuzzy, c-format
+msgid "while trying to open mountpoint %s"
+msgstr ""
+"\n"
+"\t%s üzerindeki günlük açılmaya çalışılırken hata oluştu\n"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr ""
+
+#: resize/online.c:79
+#, fuzzy
+msgid "Kernel does not support online resizing"
+msgstr "Dış günlük bu dosya sistemini desteklemiyor\n"
+
+#: resize/online.c:82
+#, fuzzy
+msgid "While checking for on-line resizing support"
+msgstr "- yeniden boyutlama için bloklar yedeklenirken hata oluştu"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/online.c:121
+#, fuzzy
+msgid "While trying to extend the last group"
+msgstr "- dış günlük açılmaya çalışılırken hata oluştu"
+
+#: resize/online.c:180
+#, fuzzy, c-format
+msgid "While trying to add group #%d"
+msgstr "- %s açılmaya çalışılırken hata oluştu"
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr ""
+
+#: resize/resize2fs.c:322
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr ""
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:755
 msgid "reserved blocks"
 msgstr "yedek bloklar"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "taşınacak bloklar"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:765
 msgid "meta-data blocks"
 msgstr "meta-veri blokları"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1703
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Bu olmamalıydı: boyutlandırırken düğümü kaybettik!\n"
 
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr ""
+#~ "Süperblok has_journal bayrağı içermiyor, ama ext3 günlüğü %s içeriyor.\n"
+
+#~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
+#~ msgstr ""
+#~ "%i. düğümdeki ek özellik geçersiz bir çırpı (hash) içeriyor (%N), 0 "
+#~ "olmalı\n"
+
+#~ msgid "while calling ext2fs_block_iterate"
+#~ msgstr "ext2fs_block_iterate işlevi çağrılırken hata oluştu"
+
+#~ msgid "while calling iterator function"
+#~ msgstr "- yineleme işlevi çağrılırken hata oluştu"
+
+#~ msgid "while allocating inode buffer"
+#~ msgstr "- düğüm tampon belleği ayrılırken hata oluştu"
+
+#~ msgid "while reading inode table (group %d)"
+#~ msgstr "- düğüm tablosu okunurken hata oluştu (grup %d)"
+
+#~ msgid "while writing inode table (group %d)"
+#~ msgstr "- düğüm tablosu yazılırken hata oluştu (grup %d)"
+
+#~ msgid "Pass 0: Doing byte-swap of filesystem\n"
+#~ msgstr "Geçiş 0: dosya sisteminin bayt sıralaması düzeltiliyor\n"
+
+#~ msgid ""
+#~ "%s: the filesystem must be freshly checked using fsck\n"
+#~ "and not mounted before trying to byte-swap it.\n"
+#~ msgstr ""
+#~ "%s: dosya sitemi fsck kullanılarak tamamen denetlenmeli ve\n"
+#~ "ters baytlar normal düzene döndürülmeden bağlanmamalıdır.\n"
+
+#~ msgid "Byte swap"
+#~ msgstr "Ters baytlı"
+
+#~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
+#~ msgstr "e2fsck'nın bu sürümünde derlenmemiş ters baytlı sistemler \n"
+
+#~ msgid "Incompatible options not allowed when byte-swapping.\n"
+#~ msgstr "Ters baytlar düzeltilirken uyumsuz seçeneklere izin verilmez.\n"
+
+#~ msgid "%s: Filesystem byte order already normalized.\n"
+#~ msgstr "%s Dosya sisteminde baytlar zaten normal.\n"
+
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr "- %s için blok biteşlemlerinin yazılması yinelenirken hata oluştu"
+
+#~ msgid "writing inode bitmaps"
+#~ msgstr "düğüm biteşlemleri yazılıyor"
+
+#~ msgid "invalid test_pattern: %s\n"
+#~ msgstr "sınama şablonu geçersiz: %s\n"
+
+#~ msgid "invalid starting block - %s"
+#~ msgstr "başlangıç bloğu hatalı - %s"
+
+#~ msgid "Note: This is a byte-swapped filesystem\n"
+#~ msgstr "Bilgi: Bu bir ters-baytlı dosya sistemi\n"
+
+#~ msgid ""
+#~ "Filesystem too large.  No more than 2**31-1 blocks\n"
+#~ "\t (8TB using a blocksize of 4k) are currently supported."
+#~ msgstr ""
+#~ "Dosya sistemi çok büyük.  2**31-1 bloktan fazlası\n"
+#~ "\t (4k'lık bloklarla 8TB mümkün) desteklenmiyor."
+
+#~ msgid ""
+#~ "\n"
+#~ "Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
+#~ "\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Uyarı: Bazı 2.4 çekirdekler ext3 kullanırken 4096'dan daha büyük blok\n"
+#~ "\tboylarını desteklemez. Bu sizin için de geçerliyse, -b 4096 hullanın.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Warning: %d-byte inodes not usable on older systems\n"
+#~ msgstr "Uyarı: %d baytlık düğümler bir çok sistemde kullanımdışıdır.\n"
+
+#, fuzzy
+#~ msgid "Filesystem %s has unsupported features enabled.\n"
+#~ msgstr ""
+#~ "Dosyasistemi özellikleri 0 revizyonlu dosyasistemlerinde desteklenmiyor\n"
+
+#~ msgid "bad filesystem size - %s"
+#~ msgstr "dosya sistemi uzunluğu hatalı - %s"
+
 #~ msgid "Couldn't find ext2 superblock,"
 #~ msgstr "ext2 süperbloğu bulunamadı,"
 
@@ -4963,11 +5481,6 @@
 #~ "\n"
 #~ "Süperblok azaltma bayrağı temizlendi.  %s"
 
-#~ msgid ""
-#~ "%s is mounted; can't resize a mounted filesystem!\n"
-#~ "\n"
-#~ msgstr "%s bağlı; bağlı bir dosya sistemi yeniden boyutlandırılamaz!\n"
-
 #~ msgid "done                        \n"
 #~ msgstr "bitti                       \n"
 
@@ -5029,23 +5542,6 @@
 #~ msgid "%s failed for %s: %s\n"
 #~ msgstr "%s %s için başarısız: %s\n"
 
-#~ msgid ""
-#~ "Usage: %s <dev1> <dev2> <dev3>\n"
-#~ "\n"
-#~ "This program prints out the partition information for a set of devices\n"
-#~ "A common way to use this program is:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kullanımı: %s <aygıt1> <aygıt2> <aygıt3>\n"
-#~ "\n"
-#~ "Bir aygıt kümesi için disk bölümleme bilgilerini gösterir\n"
-#~ "Bu uygulamanın çok kullanılan biçimi:\n"
-#~ "\n"
-#~ "\t%s /dev/hda?\n"
-#~ "\n"
-
 #~ msgid "HDIO_GETGEO ioctl"
 #~ msgstr "HDIO_GETGEO ioctl"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 747b61b..72a3681 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 59c39ff..137f1c8 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,8 +1,8 @@
 # Vietnamese translation for e2fsprogs.
-# Copyright © 2008 Theodore Tso (msgids)
-# This file is distributed under the same license as the e2fsprogs-1.40.7 package.
-# Clytie Siddall <clytie@riverland.net.au>, 2006-2008.
-# 
+# Copyright © 2009 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2009.
+#
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
 #. there is an @-expansion, where strings like "@i" are expanded to
@@ -63,19 +63,19 @@
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.40.7\n"
+"Project-Id-Version: e2fsprogs 1.41.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2008-02-28 21:45-0500\n"
-"PO-Revision-Date: 2008-03-10 18:11+1030\n"
+"POT-Creation-Date: 2009-07-11 17:49-0400\n"
+"PO-Revision-Date: 2009-09-18 23:30+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: LocFactoryEditor 1.7b3\n"
+"X-Generator: LocFactoryEditor 1.8\n"
 
-#: e2fsck/badblocks.c:22 misc/mke2fs.c:157
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Khối hỏng %u ở ngoại phạm vi nên bị bỏ qua.\n"
@@ -89,10 +89,10 @@
 msgstr "trong khi đọc nút thông tin khối hỏng"
 
 #: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
-#: e2fsck/unix.c:1010 e2fsck/unix.c:1093 misc/badblocks.c:1025
-#: misc/badblocks.c:1033 misc/badblocks.c:1047 misc/badblocks.c:1059
-#: misc/dumpe2fs.c:483 misc/e2image.c:571 misc/e2image.c:664
-#: misc/e2image.c:680 misc/mke2fs.c:173 misc/tune2fs.c:916 resize/main.c:296
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:310
 #, c-format
 msgid "while trying to open %s"
 msgstr "trong khi thử mở %s"
@@ -102,7 +102,7 @@
 msgid "while trying popen '%s'"
 msgstr "trong khi thử mở popen « %s »"
 
-#: e2fsck/badblocks.c:93 misc/mke2fs.c:180
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
 msgid "while reading in list of bad blocks from file"
 msgstr "trong khi đọc vào danh sách các khối hỏng từ tập tin"
 
@@ -115,30 +115,30 @@
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
 msgstr "Cảnh báo : tìm thấy khối cấm %u trong nút thông tin khối hỏng nên bị xoá.\n"
 
-#: e2fsck/ehandler.c:53
+#: e2fsck/ehandler.c:54
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
 msgstr "Gặp lỗi khi đọc khối %lu (%s) trong khi %s.  "
 
-#: e2fsck/ehandler.c:56
+#: e2fsck/ehandler.c:57
 #, c-format
 msgid "Error reading block %lu (%s).  "
 msgstr "Gặp lỗi khi đọc khối %lu (%s).  "
 
-#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
 msgid "Ignore error"
 msgstr "Bỏ qua lỗi"
 
-#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:61
 msgid "Force rewrite"
 msgstr "Buộc ghi lại"
 
-#: e2fsck/ehandler.c:100
+#: e2fsck/ehandler.c:103
 #, c-format
 msgid "Error writing block %lu (%s) while %s.  "
 msgstr "Găp lỗi khi ghi khối %lu (%s) trong khi %s.  "
 
-#: e2fsck/ehandler.c:103
+#: e2fsck/ehandler.c:106
 #, c-format
 msgid "Error writing block %lu (%s).  "
 msgstr "Gặp lỗi khi ghi khối %lu (%s).  "
@@ -174,7 +174,7 @@
 #: e2fsck/flushb.c:34
 #, c-format
 msgid "Usage: %s disk\n"
-msgstr "Cách sử dụng: %s đĩa\n"
+msgstr "Sử dụng: %s đĩa\n"
 
 #: e2fsck/flushb.c:63
 #, c-format
@@ -185,26 +185,26 @@
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
-"Cách sử dụng: %s [-F] [-I KĐN] thiết_bị\n"
+"Sử dụng: %s [-F] [-I KĐN] thiết_bị\n"
 "\n"
 "[KĐN: các khối đệm nút thông tin]\n"
 "\n"
 
-#: e2fsck/iscan.c:83 e2fsck/unix.c:786
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "trong khi mở %s để xoá sạch"
 
-#: e2fsck/iscan.c:88 e2fsck/unix.c:792 resize/main.c:274
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:286
 #, c-format
 msgid "while trying to flush %s"
 msgstr "trong khi thử xoá sạch %s"
 
-#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:480
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
 msgid "while opening inode scan"
 msgstr "trong khi mở việc quét nút thông tin"
 
-#: e2fsck/iscan.c:129 misc/e2image.c:498
+#: e2fsck/iscan.c:129 misc/e2image.c:507
 msgid "while getting next inode"
 msgstr "trong khi lấy nút thông tin kế tiếp"
 
@@ -213,320 +213,329 @@
 msgid "%u inodes scanned.\n"
 msgstr "%u nút thông tin đã được quét.\n"
 
-#: e2fsck/journal.c:501
+#: e2fsck/journal.c:507
 msgid "reading journal superblock\n"
 msgstr "đang đọc siêu khối nhật ký\n"
 
-#: e2fsck/journal.c:558
+#: e2fsck/journal.c:564
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr "%s: không tìm thấy siêu khối nhật ký hợp lệ\n"
 
-#: e2fsck/journal.c:567
+#: e2fsck/journal.c:573
 #, c-format
 msgid "%s: journal too short\n"
 msgstr "%s: nhật ký quá ngắn\n"
 
-#: e2fsck/journal.c:841
+#: e2fsck/journal.c:860
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr "%s: đang phục hồi nhật ký\n"
 
-#: e2fsck/journal.c:843
+#: e2fsck/journal.c:862
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr "%s: sẽ không phục hồi nhật ký trong khi có tình trạng chỉ đọc\n"
 
-#: e2fsck/journal.c:864
+#: e2fsck/journal.c:887
 #, c-format
 msgid "while trying to re-open %s"
 msgstr "trong khi thử mở lại %s"
 
-#: e2fsck/message.c:109
+#: e2fsck/message.c:110
 msgid "aextended attribute"
 msgstr "athuộc tính đã mở rộng"
 
-#: e2fsck/message.c:110
+#: e2fsck/message.c:111
 msgid "Aerror allocating"
 msgstr "Agặp lỗi khi cấp phát"
 
-#: e2fsck/message.c:111
+#: e2fsck/message.c:112
 msgid "bblock"
 msgstr "bkhối"
 
-#: e2fsck/message.c:112
+#: e2fsck/message.c:113
 msgid "Bbitmap"
 msgstr "Bmảng ảnh"
 
-#: e2fsck/message.c:113
+#: e2fsck/message.c:114
 msgid "ccompress"
 msgstr "cnén"
 
-#: e2fsck/message.c:114
+#: e2fsck/message.c:115
 msgid "Cconflicts with some other fs @b"
 msgstr "Cxung đột với @b của hệ thống tập tin khác"
 
-#: e2fsck/message.c:115
+#: e2fsck/message.c:116
 msgid "iinode"
 msgstr "inút thông tin"
 
-#: e2fsck/message.c:116
+#: e2fsck/message.c:117
 msgid "Iillegal"
 msgstr "Icấm"
 
-#: e2fsck/message.c:117
+#: e2fsck/message.c:118
 msgid "jjournal"
 msgstr "jnhật ký"
 
-#: e2fsck/message.c:118
+#: e2fsck/message.c:119
 msgid "Ddeleted"
 msgstr "Dbị xoá"
 
-#: e2fsck/message.c:119
+#: e2fsck/message.c:120
 msgid "ddirectory"
 msgstr "dthư mục"
 
-#: e2fsck/message.c:120
+#: e2fsck/message.c:121
 msgid "eentry"
 msgstr "emục nhập"
 
-#: e2fsck/message.c:121
+#: e2fsck/message.c:122
 msgid "E@e '%Dn' in %p (%i)"
 msgstr "E@e '%Dn' trong %p (%i)"
 
-#: e2fsck/message.c:122
+#: e2fsck/message.c:123
 msgid "ffilesystem"
 msgstr "fhệ thống tập tin"
 
-#: e2fsck/message.c:123
+#: e2fsck/message.c:124
 msgid "Ffor @i %i (%Q) is"
 msgstr "Fcho @i %i (%Q) là"
 
-#: e2fsck/message.c:124
+#: e2fsck/message.c:125
 msgid "ggroup"
 msgstr "gnhóm"
 
-#: e2fsck/message.c:125
+#: e2fsck/message.c:126
 msgid "hHTREE @d @i"
 msgstr "hHCÂY @d @i"
 
-#: e2fsck/message.c:126
+#: e2fsck/message.c:127
 msgid "llost+found"
 msgstr "lmất+tìm"
 
-#: e2fsck/message.c:127
+#: e2fsck/message.c:128
 msgid "Lis a link"
 msgstr "Llà liên kết"
 
-#: e2fsck/message.c:128
+#: e2fsck/message.c:129
 msgid "mmultiply-claimed"
 msgstr "mđa tuyên bố"
 
-#: e2fsck/message.c:129
+#: e2fsck/message.c:130
 msgid "ninvalid"
 msgstr "nkhông hợp lệ"
 
-#: e2fsck/message.c:130
+#: e2fsck/message.c:131
 msgid "oorphaned"
 msgstr "ocôi cút"
 
-#: e2fsck/message.c:131
+#: e2fsck/message.c:132
 msgid "pproblem in"
 msgstr "pvấn đề trong"
 
-#: e2fsck/message.c:132
+#: e2fsck/message.c:133
 msgid "rroot @i"
 msgstr "r@i gốc"
 
-#: e2fsck/message.c:133
+#: e2fsck/message.c:134
 msgid "sshould be"
 msgstr "snên là"
 
-#: e2fsck/message.c:134
+#: e2fsck/message.c:135
 msgid "Ssuper@b"
 msgstr "Ssiêu @b"
 
-#: e2fsck/message.c:135
+#: e2fsck/message.c:136
 msgid "uunattached"
 msgstr "uchưa gắn nối"
 
-#: e2fsck/message.c:136
+#: e2fsck/message.c:137
 msgid "vdevice"
 msgstr "vthiết bị"
 
-#: e2fsck/message.c:137
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xphạm vi"
+
+#: e2fsck/message.c:139
 msgid "zzero-length"
 msgstr "zdài bằng không"
 
-#: e2fsck/message.c:148
+#: e2fsck/message.c:150
 msgid "<The NULL inode>"
 msgstr "<nút thông tin vô giá trị>"
 
-#: e2fsck/message.c:149
+#: e2fsck/message.c:151
 msgid "<The bad blocks inode>"
 msgstr "<nút thông tin khối hỏng>"
 
-#: e2fsck/message.c:151
+#: e2fsck/message.c:153
 msgid "<The ACL index inode>"
 msgstr "<nút thông tin chỉ mục ACL>"
 
-#: e2fsck/message.c:152
+#: e2fsck/message.c:154
 msgid "<The ACL data inode>"
 msgstr "<nút thông tin dữ liệu ACL>"
 
-#: e2fsck/message.c:153
+#: e2fsck/message.c:155
 msgid "<The boot loader inode>"
 msgstr "<nút thông tin bộ nạp khởi động>"
 
-#: e2fsck/message.c:154
+#: e2fsck/message.c:156
 msgid "<The undelete directory inode>"
 msgstr "<nút thông tin hủy xoá thư mục>"
 
-#: e2fsck/message.c:155
+#: e2fsck/message.c:157
 msgid "<The group descriptor inode>"
 msgstr "<nút thông tin mô tả nhóm>"
 
-#: e2fsck/message.c:156
+#: e2fsck/message.c:158
 msgid "<The journal inode>"
 msgstr "<nút thông tin nhật ký>"
 
-#: e2fsck/message.c:157
+#: e2fsck/message.c:159
 msgid "<Reserved inode 9>"
 msgstr "<nút thông tin được dành riêng 9>"
 
-#: e2fsck/message.c:158
+#: e2fsck/message.c:160
 msgid "<Reserved inode 10>"
 msgstr "<nút thông tin được dành riêng 10>"
 
-#: e2fsck/message.c:314
+#: e2fsck/message.c:323
 #, c-format
 msgid "regular file"
 msgstr "tập tin chuẩn"
 
-#: e2fsck/message.c:316
+#: e2fsck/message.c:325
 #, c-format
 msgid "directory"
 msgstr "thư mục"
 
-#: e2fsck/message.c:318
+#: e2fsck/message.c:327
 #, c-format
 msgid "character device"
 msgstr "thiết bị ký tự"
 
-#: e2fsck/message.c:320
+#: e2fsck/message.c:329
 #, c-format
 msgid "block device"
 msgstr "thiết bị khối"
 
-#: e2fsck/message.c:322
+#: e2fsck/message.c:331
 #, c-format
 msgid "named pipe"
 msgstr "ống dẫn có tên"
 
-#: e2fsck/message.c:324
+#: e2fsck/message.c:333
 #, c-format
 msgid "symbolic link"
 msgstr "liên kết tượng trưng"
 
-#: e2fsck/message.c:326
+#: e2fsck/message.c:335
 #, c-format
 msgid "socket"
 msgstr "ổ cắm"
 
-#: e2fsck/message.c:328
+#: e2fsck/message.c:337
 #, c-format
 msgid "unknown file type with mode 0%o"
 msgstr "kiểu tập tin không rõ với chế độ 0%o"
 
-#: e2fsck/pass1b.c:215
+#: e2fsck/pass1b.c:220
 msgid "multiply claimed inode map"
 msgstr "sơ đồ nút thông tin đa tuyên bố"
 
-#: e2fsck/pass1b.c:566 e2fsck/pass1b.c:703
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
 #, c-format
-msgid "internal error; can't find dup_blk for %u\n"
+msgid "internal error: can't find dup_blk for %u\n"
 msgstr "lỗi nội bộ : không tìm thấy khối trùng (dup_blk) cho %u\n"
 
-#: e2fsck/pass1b.c:746
+#: e2fsck/pass1b.c:757
 msgid "returned from clone_file_block"
 msgstr "đã trả lại từ khối tập tin nhái (clone_file_block)"
 
-#: e2fsck/pass1b.c:765
+#: e2fsck/pass1b.c:776
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %u"
 msgstr "lỗi nội bộ : không thể tra tìm mục ghi khối EA cho %u"
 
-#: e2fsck/pass1b.c:777
+#: e2fsck/pass1b.c:788
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr "lỗi nội bộ : không thể tra tìm mục ghi nút thông tin EA cho %u"
 
-#: e2fsck/pass1.c:404 e2fsck/pass2.c:770
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:782
 msgid "reading directory block"
 msgstr "đang đọc khối thư mục"
 
-#: e2fsck/pass1.c:521
+#: e2fsck/pass1.c:552
 msgid "in-use inode map"
 msgstr "sơ đồ nút thông tin đang được dùng"
 
-#: e2fsck/pass1.c:530
+#: e2fsck/pass1.c:561
 msgid "directory inode map"
 msgstr "sơ đồ nút thông tin thư mục"
 
-#: e2fsck/pass1.c:538
+#: e2fsck/pass1.c:569
 msgid "regular file inode map"
 msgstr "sơ đồ nút thông tin tập tin chuẩn"
 
-#: e2fsck/pass1.c:545
+#: e2fsck/pass1.c:576
 msgid "in-use block map"
 msgstr "sơ đồ khối đang được dùng"
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:630
 msgid "opening inode scan"
 msgstr "đang mở bản quét nút thông tin"
 
-#: e2fsck/pass1.c:623
+#: e2fsck/pass1.c:654
 msgid "getting next inode from scan"
 msgstr "đang lấy nút thông tin kế tiếp từ bản quét"
 
-#: e2fsck/pass1.c:1016
+#: e2fsck/pass1.c:1123
 msgid "Pass 1"
 msgstr "Lần qua 1"
 
-#: e2fsck/pass1.c:1075
+#: e2fsck/pass1.c:1180
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr "đang đọc khối gián tiếp của nút thông tin %u"
 
-#: e2fsck/pass1.c:1117
+#: e2fsck/pass1.c:1224
 msgid "bad inode map"
 msgstr "sơ đồ nút thông tin sai"
 
-#: e2fsck/pass1.c:1139
+#: e2fsck/pass1.c:1246
 msgid "inode in bad block map"
 msgstr "nút thông tin trong sơ đồ khối sai"
 
-#: e2fsck/pass1.c:1159
+#: e2fsck/pass1.c:1266
 msgid "imagic inode map"
 msgstr "sơ đồ nút thông tin ma thuật imagic"
 
-#: e2fsck/pass1.c:1186
+#: e2fsck/pass1.c:1293
 msgid "multiply claimed block map"
 msgstr "sơ đồ khối đa tuyên bố"
 
-#: e2fsck/pass1.c:1285
+#: e2fsck/pass1.c:1392
 msgid "ext attr block map"
 msgstr "sơ đồ khối ext attr (thuộc tính thêm?)"
 
-#: e2fsck/pass1.c:2072
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu (%c): mong đợi %6lu còn nhận %6lu vật lý (đếm khối %lld)\n"
+
+#: e2fsck/pass1.c:2449
 msgid "block bitmap"
 msgstr "mảng ảnh khối"
 
-#: e2fsck/pass1.c:2076
+#: e2fsck/pass1.c:2453
 msgid "inode bitmap"
 msgstr "mảng ảnh nút thông tin"
 
-#: e2fsck/pass1.c:2080
+#: e2fsck/pass1.c:2457
 msgid "inode table"
 msgstr "bảng nút thông tin"
 
@@ -534,27 +543,31 @@
 msgid "Pass 2"
 msgstr "Lần qua 2"
 
-#: e2fsck/pass3.c:79
+#: e2fsck/pass2.c:805
+msgid "Can not continue."
+msgstr "Không thể tiếp tục."
+
+#: e2fsck/pass3.c:76
 msgid "inode done bitmap"
 msgstr "mảng ảnh nút thông tin hoàn tất"
 
-#: e2fsck/pass3.c:90
+#: e2fsck/pass3.c:84
 msgid "Peak memory"
 msgstr "Bộ nhớ cao điểm"
 
-#: e2fsck/pass3.c:145
+#: e2fsck/pass3.c:134
 msgid "Pass 3"
 msgstr "Lần qua 3"
 
-#: e2fsck/pass3.c:333
+#: e2fsck/pass3.c:320
 msgid "inode loop detection bitmap"
 msgstr "mảng ảnh phát hiện vòng lặp nút thông tin"
 
-#: e2fsck/pass4.c:176
+#: e2fsck/pass4.c:191
 msgid "Pass 4"
 msgstr "Lần qua 4"
 
-#: e2fsck/pass5.c:70
+#: e2fsck/pass5.c:64
 msgid "Pass 5"
 msgstr "Lần qua 5"
 
@@ -846,11 +859,11 @@
 msgid "The Hurd does not support the filetype feature.\n"
 msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n"
 
-#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n
+#. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:187
 #, c-format
-msgid "@S has an @n ext3 @j (@i %i).\n"
-msgstr "@S có một @j ext3 @n (@i %i).\n"
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "@S có một @n @j (@i %i).\n"
 
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:192
@@ -872,106 +885,96 @@
 msgid "External @j does not support this @f\n"
 msgstr "@j bên ngoài không hỗ trợ @f này\n"
 
-#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
 #. @-expanded: format.\n
 #. @-expanded: It is also possible the journal superblock is corrupt.\n
 #: e2fsck/problem.c:212
 msgid ""
-"Ext3 @j @S is unknown type %N (unsupported).\n"
+"@f @j @S is unknown type %N (unsupported).\n"
 "It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"@S @j ext3 có kiểu lạ %N (không được hỗ trợ).\n"
+"@S @j @f có kiểu lạ %N (không được hỗ trợ).\n"
 "Rất có thể là bạn có một bản sao e2fsck cũ mà/hay không hỗ trợ định dạng @j này.\n"
-"It is also possible the @S @j is corrupt.\n"
+"Cũng có thể là @S @j bị hỏng.\n"
 
-#. @-expanded: Ext3 journal superblock is corrupt.\n
+#. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:220
-msgid "Ext3 @j @S is corrupt.\n"
-msgstr "@S @j ext3 bị hỏng.\n"
+msgid "@j @S is corrupt.\n"
+msgstr "@S @j bị hỏng.\n"
 
-#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:225
 #, c-format
-msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-msgstr "@S không có cờ has_@j, còn có @j ext3 %s.\n"
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "Cờ @S has_@j vẫn tốt, mà cũng có một @j %s.\n"
 
-#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:230
-msgid "@S has ext3 needs_recovery flag set, but no @j.\n"
-msgstr "@S đặt cờ ext3 needs_recovery, còn không có @j.\n"
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "@S đặt cờ needs_recovery, còn không có @j.\n"
 
-#. @-expanded: ext3 recovery flag is clear, but journal has data.\n
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:235
-msgid "ext3 recovery flag is clear, but @j has data.\n"
-msgstr "Cờ phục hồi ext3 là rõ, còn @j có dữ liệu.\n"
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "Cờ @S needs_recovery vẫn tốt, còn @j có dữ liệu.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:240
 msgid "Clear @j"
 msgstr "Xoá sạch @j"
 
-#. @-expanded: Run journal anyway
-#: e2fsck/problem.c:245
-msgid "Run @j anyway"
-msgstr "Vẫn chạy @j"
-
-#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
-#: e2fsck/problem.c:250
-msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr "Chưa đặt cờ phục hồi trong @S dự trữ nên vẫn chạy @j.\n"
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "@f đặt (các) cờ tính năng, còn là @f bản sửa đổi 0."
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
-#: e2fsck/problem.c:255
+#: e2fsck/problem.c:250
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 msgstr "@i @o %s %i (uid=%Iu, gid=%Ig, chế độ=%Im, cỡ=%Is)\n"
 
 #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:260
+#: e2fsck/problem.c:255
 msgid "@I @b #%B (%b) found in @o @i %i.\n"
 msgstr "@b @I #%B (%b) tìm thấy trong @i @o %i.\n"
 
 #. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
-#: e2fsck/problem.c:265
+#: e2fsck/problem.c:260
 msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
 msgstr "Đã xoá sạch @b #%B (%b) được tìm trong @i @o %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
-#: e2fsck/problem.c:270
+#: e2fsck/problem.c:265
 #, c-format
 msgid "@I @o @i %i in @S.\n"
 msgstr "@i @o %i @l trong @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
-#: e2fsck/problem.c:275
+#: e2fsck/problem.c:270
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
 msgstr "@I @i %i in @o @i list.\n"
 
-#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
-#: e2fsck/problem.c:280 e2fsck/problem.c:613
-msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "@f đặt (các) cờ tính năng, còn là @f bản sửa đổi 0."
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "@S @j đặt một cờ tính năng chỉ đọc không rõ.\n"
 
-#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n
-#: e2fsck/problem.c:285
-msgid "Ext3 @j @S has an unknown read-only feature flag set.\n"
-msgstr "@S @j ext3 đặt một cờ tính năng chỉ đọc lạ.\n"
-
-#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n
-#: e2fsck/problem.c:290
-msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n"
-msgstr "@S @j ext3 đặt một cờ tính năng không tương thích lạ.\n"
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "@S @j đặt một cờ tính năng không tương thích không rõ.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
-#: e2fsck/problem.c:295
+#: e2fsck/problem.c:285
 msgid "@j version not supported by this e2fsck.\n"
 msgstr "Phiên bản @j không hỗ trợ trong e2fsck này.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:300
+#: e2fsck/problem.c:290
 #, c-format
 msgid ""
 "Moving @j from /%s to hidden @i.\n"
@@ -982,7 +985,7 @@
 
 #. @-expanded: Error moving journal: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:305
+#: e2fsck/problem.c:295
 #, c-format
 msgid ""
 "Error moving @j: %m\n"
@@ -994,7 +997,7 @@
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
 #. @-expanded: Clearing fields beyond the V1 journal superblock...\n
 #. @-expanded: \n
-#: e2fsck/problem.c:310
+#: e2fsck/problem.c:300
 msgid ""
 "Found @n V2 @j @S fields (from V1 @j).\n"
 "Clearing fields beyond the V1 @j @S...\n"
@@ -1004,6 +1007,16 @@
 "Đang xoá sạch các trường nằm ở bên kia @S @j pb1...\n"
 "\n"
 
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+msgid "Run @j anyway"
+msgstr "Vẫn chạy @j"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Chưa đặt cờ phục hồi trong @S dự trữ nên vẫn chạy @j.\n"
+
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
 #: e2fsck/problem.c:316
@@ -1060,118 +1073,155 @@
 "Đang thêm mẹo dirhash vào @f.\n"
 "\n"
 
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Mô tả @g %g có tổng kiểm sai.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "Mô tả @g %g có nhãn là chưa sơ khởi mà không có tập tính năng.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "@B @b của @g %g chưa sơ khởi nhưng đang dùng @B @i.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "Mô tả @g %g sai đếm các nút thông tin chưa dùng %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Chưa sơ khởi @B @b @g cuối cùng.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Giao dịch nhật ký %i bị hỏng nên hủy bỏ tiến trình phát lại.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr "Cờ « test_fs » được đặt (và ext4 sẵn sàng)"
+
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
-#: e2fsck/problem.c:358
+#: e2fsck/problem.c:392
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
 msgstr "Lần qua 1: đang kiểm tra các @i, @b và kích cỡ\n"
 
 #. @-expanded: root inode is not a directory.  
-#: e2fsck/problem.c:362
+#: e2fsck/problem.c:396
 msgid "@r is not a @d.  "
 msgstr "@r không phải @d.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
-#: e2fsck/problem.c:367
+#: e2fsck/problem.c:401
 msgid "@r has dtime set (probably due to old mke2fs).  "
 msgstr "@r đặt dtime (rất có thể do mkd2fs cũ).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
-#: e2fsck/problem.c:372
+#: e2fsck/problem.c:406
 msgid "Reserved @i %i (%Q) has @n mode.  "
 msgstr "@i %i đã dành riêng (%Q) có chế độ @n."
 
 #. @-expanded: deleted inode %i has zero dtime.  
-#: e2fsck/problem.c:377
+#: e2fsck/problem.c:411
 #, c-format
 msgid "@D @i %i has zero dtime.  "
 msgstr "@i @D %i có dtime bằng không.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
-#: e2fsck/problem.c:382
+#: e2fsck/problem.c:416
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
 msgstr "@i %i đang được dùng, còn đặt dtime.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
-#: e2fsck/problem.c:387
+#: e2fsck/problem.c:421
 #, c-format
 msgid "@i %i is a @z @d.  "
 msgstr "@i %i là @d @z"
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:392
+#: e2fsck/problem.c:426
 msgid "@g %g's @b @B at %b @C.\n"
 msgstr "@B @b của @g %g tại %b @C.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:397
+#: e2fsck/problem.c:431
 msgid "@g %g's @i @B at %b @C.\n"
 msgstr "@B @i của @g %g ở %b @c.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
-#: e2fsck/problem.c:402
+#: e2fsck/problem.c:436
 msgid "@g %g's @i table at %b @C.\n"
 msgstr "Bảng @i của @g %g ở %b @C.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
-#: e2fsck/problem.c:407
+#: e2fsck/problem.c:441
 msgid "@g %g's @b @B (%b) is bad.  "
 msgstr "@b @B (%b) của @g %g là sai"
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
-#: e2fsck/problem.c:412
+#: e2fsck/problem.c:446
 msgid "@g %g's @i @B (%b) is bad.  "
 msgstr "@B @i (%b) của @g %g là sai."
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
-#: e2fsck/problem.c:417
+#: e2fsck/problem.c:451
 msgid "@i %i, i_size is %Is, @s %N.  "
 msgstr "@i %i, i_size là %Is, @s %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
-#: e2fsck/problem.c:422
+#: e2fsck/problem.c:456
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
 msgstr "@i %i, i_@bs là %Ib, @s %N.  "
 
 #. @-expanded: illegal block #%B (%b) in inode %i.  
-#: e2fsck/problem.c:427
+#: e2fsck/problem.c:461
 msgid "@I @b #%B (%b) in @i %i.  "
 msgstr "@b @I #%B (%b) trong @i %i.  "
 
 #. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
-#: e2fsck/problem.c:432
+#: e2fsck/problem.c:466
 msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
 msgstr "@b #%B (%b) đè lên siêu dữ liệu @f trong @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
-#: e2fsck/problem.c:437
+#: e2fsck/problem.c:471
 #, c-format
 msgid "@i %i has illegal @b(s).  "
 msgstr "@i %i có @b cấm.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
-#: e2fsck/problem.c:442
+#: e2fsck/problem.c:476
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
 msgstr "Quá nhiều @b cấm trong @i %i.\n"
 
 #. @-expanded: illegal block #%B (%b) in bad block inode.  
-#: e2fsck/problem.c:447
+#: e2fsck/problem.c:481
 msgid "@I @b #%B (%b) in bad @b @i.  "
 msgstr "@b @i #%B (%b) trong @i @b sai. "
 
 #. @-expanded: Bad block inode has illegal block(s).  
-#: e2fsck/problem.c:452
+#: e2fsck/problem.c:486
 msgid "Bad @b @i has illegal @b(s).  "
 msgstr "@i @b sai có @b cấm. "
 
 #. @-expanded: Duplicate or bad block in use!\n
-#: e2fsck/problem.c:457
+#: e2fsck/problem.c:491
 msgid "Duplicate or bad @b in use!\n"
 msgstr "@b trùng hay sai đang được dùng.\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
-#: e2fsck/problem.c:462
+#: e2fsck/problem.c:496
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
 msgstr "@b sai %b được dùng làm @b gián tiếp của @i @b.  "
 
@@ -1179,7 +1229,7 @@
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
 #. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
 #. @-expanded: in the filesystem.\n
-#: e2fsck/problem.c:467
+#: e2fsck/problem.c:501
 msgid ""
 "\n"
 "The bad @b @i has probably been corrupted.  You probably\n"
@@ -1192,7 +1242,7 @@
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
-#: e2fsck/problem.c:474
+#: e2fsck/problem.c:508
 msgid ""
 "\n"
 "If the @b is really bad, the @f can not be fixed.\n"
@@ -1203,7 +1253,7 @@
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:479
+#: e2fsck/problem.c:513
 msgid ""
 "You can remove this @b from the bad @b list and hope\n"
 "that the @b is really OK.  But there are no guarantees.\n"
@@ -1214,121 +1264,121 @@
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
-#: e2fsck/problem.c:485
+#: e2fsck/problem.c:519
 msgid "The primary @S (%b) is on the bad @b list.\n"
 msgstr "@S chính (%b) nằm trên danh sách các @b sai.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
-#: e2fsck/problem.c:490
+#: e2fsck/problem.c:524
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
 msgstr "Khối %b trong những mô tả @g chính có nằm trong danh sách các @b sai.\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
-#: e2fsck/problem.c:496
+#: e2fsck/problem.c:530
 msgid "Warning: Group %g's @S (%b) is bad.\n"
 msgstr "Cảnh báo : @S của @g %g (%b) là sai.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
-#: e2fsck/problem.c:501
+#: e2fsck/problem.c:535
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
 msgstr "Cảnh báo : bản sao các mô tả @g của nhóm %g có một @b sai (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
-#: e2fsck/problem.c:507
+#: e2fsck/problem.c:541
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
 msgstr "Lỗi lập trình ? @b %b được tuyên bố, không có lý do, trong process_bad_@b\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
-#: e2fsck/problem.c:513
+#: e2fsck/problem.c:547
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
 msgstr "@A %N @b kề nhau trong @g @b %g cho %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
-#: e2fsck/problem.c:518
+#: e2fsck/problem.c:552
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
 msgstr "@A bộ đệm @b để định vị lại %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
-#: e2fsck/problem.c:523
+#: e2fsck/problem.c:557
 msgid "Relocating @g %g's %s from %b to %c...\n"
 msgstr "Đang định vị lại %s của @g %g từ %b sang %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
-#: e2fsck/problem.c:528
+#: e2fsck/problem.c:562
 #, c-format
 msgid "Relocating @g %g's %s to %c...\n"
 msgstr "Đang định vị lại %2$s của @g %1$g sang %3$c...\n"
 
 #. @-expanded: Warning: could not read block %b of %s: %m\n
-#: e2fsck/problem.c:533
+#: e2fsck/problem.c:567
 msgid "Warning: could not read @b %b of %s: %m\n"
 msgstr "Cảnh báo : không thể đọc @b %b trên %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
-#: e2fsck/problem.c:538
+#: e2fsck/problem.c:572
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr "Cảnh báo : không thể ghi @b %b cho %s: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
-#: e2fsck/problem.c:543 e2fsck/problem.c:1280
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
 msgid "@A @i @B (%N): %m\n"
 msgstr "@A @B @i (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
-#: e2fsck/problem.c:548
+#: e2fsck/problem.c:582
 msgid "@A @b @B (%N): %m\n"
 msgstr "@A @B @b (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
-#: e2fsck/problem.c:553
+#: e2fsck/problem.c:587
 #, c-format
 msgid "@A icount link information: %m\n"
 msgstr "@A thông tin liên kết icount: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
-#: e2fsck/problem.c:558
+#: e2fsck/problem.c:592
 #, c-format
 msgid "@A @d @b array: %m\n"
 msgstr "@A mảng @d @d: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
-#: e2fsck/problem.c:563
+#: e2fsck/problem.c:597
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
 msgstr "Gặp lỗi khi quét các @i (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
-#: e2fsck/problem.c:568
+#: e2fsck/problem.c:602
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b trong @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
-#: e2fsck/problem.c:573
+#: e2fsck/problem.c:607
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
 msgstr "Gặp lỗi khi cất giữ thông tin đếm @i (@i=%i, đếm=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
-#: e2fsck/problem.c:578
+#: e2fsck/problem.c:612
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
 msgstr "Gặp lỗi khi cất giữ thông tin @d @b (@i=%i, @b=%b, số=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
-#: e2fsck/problem.c:584
+#: e2fsck/problem.c:618
 #, c-format
 msgid "Error reading @i %i: %m\n"
 msgstr "Gặp lỗi khi đọc @i %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
-#: e2fsck/problem.c:592
+#: e2fsck/problem.c:626
 #, c-format
 msgid "@i %i has imagic flag set.  "
 msgstr "@i %i đặt cờ ma thuật imagic.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
-#: e2fsck/problem.c:597
+#: e2fsck/problem.c:631
 #, c-format
 msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
@@ -1339,151 +1389,151 @@
 "chỉ phu thêm (append-only)."
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
-#: e2fsck/problem.c:603
+#: e2fsck/problem.c:637
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
 msgstr "@i %i đặt cờ @c trên @f mà không hỗ trợ khả năng @c."
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
-#: e2fsck/problem.c:608
+#: e2fsck/problem.c:642
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
 msgstr "@i (@v/ổ cắm/FIFO) %i có kích cỡ không phải số không."
 
 #. @-expanded: journal inode is not in use, but contains data.  
-#: e2fsck/problem.c:618
+#: e2fsck/problem.c:652
 msgid "@j @i is not in use, but contains data.  "
 msgstr "@i @j không đang được dùng, còn chứa dữ liệu."
 
 #. @-expanded: journal is not regular file.  
-#: e2fsck/problem.c:623
+#: e2fsck/problem.c:657
 msgid "@j is not regular file.  "
 msgstr "@j không phải tập tin chuẩn.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
-#: e2fsck/problem.c:628
+#: e2fsck/problem.c:662
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
 msgstr "@i %i đã thuộc về sanh sách @i @o.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
-#: e2fsck/problem.c:634
+#: e2fsck/problem.c:668
 msgid "@is that were part of a corrupted orphan linked list found.  "
 msgstr "Tìm thấy các @i đã thuộc về danh sách đã liên kết côi cút bị hỏng."
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
-#: e2fsck/problem.c:639
+#: e2fsck/problem.c:673
 msgid "@A refcount structure (%N): %m\n"
 msgstr "@A cấu trúc refcount (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
-#: e2fsck/problem.c:644
+#: e2fsck/problem.c:678
 msgid "Error reading @a @b %b for @i %i.  "
 msgstr "Gặp lỗi khi đọc @b @a %b cho @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
-#: e2fsck/problem.c:649
+#: e2fsck/problem.c:683
 msgid "@i %i has a bad @a @b %b.  "
 msgstr "@i %i có một @b @a %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
-#: e2fsck/problem.c:654
+#: e2fsck/problem.c:688
 msgid "Error reading @a @b %b (%m).  "
 msgstr "Gặp lỗi khi đọc @b @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %B, should be %N.  
-#: e2fsck/problem.c:659
+#: e2fsck/problem.c:693
 msgid "@a @b %b has reference count %B, @s %N.  "
 msgstr "@b @a %b có số đếm tham chiếu %B, @s %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
-#: e2fsck/problem.c:664
+#: e2fsck/problem.c:698
 msgid "Error writing @a @b %b (%m).  "
 msgstr "Gặp lỗi khi ghi @b @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
-#: e2fsck/problem.c:669
+#: e2fsck/problem.c:703
 msgid "@a @b %b has h_@bs > 1.  "
 msgstr "@b @a %b có h_@b > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
-#: e2fsck/problem.c:674
+#: e2fsck/problem.c:708
 msgid "@A @a @b %b.  "
 msgstr "@A @b @a %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
-#: e2fsck/problem.c:679
+#: e2fsck/problem.c:713
 msgid "@a @b %b is corrupt (allocation collision).  "
 msgstr "@b @a %b bị hỏng (xung đột cấp phát)."
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
-#: e2fsck/problem.c:684
+#: e2fsck/problem.c:718
 msgid "@a @b %b is corrupt (@n name).  "
 msgstr "@b @a %b bị hỏng (tên @n).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
-#: e2fsck/problem.c:689
+#: e2fsck/problem.c:723
 msgid "@a @b %b is corrupt (@n value).  "
 msgstr "@b @a %b bị hỏng (giá trị @n).  "
 
 #. @-expanded: inode %i is too big.  
-#: e2fsck/problem.c:694
+#: e2fsck/problem.c:728
 #, c-format
 msgid "@i %i is too big.  "
 msgstr "@i %i quá lớn."
 
 #. @-expanded: block #%B (%b) causes directory to be too big.  
-#: e2fsck/problem.c:698
+#: e2fsck/problem.c:732
 msgid "@b #%B (%b) causes @d to be too big.  "
 msgstr "@b #%B (%b) gây ra @d quá lớn."
 
 #. @-expanded: block #%B (%b) causes file to be too big.  
-#: e2fsck/problem.c:703
+#: e2fsck/problem.c:737
 msgid "@b #%B (%b) causes file to be too big.  "
 msgstr "@b #%B (%b) gây ra tập tin quá lớn."
 
 #. @-expanded: block #%B (%b) causes symlink to be too big.  
-#: e2fsck/problem.c:708
+#: e2fsck/problem.c:742
 msgid "@b #%B (%b) causes symlink to be too big.  "
 msgstr "@b #%B (%b) gây ra liên kết tượng trưng quá lớn."
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
-#: e2fsck/problem.c:713
+#: e2fsck/problem.c:747
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
 msgstr "@i %i đặt cờ INDEX_FL trên @f không có hỗ trợ htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
-#: e2fsck/problem.c:718
+#: e2fsck/problem.c:752
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
 msgstr "@i %i đặt cờ INDEX_FL nhưng không phải @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
-#: e2fsck/problem.c:723
+#: e2fsck/problem.c:757
 #, c-format
 msgid "@h %i has an @n root node.\n"
 msgstr "@h %i có một nút gốc @n.\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
-#: e2fsck/problem.c:728
+#: e2fsck/problem.c:762
 msgid "@h %i has an unsupported hash version (%N)\n"
 msgstr "@h %i có một phiên bản băm không được hỗ trợ (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
-#: e2fsck/problem.c:733
+#: e2fsck/problem.c:767
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
 msgstr "@h %i dùng cờ nút gốc htree không tương thích.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
-#: e2fsck/problem.c:738
+#: e2fsck/problem.c:772
 msgid "@h %i has a tree depth (%N) which is too big\n"
 msgstr "@h %i có độ sâu cây (%N) quá lớn\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
-#: e2fsck/problem.c:743
+#: e2fsck/problem.c:777
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
@@ -1492,50 +1542,124 @@
 "siêu dữ liệu @f.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
-#: e2fsck/problem.c:749
+#: e2fsck/problem.c:783
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
 msgstr "Việc tạo (lại) sự thay đổi kích cỡ @i bị lỗi: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
-#: e2fsck/problem.c:754
+#: e2fsck/problem.c:788
 msgid "@i %i has a extra size (%IS) which is @n\n"
 msgstr "@i %i có một kích cỡ thêm (%IS) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
-#: e2fsck/problem.c:759
+#: e2fsck/problem.c:793
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
 msgstr "@a trong @i %i có một namelen (%N) @n\n"
 
-#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
-#: e2fsck/problem.c:764
-msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "@a trong @i %i có một kích cỡ giá trị (%N) @n\n"
-
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
-#: e2fsck/problem.c:769
+#: e2fsck/problem.c:798
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
 msgstr "@a trong @i %i có một hiệu giá trị (%N) @n\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:774
+#: e2fsck/problem.c:803
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
 msgstr "@a trong @i %i có một giá trị @b (%N) @n (phải là 0)\n"
 
-#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n
-#: e2fsck/problem.c:779
-msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-msgstr "@a trong @i %i có một số băm (%N) @n (phải là 0)\n"
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "@a trong @i %i có một kích cỡ giá trị (%N) @n\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "@a trong @i %i có một chuỗi duy nhất (%N) mà @n\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
-#: e2fsck/problem.c:784
+#: e2fsck/problem.c:818
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
 msgstr "@i %i là %It nhưng hình như nó thực sự là thư mục.\n"
 
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Gặp lỗi khi đọc qua cây @x trong @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+"Không lặp lại tầm trong @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"@i %i có một phạm vi @n\n"
+"\t(@b hợp lý %c, @b vật lý @n %b, dài %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"@i %i có một phạm vi @n\n"
+"\t(@b hợp lý %c, @b vật lý %b, dài @n %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "@i %i đặt cờ EXTENTS_FL trên @f mà không hỗ trợ phạm vi.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "@i %i theo định dạng phạm vi, còn @S thiếu tính năng phạm vi (EXTENTS)\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "@i %i thiếu EXTENTS_FL, nhưng theo định dạng phạm vi\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Liên kết tượng trưng nhanh %i đã đặt EXTENTS_FL.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"@i %i có các phạm vi sai thứ tự\n"
+"\t(@b hợp lý %c, @b vật lý %b, dài %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr "@i %i có một nút tầm không hợp lệ (blk %b, lblk %c)\n"
+
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
-#: e2fsck/problem.c:791
+#: e2fsck/problem.c:875
 msgid ""
 "\n"
 "Running additional passes to resolve @bs claimed by more than one @i...\n"
@@ -1547,46 +1671,46 @@
 "Lần qua 1B: đang quét lại tìm @b @m.\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
-#: e2fsck/problem.c:797
+#: e2fsck/problem.c:881
 #, c-format
 msgid "@m @b(s) in @i %i:"
 msgstr "@b @m trong @i %i:"
 
-#: e2fsck/problem.c:812
+#: e2fsck/problem.c:896
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr "Gặp lỗi khi quét các nút thông tin (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
-#: e2fsck/problem.c:817
+#: e2fsck/problem.c:901
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr "@A @B @i (@i_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
-#: e2fsck/problem.c:822
+#: e2fsck/problem.c:906
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b trong @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
-#: e2fsck/problem.c:827 e2fsck/problem.c:1143
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi điều chỉnh số đếm tham chiếu cho @b @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
-#: e2fsck/problem.c:833
+#: e2fsck/problem.c:917
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr "Lần qua 1C: đang quét các thư mục tìm @i có @b @m\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
-#: e2fsck/problem.c:839
+#: e2fsck/problem.c:923
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr "Lần qua 1D: đang điều hoà các @b @m\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
-#: e2fsck/problem.c:844
+#: e2fsck/problem.c:928
 msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %B @m @b(s), shared with %N file(s):\n"
@@ -1595,18 +1719,18 @@
 "  có %B @b @m, chia sẻ với %N tập tin:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
-#: e2fsck/problem.c:850
+#: e2fsck/problem.c:934
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr "\t%Q (@i #%i, giờ sửa đổi %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
-#: e2fsck/problem.c:855
+#: e2fsck/problem.c:939
 msgid "\t<@f metadata>\n"
 msgstr "\t<siêu dữ liệu @f>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
-#: e2fsck/problem.c:860
+#: e2fsck/problem.c:944
 msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
@@ -1616,7 +1740,7 @@
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:865
+#: e2fsck/problem.c:949
 msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
@@ -1624,314 +1748,315 @@
 "@b @m đã được gán lại hay nhái.\n"
 "\n"
 
-#: e2fsck/problem.c:878
+#: e2fsck/problem.c:962
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr "Không thể nhái theo tập tin: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
-#: e2fsck/problem.c:884
+#: e2fsck/problem.c:968
 msgid "Pass 2: Checking @d structure\n"
 msgstr "Lần qua 2: đang kiểm tra cấu trúc @d\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
-#: e2fsck/problem.c:889
+#: e2fsck/problem.c:973
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr "Con số @i @n cho dấu chấm « . » trong @i @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
-#: e2fsck/problem.c:894
+#: e2fsck/problem.c:978
 msgid "@E has @n @i #: %Di.\n"
 msgstr "@E có số hiệu @i @n: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
-#: e2fsck/problem.c:899
+#: e2fsck/problem.c:983
 msgid "@E has @D/unused @i %Di.  "
 msgstr "@E có @i @D/chưa dùng %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
-#: e2fsck/problem.c:904
+#: e2fsck/problem.c:988
 msgid "@E @L to '.'  "
 msgstr "@E @L đến « . »  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
-#: e2fsck/problem.c:909
+#: e2fsck/problem.c:993
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr "@E chỉ tới @i (%Di) nằm trong @b sai.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
-#: e2fsck/problem.c:914
+#: e2fsck/problem.c:998
 msgid "@E @L to @d %P (%Di).\n"
 msgstr "@E @L đến @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
-#: e2fsck/problem.c:919
+#: e2fsck/problem.c:1003
 msgid "@E @L to the @r.\n"
 msgstr "@E @L tới @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
-#: e2fsck/problem.c:924
+#: e2fsck/problem.c:1008
 msgid "@E has illegal characters in its name.\n"
 msgstr "@E có tên chứa ký tự cấm.\n"
 
 #. @-expanded: Missing '.' in directory inode %i.\n
-#: e2fsck/problem.c:929
+#: e2fsck/problem.c:1013
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
 msgstr "Thiếu « . » trong @i @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
-#: e2fsck/problem.c:934
+#: e2fsck/problem.c:1018
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
 msgstr "Thiếu « .. » trong @i @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
-#: e2fsck/problem.c:939
+#: e2fsck/problem.c:1023
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr "@e '%Dn' thứ nhất (@i=%Di) trong @i @d %i (%p) @s « . »\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
-#: e2fsck/problem.c:944
+#: e2fsck/problem.c:1028
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr "@e '%Dn' thứ hai (@i=%Di) trong @i @d %i @s « .. »\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
-#: e2fsck/problem.c:949
+#: e2fsck/problem.c:1033
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr "Địa chỉ i_faddr cho nút injode %i (%Q) là %IF, còn nên là số không.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
-#: e2fsck/problem.c:954
+#: e2fsck/problem.c:1038
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr "i_file_acl @F %If, @s số không.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:1043
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr "i_dir_acl @F %Id, @s số không.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:964
+#: e2fsck/problem.c:1048
 msgid "i_frag @F %N, @s zero.\n"
 msgstr "i_frag @F %N, @s số không.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:969
+#: e2fsck/problem.c:1053
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr "i_fsize @F %N, @s số không.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:1058
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr "@i %i (%Q) có chế độ @n (%Im).\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:1063
 msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
 msgstr "@i @d %i, @b %B, hiệu %N: @d bị hỏng\n"
 
 #. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:1068
 msgid "@d @i %i, @b %B, offset %N: filename too long\n"
 msgstr "@i @d %i, @b %B, hiệu %N: tên tập tin quá dài\n"
 
 #. @-expanded: directory inode %i has an unallocated block #%B.  
-#: e2fsck/problem.c:989
+#: e2fsck/problem.c:1073
 msgid "@d @i %i has an unallocated @b #%B.  "
 msgstr "@i @d %i có một @b #%B chưa cấp phát."
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1078
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @d « . » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
-#: e2fsck/problem.c:999
+#: e2fsck/problem.c:1083
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr "@e @d « .. » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
-#: e2fsck/problem.c:1004
+#: e2fsck/problem.c:1088
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr "@i %i (%Q) là @v ký tự @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
-#: e2fsck/problem.c:1009
+#: e2fsck/problem.c:1093
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr "@i %i (%Q) là @v @b @I.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
-#: e2fsck/problem.c:1014
+#: e2fsck/problem.c:1098
 msgid "@E is duplicate '.' @e.\n"
 msgstr "@E là @e « . » trùng.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
-#: e2fsck/problem.c:1019
+#: e2fsck/problem.c:1103
 msgid "@E is duplicate '..' @e.\n"
 msgstr "@E là @e « .. » trùng.\n"
 
-#: e2fsck/problem.c:1024 e2fsck/problem.c:1305
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr "Lỗi nội bộ : không tìm thấy thông tin thư mục (dir_info) về %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
-#: e2fsck/problem.c:1029
+#: e2fsck/problem.c:1113
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr "@E có rec_len %Dr, @s %N.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
-#: e2fsck/problem.c:1034
+#: e2fsck/problem.c:1118
 #, c-format
 msgid "@A icount structure: %m\n"
 msgstr "@A cấu trúc icount: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1123
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
 msgstr "Gặp lỗi khi lặp lại trên các @b @d: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1044
+#: e2fsck/problem.c:1128
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi đọc @b @d %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
-#: e2fsck/problem.c:1049
+#: e2fsck/problem.c:1133
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr "Gặp lỗi khi ghi @b @d %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
-#: e2fsck/problem.c:1054
+#: e2fsck/problem.c:1138
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr "@A @b @d mới cho @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
-#: e2fsck/problem.c:1059
+#: e2fsck/problem.c:1143
 #, c-format
 msgid "Error deallocating @i %i: %m\n"
 msgstr "Gặp lỗi khi hủy cấp phát @i %i: %m\n"
 
-#. @-expanded: directory entry for '.' is big.  
-#: e2fsck/problem.c:1064
-msgid "@d @e for '.' is big.  "
-msgstr "@e @d lớn cho « . »."
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "@d @e đối với '.' trong %p (%i) quá lớn.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
-#: e2fsck/problem.c:1069
+#: e2fsck/problem.c:1153
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr "@i %i (%Q) là một FIFO @I.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
-#: e2fsck/problem.c:1074
+#: e2fsck/problem.c:1158
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr "@i %i (%Q) là một ổ cắm @I.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
-#: e2fsck/problem.c:1079
+#: e2fsck/problem.c:1163
 msgid "Setting filetype for @E to %N.\n"
 msgstr "Đăng đặt kiểu tập tin cho @E thành %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
-#: e2fsck/problem.c:1084
+#: e2fsck/problem.c:1168
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr "@E có kiểu tập tin không đúng (đã %Dt, @s %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
-#: e2fsck/problem.c:1089
+#: e2fsck/problem.c:1173
 msgid "@E has filetype set.\n"
 msgstr "@E đặt kiểu tập tin.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
-#: e2fsck/problem.c:1094
+#: e2fsck/problem.c:1178
 msgid "@E has a @z name.\n"
 msgstr "@E có tên @z.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
-#: e2fsck/problem.c:1099
+#: e2fsck/problem.c:1183
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr "Liên kết tượng trưng %Q (@i #%i) @n.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
-#: e2fsck/problem.c:1104
+#: e2fsck/problem.c:1188
 msgid "@a @b @F @n (%If).\n"
 msgstr "@a @b @F @n (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
-#: e2fsck/problem.c:1109
+#: e2fsck/problem.c:1193
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr "@f chứa các tập tin lớn còn thiếu cờ LARGE_FILE trong @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
-#: e2fsck/problem.c:1114
+#: e2fsck/problem.c:1198
 msgid "@p @h %d: node (%B) not referenced\n"
 msgstr "@p @h %d: nút (%B) không có tham chiếu đến nó\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
-#: e2fsck/problem.c:1119
+#: e2fsck/problem.c:1203
 msgid "@p @h %d: node (%B) referenced twice\n"
 msgstr "@p @h %d: nút (%B) có hai tham chiếu đến nó\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
-#: e2fsck/problem.c:1124
+#: e2fsck/problem.c:1208
 msgid "@p @h %d: node (%B) has bad min hash\n"
 msgstr "@p @h %d: nut (%B) có băm tối thiểu sai\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
-#: e2fsck/problem.c:1129
+#: e2fsck/problem.c:1213
 msgid "@p @h %d: node (%B) has bad max hash\n"
 msgstr "@p @h %d: nút (%B) có băm tối đa sai\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
-#: e2fsck/problem.c:1134
+#: e2fsck/problem.c:1218
 msgid "@n @h %d (%q).  "
 msgstr "@h @n %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
-#: e2fsck/problem.c:1138
+#: e2fsck/problem.c:1222
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr "@p @h %d (%q): số @b sai %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
-#: e2fsck/problem.c:1148
+#: e2fsck/problem.c:1232
 #, c-format
 msgid "@p @h %d: root node is @n\n"
 msgstr "@p @h %d: nút gốc @n\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
-#: e2fsck/problem.c:1153
+#: e2fsck/problem.c:1237
 msgid "@p @h %d: node (%B) has @n limit (%N)\n"
 msgstr "@p @h %d: nút (%B) có sự hạn chế @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
-#: e2fsck/problem.c:1158
+#: e2fsck/problem.c:1242
 msgid "@p @h %d: node (%B) has @n count (%N)\n"
 msgstr "@p @h %d: nút (%B) có số đếm @n (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
-#: e2fsck/problem.c:1163
+#: e2fsck/problem.c:1247
 msgid "@p @h %d: node (%B) has an unordered hash table\n"
 msgstr "@p @h %d: nút (%B) có bảng băm không có thứ tự\n"
 
-#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n
-#: e2fsck/problem.c:1168
-msgid "@p @h %d: node (%B) has @n depth\n"
-msgstr "@p @h %d: nút (%B) có độ sâu @n\n"
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p @h %d: nút (%B) có độ sâu @n (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
-#: e2fsck/problem.c:1173
+#: e2fsck/problem.c:1257
 msgid "Duplicate @E found.  "
 msgstr "Tìm thấy @E trùng.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
-#: e2fsck/problem.c:1178
+#: e2fsck/problem.c:1262
 #, no-c-format
 msgid ""
 "@E has a non-unique filename.\n"
@@ -1943,7 +2068,7 @@
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1183
+#: e2fsck/problem.c:1267
 msgid ""
 "Duplicate @e '%Dn' found.\n"
 "\tMarking %p (%i) to be rebuilt.\n"
@@ -1954,96 +2079,116 @@
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
-#: e2fsck/problem.c:1188
+#: e2fsck/problem.c:1272
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr "i_blocks_hi @F %N, @s số không.\n"
 
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Gặp @b bất thường trong @h %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@E tham chiếu đến @i %Di trong @g %g ở vị trí đặt _INODE_UNINIT.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@E tham chiếu đến @i %Di được tìm trong vùng nút thông tin không dùng của @g %g.\n"
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr "i_file_acl_hi @F %N, @s số không.\n"
+
 #. @-expanded: Pass 3: Checking directory connectivity\n
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1298
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr "Lần qua 3: đang kiểm tra khả năng kết nối của @d\n"
 
 #. @-expanded: root inode not allocated.  
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1303
 msgid "@r not allocated.  "
 msgstr "Chưa cấp phát @r."
 
 #. @-expanded: No room in lost+found directory.  
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1308
 msgid "No room in @l @d.  "
 msgstr "Không có chỗ còn rảnh trong @d @l."
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1313
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr "@i @d %i không được kết nối (%p)\n"
 
 #. @-expanded: /lost+found not found.  
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1318
 msgid "/@l not found.  "
 msgstr "/@l không tìm thấy."
 
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1323
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr "« .. » trong %Q (%i) là %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1328
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr "Có /@l sai hay không tồn tại nên không thể kết nối lại.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1333
 #, c-format
 msgid "Could not expand /@l: %m\n"
 msgstr "Không thể mở rộng /@l: %m\n"
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1338
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr "Không thể kết nối lại %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1343
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
 msgstr "Gặp lỗi khi thử tìm /@l: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1348
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@b: %m trong khi thử tạo @d /@l\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1353
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr "ext2fs_new_@i: %m trong khi thử tạo @d /@l\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1358
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr "ext2fs_new_dir_@b: %m trong khi thử tạo @b @d mới\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1363
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr "ext2fs_write_dir_@b: %m trong khi ghi @b @d cho /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1368
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr "Gặp lỗi khi điều chỉnh số đếm @i trên @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1373
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: %m\n"
@@ -2054,7 +2199,7 @@
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1378
 #, c-format
 msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
@@ -2064,75 +2209,75 @@
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1388
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
 msgstr "Gặp lỗi khi tạo @d gốc (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1393
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr "Gặp lỗi khi tạo @d /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1398
 msgid "@r is not a @d; aborting.\n"
 msgstr "@r không phải @d nên hủy bỏ.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
-#: e2fsck/problem.c:1300
+#: e2fsck/problem.c:1403
 msgid "Cannot proceed without a @r.\n"
 msgstr "Không thể tiếp tục khi không có @r.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
-#: e2fsck/problem.c:1310
+#: e2fsck/problem.c:1413
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr "/@l không phải @d (ino=%i)\n"
 
-#: e2fsck/problem.c:1317
+#: e2fsck/problem.c:1420
 msgid "Pass 3A: Optimizing directories\n"
 msgstr "Lần qua 3A: đang tối ưu hoá các thư mục\n"
 
-#: e2fsck/problem.c:1322
+#: e2fsck/problem.c:1425
 #, c-format
-msgid "Failed to create dirs_to_hash iterator: %m"
-msgstr "Lỗi tạo bộ lặp lại thư mục tới băm (dirs_to_hash): %m"
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "Lỗi tạo bộ lặp lại thư mục tới băm (dirs_to_hash): %m\n"
 
-#: e2fsck/problem.c:1327
-msgid "Failed to optimize directory %q (%d): %m"
-msgstr "Lỗi tối ưu hoá thư mục %q (%d): %m"
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Lỗi tối ưu hoá thư mục %q (%d): %m\n"
 
-#: e2fsck/problem.c:1332
+#: e2fsck/problem.c:1435
 msgid "Optimizing directories: "
 msgstr "Đang tối ưu hoá các thư mục: "
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1452
 msgid "Pass 4: Checking reference counts\n"
 msgstr "Lần qua 4: đang kiểm tra các số đếm tham chiếu\n"
 
 #. @-expanded: unattached zero-length inode %i.  
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1457
 #, c-format
 msgid "@u @z @i %i.  "
 msgstr "@i @u @z %i.  "
 
 #. @-expanded: unattached inode %i\n
-#: e2fsck/problem.c:1359
+#: e2fsck/problem.c:1462
 #, c-format
 msgid "@u @i %i\n"
 msgstr "@i @u %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
-#: e2fsck/problem.c:1364
+#: e2fsck/problem.c:1467
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr "@i %i có số đếm tham chiếu %Il, @s %N.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1471
 msgid ""
 "WARNING: PROGRAMMING BUG IN E2FSCK!\n"
 "\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
@@ -2143,87 +2288,100 @@
 "@i_link_info[%i] là %N, @i.i_links_count là %Il: @s trùng.\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
-#: e2fsck/problem.c:1378
+#: e2fsck/problem.c:1481
 msgid "Pass 5: Checking @g summary information\n"
 msgstr "Lần qua 5: đang kiểm tra thông tin tóm tắt nhóm\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
-#: e2fsck/problem.c:1383
+#: e2fsck/problem.c:1486
 msgid "Padding at end of @i @B is not set. "
 msgstr "Chưa đặt độ đệm tại kết thúc của @B @I."
 
 #. @-expanded: Padding at end of block bitmap is not set. 
-#: e2fsck/problem.c:1388
+#: e2fsck/problem.c:1491
 msgid "Padding at end of @b @B is not set. "
 msgstr "Chưa đặt độ đệm tại kết thúc của @B @b."
 
 #. @-expanded: block bitmap differences: 
-#: e2fsck/problem.c:1393
+#: e2fsck/problem.c:1496
 msgid "@b @B differences: "
 msgstr "Hiệu @B @b:"
 
 #. @-expanded: inode bitmap differences: 
-#: e2fsck/problem.c:1413
+#: e2fsck/problem.c:1516
 msgid "@i @B differences: "
 msgstr "Hiệu @B @i:"
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1433
+#: e2fsck/problem.c:1536
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Số đếm các @i rảnh không đúng cho @g #%g (%i, đã đếm=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
-#: e2fsck/problem.c:1438
+#: e2fsck/problem.c:1541
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr "Số đếm các thư mục không đúng cho @g #%g (%i, đã đếm=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
-#: e2fsck/problem.c:1443
+#: e2fsck/problem.c:1546
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr "Số đếm các @i rảnh không đúng (%i, đã đếm=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
-#: e2fsck/problem.c:1448
+#: e2fsck/problem.c:1551
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr "Số đếm các @b rảnh không đúng cho @g #%g (%b, đã đếm=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
-#: e2fsck/problem.c:1453
+#: e2fsck/problem.c:1556
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr "Số đếm các @b rảnh không đúng (%b, đã đếm=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
-#: e2fsck/problem.c:1458
+#: e2fsck/problem.c:1561
 msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr "LỖI LẬP TRÌNH: trong @f (#%N) có các điểm cuối @B (%b, %c) không tương ứng với các điểm cuối @B đã tính (%i, %j)\n"
 
-#: e2fsck/problem.c:1464
+#: e2fsck/problem.c:1567
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr "Lỗi nội bộ : đang làm quấy quá kết thúc của mảng ảnh (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
-#: e2fsck/problem.c:1469
+#: e2fsck/problem.c:1572
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr "Gặp lỗi khi sao chép vào @B @i thay thế: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
-#: e2fsck/problem.c:1474
+#: e2fsck/problem.c:1577
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr "Gặp lỗi khi sao chép vào @B @b thay thế: %m\n"
 
-#: e2fsck/problem.c:1499
-msgid "Recreate journal to make the filesystem ext3 again?\n"
-msgstr "Tạo lại nhật ký để làm hệ thống tập tin trở thành lại ext3 không?\n"
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "Các @b của @g %g đang được dùng, còn @g có nhãn là BLOCK_UNINIT\n"
 
-#: e2fsck/problem.c:1617
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "Các @i của @g %g đang được dùng, còn @g có nhãn là INODE_UNINIT\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+msgid "Recreate @j"
+msgstr "Tạo lại @j"
+
+#: e2fsck/problem.c:1732
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr "Mã lỗi chưa quản lý (0x%x)!\n"
 
-#: e2fsck/problem.c:1711
+#: e2fsck/problem.c:1827
 msgid "IGNORED"
 msgstr "BỊ BỎ QUA"
 
@@ -2250,75 +2408,35 @@
 msgid "while calling ext2fs_block_iterate for inode %d"
 msgstr "trong khi gọi hàm lặp lại khối « ext2fs_block_iterate » cho nút thông tin %d"
 
-#: e2fsck/super.c:210
+#: e2fsck/super.c:209
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
 msgstr ""
 "trong khi gọi hàm điều chỉnh số đếm tham chiếu « ext2fs_adjust_ea_refcount »\n"
 "cho nút thông tin %d"
 
-#: e2fsck/super.c:268
+#: e2fsck/super.c:267
 msgid "Truncating"
 msgstr "Đang cắt ngắn"
 
-#: e2fsck/super.c:269
+#: e2fsck/super.c:268
 msgid "Clearing"
 msgstr "Đang xoá sạch"
 
-#: e2fsck/swapfs.c:98
-msgid "while calling ext2fs_block_iterate"
-msgstr "trong khi gọi hàm lặp lại khối « ext2fs_block_iterate »"
-
-#: e2fsck/swapfs.c:104
-msgid "while calling iterator function"
-msgstr "trong khi gọi hàm lặp lại"
-
-#: e2fsck/swapfs.c:126
-msgid "while allocating inode buffer"
-msgstr "trong khi cấp phát bộ đệm nút thông tin"
-
-#: e2fsck/swapfs.c:138
-#, c-format
-msgid "while reading inode table (group %d)"
-msgstr "trong khi đọc bảng nút thông tin (nhóm %d)"
-
-#: e2fsck/swapfs.c:176
-#, c-format
-msgid "while writing inode table (group %d)"
-msgstr "trong khi ghi bảng nút thông tin (nhóm %d)"
-
-#: e2fsck/swapfs.c:226
-#, c-format
-msgid "Pass 0: Doing byte-swap of filesystem\n"
-msgstr "Lần qua 0: đang chạy việc trao đổi byte của hệ thống tập tin\n"
-
-#: e2fsck/swapfs.c:233
+#: e2fsck/unix.c:76
 #, c-format
 msgid ""
-"%s: the filesystem must be freshly checked using fsck\n"
-"and not mounted before trying to byte-swap it.\n"
-msgstr ""
-"%s: hệ thống tập tin phải được kiểm tra mới bằng fsck,\n"
-"và không được gắn kết trước khi thử trao đổi byte trong nó.\n"
-
-#: e2fsck/swapfs.c:268
-msgid "Byte swap"
-msgstr "Trao đổi byte"
-
-#: e2fsck/unix.c:74
-#, c-format
-msgid ""
-"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
 "\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Cách sử dụng: %s [-panyrcdfvstDFSV] [-b siêu_khối] [-B cỡ_khối]\n"
+"Sử dụng: %s [-panyrcdfvtDFV] [-b siêu_khối] [-B cỡ_khối]\n"
 "\t\t[-I khối_đệm_inode] [-P cỡ_inode_xử_lý]\n"
-"\t\t[-l|-L tập_tin_khối_sai] [-C fd] [-j nhật_ký_bên_ngoài]\n"
+"\t\t[-l|-L tập_tin_khối_sai] [-C fd] [-j nhật_ký_ngoài]\n"
 "\t\t[-E tùy_chọn_đã_mở_rộng] thiết_bị\n"
 
-#: e2fsck/unix.c:80
+#: e2fsck/unix.c:82
 #, c-format
 msgid ""
 "\n"
@@ -2337,7 +2455,7 @@
 " -c                   Kiểm tra tìm khối sai: thêm vào danh sách khối sai\n"
 " -f                   Buộc kiểm tra ngay cả khi hệ thống tập tin có nhãn là sạch\n"
 
-#: e2fsck/unix.c:86
+#: e2fsck/unix.c:88
 #, c-format
 msgid ""
 " -v                   Be verbose\n"
@@ -2354,33 +2472,38 @@
 " -l tập_tin_khối_sai    Thêm vào danh sách các khối sai\n"
 " -L tập_tin_khối_sai   Đặt danh sách các khối sai\n"
 
-#: e2fsck/unix.c:121
+#: e2fsck/unix.c:132
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
 msgstr "%s: %u/%u tập tin (%0d.%d%% không kề nhau), %u/%u khối\n"
 
-#: e2fsck/unix.c:133
+#: e2fsck/unix.c:150
 #, c-format
 msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         số inode có khối ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:176 misc/badblocks.c:789 misc/tune2fs.c:941 misc/util.c:151
-#: resize/main.c:237
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Đồ thị độ sâu : "
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "trong khi quyết định nếu %s đã gắn kết chưa."
 
-#: e2fsck/unix.c:194
+#: e2fsck/unix.c:225
 #, c-format
 msgid "Warning!  %s is mounted.\n"
 msgstr "Cảnh báo : %s đã gắn kết.\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:229
 #, c-format
 msgid "%s is mounted.  "
 msgstr "%s đã gắn kết.  "
 
-#: e2fsck/unix.c:200
+#: e2fsck/unix.c:231
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2388,7 +2511,7 @@
 "Không thể tiếp tục nên hủy bỏ.\n"
 "\n"
 
-#: e2fsck/unix.c:201
+#: e2fsck/unix.c:232
 #, c-format
 msgid ""
 "\n"
@@ -2403,75 +2526,79 @@
 "có thể LÀM HỎNG NẶNG hệ thống tập tin.\a\a\a\n"
 "\n"
 
-#: e2fsck/unix.c:204
+#: e2fsck/unix.c:235
 msgid "Do you really want to continue"
 msgstr "Bạn thực sự muốn tiếp tục"
 
-#: e2fsck/unix.c:206
+#: e2fsck/unix.c:237
 #, c-format
 msgid "check aborted.\n"
 msgstr "kiểm tra bị hủy bỏ.\n"
 
-#: e2fsck/unix.c:280
+#: e2fsck/unix.c:310
 msgid " contains a file system with errors"
 msgstr " chứa hệ thống tập tin có lỗi"
 
-#: e2fsck/unix.c:282
+#: e2fsck/unix.c:312
 msgid " was not cleanly unmounted"
 msgstr " chưa tháo gắn kết sạch"
 
-#: e2fsck/unix.c:284
+#: e2fsck/unix.c:314
 msgid " primary superblock features different from backup"
 msgstr "các tính năng của siêu khối chính khác với bản sao lưu"
 
-#: e2fsck/unix.c:288
+#: e2fsck/unix.c:318
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " đã được gắn kết %u lần mà không được kiểm tra"
 
-#: e2fsck/unix.c:295
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr "có giờ kiểm tra hệ thống tập tin lần cuối cùng trong tương lai"
+
+#: e2fsck/unix.c:330
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " đã chạy trong %u ngày mà không được kiểm tra"
 
-#: e2fsck/unix.c:304
+#: e2fsck/unix.c:339
 msgid ", check forced.\n"
 msgstr ", kiểm tra bị ép buộc.\n"
 
-#: e2fsck/unix.c:307
+#: e2fsck/unix.c:342
 #, c-format
 msgid "%s: clean, %u/%u files, %u/%u blocks"
 msgstr "%s: sạch, %u/%u tập tin, %u/%u khối"
 
-#: e2fsck/unix.c:324
+#: e2fsck/unix.c:359
 msgid " (check deferred; on battery)"
 msgstr " (kiểm tra bị hoãn; chạy bằng pin)"
 
-#: e2fsck/unix.c:327
+#: e2fsck/unix.c:362
 msgid " (check after next mount)"
 msgstr " (kiểm tra sau lần kế tiếp gắn kết)"
 
-#: e2fsck/unix.c:329
+#: e2fsck/unix.c:364
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kiểm tra sau %ld lần gắn kết)"
 
-#: e2fsck/unix.c:475
+#: e2fsck/unix.c:511
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "LỖI: không thể mở « /dev/null » (%s)\n"
 
-#: e2fsck/unix.c:546
+#: e2fsck/unix.c:581
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Phiên bản EA không hợp lệ.\n"
 
-#: e2fsck/unix.c:552
+#: e2fsck/unix.c:590
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Tùy chọn đã mở rộng lạ : %s\n"
 
-#: e2fsck/unix.c:572
+#: e2fsck/unix.c:612
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2480,47 +2607,35 @@
 "Gặp lỗi cú pháp trong tập tin cấu hình e2fsck (%s, dòng số %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:636
+#: e2fsck/unix.c:680
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Gặp lỗi khi hợp lệ hóa mô tả tập tin %d: %s\n"
 
-#: e2fsck/unix.c:640
+#: e2fsck/unix.c:684
 msgid "Invalid completion information file descriptor"
 msgstr "Mô tả tập tin thông tin hoà chỉnh không hợp lệ"
 
-#: e2fsck/unix.c:655
+#: e2fsck/unix.c:699
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Có thể xác định chỉ một của những tùy chọn -p/-a, -n và -y."
 
-#: e2fsck/unix.c:676
+#: e2fsck/unix.c:720
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Tùy chọn « -t » không được hỗ trợ trong phiên bản e2fsck này.\n"
 
-#: e2fsck/unix.c:747
-#, c-format
-msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-msgstr ""
-"Hệ thống tập tin trao đổi byte không được biên dịch\n"
-"trong phiên bản e2fsck này\n"
-
-#: e2fsck/unix.c:770 misc/tune2fs.c:504 misc/tune2fs.c:769 misc/tune2fs.c:786
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Không thể quyết định « %s »"
 
-#: e2fsck/unix.c:801
-#, c-format
-msgid "Incompatible options not allowed when byte-swapping.\n"
-msgstr "Không cho phép tùy chọn không tương thích khi trao đổi byte.\n"
-
-#: e2fsck/unix.c:808
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Không cho phép sử dụng đồng thời cả hai tùy chọn « --c » và « --l/L ».\n"
 
-#: e2fsck/unix.c:856
+#: e2fsck/unix.c:878
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2529,7 +2644,7 @@
 "E2FSCK_JBD_DEBUG « %s » không phải số nguyên\n"
 "\n"
 
-#: e2fsck/unix.c:865
+#: e2fsck/unix.c:887
 #, c-format
 msgid ""
 "\n"
@@ -2540,38 +2655,43 @@
 "Đối số không thuộc số không hợp lệ đối với -%c (« %s »)\n"
 "\n"
 
-#: e2fsck/unix.c:905
+#: e2fsck/unix.c:961
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Lỗi: phiên bản thư viện ext2fs quá cũ.\n"
 
-#: e2fsck/unix.c:913
+#: e2fsck/unix.c:969
 msgid "while trying to initialize program"
 msgstr "trong khi thử sở khởi chương trình"
 
-#: e2fsck/unix.c:927
+#: e2fsck/unix.c:980
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tDùng %s, %s\n"
 
-#: e2fsck/unix.c:939
+#: e2fsck/unix.c:992
 msgid "need terminal for interactive repairs"
 msgstr "cần thiết thiết bị cuối để sửa chữa tương tác"
 
-#: e2fsck/unix.c:983
+#: e2fsck/unix.c:1021
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s %s đang thử các khối dự trữ...\n"
 
-#: e2fsck/unix.c:985
+#: e2fsck/unix.c:1023
 msgid "Superblock invalid,"
 msgstr "Siêu khối không hợp lệ,"
 
-#: e2fsck/unix.c:986
+#: e2fsck/unix.c:1024
 msgid "Group descriptors look bad..."
 msgstr "Có vẻ là các mô tả nhóm sai..."
 
-#: e2fsck/unix.c:1013
+#: e2fsck/unix.c:1034
+#, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: đang trở về siêu khối gốc\n"
+
+#: e2fsck/unix.c:1060
 #, c-format
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
@@ -2582,27 +2702,27 @@
 "(hoặc siêu khối hệ thống tập tin bị hỏng).\n"
 "\n"
 
-#: e2fsck/unix.c:1019
+#: e2fsck/unix.c:1066
 #, c-format
 msgid "Could this be a zero-length partition?\n"
 msgstr "Phân vùng này có thể có độ dài bằng không ?\n"
 
-#: e2fsck/unix.c:1021
+#: e2fsck/unix.c:1068
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc là người chủ (root)\n"
 
-#: e2fsck/unix.c:1026
+#: e2fsck/unix.c:1073
 #, c-format
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Có thể là thiết bị không tồn tại, hoặc thiết bị trao đổi ?\n"
 
-#: e2fsck/unix.c:1028
+#: e2fsck/unix.c:1075
 #, c-format
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Hệ thống tập tin đã được gắn kết hay mở hoàn toàn bởi chương trình khác ?\n"
 
-#: e2fsck/unix.c:1032
+#: e2fsck/unix.c:1079
 #, c-format
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
@@ -2611,40 +2731,40 @@
 "Đĩa bị chống ghi; hãy dùng tùy chọn « -n » để chạy\n"
 "việc kiểm tra chỉ đọc trên thiết bị đó.\n"
 
-#: e2fsck/unix.c:1096
+#: e2fsck/unix.c:1143
 msgid "Get a newer version of e2fsck!"
 msgstr "Lấy phiên bản e2fsck mới hơn."
 
-#: e2fsck/unix.c:1117
+#: e2fsck/unix.c:1173
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "trong khi kiểm tra nhật ký ext3 tìm %s"
 
-#: e2fsck/unix.c:1128
+#: e2fsck/unix.c:1184
 #, c-format
 msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr "Cảnh báo : đang bỏ qua việc phục hồi nhật ký vì đang kiểm tra hệ thống tập tin một cách chỉ đọc.\n"
 
-#: e2fsck/unix.c:1141
+#: e2fsck/unix.c:1197
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "không thể đặt cờ siêu khối trên %s\n"
 
-#: e2fsck/unix.c:1147
+#: e2fsck/unix.c:1203
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "trong khi phục hồi nhật ký ext3 của %s"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1228
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s có tính năng không được hỗ trợ :"
 
-#: e2fsck/unix.c:1187
+#: e2fsck/unix.c:1244
 msgid "Warning: compression support is experimental.\n"
 msgstr "Cảnh báo : sự hỗ trợ khả năng nén là thực nghiệm.\n"
 
-#: e2fsck/unix.c:1192
+#: e2fsck/unix.c:1249
 #, c-format
 msgid ""
 "E2fsck not compiled with HTREE support,\n"
@@ -2653,30 +2773,25 @@
 "E2fsck không được biên dịch với khả năng hỗ trợ HCÂY,\n"
 "nhưng hệ thống tập tin %s có thư mục HCÂY.\n"
 
-#: e2fsck/unix.c:1241
-#, c-format
-msgid "%s: Filesystem byte order already normalized.\n"
-msgstr "%s: hệ thống tập tin có thứ tự byte đã tiêu chuẩn hoá.\n"
-
-#: e2fsck/unix.c:1261
+#: e2fsck/unix.c:1302
 msgid "while reading bad blocks inode"
 msgstr "trong khi đọc nút thông tin khối sai"
 
-#: e2fsck/unix.c:1263
+#: e2fsck/unix.c:1304
 #, c-format
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Đây không phải báo trước điềm hay, nhưng tiến trình này sẽ thử tiếp tục...\n"
 
-#: e2fsck/unix.c:1289
+#: e2fsck/unix.c:1330
 msgid "Couldn't determine journal size"
 msgstr "Không thể quyết định kích cỡ nhật ký"
 
-#: e2fsck/unix.c:1292 misc/mke2fs.c:1776
+#: e2fsck/unix.c:1333
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Đang tạo nhật ký (%d khối): "
 
-#: e2fsck/unix.c:1299 misc/mke2fs.c:1784
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -2684,12 +2799,12 @@
 "\n"
 "trong khi thử tạo nhật ký"
 
-#: e2fsck/unix.c:1302
+#: e2fsck/unix.c:1343
 #, c-format
 msgid " Done.\n"
 msgstr " Hoàn tất\n"
 
-#: e2fsck/unix.c:1303
+#: e2fsck/unix.c:1344
 #, c-format
 msgid ""
 "\n"
@@ -2698,25 +2813,25 @@
 "\n"
 "••• nhật ký đã được tạo lại — hệ thống tập tin lúc này là ext3 lại •••\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1351
 #, c-format
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Đang khởi chạy lại hoàn toàn e2fsck...\n"
 
-#: e2fsck/unix.c:1314
+#: e2fsck/unix.c:1355
 msgid "while resetting context"
 msgstr "trong khi đặt lại ngữ cảnh"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1362
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck bị thôi.\n"
 
-#: e2fsck/unix.c:1326
+#: e2fsck/unix.c:1367
 msgid "aborted"
 msgstr "bị hủy bỏ"
 
-#: e2fsck/unix.c:1338
+#: e2fsck/unix.c:1379
 #, c-format
 msgid ""
 "\n"
@@ -2725,12 +2840,12 @@
 "\n"
 "%s: ••••• HỆ THỐNG TẬP TIN BỊ SỬA ĐỔI •••••\n"
 
-#: e2fsck/unix.c:1341
+#: e2fsck/unix.c:1382
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ••••• HÃY KHỞI ĐỘNG LẠI LINUX •••••\n"
 
-#: e2fsck/unix.c:1349
+#: e2fsck/unix.c:1390
 #, c-format
 msgid ""
 "\n"
@@ -2741,39 +2856,43 @@
 "%s: •••••••••• CẢNH BÁO : hệ thống tập tin vẫn còn có lỗi ••••••••••\n"
 "\n"
 
-#: e2fsck/util.c:131 misc/util.c:68
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr "trong khi đặt thông tin tổng kiểm nhóm khối"
+
+#: e2fsck/util.c:138 misc/util.c:68
 msgid "yY"
 msgstr "cC"
 
-#: e2fsck/util.c:132
+#: e2fsck/util.c:139
 msgid "nN"
 msgstr "kK"
 
-#: e2fsck/util.c:146
+#: e2fsck/util.c:153
 msgid "<y>"
 msgstr "<c>"
 
-#: e2fsck/util.c:148
+#: e2fsck/util.c:155
 msgid "<n>"
 msgstr "<k>"
 
-#: e2fsck/util.c:150
+#: e2fsck/util.c:157
 msgid " (y/n)"
 msgstr " (c/k)"
 
-#: e2fsck/util.c:165
+#: e2fsck/util.c:172
 msgid "cancelled!\n"
 msgstr "bị thôi !\n"
 
-#: e2fsck/util.c:180
+#: e2fsck/util.c:187
 msgid "yes\n"
 msgstr "có\n"
 
-#: e2fsck/util.c:182
+#: e2fsck/util.c:189
 msgid "no\n"
 msgstr "không\n"
 
-#: e2fsck/util.c:192
+#: e2fsck/util.c:199
 #, c-format
 msgid ""
 "%s? no\n"
@@ -2782,7 +2901,7 @@
 "%s? không\n"
 "\n"
 
-#: e2fsck/util.c:196
+#: e2fsck/util.c:203
 #, c-format
 msgid ""
 "%s? yes\n"
@@ -2791,47 +2910,38 @@
 "%s? có\n"
 "\n"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "yes"
 msgstr "có"
 
-#: e2fsck/util.c:200
+#: e2fsck/util.c:207
 msgid "no"
 msgstr "không"
 
-#: e2fsck/util.c:214
+#: e2fsck/util.c:221
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr "e2fsck_read_bitmaps: khối mảng ảnh cấm cho %s"
 
-#: e2fsck/util.c:219
+#: e2fsck/util.c:226
 msgid "reading inode and block bitmaps"
 msgstr "đang đọc mảng ảnh kiểu cả hai nút thông tin và khối"
 
-#: e2fsck/util.c:224
+#: e2fsck/util.c:231
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr "trong khi thử đọc mảng ảnh cho %s"
 
-#: e2fsck/util.c:237
-msgid "writing block bitmaps"
-msgstr "đang ghi mảng ảnh khối"
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "đang ghi các mảng ảnh kiểu khối và nút thông tin"
 
-#: e2fsck/util.c:242
+#: e2fsck/util.c:248
 #, c-format
-msgid "while retrying to write block bitmaps for %s"
-msgstr "trong khi thử lại ghi mảng ảnh khối cho %s"
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "trong khi ghi lại các mảng ảnh kiểu khối và nút thông tin cho %s"
 
-#: e2fsck/util.c:249
-msgid "writing inode bitmaps"
-msgstr "đang ghi mảng ảnh nút thông tin"
-
-#: e2fsck/util.c:254
-#, c-format
-msgid "while retrying to write inode bitmaps for %s"
-msgstr "trong khi thử lại ghi mảng ảnh nút thông tin cho %s"
-
-#: e2fsck/util.c:267
+#: e2fsck/util.c:260
 #, c-format
 msgid ""
 "\n"
@@ -2844,52 +2954,58 @@
 "%s: MÂU THUẪN BẤT THƯỜNG : HÃY TỰ CHẠY fsck.\n"
 "\t(tức là không có tùy chọn « -a » hay « -p »).\n"
 
-#: e2fsck/util.c:332
+#: e2fsck/util.c:341
 #, c-format
-msgid "Memory used: %dk/%dk (%dk/%dk), "
-msgstr "Bộ nhớ đã chiếm: %dk/%dk (%dk/%dk), "
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "Vùng nhớ được dùng: %luk/%luk (%luk/%luk), "
 
-#: e2fsck/util.c:336
+#: e2fsck/util.c:345
 #, c-format
-msgid "Memory used: %d, "
-msgstr "Bộ nhớ đã chiếm: %d, "
+msgid "Memory used: %lu, "
+msgstr "Vùng nhớ được dùng: %lu, "
 
-#: e2fsck/util.c:342
+#: e2fsck/util.c:352
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr "thời gian: %5.2f/%5.2f/%5.2f\n"
 
-#: e2fsck/util.c:347
+#: e2fsck/util.c:357
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr "thời gian đã qua: %6.3f\n"
 
-#: e2fsck/util.c:361
+#: e2fsck/util.c:391 e2fsck/util.c:405
 #, c-format
-msgid "while reading inode %ld in %s"
-msgstr "trong khi đọc nút thông tin %ld trong %s"
+msgid "while reading inode %lu in %s"
+msgstr "trong khi đọc nút thông tin %lu trong %s"
 
-#: e2fsck/util.c:375 e2fsck/util.c:388
+#: e2fsck/util.c:419 e2fsck/util.c:432
 #, c-format
-msgid "while writing inode %ld in %s"
-msgstr "trong khi ghi nút thông tin %ld trong %s"
+msgid "while writing inode %lu in %s"
+msgstr "trong khi ghi nút thông tin %lu trong %s"
 
-#: misc/badblocks.c:61
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr "trong khi cấp phát bộ đếm làm số không"
+
+#: misc/badblocks.c:66
 msgid "done                                \n"
-msgstr "done                                \n"
+msgstr "hoàn tất                                \n"
 
-#: misc/badblocks.c:80
+#: misc/badblocks.c:89
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
-" device [last_block [start_block]]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
 msgstr ""
-"Cách sử dụng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n"
-" [-c các_khối_cùng_lúc] [-p số_lần_qua] [-t mẫu_thử_ra [-t mẫu_thử_ra [...]]]\n"
-" thiết_bị [khối_cuối [khối_đầu]]\n"
+"Sử dụng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n"
+"       [-c số_khối_cùng_lúc] [-d hệ_số_đợi_đọc] [-e số_tối_đa_khối_xấu]\n"
+"       [-p số_lần_qua] [-t mẫu_thử [-t mẫu_thử [...]]]\n"
+"       thiết_bị [khối_cuối [khối_đầu]]\n"
 
-#: misc/badblocks.c:88
+#: misc/badblocks.c:100
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
@@ -2898,70 +3014,80 @@
 "%s: hai tùy chọn « -n » và « -w » loại từ lẫn nhau.\n"
 "\n"
 
-#: misc/badblocks.c:235
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr "%6.2f%% hoàn tất, %s đã trôi qua"
+
+#: misc/badblocks.c:293
 msgid "Testing with random pattern: "
 msgstr "Đang thử ra bằng mẫu ngẫu nhiên: "
 
-#: misc/badblocks.c:253
+#: misc/badblocks.c:311
 msgid "Testing with pattern 0x"
 msgstr "Đang thử ra bằng mẫu 0x"
 
-#: misc/badblocks.c:278 misc/badblocks.c:307
+#: misc/badblocks.c:339 misc/badblocks.c:408
 msgid "during seek"
 msgstr "trong khi tìm nơi"
 
-#: misc/badblocks.c:285
+#: misc/badblocks.c:350
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
 msgstr "Giá trị lạ (%ld) trong việc đọc « do_read »\n"
 
-#: misc/badblocks.c:327
+#: misc/badblocks.c:428
 msgid "during ext2fs_sync_device"
 msgstr "trong khi đồng bộ hoá thiết bị « ext2fs_sync_device »"
 
-#: misc/badblocks.c:343 misc/badblocks.c:581
+#: misc/badblocks.c:447 misc/badblocks.c:711
 msgid "while beginning bad block list iteration"
 msgstr "trong khi bắt đầu lặp lại danh sách các khối sai"
 
-#: misc/badblocks.c:357 misc/badblocks.c:447 misc/badblocks.c:591
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
 msgid "while allocating buffers"
 msgstr "trong khi cấp phát bộ đệm"
 
-#: misc/badblocks.c:361
+#: misc/badblocks.c:465
 #, c-format
 msgid "Checking blocks %lu to %lu\n"
 msgstr "Đang kiểm tra khối trong phạm vi %lu đến %lu\n"
 
-#: misc/badblocks.c:365
+#: misc/badblocks.c:470
 msgid "Checking for bad blocks in read-only mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ chỉ đọc\n"
 
-#: misc/badblocks.c:374
+#: misc/badblocks.c:479
 msgid "Checking for bad blocks (read-only test): "
 msgstr "Đang kiểm tra tìm khối sai (thử ra chỉ đọc): "
 
-#: misc/badblocks.c:454
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Quá nhiều khối sai nên hủy bỏ phép thử\n"
+
+#: misc/badblocks.c:570
 msgid "Checking for bad blocks in read-write mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ đọc-ghi\n"
 
-#: misc/badblocks.c:456 misc/badblocks.c:604
+#: misc/badblocks.c:572 misc/badblocks.c:734
 #, c-format
 msgid "From block %lu to %lu\n"
 msgstr "Phạm vi khối %lu đến %lu\n"
 
-#: misc/badblocks.c:507
+#: misc/badblocks.c:630
 msgid "Reading and comparing: "
 msgstr "Đang đọc và so sánh: "
 
-#: misc/badblocks.c:603
+#: misc/badblocks.c:733
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
 msgstr "Đang kiểm tra tìm khối sai trong chế độ đọc-ghi không hủy\n"
 
-#: misc/badblocks.c:607
+#: misc/badblocks.c:739
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
 msgstr "Đang kiểm tra tìm khối sai (thử ra đọc-ghi không hủy)\n"
 
-#: misc/badblocks.c:614
+#: misc/badblocks.c:746
 msgid ""
 "\n"
 "Interrupt caught, cleaning up\n"
@@ -2969,59 +3095,54 @@
 "\n"
 "Mới bắt tín hiệu ngắt nên làm sạch\n"
 
-#: misc/badblocks.c:684
+#: misc/badblocks.c:822
 #, c-format
 msgid "during test data write, block %lu"
 msgstr "trong khi thử ra ghi dữ liệu, khối %lu"
 
-#: misc/badblocks.c:794 misc/util.c:156
+#: misc/badblocks.c:933 misc/util.c:156
 #, c-format
 msgid "%s is mounted; "
 msgstr "%s đã gắn kết; "
 
-#: misc/badblocks.c:796
+#: misc/badblocks.c:935
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "tùy chọn khối sai (badblocks) vẫn bị ép buộc.\n"
 "Mong « /etc/mtab » không đúng.\n"
 
-#: misc/badblocks.c:801
+#: misc/badblocks.c:940
 msgid "it's not safe to run badblocks!\n"
 msgstr "Không an toàn khi chạy badblocks.\n"
 
-#: misc/badblocks.c:806 misc/util.c:167
+#: misc/badblocks.c:945 misc/util.c:167
 #, c-format
 msgid "%s is apparently in use by the system; "
 msgstr "Có vẻ là %s đang bị hệ thống dùng; "
 
-#: misc/badblocks.c:809
+#: misc/badblocks.c:948
 msgid "badblocks forced anyway.\n"
-msgstr "vẫn ép buộc badblocks.\n"
+msgstr "vẫn ép buộc badblocks (khối sai).\n"
 
-#: misc/badblocks.c:871
+#: misc/badblocks.c:968
 #, c-format
-msgid "bad block size - %s"
-msgstr "kích cỡ khối sai — %s"
+msgid "invalid %s - %s"
+msgstr "%s không hợp lệ — %s"
 
-#: misc/badblocks.c:928
+#: misc/badblocks.c:1077
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
 msgstr "không thể cấp phát bộ nhớ cho mẫu thử (test_pattern) — %s"
 
-#: misc/badblocks.c:942
-#, c-format
-msgid "invalid test_pattern: %s\n"
-msgstr "mẫu thử (test_pattern) không hợp lệ: %s\n"
-
-#: misc/badblocks.c:961
+#: misc/badblocks.c:1104
 msgid "Maximum of one test_pattern may be specified in read-only mode"
 msgstr "Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern)"
 
-#: misc/badblocks.c:967
+#: misc/badblocks.c:1110
 msgid "Random test_pattern is not allowed in read-only mode"
 msgstr "Không cho phẹp mẫu thử (test_pattern) ngẫu nhiên trong chế độ chỉ đọc"
 
-#: misc/badblocks.c:981
+#: misc/badblocks.c:1124
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
@@ -3029,120 +3150,128 @@
 "Không thể quyết định kích cỡ của thiết bị;\n"
 "bạn cần phải tự xác định kích cỡ đó.\n"
 
-#: misc/badblocks.c:987
+#: misc/badblocks.c:1130
 msgid "while trying to determine device size"
 msgstr "trong khi thử quyết định kích cỡ của thiết bị"
 
-#: misc/badblocks.c:996 misc/mke2fs.c:1255
-#, c-format
-msgid "invalid blocks count - %s"
-msgstr "số đếm khối không hợp lệ — %s"
+#: misc/badblocks.c:1135
+msgid "last block"
+msgstr "khối cuối"
 
-#: misc/badblocks.c:1009
-#, c-format
-msgid "invalid starting block - %s"
-msgstr "khối đầu không hợp lệ — %s"
+#: misc/badblocks.c:1141
+msgid "first block"
+msgstr "khối đầu"
 
-#: misc/badblocks.c:1015
+#: misc/badblocks.c:1144
 #, c-format
-msgid "invalid starting block (%d): must be less than %lu"
-msgstr "khối đầu không hợp lệ (%d): phải nhỏ hơn %lu"
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "khối đầu không hợp lệ (%lu): phải nhỏ hơn %lu"
 
-#: misc/badblocks.c:1070
+#: misc/badblocks.c:1200
 msgid "while creating in-memory bad blocks list"
 msgstr "trong khi tạo danh sách các khối hỏng trong bộ nhớ"
 
-#: misc/badblocks.c:1085
+#: misc/badblocks.c:1215
 msgid "while adding to in-memory bad block list"
 msgstr "trong khi thêm vào danh sách các khối hỏng trong bộ nhớ"
 
-#: misc/badblocks.c:1109
+#: misc/badblocks.c:1239
 #, c-format
 msgid "Pass completed, %u bad blocks found.\n"
 msgstr "Qua xong, tìm thấy %u khối sai.\n"
 
-#: misc/chattr.c:84
+#: misc/chattr.c:85
 #, c-format
-msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n"
-msgstr "Cách sử dụng: %s [-RV] [-+=AacDdijsSu] [-v phiên_bản] tập_tin...\n"
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "Sử dụng: %s [-RVf] [-+=AacDdeijsSu] [-v phiên_bản] tập_tin...\n"
 
-#: misc/chattr.c:147
+#: misc/chattr.c:153
 #, c-format
 msgid "bad version - %s\n"
 msgstr "phiên bản sai — %s\n"
 
-#: misc/chattr.c:191 misc/lsattr.c:113
+#: misc/chattr.c:200 misc/lsattr.c:115
 #, c-format
 msgid "while trying to stat %s"
 msgstr "trong khi thử lấy các thông tin về %s"
 
-#: misc/chattr.c:208 misc/chattr.c:224
-#, c-format
-msgid "Flags of %s set as "
-msgstr "Các cờ của %s đã đặt thành "
-
-#: misc/chattr.c:217
+#: misc/chattr.c:207
 #, c-format
 msgid "while reading flags on %s"
 msgstr "trong khi đọc các cờ trên %s"
 
-#: misc/chattr.c:232
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr "Chức năng xoá sạch cờ tầm không được hỗ trợ trên %s"
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Các cờ của %s đã đặt thành "
+
+#: misc/chattr.c:249
 #, c-format
 msgid "while setting flags on %s"
 msgstr "trong khi đặt các cờ trên %s"
 
-#: misc/chattr.c:237
+#: misc/chattr.c:257
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Phiên bản %s được đặt thành %lu\n"
 
-#: misc/chattr.c:240
+#: misc/chattr.c:261
 #, c-format
 msgid "while setting version on %s"
 msgstr "trong khi đặt phiên bản trên %s"
 
-#: misc/chattr.c:254
+#: misc/chattr.c:281
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Không thể cấp phát biến đường dẫn trong chattr_dir_proc"
 
-#: misc/chattr.c:292
+#: misc/chattr.c:320
 msgid "= is incompatible with - and +\n"
 msgstr "= không tương thích với « - » và « + »\n"
 
-#: misc/chattr.c:300
+#: misc/chattr.c:328
 msgid "Must use '-v', =, - or +\n"
 msgstr "Phải dùng « -v », « = », « - » hay « + »\n"
 
 #: misc/dumpe2fs.c:53
 #, c-format
 msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
-msgstr "Cách sử dụng: %s [-bfhixV] [-ob siêu_khối] [-oB cỡ_khối] thiết_bị\n"
+msgstr "Sử dụng: %s [-bfhixV] [-ob siêu_khối] [-oB cỡ_khối] thiết_bị\n"
 
-#: misc/dumpe2fs.c:162
+#: misc/dumpe2fs.c:168
 #, c-format
 msgid "Group %lu: (Blocks "
 msgstr "Nhóm %lu: (Khối "
 
-#: misc/dumpe2fs.c:168
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  Tổng kiểm 0x%04x, Nút không dùng %d\n"
+
+#: misc/dumpe2fs.c:178
 #, c-format
 msgid "  %s superblock at "
 msgstr "  %s siêu khối tại "
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Primary"
 msgstr "Chính"
 
-#: misc/dumpe2fs.c:169
+#: misc/dumpe2fs.c:179
 msgid "Backup"
-msgstr "Dự trữ"
+msgstr "Sao lưu"
 
-#: misc/dumpe2fs.c:173
+#: misc/dumpe2fs.c:183
 #, c-format
 msgid ", Group descriptors at "
 msgstr ", Mô tả nhóm tại "
 
-#: misc/dumpe2fs.c:177
+#: misc/dumpe2fs.c:187
 #, c-format
 msgid ""
 "\n"
@@ -3151,20 +3280,20 @@
 "\n"
 "  Các khối GDT đã dành riêng tại "
 
-#: misc/dumpe2fs.c:184
+#: misc/dumpe2fs.c:194
 #, c-format
 msgid " Group descriptor at "
 msgstr " Mô tả nhóm tại "
 
-#: misc/dumpe2fs.c:190
+#: misc/dumpe2fs.c:200
 msgid "  Block bitmap at "
 msgstr " Mảng ảnh khối tại "
 
-#: misc/dumpe2fs.c:195
+#: misc/dumpe2fs.c:205
 msgid ", Inode bitmap at "
 msgstr ", Mảng ảnh nút thông tin tại "
 
-#: misc/dumpe2fs.c:200
+#: misc/dumpe2fs.c:210
 msgid ""
 "\n"
 "  Inode table at "
@@ -3172,49 +3301,54 @@
 "\n"
 "  Bảng nút thông tin tại "
 
-#: misc/dumpe2fs.c:207
+#: misc/dumpe2fs.c:217
 #, c-format
 msgid ""
 "\n"
-"  %d free blocks, %d free inodes, %d directories\n"
+"  %u free blocks, %u free inodes, %u directories%s"
 msgstr ""
 "\n"
-"  %d khối rảnh, %d nút thông tin rảnh, %d thư mục\n"
+"  %u khối rảnh, %u nút rảnh, %u thư mục%s"
 
-#: misc/dumpe2fs.c:213
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u nút không dùng\n"
+
+#: misc/dumpe2fs.c:227
 msgid "  Free blocks: "
 msgstr "  Khối rảnh: "
 
-#: misc/dumpe2fs.c:221
+#: misc/dumpe2fs.c:237
 msgid "  Free inodes: "
-msgstr "  Nút thông tin rảnh: "
+msgstr "  Nút rảnh: "
 
-#: misc/dumpe2fs.c:246
+#: misc/dumpe2fs.c:268
 msgid "while printing bad block list"
 msgstr "trong khi in ra danh sách các khối sai"
 
-#: misc/dumpe2fs.c:252
+#: misc/dumpe2fs.c:274
 #, c-format
 msgid "Bad blocks: %u"
 msgstr "Khối sai: %u"
 
-#: misc/dumpe2fs.c:274 misc/tune2fs.c:261
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
 msgid "while reading journal inode"
 msgstr "trong khi đọc nút thông tin nhật ký"
 
-#: misc/dumpe2fs.c:277
+#: misc/dumpe2fs.c:300
 msgid "Journal size:             "
 msgstr "Kích cỡ nhất ký:             "
 
-#: misc/dumpe2fs.c:296 misc/tune2fs.c:183
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
 msgid "while reading journal superblock"
 msgstr "trong khi đọc siêu khối nhật ký"
 
-#: misc/dumpe2fs.c:304
+#: misc/dumpe2fs.c:332
 msgid "Couldn't find journal superblock magic numbers"
 msgstr "Không tìm thấy các số ma thuật siêu khối nhật ký"
 
-#: misc/dumpe2fs.c:308
+#: misc/dumpe2fs.c:336
 #, c-format
 msgid ""
 "\n"
@@ -3233,27 +3367,27 @@
 "Đầu nhật ký:            \t\t%u\n"
 "Số người dùng nhật ký:  \t%u\n"
 
-#: misc/dumpe2fs.c:321
+#: misc/dumpe2fs.c:349
 #, c-format
 msgid "Journal users:            %s\n"
 msgstr "Người dùng nhật ký:            %s\n"
 
-#: misc/dumpe2fs.c:337 misc/mke2fs.c:768 misc/tune2fs.c:810
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Không thể cấp phát bộ nhớ để phân tách tùy chọn !\n"
 
-#: misc/dumpe2fs.c:363
+#: misc/dumpe2fs.c:391
 #, c-format
 msgid "Invalid superblock parameter: %s\n"
 msgstr "Tham số siêu khối không hợp lệ: %s\n"
 
-#: misc/dumpe2fs.c:378
+#: misc/dumpe2fs.c:406
 #, c-format
 msgid "Invalid blocksize parameter: %s\n"
 msgstr "Tham số kích cỡ khối không hợp lệ: %s\n"
 
-#: misc/dumpe2fs.c:389
+#: misc/dumpe2fs.c:417
 #, c-format
 msgid ""
 "\n"
@@ -3276,22 +3410,18 @@
 "\tsuperblock=<số thứ tự siêu khối>\n"
 "\tblocksize=<kích cỡ khối>\n"
 
-#: misc/dumpe2fs.c:449 misc/mke2fs.c:1199
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tDùng %s\n"
 
-#: misc/dumpe2fs.c:485 misc/e2image.c:666 misc/tune2fs.c:919 resize/main.c:298
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:312
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr "Không tìm thấy siêu khối hệ thống tập tin hợp lệ.\n"
 
-#: misc/dumpe2fs.c:496
-#, c-format
-msgid "Note: This is a byte-swapped filesystem\n"
-msgstr "Ghi chú : đây là hệ thống tập tin đã trao đổi byte\n"
-
-#: misc/dumpe2fs.c:515
+#: misc/dumpe2fs.c:537
 #, c-format
 msgid ""
 "\n"
@@ -3300,33 +3430,33 @@
 "\n"
 "%s: %s: gặp lỗi khi đọc mảng ảnh: %s\n"
 
-#: misc/e2image.c:50
+#: misc/e2image.c:52
 #, c-format
 msgid "Usage: %s [-rsI] device image_file\n"
 msgstr "Sử dụng: %s [-rsI] thiết_bị tập_tin_ảnh\n"
 
-#: misc/e2image.c:62
+#: misc/e2image.c:64
 msgid "Couldn't allocate header buffer\n"
 msgstr "Không thể cấp phát bộ đệm phần đầu\n"
 
-#: misc/e2image.c:81
+#: misc/e2image.c:83
 #, c-format
 msgid "short write (only %d bytes) for writing image header"
 msgstr "ghi ngắn (chỉ %d byte) để ghi phần đầu ảnh"
 
-#: misc/e2image.c:100
+#: misc/e2image.c:102
 msgid "while writing superblock"
 msgstr "trong khi ghi siêu khối"
 
-#: misc/e2image.c:108
+#: misc/e2image.c:110
 msgid "while writing inode table"
 msgstr "trong khi ghi bảng nút thông tin"
 
-#: misc/e2image.c:115
+#: misc/e2image.c:117
 msgid "while writing block bitmap"
 msgstr "trong khi ghi mảng ảnh khối"
 
-#: misc/e2image.c:122
+#: misc/e2image.c:124
 msgid "while writing inode bitmap"
 msgstr "trong khi ghi mảng ảnh nút thông tin"
 
@@ -3350,7 +3480,7 @@
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: không phải hệ thống tập tin kiểu ext2\n"
 
-#: misc/e2label.c:96 misc/tune2fs.c:1025
+#: misc/e2label.c:96 misc/tune2fs.c:1670
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Cảnh báo : nhãn quá dài nên cắt ngắn.\n"
@@ -3365,11 +3495,63 @@
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: gặp lỗi khi ghi siêu khối\n"
 
-#: misc/e2label.c:116 misc/tune2fs.c:496
+#: misc/e2label.c:116 misc/tune2fs.c:542
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Sử dụng: e2label thiết_bị [nhãn_mới]\n"
 
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Sử dụng: %s <tập tin giao dịch> <hệ thống tập tin>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Lỗi đọc dữ liệu hệ thống tập tin \n"
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "Lỗi tdb_fetch %s\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Giờ gắn kết hệ thống tập tin không tương ứng với %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "UUID hệ thống tập tin không tương ứng \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "Lỗi tdb_open %s\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Gặp lỗi trong khi quyết định nếu %s đã gắn kết chưa.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo chỉ nên chạy trên một hệ thống tập tin chưa gắn kết\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "Lỗi mở %s\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Đã chạy lại giao dịch có kích cỡ %zd ở vị trí %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Lỗi ghi %s\n"
+
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
@@ -3392,37 +3574,37 @@
 "\tbạn nên sửa chữa tập tin « /etc/fstab » càng sớm càng có thể.\n"
 "\n"
 
-#: misc/fsck.c:469
+#: misc/fsck.c:477
 #, c-format
 msgid "fsck: %s: not found\n"
 msgstr "fsck: %s: không tìm thấy\n"
 
-#: misc/fsck.c:585
+#: misc/fsck.c:593
 #, c-format
 msgid "%s: wait: No more child process?!?\n"
 msgstr "%s: đợi: không có tiến trình con nữa ?!?\n"
 
-#: misc/fsck.c:607
+#: misc/fsck.c:615
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
 msgstr "Cảnh báo... %s cho thiết bị %s đã thoát với tín hiệu %d.\n"
 
-#: misc/fsck.c:613
+#: misc/fsck.c:621
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
 msgstr "%s %s: trạng thái là %x, không bao giờ nên xảy ra.\n"
 
-#: misc/fsck.c:649
+#: misc/fsck.c:660
 #, c-format
 msgid "Finished with %s (exit status %d)\n"
 msgstr "%s hoàn tất (trạng thái thoát %d)\n"
 
-#: misc/fsck.c:709
+#: misc/fsck.c:720
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
 msgstr "%s: Gặp lỗi %d trong khi thực hiện fsck.%s cho %s\n"
 
-#: misc/fsck.c:730
+#: misc/fsck.c:741
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
@@ -3430,42 +3612,42 @@
 "Hoặc tất cả hoặc không có kiểu hệ thống tập tin được gửi qua\n"
 "cho tùy chọn « -t » phải có tiền tố « no » hay « ! ».\n"
 
-#: misc/fsck.c:749
+#: misc/fsck.c:760
 msgid "Couldn't allocate memory for filesystem types\n"
 msgstr "Không thể cấp phát bộ nhớ cho kiểu hế thống tập tin\n"
 
-#: misc/fsck.c:872
+#: misc/fsck.c:883
 #, c-format
 msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr "%s: đang bỏ qua dòng sai trong « /etc/fstab »: đóng kết lắp với số gửi qua fsck khác số không\n"
 
-#: misc/fsck.c:899
+#: misc/fsck.c:910
 #, c-format
 msgid "fsck: cannot check %s: fsck.%s not found\n"
 msgstr "fsck: không thể kiểm tra %s: fsck.%s không tìm thấy\n"
 
-#: misc/fsck.c:955
+#: misc/fsck.c:966
 msgid "Checking all file systems.\n"
 msgstr "Đang kiểm tra mọi hệ thống tập tin.\n"
 
-#: misc/fsck.c:1046
+#: misc/fsck.c:1057
 #, c-format
 msgid "--waiting-- (pass %d)\n"
 msgstr "--đang đợi-- (lần qua %d)\n"
 
-#: misc/fsck.c:1066
+#: misc/fsck.c:1077
 msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Sử dụng: fsck [-AMNPRTV] [ -C [ fd ] ] [-t kiểu_HTT] [fs-options] [HTT ...]\n"
 "\n"
 "HTT: hệ thống tập tin\n"
 
-#: misc/fsck.c:1108
+#: misc/fsck.c:1119
 #, c-format
 msgid "%s: too many devices\n"
 msgstr "%s: quá nhiều thiết bị\n"
 
-#: misc/fsck.c:1141 misc/fsck.c:1227
+#: misc/fsck.c:1152 misc/fsck.c:1238
 #, c-format
 msgid "%s: too many arguments\n"
 msgstr "%s: quá nhiều đối số\n"
@@ -3485,57 +3667,59 @@
 msgid "While reading version on %s"
 msgstr "Trong khi đọc phiên bản trên %s"
 
-#: misc/mke2fs.c:97
+#: misc/mke2fs.c:104
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
 "\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
-"\t[-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-T fs-type] [-jnqvFSV] device [blocks-count]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
 msgstr ""
 "Sử dụng: %s [-c|-l tên_tập_tin] [-b cỡ_khối] [-f cỡ_đoạn]\n"
 "\t[-i byte_mỗi_inode] [-I cỡ_inode] [-J tùy_chọn_nhật_ký]\n"
-"\t[-N số_inode] [-m phần_trăm_khối_dành_riêng] [-o HĐH_tạo]\n"
-"\t[-g khối_mỗi_nhóm] [-L nhãn_khối_tin] [-M thư_mục_lắp_cuối]\n"
-"\t[-O tính_năng[,...]] [-r bản_sửa_đổi_HTT] [-E tùy_chọn_mở_rộng]\n"
-"\t[-T kiểu_HTT] [-jnqvFSV] thiết_bị [số_đếm_khối]\n"
+"\t[-G cỡ_siêu_nhóm] [-N số_inode] [-m phần_trăm_khối_dành_riêng]\n"
+"\t[-o HĐH_tạo] [-g khối_mỗi_nhóm] [-L nhãn_khối_tin]\n"
+"\t[-M thư_mục_lắp_cuối] [-O tính_năng[,...]] [-r bản_sửa_đổi_HTT]\n"
+"\t[-E tùy_chọn_mở_rộng] [-T kiểu_HTT] [-U UUID]\n"
+"\t[-jnqvFSV] thiết_bị [số_đếm_khối]\n"
 "\n"
 "[HĐH: hệ điều hành\n"
 "HTT: hệ thống tập tin]\n"
 
-#: misc/mke2fs.c:198
+#: misc/mke2fs.c:206
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Đang chạy lệnh: %s\n"
 
-#: misc/mke2fs.c:202
+#: misc/mke2fs.c:210
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "trong khi thử chạy « %s »"
 
-#: misc/mke2fs.c:209
+#: misc/mke2fs.c:217
 msgid "while processing list of bad blocks from program"
 msgstr "trong khi xử lý danh sách các khối sai từ chương trình"
 
-#: misc/mke2fs.c:236
+#: misc/mke2fs.c:244
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Khối %d sai trong vùng mô tả nhóm/siêu khối chính.\n"
 
-#: misc/mke2fs.c:238
+#: misc/mke2fs.c:246
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Các khối trong phạm vi %u đến %u phải là tốt\n"
 "để xây dựng được hệ thống tập tin.\n"
 
-#: misc/mke2fs.c:241
+#: misc/mke2fs.c:249
 msgid "Aborting....\n"
 msgstr "Đang hủy bỏ...\n"
 
-#: misc/mke2fs.c:261
+#: misc/mke2fs.c:269
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3545,23 +3729,19 @@
 "Cảnh báo : các mô tả nhóm/siêu khối dự trữ tại khối %u chứa khối sai.\n"
 "\n"
 
-#: misc/mke2fs.c:279
+#: misc/mke2fs.c:288
 msgid "while marking bad blocks as used"
 msgstr "trong khi đánh dấu các khối sai đã được dùng"
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:346
 msgid "done                            \n"
 msgstr "hoàn tất                         \n"
 
-#: misc/mke2fs.c:372
-msgid "while allocating zeroizing buffer"
-msgstr "trong khi cấp phát bộ đếm làm số không"
-
-#: misc/mke2fs.c:414
+#: misc/mke2fs.c:360
 msgid "Writing inode tables: "
 msgstr "Đang ghi các bảng nút thông tin: "
 
-#: misc/mke2fs.c:431
+#: misc/mke2fs.c:383
 #, c-format
 msgid ""
 "\n"
@@ -3570,67 +3750,67 @@
 "\n"
 "Không thể ghi %d khối trong bảng nút thông tin, bắt đầu tại %u: %s\n"
 
-#: misc/mke2fs.c:487
+#: misc/mke2fs.c:407
 msgid "while creating root dir"
 msgstr "trong khi tạo thư mục gốc"
 
-#: misc/mke2fs.c:494
+#: misc/mke2fs.c:414
 msgid "while reading root inode"
 msgstr "trong khi đọc nút thông tin gốc"
 
-#: misc/mke2fs.c:508
+#: misc/mke2fs.c:428
 msgid "while setting root inode ownership"
 msgstr "trong khi đặt quyền sở hữu nút thông tin gốc"
 
-#: misc/mke2fs.c:526
+#: misc/mke2fs.c:446
 msgid "while creating /lost+found"
 msgstr "trong khi tạo /mất+tìm"
 
-#: misc/mke2fs.c:533
+#: misc/mke2fs.c:453
 msgid "while looking up /lost+found"
 msgstr "trong khi tra tìm /mất+tìm"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:466
 msgid "while expanding /lost+found"
 msgstr "trong khi mở rộng /mất+tìm"
 
-#: misc/mke2fs.c:559
+#: misc/mke2fs.c:481
 msgid "while setting bad block inode"
 msgstr "trong khi đặt nút thông tin khối sai"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:508
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Hết bộ nhớ nên xoá các rãnh ghi trong phạm vi %d đến %d\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:518
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Cảnh báo : không thể đọc khối 0: %s\n"
 
-#: misc/mke2fs.c:617
+#: misc/mke2fs.c:534
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Cảnh báo : không thể xoá rãnh ghi %d: %s\n"
 
-#: misc/mke2fs.c:633
+#: misc/mke2fs.c:550
 msgid "while initializing journal superblock"
 msgstr "trong khi sở khởi siêu khối nhật ký"
 
-#: misc/mke2fs.c:639
+#: misc/mke2fs.c:556
 msgid "Zeroing journal device: "
 msgstr "Đang làm số không thiết bị nhật ký: "
 
-#: misc/mke2fs.c:646
+#: misc/mke2fs.c:569
 #, c-format
 msgid "while zeroing journal device (block %u, count %d)"
 msgstr "trong khi làm số không thiết bị nhật ký (khối %u, số đếm %d)"
 
-#: misc/mke2fs.c:657
+#: misc/mke2fs.c:585
 msgid "while writing journal superblock"
 msgstr "trong khi ghi siêu khối nhật ký"
 
-#: misc/mke2fs.c:673
+#: misc/mke2fs.c:601
 #, c-format
 msgid ""
 "warning: %u blocks unused.\n"
@@ -3639,98 +3819,98 @@
 "cảnh báo : %u khối chưa dùng.\n"
 "\n"
 
-#: misc/mke2fs.c:678
+#: misc/mke2fs.c:606
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Nhãn hệ thống tập tin=%s\n"
 
-#: misc/mke2fs.c:679
+#: misc/mke2fs.c:607
 msgid "OS type: "
 msgstr "Kiểu HĐH: "
 
-#: misc/mke2fs.c:684
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Cỡ khối=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:686
+#: misc/mke2fs.c:614
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Cỡ đoạn=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:688
+#: misc/mke2fs.c:616
 #, c-format
 msgid "%u inodes, %u blocks\n"
 msgstr "%u nút thông tin, %u khối\n"
 
-#: misc/mke2fs.c:690
+#: misc/mke2fs.c:618
 #, c-format
 msgid "%u blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%u khối (%2.2f%%) được dành riêng cho siêu người dùng\n"
 
-#: misc/mke2fs.c:693
+#: misc/mke2fs.c:621
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Khối dữ liệu đầu=%u\n"
 
-#: misc/mke2fs.c:695
+#: misc/mke2fs.c:623
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Khối hệ thống tập tin tối đa=%lu\n"
 
-#: misc/mke2fs.c:700
+#: misc/mke2fs.c:627
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:702
+#: misc/mke2fs.c:629
 #, c-format
 msgid "%u block group\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:703
+#: misc/mke2fs.c:630
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u khối trên mỗi nhóm, %u đoạn trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:705
+#: misc/mke2fs.c:632
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u nút thông tin trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:712
+#: misc/mke2fs.c:639
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Siêu khối dự trữ được cất giữ trên khối: "
 
-#: misc/mke2fs.c:793
+#: misc/mke2fs.c:718
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:733
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:830
+#: misc/mke2fs.c:755
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Tham số thay đổi kích cỡ không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:837
+#: misc/mke2fs.c:762
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Số thay đổi kích cỡ tối đa phải lớn hơn kích cỡ của hệ thống tập tin.\n"
 
-#: misc/mke2fs.c:861
+#: misc/mke2fs.c:786
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng thay đổi kích cỡ một cách trực tuyến không được hỗ trợ\n"
 "trên hệ thống tập tin bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:808
 #, c-format
 msgid ""
 "\n"
@@ -3743,8 +3923,9 @@
 "\tstride=<RAID per-disk data chunk in blocks>\n"
 "\tstripe-width=<RAID stride * data disks in blocks>\n"
 "\tresize=<resize maximum size in blocks>\n"
-"\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\ttest_fs\n"
+"\n"
 msgstr ""
 "\n"
 "Sai xác định tùy chọn: %s\n"
@@ -3753,13 +3934,14 @@
 "đối số được ngụ ý với dấu bằng « = ».\n"
 "\n"
 "Tùy chọn đã mở rộng hợp lệ:\n"
-"\tstride=<chiều dài stride theo khối>\n"
+"\tstride=<đoạn dữ liệu RAID mỗi đĩa theo khối>\n"
 "\tstripe-width=<RAID stride * các đĩa dữ liệu theo khối>\n"
 "\tresize=<kích cỡ thay đổi kích cỡ tối đa theo khối>\n"
-"\n"
+"\tlazy_itable_init=<0 để tắt, 1 để bật>\n"
 "\ttest_fs\n"
+"\n"
 
-#: misc/mke2fs.c:893
+#: misc/mke2fs.c:824
 #, c-format
 msgid ""
 "\n"
@@ -3770,7 +3952,7 @@
 "Cảnh báo : chiều rộng sọc (stripe-width) RAID %u không phải là một bội số dương của %u.\n"
 "\n"
 
-#: misc/mke2fs.c:920
+#: misc/mke2fs.c:856
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -3779,101 +3961,146 @@
 "Gặp lỗi cú pháp trong tập tin cấu hình mke2fs (%s, dòng số %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:933 misc/tune2fs.c:335
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Đặt tùy chọn hệ thống tập tin không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:1040
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Cảnh báo !  Tập tin « mke2fs.conf » của bạn không xác định kiểu hệ thống tập tin %s.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Rất có thể là bạn cần phải cài đặt một tập tin « mke2fs.conf » mới.\n"
+"\n"
+
+#: misc/mke2fs.c:1176
 #, c-format
 msgid "invalid block size - %s"
 msgstr "cỡ khối không hợp lệ — %s"
 
-#: misc/mke2fs.c:1044
+#: misc/mke2fs.c:1180
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Cảnh báo : kích cỡ khối %d vô ích trên phần lớn hệ thống.\n"
 
-#: misc/mke2fs.c:1061
+#: misc/mke2fs.c:1196
 #, c-format
 msgid "invalid fragment size - %s"
 msgstr "cỡ đoạn không hợp lệ — %s"
 
-#: misc/mke2fs.c:1067
+#: misc/mke2fs.c:1202
 #, c-format
 msgid "Warning: fragments not supported.  Ignoring -f option\n"
 msgstr "Cảnh báo : không hỗ trợ đoạn nên bỏ qua tùy chọn « -f »\n"
 
-#: misc/mke2fs.c:1074
+#: misc/mke2fs.c:1209
 msgid "Illegal number for blocks per group"
 msgstr "Số cấm cho số khối trên mỗi nhóm"
 
-#: misc/mke2fs.c:1079
+#: misc/mke2fs.c:1214
 msgid "blocks per group must be multiple of 8"
 msgstr "số khối trên mỗi nhóm phải là bội số cho 8"
 
-#: misc/mke2fs.c:1089
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr "Kích cỡ flex_bg có số không được phép"
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "Kích cỡ flex_bg phải là lũy thừa 2"
+
+#: misc/mke2fs.c:1238
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "tỷ lệ nút thông tin không hợp lệ %s (thiểu %d/đa %d)"
 
-#: misc/mke2fs.c:1106
+#: misc/mke2fs.c:1255
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 "trong hàm cấp phát bộ nhớ malloc cho tên tập tin khối sai\n"
 "« bad_blocks_filename »"
 
-#: misc/mke2fs.c:1115
+#: misc/mke2fs.c:1265
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "phần trăm khối được dành riêng không hợp lệ — %s"
 
-#: misc/mke2fs.c:1133
+#: misc/mke2fs.c:1283
 #, c-format
 msgid "bad revision level - %s"
 msgstr "cấp bản sửa đổi sai — %s"
 
-#: misc/mke2fs.c:1145
+#: misc/mke2fs.c:1295
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "kích cỡ nút thông tin không hợp lệ — %s"
 
-#: misc/mke2fs.c:1165
+#: misc/mke2fs.c:1315
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "số (num) nút thông tin sai — %s"
 
-#: misc/mke2fs.c:1223 misc/mke2fs.c:1745
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "trong khi thử mở thiết bị nhật ký %s\n"
 
-#: misc/mke2fs.c:1229
+#: misc/mke2fs.c:1386
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Kích cỡ của thiết bị nhật ký (%d) nhỏ hơn kích cỡ tối thiểu %d\n"
 
-#: misc/mke2fs.c:1243
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Đang dùng kích cỡ khối của thiết bị nhật ký: %d\n"
+
+#: misc/mke2fs.c:1401
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Khối %d-byte quá lớn đối với hệ thống (tối đa %d)"
 
-#: misc/mke2fs.c:1247
+#: misc/mke2fs.c:1405
 #, c-format
 msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Cảnh báo : khối %d-byte quá lớn đối với hệ thống (tối đa %d)\n"
 "nên bị buộc tiếp tục\n"
 
-#: misc/mke2fs.c:1265
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "số đếm khối không hợp lệ — %s"
+
+#: misc/mke2fs.c:1423
 msgid "filesystem"
 msgstr "hệ thống tập tin"
 
-#: misc/mke2fs.c:1288 resize/main.c:332
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: thiết bị %s có kích cỡ quá lớn để đại diện theo 32 bit\n"
+"\tdùng kích cỡ khối %d.\n"
+
+#: misc/mke2fs.c:1468 resize/main.c:374
 msgid "while trying to determine filesystem size"
 msgstr "trong khi thử quyết định kích cỡ của hệ thống tập tin"
 
-#: misc/mke2fs.c:1294
+#: misc/mke2fs.c:1475
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -3881,7 +4108,7 @@
 "Không thể quyết định kích cỡ của thiết bị;\n"
 "bạn cần phải xác định kích cỡ của hệ thống tập tin\n"
 
-#: misc/mke2fs.c:1301
+#: misc/mke2fs.c:1482
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -3895,88 +4122,83 @@
 "\tdo phân vùng đã sửa đổi đang bận và đang được dùng.\n"
 "Có lẽ bạn cần phải khởi động lại máy để đọc lại bảng phân vùng.\n"
 
-#: misc/mke2fs.c:1319
+#: misc/mke2fs.c:1500
 msgid "Filesystem larger than apparent device size."
 msgstr "Hệ thống tập tin lớn hơn kích cỡ thiết bị biểu kiến."
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Lỗi phân tích danh sách các kiểu hệ thống tập tin\n"
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types để giải quyết mke2fs.conf: "
+
+#: misc/mke2fs.c:1547
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng hệ thống tập tin không được hỗ trợ trên hệ thống tập tin\n"
 "bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1374
+#: misc/mke2fs.c:1554
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng siêu khối thưa thớt không được hỗ trợ\n"
 "trên hệ thống tập tin bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1386
+#: misc/mke2fs.c:1566
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng nhật ký không được hỗ trợ trên hệ thống tập tin\n"
 "bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1412
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Hai tính năng thay đổi kích cỡ nút (resize_inode) và siêu nền (meta_bg) không tương thích với nhau.\n"
+"Do đó không thể hiệu lực đồng thời cả hai.\n"
+
+#: misc/mke2fs.c:1601
 msgid "while trying to determine hardware sector size"
 msgstr "trong khi thử quyết định kích cỡ của rãnh ghi phần cứng"
 
-#: misc/mke2fs.c:1464
+#: misc/mke2fs.c:1658
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "khối thay đổi kích cỡ trực tuyến được dành riêng không được hỗ trợ\n"
 "trên hệ thống tập tin không thưa thớt"
 
-#: misc/mke2fs.c:1473
+#: misc/mke2fs.c:1667
 msgid "blocks per group count out of range"
 msgstr "số khối trên mỗi nhóm ở ngoài phạm vi"
 
-#: misc/mke2fs.c:1480
-msgid ""
-"Filesystem too large.  No more than 2**31-1 blocks\n"
-"\t (8TB using a blocksize of 4k) are currently supported."
-msgstr ""
-"Hệ thống tập tin quá lớn. Hiện thời hỗ trợ kích cỡ\n"
-"\ttối đa 2**31-1 (8 TB theo kích cỡ khối 4k)."
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Chưa hiệu lực tính năng Flex_bg thì không thể ghi rõ kích cỡ Flex_bg"
 
-#: misc/mke2fs.c:1487
-#, c-format
-msgid ""
-"\n"
-"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n"
-"\tusing ext3.  Use -b 4096 if this is an issue for you.\n"
-"\n"
-msgstr ""
-"\n"
-"Cảnh báo : một số hạt nhân phiên bản 2.4 không hỗ trợ kích cỡ khối\n"
-"\tlớn hơn 4096, dùng ext3. Hãy sử dụng tùy chọn « -b 4096 »\n"
-"\tnếu bặn gặp khó khăn như thế.\n"
-"\n"
-
-#: misc/mke2fs.c:1504
+#: misc/mke2fs.c:1694
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "kích cỡ nút thông tin không hợp lệ %d (thiểu %d/đa %d)"
 
-#: misc/mke2fs.c:1510
-#, c-format
-msgid "Warning: %d-byte inodes not usable on older systems\n"
-msgstr "Cảnh báo : nút thông tin %d-byte vô ích trên hệ thống cũ hơn\n"
-
-#: misc/mke2fs.c:1522
+#: misc/mke2fs.c:1708
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "quá nhiều nút thông tin (%llu), tăng tỷ lệ nút thông tin không?"
 
-#: misc/mke2fs.c:1527
+#: misc/mke2fs.c:1713
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "quá nhiều nút thông tin (%llu), xác định <2³² nút thông tin"
 
-#: misc/mke2fs.c:1542
+#: misc/mke2fs.c:1728
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -3988,39 +4210,59 @@
 "\ttỷ_lệ_nút_thông_tin (-i) cao hơn cho số đếm nút thông tin\n"
 "(-N) thấp hơn\n"
 
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "Không thể cấp phát bộ nhớ cho tên tập tin tdb\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "trong khi thử xoá %s"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Đang ghi đè lên hệ thống tập tin đã có ; có thể làm việc này dùng câu lệnh:\n"
+"    e2undo %s %s\n"
+"\n"
+
 # Item in the main menu to select this package
-#: misc/mke2fs.c:1591
+#: misc/mke2fs.c:1893
 msgid "while setting up superblock"
 msgstr "trong khi thiết lập siêu khối"
 
-#: misc/mke2fs.c:1628
+#: misc/mke2fs.c:1952
 #, c-format
 msgid "unknown os - %s"
 msgstr "hệ điều hành lạ — %s"
 
-#: misc/mke2fs.c:1682
+#: misc/mke2fs.c:2006
 msgid "while trying to allocate filesystem tables"
 msgstr "trong khi thử cấp phát các bảng hệ thống tập tin"
 
-#: misc/mke2fs.c:1713
+#: misc/mke2fs.c:2037
 #, c-format
 msgid "while zeroing block %u at end of filesystem"
 msgstr "trong khi làm số không khối %u tại kết thúc của hệ thống tập tin"
 
-#: misc/mke2fs.c:1727
+#: misc/mke2fs.c:2050
 msgid "while reserving blocks for online resize"
 msgstr "trong khi dành riêng các khối để thay đổi kích cỡ trực tuyến"
 
-#: misc/mke2fs.c:1738 misc/tune2fs.c:433
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
 msgid "journal"
 msgstr "nhật ký"
 
-#: misc/mke2fs.c:1750
+#: misc/mke2fs.c:2073
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Đang thêm nhật ký vào thiết bị %s: "
 
-#: misc/mke2fs.c:1757
+#: misc/mke2fs.c:2080
 #, c-format
 msgid ""
 "\n"
@@ -4029,17 +4271,27 @@
 "\n"
 "trong khi thử thêm nhật ký vào thiết bị %s"
 
-#: misc/mke2fs.c:1762 misc/mke2fs.c:1788 misc/tune2fs.c:461 misc/tune2fs.c:475
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
 #, c-format
 msgid "done\n"
 msgstr "hoàn tất\n"
 
-#: misc/mke2fs.c:1793
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr "Đang bỏ qua bước tạo nhật ký trong chế độ chỉ siêu\n"
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Đang tạo nhật ký (%u khối): "
+
+#: misc/mke2fs.c:2122
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Đang ghi siêu khối và thông tin kế toán hệ thống tập tin: "
 
-#: misc/mke2fs.c:1798
+#: misc/mke2fs.c:2127
 #, c-format
 msgid ""
 "\n"
@@ -4048,7 +4300,7 @@
 "\n"
 "Cảnh báo : gặp khó khăn trong việc ghi ra các siêu khối."
 
-#: misc/mke2fs.c:1801
+#: misc/mke2fs.c:2130
 #, c-format
 msgid ""
 "done\n"
@@ -4062,11 +4314,46 @@
 msgid "Usage: mklost+found\n"
 msgstr "Sử dụng: mklost+found\n"
 
-#: misc/tune2fs.c:91
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Sử dụng:  %s thiết bị...\n"
+"\n"
+"In ra thông tin về phân vùng đối với mỗi thiết bị được cho.\n"
+"Ví dụ: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Không thể mở %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Không thể lấy dạng hình của %s: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Không thể lấy kích cỡ của %s: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   đầu=%8d cỡ=%8lu cuối=%8d\n"
+
+#: misc/tune2fs.c:96
 msgid "Please run e2fsck on the filesystem.\n"
 msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin.\n"
 
-#: misc/tune2fs.c:98
+#: misc/tune2fs.c:105
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
@@ -4074,7 +4361,8 @@
 "\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
-"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID] device\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Sử dụng: %s [-c số_đếm_lắp_tối_đa] [-e ứng_xử_lỗi] [-g nhóm]\n"
 "\t[-i khoảng[d|m|w]] [-j] [-J tùy_chọn_nhật_ký] [-l]\n"
@@ -4082,70 +4370,71 @@
 "\t[-r số_đếm_khối_dành_riêng] [-u người_dùng]\n"
 "\t[-C số_đếm_lắp] [-L nhãn_khối_tin]\n"
 "\t[-M thư_mục_lắp_cuối] [-O [^]tính_năng[,...]]\n"
-"\t[-E tùy_chọn_đã_mở_rộng[,...] [-T giờ_kiểm_tra_cuối] [-U UUID] thiết_bị\n"
+"\t[-E tùy_chọn_đã_mở_rộng[,...] [-T giờ_kiểm_tra_cuối]\n"
+"\t[-U UUID] [-l cỡ_nút_mới] thiết_bị\n"
 
-#: misc/tune2fs.c:171
+#: misc/tune2fs.c:190
 msgid "while trying to open external journal"
 msgstr "trong khi thử mở nhật ký bên ngoài"
 
-#: misc/tune2fs.c:175
+#: misc/tune2fs.c:194
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr "%s không phải thiết bị nhật ký.\n"
 
-#: misc/tune2fs.c:190
+#: misc/tune2fs.c:209
 msgid "Journal superblock not found!\n"
 msgstr "Không tìm thấy siêu khối nhật ký !\n"
 
-#: misc/tune2fs.c:202
+#: misc/tune2fs.c:221
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr "Không tìm thấy UUID của hệ thống tập tin trên thiết bị nhật ký.\n"
 
-#: misc/tune2fs.c:223
+#: misc/tune2fs.c:242
 msgid "Journal NOT removed\n"
 msgstr "CHƯA gỡ bỏ nhật ký\n"
 
-#: misc/tune2fs.c:229
+#: misc/tune2fs.c:248
 msgid "Journal removed\n"
 msgstr "Nhật ký đã gỡ bỏ\n"
 
-#: misc/tune2fs.c:268
+#: misc/tune2fs.c:288
 msgid "while reading bitmaps"
 msgstr "trong khi đọc các mảng ảnh"
 
-#: misc/tune2fs.c:275
+#: misc/tune2fs.c:296
 msgid "while clearing journal inode"
 msgstr "trong khi xoá sạch nút thông tin nhật ký"
 
-#: misc/tune2fs.c:286
+#: misc/tune2fs.c:307
 msgid "while writing journal inode"
 msgstr "trong khi ghi nút thông tin nhật ký"
 
-#: misc/tune2fs.c:301
+#: misc/tune2fs.c:322
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Đặt tùy chọn lắp không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:338
+#: misc/tune2fs.c:358
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr "Tính năng xoá sạch hệ thống tập tin « %s » không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:344
+#: misc/tune2fs.c:364
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr "Tính năng đặt hệ thống tập tin « %s » không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:353
+#: misc/tune2fs.c:373
 msgid ""
-"The has_journal flag may only be cleared when the filesystem is\n"
+"The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Cờ có nhật ký (has_journal) có thể được xoá sạch\n"
+"Tính năng có nhật ký (has_journal) có thể được xoá sạch\n"
 "chỉ khi hệ thống tập tin được tháo gắn kết\n"
 "hay được gắn kết một cách chỉ đọc.\n"
 
-#: misc/tune2fs.c:361
+#: misc/tune2fs.c:381
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
@@ -4153,11 +4442,31 @@
 "Đặt cờ cần thiết phục hồi (needs_recovery).\n"
 "Hãy chạy tiến trình e2fsck trước khi xoá sạch cờ có nhật ký (has_journal).\n"
 
-#: misc/tune2fs.c:428
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr "Gỡ bỏ cờ flex_bg thì gây ra hệ thống tập tin không thống nhất.\n"
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Tính năng tập tin rất lớn (huge_file) có thể được xoá sạch\n"
+"chỉ khi hệ thống tập tin được tháo gắn kết\n"
+"hay được gắn kết một cách chỉ đọc.\n"
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(và khởi động lại sau !)\n"
+
+#: misc/tune2fs.c:474
 msgid "The filesystem already has a journal.\n"
 msgstr "Hệ thống tập tin đã có nhật ký.\n"
 
-#: misc/tune2fs.c:445
+#: misc/tune2fs.c:492
 #, c-format
 msgid ""
 "\n"
@@ -4166,21 +4475,21 @@
 "\n"
 "trong khi thử mở nhật ký trên %s\n"
 
-#: misc/tune2fs.c:449
+#: misc/tune2fs.c:496
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr "Đang tạo nhật ký trên thiết bị %s: "
 
-#: misc/tune2fs.c:457
+#: misc/tune2fs.c:504
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr "trong khi thêm hệ thống tập tin vào nhật ký trên %s"
 
-#: misc/tune2fs.c:463
+#: misc/tune2fs.c:510
 msgid "Creating journal inode: "
 msgstr "Đang tạo nút thông tin nhật ký: "
 
-#: misc/tune2fs.c:472
+#: misc/tune2fs.c:519
 msgid ""
 "\n"
 "\twhile trying to create journal file"
@@ -4188,65 +4497,85 @@
 "\n"
 "trong khi thử tạo tập tin nhật ký"
 
-#: misc/tune2fs.c:539
+#: misc/tune2fs.c:585
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Không thể phân tách toán tử ngày/giờ : %s"
 
-#: misc/tune2fs.c:563 misc/tune2fs.c:576
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "số đếm lắp sai — %s"
 
-#: misc/tune2fs.c:592
+#: misc/tune2fs.c:638
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ứng xử lỗi sai — %s"
 
-#: misc/tune2fs.c:619
+#: misc/tune2fs.c:665
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "GID/tên nhóm sai — %s"
 
-#: misc/tune2fs.c:652
+#: misc/tune2fs.c:698
 #, c-format
 msgid "bad interval - %s"
 msgstr "khoảng sai - %s"
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:727
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "tỷ lệ khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:695
+#: misc/tune2fs.c:742
 msgid "-o may only be specified once"
 msgstr "có thể xác định tùy chọn « -o » chỉ một lần"
 
-#: misc/tune2fs.c:705
+#: misc/tune2fs.c:752
 msgid "-O may only be specified once"
 msgstr "có thể xác định tùy chọn « -O » chỉ một lần"
 
-#: misc/tune2fs.c:715
+#: misc/tune2fs.c:762
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "số đếm khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:744
+#: misc/tune2fs.c:791
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "UID/tên người dùng sai — %s"
 
-#: misc/tune2fs.c:842
+#: misc/tune2fs.c:808
+#, c-format
+msgid "bad inode size - %s"
+msgstr "kích cỡ nút sai — %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Kích cỡ nút phải là lũy thừa 2 — %s"
+
+#: misc/tune2fs.c:904
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Tham số stride RAID không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:857
+#: misc/tune2fs.c:919
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Tham số chiều rộng sọc (stripe-width) RAID không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:867
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Thuật toán tạo mẫu duy nhất vẫn không hợp lệ: %s\n"
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Đang đặt thuật toán tạo mẫu duy nhất thành %s (%d)\n"
+
+#: misc/tune2fs.c:948
 #, c-format
 msgid ""
 "\n"
@@ -4257,7 +4586,8 @@
 "\n"
 "Valid extended options are:\n"
 "\tstride=<RAID per-disk chunk size in blocks>\n"
-"\tstripe-width=<RAID stride*data disks in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 msgstr ""
@@ -4268,57 +4598,78 @@
 "đối số được ngụ ý với dấu bằng « = ».\n"
 "\n"
 "Tùy chọn đã mở rộng hợp lệ:\n"
-"\tstride=<chiều dài stride theo khối>\n"
+"\tstride=<RAID cho mỗi kích cỡ đoạn đĩa theo khối>\n"
 "\tstripe-width=<RAID stride*các đĩa dữ liệu theo khối>\n"
+"\thash_alg=<thuật toán tạo mẫu duy nhất>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:927
-#, c-format
-msgid "Filesystem %s has unsupported features enabled.\n"
-msgstr "Hệ thống tập tin %s đã hiệu lực tính năng không được hỗ trợ.\n"
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:790
+msgid "blocks to be moved"
+msgstr "khối cần di chuyển"
 
-#: misc/tune2fs.c:951
+#: misc/tune2fs.c:1485
+#, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Để hoàn lại thao tác tune2fs, hãy chạy câu lệnh\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, c-format
+msgid "The inode size is already %lu\n"
+msgstr "Kích cỡ nút thông tin đã %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Không hỗ trợ tính năng thu nhỏ kích cỡ nút thông tin\n"
+
+#: misc/tune2fs.c:1594
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Đang đặt số đếm lắp tối đa thành %d\n"
 
-#: misc/tune2fs.c:957
+#: misc/tune2fs.c:1600
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Đang đặt số đếm lắp hiện thời thành %d\n"
 
-#: misc/tune2fs.c:962
+#: misc/tune2fs.c:1605
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Đang đặt ứng xử lỗi thành %d\n"
 
-#: misc/tune2fs.c:967
+#: misc/tune2fs.c:1610
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Đang đặt GID khối dành riêng thành %lu\n"
 
-#: misc/tune2fs.c:972
+#: misc/tune2fs.c:1615
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Đang đặt khoảng giữa hai lần kiểm tra thành %lu giây\n"
 
-#: misc/tune2fs.c:978
+#: misc/tune2fs.c:1622
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
 msgstr "Đang đặt phần trăm khối dành riêng thành %g%% (%u khối)\n"
 
-#: misc/tune2fs.c:984
+#: misc/tune2fs.c:1629
 #, c-format
 msgid "reserved blocks count is too big (%lu)"
 msgstr "số đếm khối dành riêng quá lớn (%lu)"
 
-#: misc/tune2fs.c:990
+#: misc/tune2fs.c:1635
 #, c-format
 msgid "Setting reserved blocks count to %lu\n"
 msgstr "Đang đặt số đếm khối dành riêng thành %lu\n"
 
-#: misc/tune2fs.c:996
+#: misc/tune2fs.c:1641
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -4326,7 +4677,7 @@
 "\n"
 "Hệ thống tập tin đã có siêu khối thưa thớt.\n"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1648
 #, c-format
 msgid ""
 "\n"
@@ -4335,7 +4686,7 @@
 "\n"
 "Đặt cờ siêu khối thưa thớt.  %s"
 
-#: misc/tune2fs.c:1008
+#: misc/tune2fs.c:1653
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -4343,26 +4694,49 @@
 "\n"
 "Tính năng xoá sạch siêu cờ sparse không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:1015
+#: misc/tune2fs.c:1660
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Đang đặt giờ kiểm tra hệ thống tập tin lần cuối cùng thành %s\n"
 
-#: misc/tune2fs.c:1021
+#: misc/tune2fs.c:1666
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Đang đặt UID khối dành riêng thành %lu\n"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1717
 msgid "Invalid UUID format\n"
 msgstr "Định dạng UUID không hợp lệ\n"
 
-#: misc/tune2fs.c:1067
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr "Kích cỡ nút chỉ có thể thay đổi khi hệ thống tập tin không được gắn kết.\n"
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr "Chức năng thay đổi kích cỡ nút thông tin không phải được hỗ trợ đối với hệ thống tập tin đã bật tính năng « flex_bg ».\n"
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Gặp lỗi khi thay đổi kích cỡ nút.\n"
+"Hãy chạy lệnh « e2undo » để hủy các bước thay đổi hệ thống tập tin. \n"
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Đang đặt kích cỡ nút %lu\n"
+
+#: misc/tune2fs.c:1762
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Đang đặt kích cỡ stride thành %d\n"
 
-#: misc/tune2fs.c:1072
+#: misc/tune2fs.c:1767
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Đang đặt chiều rộng sọc (stripe width) thành %d\n"
@@ -4423,11 +4797,11 @@
 "\tsize=<journal size in megabytes>\n"
 "\tdevice=<journal device>\n"
 "\n"
-"The journal size must be between 1024 and 102400 filesystem blocks.\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
 "\n"
 msgstr ""
 "\n"
-"Tùy chọn nhật ký sai đã xác định.\n"
+"Sai xác định tùy chọn nhật ký.\n"
 "\n"
 "Các tùy chọn nhật ký cũng định giới bằng dấu phẩy, có thể chấp nhận\n"
 "đối số được ngụ ý với dấu bằng « = ».\n"
@@ -4437,7 +4811,7 @@
 "\tdevice=<thiết bị nhật ký>\n"
 "\n"
 "Kích cỡ của nhật ký phải nằm trong phạm vi\n"
-"1024 đến 102400 khối hệ thống tập tin.\n"
+"1024 đến 10240000 khối hệ thống tập tin.\n"
 "\n"
 
 #: misc/util.c:258
@@ -4497,64 +4871,83 @@
 msgid "#\t\t %u -> %u (%d)\n"
 msgstr "#\t\t %u -> %u (%d)\n"
 
-#: resize/main.c:39
+#: resize/main.c:42
 #, c-format
 msgid ""
-"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n"
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Sử dụng: %s [-d cờ_gỡ_lỗi] [-f] [-F] [-p] thiết_bị [kích_cỡ_mới]\n"
+"Sử dụng: %s [-d cờ_gỡ_lỗi] [-f] [-F] [-M] [-P] [-p] thiết_bị [kích_cỡ_mới]\n"
 "\n"
 
-#: resize/main.c:61
+#: resize/main.c:64
 msgid "Extending the inode table"
 msgstr "Đang mở rộng bảng nút thông tin"
 
-#: resize/main.c:64
+#: resize/main.c:67
 msgid "Relocating blocks"
 msgstr "Đang định vị lại các khối"
 
-#: resize/main.c:67
+#: resize/main.c:70
 msgid "Scanning inode table"
 msgstr "Đang quét bảng nút thông tin"
 
-#: resize/main.c:70
+#: resize/main.c:73
 msgid "Updating inode references"
 msgstr "Đang cập nhật các tham chiếu nút thông tin"
 
-#: resize/main.c:73
+#: resize/main.c:76
 msgid "Moving inode table"
 msgstr "Đang di chuyển bảng nút thông tin"
 
-#: resize/main.c:76
+#: resize/main.c:79
 msgid "Unknown pass?!?"
 msgstr "Lần qua lạ ?!?"
 
-#: resize/main.c:79
+#: resize/main.c:82
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
 msgstr "Khởi chạy lần qua %d (tối đa = %lu)\n"
 
-#: resize/main.c:253
+#: resize/main.c:265
 #, c-format
 msgid "while opening %s"
 msgstr "trong khi mở %s"
 
-#: resize/main.c:265
+#: resize/main.c:277
 #, c-format
 msgid "while getting stat information for %s"
 msgstr "trong khi lấy các thông tin về %s"
 
-#: resize/main.c:339
+#: resize/main.c:338
 #, c-format
-msgid "bad filesystem size - %s"
-msgstr "kích cỡ hệ thống tập tin sai — %s"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: tổ hợp hai tính năng flex_bg và !resize_inode\n"
+"đều không được resize2fs hỗ trợ.\n"
 
-#: resize/main.c:353
+#: resize/main.c:348
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Kích cỡ hệ thống tập tin tối thiểu được ước tính: %u\n"
+
+#: resize/main.c:384
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Kích cỡ mới không hợp lệ: %s\n"
+
+#: resize/main.c:396
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr "Kích cỡ mới vẫn nhỏ hơn tối thiểu (%u)\n"
+
+#: resize/main.c:402
 msgid "Invalid stride length"
 msgstr "Độ dài stride không hợp lệ"
 
-#: resize/main.c:377
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The containing partition (or device) is only %u (%dk) blocks.\n"
@@ -4565,7 +4958,7 @@
 "Bạn đã yêu cầu kích cỡ mới %u khối.\n"
 "\n"
 
-#: resize/main.c:384
+#: resize/main.c:433
 #, c-format
 msgid ""
 "The filesystem is already %u blocks long.  Nothing to do!\n"
@@ -4574,19 +4967,33 @@
 "Hệ thống tập tin đã có độ dài %u khối. Không có gì cần làm !\n"
 "\n"
 
-#: resize/main.c:395
+#: resize/main.c:444
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr "Trước tiên hãy chạy tiến trình « e2fsck -f %s ».\n"
 
-#: resize/main.c:406
+#: resize/main.c:448
+#, c-format
+msgid "Resizing the filesystem on %s to %u (%dk) blocks.\n"
+msgstr "Đang thay đổi kích cỡ của hệ thống tập tin trên %s thành %u (%dk) khối.\n"
+
+#: resize/main.c:457
 #, c-format
 msgid "while trying to resize %s"
 msgstr "trong khi thử thay đổi kích cỡ %s"
 
-#: resize/main.c:411
+#: resize/main.c:460
+#, c-format
+msgid ""
+"Please run 'e2fsck -fy %s' to fix the filesystem\n"
+"after the aborted resize operation.\n"
+msgstr ""
+"Hãy chạy câu lệnh « e2fsck -fy %s » để sửa chữa hệ thống tập tin\n"
+"đằng sau thao tác thay đổi kích cỡ bị hủy bỏ.\n"
+
+#: resize/main.c:466
 #, c-format
 msgid ""
 "The filesystem on %s is now %u blocks long.\n"
@@ -4595,24 +5002,75 @@
 "Hệ thống tập tin nằm trên %s giờ có độ dài %u khối.\n"
 "\n"
 
-#: resize/resize2fs.c:233
+#: resize/main.c:481
+#, c-format
+msgid "while trying to truncate %s"
+msgstr "trong khi thử cắt ngắn %s"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Hệ thống tập tin ở %s được gắn kết vào %s; cần thiết thay đổi kích cỡ trực tuyến\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Tính năng thu nhỏ từ %u xuống %u không được hỗ trợ.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Hệ thống tập tin không hỗ trợ tính năng thay đổi kích cỡ trực tuyến"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "trong khi thử mở điểm lắp %s"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Không đủ quyền để thay đổi kích cỡ của hệ thống tập tin"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ trực tuyến"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Trong khi kiểm tra có hỗ trợ thay đổi kích cỡ trực tuyến"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Đang thực hiện một công việc thay đổi kích cỡ %s trực tuyến xuống %u (%dk) khối.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Trong khi thử mở rộng nhóm cuối cùng"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Trong khi thử thêm nhóm số %d"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Hệ thống tập tin ở %s được gắn kết vào %s, và tính năng thay đổi kích cỡ trên dòng không được hỗ trợ trên hệ thống này.\n"
+
+#: resize/resize2fs.c:350
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "nút thông tin (%llu) phải nhỏ hơn %u"
 
-#: resize/resize2fs.c:642
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "khối dành riêng"
 
-#: resize/resize2fs.c:647
-msgid "blocks to be moved"
-msgstr "khối cần di chuyển"
-
-#: resize/resize2fs.c:652
+#: resize/resize2fs.c:795
 msgid "meta-data blocks"
 msgstr "khối siêu dữ liệu"
 
-#: resize/resize2fs.c:1550
+#: resize/resize2fs.c:1752
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Không bao giờ nên xảy ra: nút thông tin thay đổi kích cỡ bị hỏng !\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..357d49f
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..230d05a
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,4814 @@
+# Chinese (simplified) translation for e2fsprogs.
+# This file is distributed under the same license as the e2fsprogs package.
+# Dark Raven <drdarkraven@gmail.com>, 2009.
+#
+#. The strings in e2fsck's problem.c can be very hard to translate,
+#. since the strings are expanded in two different ways.  First of all,
+#. there is an @-expansion, where strings like "@i" are expanded to
+#. "inode", and so on.  In order to make it easier for translators, the
+#. e2fsprogs po template file has been enhanced with comments that show
+#. the @-expansion, for the strings in the problem.c file.
+#.
+#. Translators are free to use the @-expansion facility if they so
+#. choose, by providing translations for strings in e2fsck/message.c.
+#. These translation can completely replace an expansion; for example,
+#. if "bblock" (which indicated that "@b" would be expanded to "block")
+#. is translated as "ddatenverlust", then "@d" will be expanded to
+#. "datenverlust".  Alternatively, translators can simply not use the
+#. @-expansion facility at all.
+#.
+#. The second expansion which is done for e2fsck's problem.c messages is
+#. a dynamic %-expansion, which expands %i as an inode number, and so
+#. on.  A table of these expansions can be found below.  Note that
+#. %-expressions that begin with "%D" and "%I" are two-character
+#. expansions; so for example, "%Iu" expands to the inode's user id
+#. ownership field (inode->i_uid).
+#.  
+#. 	%b	<blk>			block number
+#. 	%B	<blkcount>		integer
+#. 	%c	<blk2>			block number
+#. 	%Di	<dirent> -> ino		inode number
+#. 	%Dn	<dirent> -> name	string
+#. 	%Dr	<dirent> -> rec_len
+#. 	%Dl	<dirent> -> name_len
+#. 	%Dt	<dirent> -> filetype
+#. 	%d	<dir> 			inode number
+#. 	%g	<group>			integer
+#. 	%i	<ino>			inode number
+#. 	%Is	<inode> -> i_size
+#. 	%IS	<inode> -> i_extra_isize
+#. 	%Ib	<inode> -> i_blocks
+#. 	%Il	<inode> -> i_links_count
+#. 	%Im	<inode> -> i_mode
+#. 	%IM	<inode> -> i_mtime
+#. 	%IF	<inode> -> i_faddr
+#. 	%If	<inode> -> i_file_acl
+#. 	%Id	<inode> -> i_dir_acl
+#. 	%Iu	<inode> -> i_uid
+#. 	%Ig	<inode> -> i_gid
+#. 	%j	<ino2>			inode number
+#. 	%m	<com_err error message>
+#. 	%N	<num>
+#. 	%p		ext2fs_get_pathname of directory <ino>
+#. 	%P		ext2fs_get_pathname of <dirent>->ino with <ino2> as
+#. 				the containing directory.  (If dirent is NULL
+#. 				then return the pathname of directory <ino2>)
+#. 	%q		ext2fs_get_pathname of directory <dir>
+#. 	%Q		ext2fs_get_pathname of directory <ino> with <dir> as
+#. 				the containing directory.
+#. 	%s	<str>			miscellaneous string
+#. 	%S		backup superblock
+#. 	%X	<num>	hexadecimal format
+#.
+msgid ""
+msgstr ""
+"Project-Id-Version: e2fsprogs-1.41.1\n"
+"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
+"POT-Creation-Date: 2009-06-29 01:27-0400\n"
+"PO-Revision-Date: 2009-05-05 13:11+0800\n"
+"Last-Translator: Dark Raven <drdarkraven@gmail.com>\n"
+"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists."
+"sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: e2fsck/badblocks.c:22 misc/mke2fs.c:165
+#, c-format
+msgid "Bad block %u out of range; ignored.\n"
+msgstr "坏块%u超出范围;忽略.\n"
+
+#: e2fsck/badblocks.c:45
+msgid "while sanity checking the bad blocks inode"
+msgstr ""
+
+#: e2fsck/badblocks.c:57
+#, fuzzy
+msgid "while reading the bad blocks inode"
+msgstr "当读取坏块inode时"
+
+#: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109
+#: e2fsck/unix.c:1057 e2fsck/unix.c:1140 misc/badblocks.c:1155
+#: misc/badblocks.c:1163 misc/badblocks.c:1177 misc/badblocks.c:1189
+#: misc/dumpe2fs.c:510 misc/e2image.c:583 misc/e2image.c:679
+#: misc/e2image.c:695 misc/mke2fs.c:181 misc/tune2fs.c:1532 resize/main.c:312
+#, c-format
+msgid "while trying to open %s"
+msgstr "当尝试打开 %s 时"
+
+#: e2fsck/badblocks.c:82
+#, fuzzy, c-format
+msgid "while trying popen '%s'"
+msgstr "当尝试对 '%s' 进行popen时"
+
+#: e2fsck/badblocks.c:93 misc/mke2fs.c:188
+#, fuzzy
+msgid "while reading in list of bad blocks from file"
+msgstr "当从文件中读取坏块表时"
+
+#: e2fsck/badblocks.c:104
+#, fuzzy
+msgid "while updating bad block inode"
+msgstr "当更新坏块inode时"
+
+#: e2fsck/badblocks.c:130
+#, c-format
+msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
+msgstr "警告:在坏块inode中发现非法的块%u.  清除.\n"
+
+#: e2fsck/ehandler.c:54
+#, fuzzy, c-format
+msgid "Error reading block %lu (%s) while %s.  "
+msgstr "读取块 %lu (%s) 错误 , %s.  "
+
+#: e2fsck/ehandler.c:57
+#, c-format
+msgid "Error reading block %lu (%s).  "
+msgstr "读取块 %lu (%s) 错误"
+
+#: e2fsck/ehandler.c:60 e2fsck/ehandler.c:109
+msgid "Ignore error"
+msgstr "忽略错误"
+
+#: e2fsck/ehandler.c:61
+msgid "Force rewrite"
+msgstr "强制覆盖"
+
+#: e2fsck/ehandler.c:103
+#, fuzzy, c-format
+msgid "Error writing block %lu (%s) while %s.  "
+msgstr "写块 %lu (%s) 出错 , %s.  "
+
+#: e2fsck/ehandler.c:106
+#, c-format
+msgid "Error writing block %lu (%s).  "
+msgstr "写块 %lu (%s) 出错.  "
+
+#: e2fsck/emptydir.c:56
+#, fuzzy
+msgid "empty dirblocks"
+msgstr "空dir块"
+
+#: e2fsck/emptydir.c:61
+msgid "empty dir map"
+msgstr "空ACL映射"
+
+#: e2fsck/emptydir.c:97
+#, c-format
+msgid "Empty directory block %u (#%d) in inode %u\n"
+msgstr "空目录块 %u (#%d),于 inode %u 中\n"
+
+#: e2fsck/extend.c:21
+#, c-format
+msgid "%s: %s filename nblocks blocksize\n"
+msgstr ""
+
+#: e2fsck/extend.c:43
+#, c-format
+msgid "Illegal number of blocks!\n"
+msgstr "非法的块数量!\n"
+
+#: e2fsck/extend.c:49
+#, c-format
+msgid "Couldn't allocate block buffer (size=%d)\n"
+msgstr "无法分配块缓存 (大小=%d)\n"
+
+#: e2fsck/flushb.c:34
+#, fuzzy, c-format
+msgid "Usage: %s disk\n"
+msgstr "用法: %s 磁盘\n"
+
+#: e2fsck/flushb.c:63
+#, c-format
+msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
+msgstr "不支持对BLKFLSBUF进行 ioctl 调用!  无法刷新缓存.\n"
+
+#: e2fsck/iscan.c:46
+#, c-format
+msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
+msgstr "用法: %s [-F] [-I inode_buffer_blocks] device\n"
+
+#: e2fsck/iscan.c:83 e2fsck/unix.c:817
+#, fuzzy, c-format
+msgid "while opening %s for flushing"
+msgstr "当为刷新打开“%s”时"
+
+#: e2fsck/iscan.c:88 e2fsck/unix.c:823 resize/main.c:288
+#, fuzzy, c-format
+msgid "while trying to flush %s"
+msgstr "当尝试刷新 %s 时"
+
+#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:489
+msgid "while opening inode scan"
+msgstr ""
+
+#: e2fsck/iscan.c:129 misc/e2image.c:507
+#, fuzzy
+msgid "while getting next inode"
+msgstr "当获取下一个inode时"
+
+#: e2fsck/iscan.c:138
+#, c-format
+msgid "%u inodes scanned.\n"
+msgstr "%u 个 inode 被扫描.\n"
+
+#: e2fsck/journal.c:507
+msgid "reading journal superblock\n"
+msgstr "读取日志超级块\n"
+
+#: e2fsck/journal.c:564
+#, c-format
+msgid "%s: no valid journal superblock found\n"
+msgstr "%s: 没有发现日志超级块\n"
+
+#: e2fsck/journal.c:573
+#, fuzzy, c-format
+msgid "%s: journal too short\n"
+msgstr "%s: 日志过短\n"
+
+#: e2fsck/journal.c:860
+#, c-format
+msgid "%s: recovering journal\n"
+msgstr "%s: 正在修复日志\n"
+
+#: e2fsck/journal.c:862
+#, c-format
+msgid "%s: won't do journal recovery while read-only\n"
+msgstr "%s: 使用只读模式时不会进行日志修复\n"
+
+#: e2fsck/journal.c:887
+#, c-format
+msgid "while trying to re-open %s"
+msgstr ""
+
+#: e2fsck/message.c:110
+msgid "aextended attribute"
+msgstr "a扩展属性"
+
+#: e2fsck/message.c:111
+msgid "Aerror allocating"
+msgstr "A分配出错"
+
+#: e2fsck/message.c:112
+msgid "bblock"
+msgstr "b块"
+
+#: e2fsck/message.c:113
+msgid "Bbitmap"
+msgstr "B位图"
+
+#: e2fsck/message.c:114
+msgid "ccompress"
+msgstr "c压缩"
+
+#: e2fsck/message.c:115
+msgid "Cconflicts with some other fs @b"
+msgstr "C与其他文件系统@b冲突"
+
+#: e2fsck/message.c:116
+msgid "iinode"
+msgstr "iinode"
+
+#: e2fsck/message.c:117
+msgid "Iillegal"
+msgstr "I非法的"
+
+#: e2fsck/message.c:118
+msgid "jjournal"
+msgstr "j日志"
+
+#: e2fsck/message.c:119
+msgid "Ddeleted"
+msgstr "D删除"
+
+#: e2fsck/message.c:120
+msgid "ddirectory"
+msgstr "d目录"
+
+#: e2fsck/message.c:121
+#, fuzzy
+msgid "eentry"
+msgstr "e入口"
+
+#: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr ""
+
+#: e2fsck/message.c:123
+msgid "ffilesystem"
+msgstr "f文件系统"
+
+#: e2fsck/message.c:124
+msgid "Ffor @i %i (%Q) is"
+msgstr ""
+
+#: e2fsck/message.c:125
+msgid "ggroup"
+msgstr "g簇"
+
+#: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "hHTREE@d@i"
+
+#: e2fsck/message.c:127
+msgid "llost+found"
+msgstr "llost+found"
+
+#: e2fsck/message.c:128
+msgid "Lis a link"
+msgstr "L是一个链接"
+
+#: e2fsck/message.c:129
+msgid "mmultiply-claimed"
+msgstr ""
+
+#: e2fsck/message.c:130
+msgid "ninvalid"
+msgstr "n无效的"
+
+#: e2fsck/message.c:131
+msgid "oorphaned"
+msgstr "孤立的"
+
+#: e2fsck/message.c:132
+msgid "pproblem in"
+msgstr "问题出于"
+
+#: e2fsck/message.c:133
+msgid "rroot @i"
+msgstr "r根@i"
+
+#: e2fsck/message.c:134
+#, fuzzy
+msgid "sshould be"
+msgstr "s应为"
+
+#: e2fsck/message.c:135
+msgid "Ssuper@b"
+msgstr "S超级@b"
+
+#: e2fsck/message.c:136
+msgid "uunattached"
+msgstr ""
+
+#: e2fsck/message.c:137
+msgid "vdevice"
+msgstr "v设备"
+
+#: e2fsck/message.c:138
+#, fuzzy
+msgid "xextent"
+msgstr "x程度"
+
+#: e2fsck/message.c:139
+msgid "zzero-length"
+msgstr "z零长度"
+
+#: e2fsck/message.c:150
+#, fuzzy
+msgid "<The NULL inode>"
+msgstr "<空的 inode>"
+
+#: e2fsck/message.c:151
+#, fuzzy
+msgid "<The bad blocks inode>"
+msgstr "<坏块 inode>"
+
+#: e2fsck/message.c:153
+msgid "<The ACL index inode>"
+msgstr "<ACL 索引 inode>"
+
+#: e2fsck/message.c:154
+msgid "<The ACL data inode>"
+msgstr "<ACL 数据 inode>"
+
+#: e2fsck/message.c:155
+msgid "<The boot loader inode>"
+msgstr "<启动器 inode>"
+
+#: e2fsck/message.c:156
+msgid "<The undelete directory inode>"
+msgstr "<未删除的目录 inode>"
+
+#: e2fsck/message.c:157
+msgid "<The group descriptor inode>"
+msgstr ""
+
+#: e2fsck/message.c:158
+msgid "<The journal inode>"
+msgstr "<日志 inode>"
+
+#: e2fsck/message.c:159
+#, fuzzy
+msgid "<Reserved inode 9>"
+msgstr "<保留的 inode 9>"
+
+#: e2fsck/message.c:160
+#, fuzzy
+msgid "<Reserved inode 10>"
+msgstr "<保留的 inode 10>"
+
+#: e2fsck/message.c:323
+#, c-format
+msgid "regular file"
+msgstr "一般文件"
+
+#: e2fsck/message.c:325
+#, c-format
+msgid "directory"
+msgstr "文件夹"
+
+#: e2fsck/message.c:327
+#, c-format
+msgid "character device"
+msgstr "字符设备"
+
+#: e2fsck/message.c:329
+#, c-format
+msgid "block device"
+msgstr "块设备"
+
+#: e2fsck/message.c:331
+#, c-format
+msgid "named pipe"
+msgstr "命名管道"
+
+#: e2fsck/message.c:333
+#, c-format
+msgid "symbolic link"
+msgstr "符号链接"
+
+#: e2fsck/message.c:335
+#, c-format
+msgid "socket"
+msgstr "套接字"
+
+#: e2fsck/message.c:337
+#, fuzzy, c-format
+msgid "unknown file type with mode 0%o"
+msgstr "模式为 0%o 的未知文件类型"
+
+#: e2fsck/pass1b.c:220
+msgid "multiply claimed inode map"
+msgstr ""
+
+#: e2fsck/pass1b.c:581 e2fsck/pass1b.c:714
+#, c-format
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr ""
+
+#: e2fsck/pass1b.c:757
+msgid "returned from clone_file_block"
+msgstr ""
+
+#: e2fsck/pass1b.c:776
+#, c-format
+msgid "internal error: couldn't lookup EA block record for %u"
+msgstr ""
+
+#: e2fsck/pass1b.c:788
+#, c-format
+msgid "internal error: couldn't lookup EA inode record for %u"
+msgstr ""
+
+#: e2fsck/pass1.c:430 e2fsck/pass2.c:784
+#, fuzzy
+msgid "reading directory block"
+msgstr "正在读取目录块"
+
+#: e2fsck/pass1.c:552
+#, fuzzy
+msgid "in-use inode map"
+msgstr "使用中的inode映射"
+
+#: e2fsck/pass1.c:561
+msgid "directory inode map"
+msgstr "目录inode映射"
+
+#: e2fsck/pass1.c:569
+#, fuzzy
+msgid "regular file inode map"
+msgstr "普通文件inode映射"
+
+#: e2fsck/pass1.c:576
+#, fuzzy
+msgid "in-use block map"
+msgstr "使用中的块映射"
+
+#: e2fsck/pass1.c:630
+msgid "opening inode scan"
+msgstr ""
+
+#: e2fsck/pass1.c:654
+msgid "getting next inode from scan"
+msgstr ""
+
+#: e2fsck/pass1.c:1123
+msgid "Pass 1"
+msgstr "第1步"
+
+#: e2fsck/pass1.c:1180
+#, fuzzy, c-format
+msgid "reading indirect blocks of inode %u"
+msgstr "当读取坏块inode时"
+
+#: e2fsck/pass1.c:1224
+#, fuzzy
+msgid "bad inode map"
+msgstr "<坏块 inode>"
+
+#: e2fsck/pass1.c:1246
+#, fuzzy
+msgid "inode in bad block map"
+msgstr "当更新坏块inode时"
+
+#: e2fsck/pass1.c:1266
+#, fuzzy
+msgid "imagic inode map"
+msgstr "不能读 inode map"
+
+#: e2fsck/pass1.c:1293
+msgid "multiply claimed block map"
+msgstr ""
+
+#: e2fsck/pass1.c:1392
+msgid "ext attr block map"
+msgstr ""
+
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr ""
+
+#: e2fsck/pass1.c:2449
+msgid "block bitmap"
+msgstr "块位图"
+
+#: e2fsck/pass1.c:2453
+msgid "inode bitmap"
+msgstr "inode 位图"
+
+#: e2fsck/pass1.c:2457
+msgid "inode table"
+msgstr "inode表"
+
+#: e2fsck/pass2.c:285
+msgid "Pass 2"
+msgstr "第2步"
+
+#: e2fsck/pass2.c:807
+msgid "Can not continue."
+msgstr "无法继续."
+
+#: e2fsck/pass3.c:76
+msgid "inode done bitmap"
+msgstr ""
+
+#: e2fsck/pass3.c:84
+#, fuzzy
+msgid "Peak memory"
+msgstr "内存耗尽"
+
+#: e2fsck/pass3.c:134
+msgid "Pass 3"
+msgstr "第3步"
+
+#: e2fsck/pass3.c:320
+msgid "inode loop detection bitmap"
+msgstr ""
+
+#: e2fsck/pass4.c:191
+msgid "Pass 4"
+msgstr "第4步"
+
+#: e2fsck/pass5.c:64
+msgid "Pass 5"
+msgstr "第5步"
+
+#: e2fsck/problem.c:50
+#, fuzzy
+msgid "(no prompt)"
+msgstr "(没有提示)"
+
+#: e2fsck/problem.c:51
+msgid "Fix"
+msgstr "处理"
+
+#: e2fsck/problem.c:52
+msgid "Clear"
+msgstr "清除"
+
+#: e2fsck/problem.c:53
+msgid "Relocate"
+msgstr "重定位"
+
+#: e2fsck/problem.c:54
+msgid "Allocate"
+msgstr "分配"
+
+#: e2fsck/problem.c:55
+msgid "Expand"
+msgstr "扩充"
+
+#: e2fsck/problem.c:56
+msgid "Connect to /lost+found"
+msgstr "连接到 /lost+found"
+
+#: e2fsck/problem.c:57
+msgid "Create"
+msgstr "创建"
+
+#: e2fsck/problem.c:58
+msgid "Salvage"
+msgstr "修复"
+
+#: e2fsck/problem.c:59
+msgid "Truncate"
+msgstr "截断"
+
+#: e2fsck/problem.c:60
+#, fuzzy
+msgid "Clear inode"
+msgstr "清除inode"
+
+#: e2fsck/problem.c:61
+msgid "Abort"
+msgstr "中断"
+
+#: e2fsck/problem.c:62
+msgid "Split"
+msgstr ""
+
+#: e2fsck/problem.c:63
+msgid "Continue"
+msgstr "继续"
+
+#: e2fsck/problem.c:64
+msgid "Clone multiply-claimed blocks"
+msgstr ""
+
+#: e2fsck/problem.c:65
+msgid "Delete file"
+msgstr "删除文件"
+
+#: e2fsck/problem.c:66
+#, fuzzy
+msgid "Suppress messages"
+msgstr "不显示消息"
+
+#: e2fsck/problem.c:67
+msgid "Unlink"
+msgstr "解除链接"
+
+#: e2fsck/problem.c:68
+msgid "Clear HTree index"
+msgstr ""
+
+#: e2fsck/problem.c:69
+msgid "Recreate"
+msgstr "重建"
+
+#: e2fsck/problem.c:78
+msgid "(NONE)"
+msgstr "(空)"
+
+#: e2fsck/problem.c:79
+msgid "FIXED"
+msgstr "已处理"
+
+#: e2fsck/problem.c:80
+msgid "CLEARED"
+msgstr "已清除"
+
+#: e2fsck/problem.c:81
+#, fuzzy
+msgid "RELOCATED"
+msgstr "已重定位"
+
+#: e2fsck/problem.c:82
+msgid "ALLOCATED"
+msgstr "已分配"
+
+#: e2fsck/problem.c:83
+#, fuzzy
+msgid "EXPANDED"
+msgstr "已扩充"
+
+#: e2fsck/problem.c:84
+#, fuzzy
+msgid "RECONNECTED"
+msgstr "已重新连接"
+
+#: e2fsck/problem.c:85
+#, fuzzy
+msgid "CREATED"
+msgstr "已创建"
+
+#: e2fsck/problem.c:86
+msgid "SALVAGED"
+msgstr "已修复"
+
+#: e2fsck/problem.c:87
+#, fuzzy
+msgid "TRUNCATED"
+msgstr "截断"
+
+#: e2fsck/problem.c:88
+#, fuzzy
+msgid "INODE CLEARED"
+msgstr "INODE 已清除"
+
+#: e2fsck/problem.c:89
+msgid "ABORTED"
+msgstr "已中断"
+
+#: e2fsck/problem.c:90
+#, fuzzy
+msgid "SPLIT"
+msgstr "分裂"
+
+#: e2fsck/problem.c:91
+msgid "CONTINUING"
+msgstr "继续"
+
+#: e2fsck/problem.c:92
+msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
+msgstr ""
+
+#: e2fsck/problem.c:93
+msgid "FILE DELETED"
+msgstr "文件已删除"
+
+#: e2fsck/problem.c:94
+msgid "SUPPRESSED"
+msgstr "禁止"
+
+#: e2fsck/problem.c:95
+msgid "UNLINKED"
+msgstr ""
+
+#: e2fsck/problem.c:96
+msgid "HTREE INDEX CLEARED"
+msgstr ""
+
+#: e2fsck/problem.c:97
+#, fuzzy
+msgid "WILL RECREATE"
+msgstr "将会重建"
+
+#. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:106
+msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
+msgstr ""
+
+#. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:110
+msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
+msgstr ""
+
+#. @-expanded: inode table for group %g is not in group.  (block %b)\n
+#. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
+#: e2fsck/problem.c:115
+msgid ""
+"@i table for @g %g is not in @g.  (@b %b)\n"
+"WARNING: SEVERE DATA LOSS POSSIBLE.\n"
+msgstr ""
+
+#. @-expanded: \n
+#. @-expanded: The superblock could not be read or does not describe a correct ext2\n
+#. @-expanded: filesystem.  If the device is valid and it really contains an ext2\n
+#. @-expanded: filesystem (and not swap or ufs or something else), then the superblock\n
+#. @-expanded: is corrupt, and you might try running e2fsck with an alternate superblock:\n
+#. @-expanded:     e2fsck -b %S <device>\n
+#. @-expanded: \n
+#: e2fsck/problem.c:121
+#, c-format
+msgid ""
+"\n"
+"The @S could not be read or does not describe a correct ext2\n"
+"@f.  If the @v is valid and it really contains an ext2\n"
+"@f (and not swap or ufs or something else), then the @S\n"
+"is corrupt, and you might try running e2fsck with an alternate @S:\n"
+"    e2fsck -b %S <@v>\n"
+"\n"
+msgstr ""
+
+#. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
+#. @-expanded: The physical size of the device is %c blocks\n
+#. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
+#: e2fsck/problem.c:130
+msgid ""
+"The @f size (according to the @S) is %b @bs\n"
+"The physical size of the @v is %c @bs\n"
+"Either the @S or the partition table is likely to be corrupt!\n"
+msgstr ""
+
+#. @-expanded: superblock block_size = %b, fragsize = %c.\n
+#. @-expanded: This version of e2fsck does not support fragment sizes different\n
+#. @-expanded: from the block size.\n
+#: e2fsck/problem.c:137
+msgid ""
+"@S @b_size = %b, fragsize = %c.\n"
+"This version of e2fsck does not support fragment sizes different\n"
+"from the @b size.\n"
+msgstr ""
+
+#. @-expanded: superblock blocks_per_group = %b, should have been %c\n
+#: e2fsck/problem.c:144
+msgid "@S @bs_per_group = %b, should have been %c\n"
+msgstr ""
+
+#. @-expanded: superblock first_data_block = %b, should have been %c\n
+#: e2fsck/problem.c:149
+msgid "@S first_data_@b = %b, should have been %c\n"
+msgstr ""
+
+#. @-expanded: filesystem did not have a UUID; generating one.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:154
+msgid ""
+"@f did not have a UUID; generating one.\n"
+"\n"
+msgstr ""
+
+#: e2fsck/problem.c:159
+#, c-format
+msgid ""
+"Note: if several inode or block bitmap blocks or part\n"
+"of the inode table require relocation, you may wish to try\n"
+"running e2fsck with the '-b %S' option first.  The problem\n"
+"may lie only with the primary block group descriptors, and\n"
+"the backup block group descriptors may be OK.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: Corruption found in superblock.  (%s = %N).\n
+#: e2fsck/problem.c:168
+msgid "Corruption found in @S.  (%s = %N).\n"
+msgstr "在@S中发现错误. (%s = %N).\n"
+
+#. @-expanded: Error determining size of the physical device: %m\n
+#: e2fsck/problem.c:173
+#, c-format
+msgid "Error determining size of the physical @v: %m\n"
+msgstr "决定物理@v的大小出错 %m\n"
+
+#. @-expanded: inode count in superblock is %i, should be %j.\n
+#: e2fsck/problem.c:178
+msgid "@i count in @S is %i, @s %j.\n"
+msgstr "@S中的@i计数为 %i,@s %j.\n"
+
+#: e2fsck/problem.c:182
+msgid "The Hurd does not support the filetype feature.\n"
+msgstr ""
+
+#. @-expanded: superblock has an invalid journal (inode %i).\n
+#: e2fsck/problem.c:187
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "@S包含@n ext3 @j(@i %i).\n"
+
+#. @-expanded: External journal has multiple filesystem users (unsupported).\n
+#: e2fsck/problem.c:192
+msgid "External @j has multiple @f users (unsupported).\n"
+msgstr ""
+
+#. @-expanded: Can't find external journal\n
+#: e2fsck/problem.c:197
+msgid "Can't find external @j\n"
+msgstr "无法找到外部@j\n"
+
+#. @-expanded: External journal has bad superblock\n
+#: e2fsck/problem.c:202
+msgid "External @j has bad @S\n"
+msgstr ""
+
+#. @-expanded: External journal does not support this filesystem\n
+#: e2fsck/problem.c:207
+msgid "External @j does not support this @f\n"
+msgstr ""
+
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
+#. @-expanded: format.\n
+#. @-expanded: It is also possible the journal superblock is corrupt.\n
+#: e2fsck/problem.c:212
+msgid ""
+"@f @j @S is unknown type %N (unsupported).\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
+"format.\n"
+"It is also possible the @j @S is corrupt.\n"
+msgstr ""
+
+#. @-expanded: journal superblock is corrupt.\n
+#: e2fsck/problem.c:220
+#, fuzzy
+msgid "@j @S is corrupt.\n"
+msgstr "Ext3日志@j@S被损坏.\n"
+
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
+#: e2fsck/problem.c:225
+#, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr ""
+
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
+#: e2fsck/problem.c:230
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr ""
+
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
+#: e2fsck/problem.c:235
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr ""
+
+#. @-expanded: Clear journal
+#: e2fsck/problem.c:240
+#, fuzzy
+msgid "Clear @j"
+msgstr "清除@j"
+
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
+#: e2fsck/problem.c:245 e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr ""
+
+#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
+#: e2fsck/problem.c:250
+msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+msgstr ""
+
+#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:255
+msgid "@I @b #%B (%b) found in @o @i %i.\n"
+msgstr ""
+
+#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:260
+msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
+msgstr ""
+
+#. @-expanded: illegal orphaned inode %i in superblock.\n
+#: e2fsck/problem.c:265
+#, c-format
+msgid "@I @o @i %i in @S.\n"
+msgstr "@S中有@I@o@i %i.\n"
+
+#. @-expanded: illegal inode %i in orphaned inode list.\n
+#: e2fsck/problem.c:270
+#, c-format
+msgid "@I @i %i in @o @i list.\n"
+msgstr ""
+
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:275
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr ""
+
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:280
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr ""
+
+#. @-expanded: journal version not supported by this e2fsck.\n
+#: e2fsck/problem.c:285
+msgid "@j version not supported by this e2fsck.\n"
+msgstr "e2fsck不支持此@j版本.\n"
+
+#. @-expanded: Moving journal from /%s to hidden inode.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:290
+#, c-format
+msgid ""
+"Moving @j from /%s to hidden @i.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: Error moving journal: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:295
+#, fuzzy, c-format
+msgid ""
+"Error moving @j: %m\n"
+"\n"
+msgstr ""
+"移动@j出错: %m\n"
+"\n"
+
+#. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
+#. @-expanded: Clearing fields beyond the V1 journal superblock...\n
+#. @-expanded: \n
+#: e2fsck/problem.c:300
+msgid ""
+"Found @n V2 @j @S fields (from V1 @j).\n"
+"Clearing fields beyond the V1 @j @S...\n"
+"\n"
+msgstr ""
+
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:306
+#, fuzzy
+msgid "Run @j anyway"
+msgstr "强制@j"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:311
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr ""
+
+#. @-expanded: Backing up journal inode block information.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:316
+msgid ""
+"Backing up @j @i @b information.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
+#. @-expanded: is %N; should be zero.  
+#: e2fsck/problem.c:321
+msgid ""
+"@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
+"is %N; @s zero.  "
+msgstr ""
+
+#. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
+#: e2fsck/problem.c:327
+msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
+msgstr ""
+
+#. @-expanded: Resize inode not valid.  
+#: e2fsck/problem.c:332
+msgid "Resize @i not valid.  "
+msgstr ""
+
+#. @-expanded: superblock last mount time is in the future.  
+#: e2fsck/problem.c:337
+msgid "@S last mount time is in the future.  "
+msgstr ""
+
+#. @-expanded: superblock last write time is in the future.  
+#: e2fsck/problem.c:342
+msgid "@S last write time is in the future.  "
+msgstr ""
+
+#. @-expanded: superblock hint for external superblock should be %X.  
+#: e2fsck/problem.c:346
+#, c-format
+msgid "@S hint for external superblock @s %X.  "
+msgstr ""
+
+#. @-expanded: Adding dirhash hint to filesystem.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:351
+msgid ""
+"Adding dirhash hint to @f.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g checksum is invalid.  
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr ""
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr ""
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr ""
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.  
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr ""
+
+#. @-expanded: Last group block bitmap uninitialized.  
+#: e2fsck/problem.c:376
+#, fuzzy
+msgid "Last @g @b @B uninitialized.  "
+msgstr "最后一个@g的@b@B未初始化.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr ""
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
+#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
+#: e2fsck/problem.c:392
+msgid "Pass 1: Checking @is, @bs, and sizes\n"
+msgstr "第一步: 检查@i,@b,和大小\n"
+
+#. @-expanded: root inode is not a directory.  
+#: e2fsck/problem.c:396
+#, fuzzy
+msgid "@r is not a @d.  "
+msgstr "@r不是一个@d.  "
+
+#. @-expanded: root inode has dtime set (probably due to old mke2fs).  
+#: e2fsck/problem.c:401
+msgid "@r has dtime set (probably due to old mke2fs).  "
+msgstr ""
+
+#. @-expanded: Reserved inode %i (%Q) has invalid mode.  
+#: e2fsck/problem.c:406
+msgid "Reserved @i %i (%Q) has @n mode.  "
+msgstr "保留的@i %i (%Q) 的模式无效.  "
+
+#. @-expanded: deleted inode %i has zero dtime.  
+#: e2fsck/problem.c:411
+#, c-format
+msgid "@D @i %i has zero dtime.  "
+msgstr ""
+
+#. @-expanded: inode %i is in use, but has dtime set.  
+#: e2fsck/problem.c:416
+#, c-format
+msgid "@i %i is in use, but has dtime set.  "
+msgstr ""
+
+#. @-expanded: inode %i is a zero-length directory.  
+#: e2fsck/problem.c:421
+#, c-format
+msgid "@i %i is a @z @d.  "
+msgstr ""
+
+#. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:426
+msgid "@g %g's @b @B at %b @C.\n"
+msgstr ""
+
+#. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:431
+msgid "@g %g's @i @B at %b @C.\n"
+msgstr ""
+
+#. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:436
+msgid "@g %g's @i table at %b @C.\n"
+msgstr ""
+
+#. @-expanded: group %g's block bitmap (%b) is bad.  
+#: e2fsck/problem.c:441
+msgid "@g %g's @b @B (%b) is bad.  "
+msgstr ""
+
+#. @-expanded: group %g's inode bitmap (%b) is bad.  
+#: e2fsck/problem.c:446
+msgid "@g %g's @i @B (%b) is bad.  "
+msgstr ""
+
+#. @-expanded: inode %i, i_size is %Is, should be %N.  
+#: e2fsck/problem.c:451
+msgid "@i %i, i_size is %Is, @s %N.  "
+msgstr ""
+
+#. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
+#: e2fsck/problem.c:456
+msgid "@i %i, i_@bs is %Ib, @s %N.  "
+msgstr ""
+
+#. @-expanded: illegal block #%B (%b) in inode %i.  
+#: e2fsck/problem.c:461
+msgid "@I @b #%B (%b) in @i %i.  "
+msgstr ""
+
+#. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.  
+#: e2fsck/problem.c:466
+msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
+msgstr ""
+
+#. @-expanded: inode %i has illegal block(s).  
+#: e2fsck/problem.c:471
+#, c-format
+msgid "@i %i has illegal @b(s).  "
+msgstr "@i %i 中包含非法@b.  "
+
+#. @-expanded: Too many illegal blocks in inode %i.\n
+#: e2fsck/problem.c:476
+#, fuzzy, c-format
+msgid "Too many illegal @bs in @i %i.\n"
+msgstr "@i %i 中包含了过多的非法@b.\n"
+
+#. @-expanded: illegal block #%B (%b) in bad block inode.  
+#: e2fsck/problem.c:481
+msgid "@I @b #%B (%b) in bad @b @i.  "
+msgstr ""
+
+#. @-expanded: Bad block inode has illegal block(s).  
+#: e2fsck/problem.c:486
+msgid "Bad @b @i has illegal @b(s).  "
+msgstr ""
+
+#. @-expanded: Duplicate or bad block in use!\n
+#: e2fsck/problem.c:491
+msgid "Duplicate or bad @b in use!\n"
+msgstr ""
+
+#. @-expanded: Bad block %b used as bad block inode indirect block.  
+#: e2fsck/problem.c:496
+msgid "Bad @b %b used as bad @b @i indirect @b.  "
+msgstr ""
+
+#. @-expanded: \n
+#. @-expanded: The bad block inode has probably been corrupted.  You probably\n
+#. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
+#. @-expanded: in the filesystem.\n
+#: e2fsck/problem.c:501
+msgid ""
+"\n"
+"The bad @b @i has probably been corrupted.  You probably\n"
+"should stop now and run e2fsck -c to scan for bad blocks\n"
+"in the @f.\n"
+msgstr ""
+
+#. @-expanded: \n
+#. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
+#: e2fsck/problem.c:508
+msgid ""
+"\n"
+"If the @b is really bad, the @f can not be fixed.\n"
+msgstr ""
+
+#. @-expanded: You can remove this block from the bad block list and hope\n
+#. @-expanded: that the block is really OK.  But there are no guarantees.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:513
+msgid ""
+"You can remove this @b from the bad @b list and hope\n"
+"that the @b is really OK.  But there are no guarantees.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: The primary superblock (%b) is on the bad block list.\n
+#: e2fsck/problem.c:519
+msgid "The primary @S (%b) is on the bad @b list.\n"
+msgstr ""
+
+#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
+#: e2fsck/problem.c:524
+msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
+msgstr ""
+
+#. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
+#: e2fsck/problem.c:530
+msgid "Warning: Group %g's @S (%b) is bad.\n"
+msgstr ""
+
+#. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
+#: e2fsck/problem.c:535
+msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
+msgstr ""
+
+#. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
+#: e2fsck/problem.c:541
+msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
+msgstr ""
+
+#. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
+#: e2fsck/problem.c:547
+msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
+msgstr ""
+
+#. @-expanded: error allocating block buffer for relocating %s\n
+#: e2fsck/problem.c:552
+#, c-format
+msgid "@A @b buffer for relocating %s\n"
+msgstr ""
+
+#. @-expanded: Relocating group %g's %s from %b to %c...\n
+#: e2fsck/problem.c:557
+msgid "Relocating @g %g's %s from %b to %c...\n"
+msgstr ""
+
+#. @-expanded: Relocating group %g's %s to %c...\n
+#: e2fsck/problem.c:562
+#, c-format
+msgid "Relocating @g %g's %s to %c...\n"
+msgstr ""
+
+#. @-expanded: Warning: could not read block %b of %s: %m\n
+#: e2fsck/problem.c:567
+msgid "Warning: could not read @b %b of %s: %m\n"
+msgstr "警告: 无法从%s中读取@b %b: %m\n"
+
+#. @-expanded: Warning: could not write block %b for %s: %m\n
+#: e2fsck/problem.c:572
+msgid "Warning: could not write @b %b for %s: %m\n"
+msgstr "警告: 无法向%s中写入@b %b: %m\n"
+
+#. @-expanded: error allocating inode bitmap (%N): %m\n
+#: e2fsck/problem.c:577 e2fsck/problem.c:1383
+msgid "@A @i @B (%N): %m\n"
+msgstr ""
+
+#. @-expanded: error allocating block bitmap (%N): %m\n
+#: e2fsck/problem.c:582
+msgid "@A @b @B (%N): %m\n"
+msgstr ""
+
+#. @-expanded: error allocating icount link information: %m\n
+#: e2fsck/problem.c:587
+#, c-format
+msgid "@A icount link information: %m\n"
+msgstr ""
+
+#. @-expanded: error allocating directory block array: %m\n
+#: e2fsck/problem.c:592
+#, c-format
+msgid "@A @d @b array: %m\n"
+msgstr "分配@d@b数组时出错: %m\n"
+
+#. @-expanded: Error while scanning inodes (%i): %m\n
+#: e2fsck/problem.c:597
+#, c-format
+msgid "Error while scanning @is (%i): %m\n"
+msgstr ""
+
+#. @-expanded: Error while iterating over blocks in inode %i: %m\n
+#: e2fsck/problem.c:602
+#, c-format
+msgid "Error while iterating over @bs in @i %i: %m\n"
+msgstr ""
+
+#. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
+#: e2fsck/problem.c:607
+msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
+msgstr ""
+
+#. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
+#: e2fsck/problem.c:612
+msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
+msgstr ""
+
+#. @-expanded: Error reading inode %i: %m\n
+#: e2fsck/problem.c:618
+#, c-format
+msgid "Error reading @i %i: %m\n"
+msgstr "读取@i %i出错: %m\n"
+
+#. @-expanded: inode %i has imagic flag set.  
+#: e2fsck/problem.c:626
+#, c-format
+msgid "@i %i has imagic flag set.  "
+msgstr ""
+
+#. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
+#. @-expanded: or append-only flag set.  
+#: e2fsck/problem.c:631
+#, c-format
+msgid ""
+"Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
+"or append-only flag set.  "
+msgstr ""
+
+#. @-expanded: inode %i has compression flag set on filesystem without compression support.  
+#: e2fsck/problem.c:637
+#, c-format
+msgid "@i %i has @cion flag set on @f without @cion support.  "
+msgstr ""
+
+#. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
+#: e2fsck/problem.c:642
+#, c-format
+msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
+msgstr ""
+
+#. @-expanded: journal inode is not in use, but contains data.  
+#: e2fsck/problem.c:652
+msgid "@j @i is not in use, but contains data.  "
+msgstr ""
+
+#. @-expanded: journal is not regular file.  
+#: e2fsck/problem.c:657
+msgid "@j is not regular file.  "
+msgstr "@j不是普通文件.  "
+
+#. @-expanded: inode %i was part of the orphaned inode list.  
+#: e2fsck/problem.c:662
+#, c-format
+msgid "@i %i was part of the @o @i list.  "
+msgstr ""
+
+#. @-expanded: inodes that were part of a corrupted orphan linked list found.  
+#: e2fsck/problem.c:668
+msgid "@is that were part of a corrupted orphan linked list found.  "
+msgstr ""
+
+#. @-expanded: error allocating refcount structure (%N): %m\n
+#: e2fsck/problem.c:673
+msgid "@A refcount structure (%N): %m\n"
+msgstr ""
+
+#. @-expanded: Error reading extended attribute block %b for inode %i.  
+#: e2fsck/problem.c:678
+msgid "Error reading @a @b %b for @i %i.  "
+msgstr ""
+
+#. @-expanded: inode %i has a bad extended attribute block %b.  
+#: e2fsck/problem.c:683
+msgid "@i %i has a bad @a @b %b.  "
+msgstr ""
+
+#. @-expanded: Error reading extended attribute block %b (%m).  
+#: e2fsck/problem.c:688
+msgid "Error reading @a @b %b (%m).  "
+msgstr ""
+
+#. @-expanded: extended attribute block %b has reference count %B, should be %N.  
+#: e2fsck/problem.c:693
+msgid "@a @b %b has reference count %B, @s %N.  "
+msgstr ""
+
+#. @-expanded: Error writing extended attribute block %b (%m).  
+#: e2fsck/problem.c:698
+msgid "Error writing @a @b %b (%m).  "
+msgstr ""
+
+#. @-expanded: extended attribute block %b has h_blocks > 1.  
+#: e2fsck/problem.c:703
+msgid "@a @b %b has h_@bs > 1.  "
+msgstr ""
+
+#. @-expanded: error allocating extended attribute block %b.  
+#: e2fsck/problem.c:708
+msgid "@A @a @b %b.  "
+msgstr ""
+
+#. @-expanded: extended attribute block %b is corrupt (allocation collision).  
+#: e2fsck/problem.c:713
+msgid "@a @b %b is corrupt (allocation collision).  "
+msgstr ""
+
+#. @-expanded: extended attribute block %b is corrupt (invalid name).  
+#: e2fsck/problem.c:718
+msgid "@a @b %b is corrupt (@n name).  "
+msgstr ""
+
+#. @-expanded: extended attribute block %b is corrupt (invalid value).  
+#: e2fsck/problem.c:723
+msgid "@a @b %b is corrupt (@n value).  "
+msgstr ""
+
+#. @-expanded: inode %i is too big.  
+#: e2fsck/problem.c:728
+#, c-format
+msgid "@i %i is too big.  "
+msgstr "@i %i 过大.  "
+
+#. @-expanded: block #%B (%b) causes directory to be too big.  
+#: e2fsck/problem.c:732
+msgid "@b #%B (%b) causes @d to be too big.  "
+msgstr ""
+
+#. @-expanded: block #%B (%b) causes file to be too big.  
+#: e2fsck/problem.c:737
+msgid "@b #%B (%b) causes file to be too big.  "
+msgstr ""
+
+#. @-expanded: block #%B (%b) causes symlink to be too big.  
+#: e2fsck/problem.c:742
+msgid "@b #%B (%b) causes symlink to be too big.  "
+msgstr ""
+
+#. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
+#: e2fsck/problem.c:747
+#, c-format
+msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
+msgstr ""
+
+#. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
+#: e2fsck/problem.c:752
+#, c-format
+msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
+msgstr ""
+
+#. @-expanded: HTREE directory inode %i has an invalid root node.\n
+#: e2fsck/problem.c:757
+#, c-format
+msgid "@h %i has an @n root node.\n"
+msgstr ""
+
+#. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
+#: e2fsck/problem.c:762
+msgid "@h %i has an unsupported hash version (%N)\n"
+msgstr ""
+
+#. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
+#: e2fsck/problem.c:767
+#, c-format
+msgid "@h %i uses an incompatible htree root node flag.\n"
+msgstr ""
+
+#. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
+#: e2fsck/problem.c:772
+msgid "@h %i has a tree depth (%N) which is too big\n"
+msgstr ""
+
+#. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
+#. @-expanded: filesystem metadata.  
+#: e2fsck/problem.c:777
+msgid ""
+"Bad @b @i has an indirect @b (%b) that conflicts with\n"
+"@f metadata.  "
+msgstr ""
+
+#. @-expanded: Resize inode (re)creation failed: %m.
+#: e2fsck/problem.c:783
+#, c-format
+msgid "Resize @i (re)creation failed: %m."
+msgstr ""
+
+#. @-expanded: inode %i has a extra size (%IS) which is invalid\n
+#: e2fsck/problem.c:788
+msgid "@i %i has a extra size (%IS) which is @n\n"
+msgstr ""
+
+#. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
+#: e2fsck/problem.c:793
+msgid "@a in @i %i has a namelen (%N) which is @n\n"
+msgstr ""
+
+#. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
+#: e2fsck/problem.c:798
+msgid "@a in @i %i has a value offset (%N) which is @n\n"
+msgstr ""
+
+#. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
+#: e2fsck/problem.c:803
+msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
+msgstr ""
+
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr ""
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr ""
+
+#. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
+#: e2fsck/problem.c:818
+msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr ""
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr ""
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr ""
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr ""
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr ""
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr ""
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
+
+#. @-expanded: \n
+#. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
+#. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
+#: e2fsck/problem.c:875
+msgid ""
+"\n"
+"Running additional passes to resolve @bs claimed by more than one @i...\n"
+"Pass 1B: Rescanning for @m @bs\n"
+msgstr ""
+
+#. @-expanded: multiply-claimed block(s) in inode %i:
+#: e2fsck/problem.c:881
+#, c-format
+msgid "@m @b(s) in @i %i:"
+msgstr ""
+
+#: e2fsck/problem.c:896
+#, c-format
+msgid "Error while scanning inodes (%i): %m\n"
+msgstr ""
+
+#. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
+#: e2fsck/problem.c:901
+#, c-format
+msgid "@A @i @B (@i_dup_map): %m\n"
+msgstr ""
+
+#. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
+#: e2fsck/problem.c:906
+#, c-format
+msgid "Error while iterating over @bs in @i %i (%s): %m\n"
+msgstr ""
+
+#. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
+#: e2fsck/problem.c:911 e2fsck/problem.c:1227
+msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
+msgstr ""
+
+#. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
+#: e2fsck/problem.c:917
+msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
+msgstr ""
+
+#. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
+#: e2fsck/problem.c:923
+msgid "Pass 1D: Reconciling @m @bs\n"
+msgstr ""
+
+#. @-expanded: File %Q (inode #%i, mod time %IM) \n
+#. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
+#: e2fsck/problem.c:928
+msgid ""
+"File %Q (@i #%i, mod time %IM) \n"
+"  has %B @m @b(s), shared with %N file(s):\n"
+msgstr ""
+
+#. @-expanded: \t%Q (inode #%i, mod time %IM)\n
+#: e2fsck/problem.c:934
+msgid "\t%Q (@i #%i, mod time %IM)\n"
+msgstr ""
+
+#. @-expanded: \t<filesystem metadata>\n
+#: e2fsck/problem.c:939
+msgid "\t<@f metadata>\n"
+msgstr "\t<@f元数据>\n"
+
+#. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
+#. @-expanded: \n
+#: e2fsck/problem.c:944
+msgid ""
+"(There are %N @is containing @m @bs.)\n"
+"\n"
+msgstr ""
+
+#. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:949
+msgid ""
+"@m @bs already reassigned or cloned.\n"
+"\n"
+msgstr ""
+
+#: e2fsck/problem.c:962
+#, c-format
+msgid "Couldn't clone file: %m\n"
+msgstr ""
+
+#. @-expanded: Pass 2: Checking directory structure\n
+#: e2fsck/problem.c:968
+msgid "Pass 2: Checking @d structure\n"
+msgstr "第二步: 检查目录结构\n"
+
+#. @-expanded: invalid inode number for '.' in directory inode %i.\n
+#: e2fsck/problem.c:973
+#, c-format
+msgid "@n @i number for '.' in @d @i %i.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
+#: e2fsck/problem.c:978
+msgid "@E has @n @i #: %Di.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
+#: e2fsck/problem.c:983
+msgid "@E has @D/unused @i %Di.  "
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
+#: e2fsck/problem.c:988
+msgid "@E @L to '.'  "
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
+#: e2fsck/problem.c:993
+msgid "@E points to @i (%Di) located in a bad @b.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
+#: e2fsck/problem.c:998
+msgid "@E @L to @d %P (%Di).\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
+#: e2fsck/problem.c:1003
+msgid "@E @L to the @r.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
+#: e2fsck/problem.c:1008
+msgid "@E has illegal characters in its name.\n"
+msgstr ""
+
+#. @-expanded: Missing '.' in directory inode %i.\n
+#: e2fsck/problem.c:1013
+#, c-format
+msgid "Missing '.' in @d @i %i.\n"
+msgstr "@d@i %i 中缺少 '.'.\n"
+
+#. @-expanded: Missing '..' in directory inode %i.\n
+#: e2fsck/problem.c:1018
+#, c-format
+msgid "Missing '..' in @d @i %i.\n"
+msgstr "@d@i %i 中缺少 '..'.\n"
+
+#. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
+#: e2fsck/problem.c:1023
+msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
+msgstr ""
+
+#. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
+#: e2fsck/problem.c:1028
+msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
+msgstr ""
+
+#. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
+#: e2fsck/problem.c:1033
+msgid "i_faddr @F %IF, @s zero.\n"
+msgstr ""
+
+#. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
+#: e2fsck/problem.c:1038
+msgid "i_file_acl @F %If, @s zero.\n"
+msgstr ""
+
+#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1043
+msgid "i_dir_acl @F %Id, @s zero.\n"
+msgstr ""
+
+#. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1048
+msgid "i_frag @F %N, @s zero.\n"
+msgstr ""
+
+#. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1053
+msgid "i_fsize @F %N, @s zero.\n"
+msgstr ""
+
+#. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
+#: e2fsck/problem.c:1058
+#, fuzzy
+msgid "@i %i (%Q) has @n mode (%Im).\n"
+msgstr "@i %i (%Q) 有@n模式 (%Im).\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
+#: e2fsck/problem.c:1063
+msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
+msgstr "@d@i %i, 第 %B @b, 偏移量 %N: @d损坏\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
+#: e2fsck/problem.c:1068
+msgid "@d @i %i, @b %B, offset %N: filename too long\n"
+msgstr "@d@i %i, 第 %B @b, 偏移量 %N: 文件名过长\n"
+
+#. @-expanded: directory inode %i has an unallocated block #%B.  
+#: e2fsck/problem.c:1073
+msgid "@d @i %i has an unallocated @b #%B.  "
+msgstr "@d@i %i 含有未分配@b #%B.  "
+
+#. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1078
+#, c-format
+msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "@d@i %i 中的 '.' @d@e 没有以NULL终止\n"
+
+#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1083
+#, c-format
+msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "@d@i %i 中的 '..' @d@e 没有以NULL终止\n"
+
+#. @-expanded: inode %i (%Q) is an illegal character device.\n
+#: e2fsck/problem.c:1088
+msgid "@i %i (%Q) is an @I character @v.\n"
+msgstr ""
+
+#. @-expanded: inode %i (%Q) is an illegal block device.\n
+#: e2fsck/problem.c:1093
+msgid "@i %i (%Q) is an @I @b @v.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
+#: e2fsck/problem.c:1098
+msgid "@E is duplicate '.' @e.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
+#: e2fsck/problem.c:1103
+msgid "@E is duplicate '..' @e.\n"
+msgstr ""
+
+#: e2fsck/problem.c:1108 e2fsck/problem.c:1408
+#, c-format
+msgid "Internal error: couldn't find dir_info for %i.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
+#: e2fsck/problem.c:1113
+msgid "@E has rec_len of %Dr, @s %N.\n"
+msgstr ""
+
+#. @-expanded: error allocating icount structure: %m\n
+#: e2fsck/problem.c:1118
+#, c-format
+msgid "@A icount structure: %m\n"
+msgstr ""
+
+#. @-expanded: Error iterating over directory blocks: %m\n
+#: e2fsck/problem.c:1123
+#, c-format
+msgid "Error iterating over @d @bs: %m\n"
+msgstr ""
+
+#. @-expanded: Error reading directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1128
+msgid "Error reading @d @b %b (@i %i): %m\n"
+msgstr ""
+
+#. @-expanded: Error writing directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1133
+msgid "Error writing @d @b %b (@i %i): %m\n"
+msgstr ""
+
+#. @-expanded: error allocating new directory block for inode %i (%s): %m\n
+#: e2fsck/problem.c:1138
+#, c-format
+msgid "@A new @d @b for @i %i (%s): %m\n"
+msgstr ""
+
+#. @-expanded: Error deallocating inode %i: %m\n
+#: e2fsck/problem.c:1143
+#, c-format
+msgid "Error deallocating @i %i: %m\n"
+msgstr ""
+
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr ""
+
+#. @-expanded: inode %i (%Q) is an illegal FIFO.\n
+#: e2fsck/problem.c:1153
+msgid "@i %i (%Q) is an @I FIFO.\n"
+msgstr ""
+
+#. @-expanded: inode %i (%Q) is an illegal socket.\n
+#: e2fsck/problem.c:1158
+msgid "@i %i (%Q) is an @I socket.\n"
+msgstr ""
+
+#. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
+#: e2fsck/problem.c:1163
+msgid "Setting filetype for @E to %N.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
+#: e2fsck/problem.c:1168
+msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
+#: e2fsck/problem.c:1173
+msgid "@E has filetype set.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
+#: e2fsck/problem.c:1178
+msgid "@E has a @z name.\n"
+msgstr ""
+
+#. @-expanded: Symlink %Q (inode #%i) is invalid.\n
+#: e2fsck/problem.c:1183
+msgid "Symlink %Q (@i #%i) is @n.\n"
+msgstr ""
+
+#. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
+#: e2fsck/problem.c:1188
+msgid "@a @b @F @n (%If).\n"
+msgstr ""
+
+#. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
+#: e2fsck/problem.c:1193
+msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
+#: e2fsck/problem.c:1198
+msgid "@p @h %d: node (%B) not referenced\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
+#: e2fsck/problem.c:1203
+msgid "@p @h %d: node (%B) referenced twice\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
+#: e2fsck/problem.c:1208
+msgid "@p @h %d: node (%B) has bad min hash\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
+#: e2fsck/problem.c:1213
+msgid "@p @h %d: node (%B) has bad max hash\n"
+msgstr ""
+
+#. @-expanded: invalid HTREE directory inode %d (%q).  
+#: e2fsck/problem.c:1218
+msgid "@n @h %d (%q).  "
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
+#: e2fsck/problem.c:1222
+msgid "@p @h %d (%q): bad @b number %b.\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
+#: e2fsck/problem.c:1232
+#, c-format
+msgid "@p @h %d: root node is @n\n"
+msgstr "@p@h %d:根结点@n\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
+#: e2fsck/problem.c:1237
+msgid "@p @h %d: node (%B) has @n limit (%N)\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
+#: e2fsck/problem.c:1242
+msgid "@p @h %d: node (%B) has @n count (%N)\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
+#: e2fsck/problem.c:1247
+msgid "@p @h %d: node (%B) has an unordered hash table\n"
+msgstr ""
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr ""
+
+#. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
+#: e2fsck/problem.c:1257
+msgid "Duplicate @E found.  "
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
+#. @-expanded: Rename to %s
+#: e2fsck/problem.c:1262
+#, no-c-format
+msgid ""
+"@E has a non-unique filename.\n"
+"Rename to %s"
+msgstr ""
+
+#. @-expanded: Duplicate entry '%Dn' found.\n
+#. @-expanded: \tMarking %p (%i) to be rebuilt.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1267
+msgid ""
+"Duplicate @e '%Dn' found.\n"
+"\tMarking %p (%i) to be rebuilt.\n"
+"\n"
+msgstr ""
+
+#. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1272
+msgid "i_blocks_hi @F %N, @s zero.\n"
+msgstr ""
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr ""
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr ""
+
+#. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1291
+msgid "i_file_acl_hi @F %N, @s zero.\n"
+msgstr ""
+
+#. @-expanded: Pass 3: Checking directory connectivity\n
+#: e2fsck/problem.c:1298
+msgid "Pass 3: Checking @d connectivity\n"
+msgstr "第3步: 检查目录连接性\n"
+
+#. @-expanded: root inode not allocated.  
+#: e2fsck/problem.c:1303
+msgid "@r not allocated.  "
+msgstr ""
+
+#. @-expanded: No room in lost+found directory.  
+#: e2fsck/problem.c:1308
+msgid "No room in @l @d.  "
+msgstr "@l@d中没有空间.  "
+
+#. @-expanded: Unconnected directory inode %i (%p)\n
+#: e2fsck/problem.c:1313
+#, c-format
+msgid "Unconnected @d @i %i (%p)\n"
+msgstr ""
+
+#. @-expanded: /lost+found not found.  
+#: e2fsck/problem.c:1318
+msgid "/@l not found.  "
+msgstr "/@l未找到."
+
+#. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
+#: e2fsck/problem.c:1323
+msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
+msgstr ""
+
+#. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
+#: e2fsck/problem.c:1328
+msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
+msgstr ""
+
+#. @-expanded: Could not expand /lost+found: %m\n
+#: e2fsck/problem.c:1333
+#, c-format
+msgid "Could not expand /@l: %m\n"
+msgstr ""
+
+#: e2fsck/problem.c:1338
+#, c-format
+msgid "Could not reconnect %i: %m\n"
+msgstr ""
+
+#. @-expanded: Error while trying to find /lost+found: %m\n
+#: e2fsck/problem.c:1343
+#, c-format
+msgid "Error while trying to find /@l: %m\n"
+msgstr "尝试找到/@l时出错: %m\n"
+
+#. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1348
+#, c-format
+msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
+msgstr ""
+
+#. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1353
+#, c-format
+msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
+msgstr ""
+
+#. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
+#: e2fsck/problem.c:1358
+#, c-format
+msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
+msgstr ""
+
+#. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
+#: e2fsck/problem.c:1363
+#, c-format
+msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
+msgstr ""
+
+#. @-expanded: Error while adjusting inode count on inode %i\n
+#: e2fsck/problem.c:1368
+#, c-format
+msgid "Error while adjusting @i count on @i %i\n"
+msgstr ""
+
+#. @-expanded: Couldn't fix parent of inode %i: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1373
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: %m\n"
+"\n"
+msgstr ""
+
+#. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1378
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
+"\n"
+msgstr ""
+
+#. @-expanded: Error creating root directory (%s): %m\n
+#: e2fsck/problem.c:1388
+#, c-format
+msgid "Error creating root @d (%s): %m\n"
+msgstr "创建根@d (%s) 时出错: %m\n"
+
+#. @-expanded: Error creating /lost+found directory (%s): %m\n
+#: e2fsck/problem.c:1393
+#, c-format
+msgid "Error creating /@l @d (%s): %m\n"
+msgstr ""
+
+#. @-expanded: root inode is not a directory; aborting.\n
+#: e2fsck/problem.c:1398
+msgid "@r is not a @d; aborting.\n"
+msgstr "@r不是一个@d; 中止.\n"
+
+#. @-expanded: Cannot proceed without a root inode.\n
+#: e2fsck/problem.c:1403
+msgid "Cannot proceed without a @r.\n"
+msgstr ""
+
+#. @-expanded: /lost+found is not a directory (ino=%i)\n
+#: e2fsck/problem.c:1413
+#, c-format
+msgid "/@l is not a @d (ino=%i)\n"
+msgstr ""
+
+#: e2fsck/problem.c:1420
+msgid "Pass 3A: Optimizing directories\n"
+msgstr ""
+
+#: e2fsck/problem.c:1425
+#, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr ""
+
+#: e2fsck/problem.c:1430
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr ""
+
+#: e2fsck/problem.c:1435
+#, fuzzy
+msgid "Optimizing directories: "
+msgstr "优化目录: "
+
+#: e2fsck/problem.c:1452
+msgid "Pass 4: Checking reference counts\n"
+msgstr ""
+
+#. @-expanded: unattached zero-length inode %i.  
+#: e2fsck/problem.c:1457
+#, c-format
+msgid "@u @z @i %i.  "
+msgstr ""
+
+#. @-expanded: unattached inode %i\n
+#: e2fsck/problem.c:1462
+#, c-format
+msgid "@u @i %i\n"
+msgstr ""
+
+#. @-expanded: inode %i ref count is %Il, should be %N.  
+#: e2fsck/problem.c:1467
+msgid "@i %i ref count is %Il, @s %N.  "
+msgstr ""
+
+#. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
+#. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
+#. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
+#: e2fsck/problem.c:1471
+msgid ""
+"WARNING: PROGRAMMING BUG IN E2FSCK!\n"
+"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
+"@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
+msgstr ""
+"警告:E2FSCK中的程序错误!\n"
+"\t或者是某个笨蛋(你)正在检查一个被挂载的(活动的)文件系统.\n"
+"@i_link_info[%i] 为 %N, @i.i_links_count 为 %Il.它们应该是相同的!\n"
+
+#. @-expanded: Pass 5: Checking group summary information\n
+#: e2fsck/problem.c:1481
+msgid "Pass 5: Checking @g summary information\n"
+msgstr "第5步: 检查@g概要信息\n"
+
+#. @-expanded: Padding at end of inode bitmap is not set. 
+#: e2fsck/problem.c:1486
+msgid "Padding at end of @i @B is not set. "
+msgstr ""
+
+#. @-expanded: Padding at end of block bitmap is not set. 
+#: e2fsck/problem.c:1491
+msgid "Padding at end of @b @B is not set. "
+msgstr ""
+
+#. @-expanded: block bitmap differences: 
+#: e2fsck/problem.c:1496
+msgid "@b @B differences: "
+msgstr "@b@B差异: "
+
+#. @-expanded: inode bitmap differences: 
+#: e2fsck/problem.c:1516
+msgid "@i @B differences: "
+msgstr "@i@B差异: "
+
+#. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1536
+msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
+msgstr ""
+
+#. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1541
+msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
+msgstr ""
+
+#. @-expanded: Free inodes count wrong (%i, counted=%j).\n
+#: e2fsck/problem.c:1546
+msgid "Free @is count wrong (%i, counted=%j).\n"
+msgstr ""
+
+#. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
+#: e2fsck/problem.c:1551
+msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
+msgstr ""
+
+#. @-expanded: Free blocks count wrong (%b, counted=%c).\n
+#: e2fsck/problem.c:1556
+msgid "Free @bs count wrong (%b, counted=%c).\n"
+msgstr ""
+
+#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
+#. @-expanded: endpoints (%i, %j)\n
+#: e2fsck/problem.c:1561
+msgid ""
+"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
+"endpoints (%i, %j)\n"
+msgstr ""
+
+#: e2fsck/problem.c:1567
+msgid "Internal error: fudging end of bitmap (%N)\n"
+msgstr ""
+
+#. @-expanded: Error copying in replacement inode bitmap: %m\n
+#: e2fsck/problem.c:1572
+#, c-format
+msgid "Error copying in replacement @i @B: %m\n"
+msgstr ""
+
+#. @-expanded: Error copying in replacement block bitmap: %m\n
+#: e2fsck/problem.c:1577
+#, c-format
+msgid "Error copying in replacement @b @B: %m\n"
+msgstr ""
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr ""
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr ""
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1614
+#, fuzzy
+msgid "Recreate @j"
+msgstr "重建"
+
+#: e2fsck/problem.c:1732
+#, c-format
+msgid "Unhandled error code (0x%x)!\n"
+msgstr ""
+
+#: e2fsck/problem.c:1827
+msgid "IGNORED"
+msgstr "已忽略"
+
+#: e2fsck/scantest.c:81
+#, c-format
+msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
+msgstr ""
+
+#: e2fsck/scantest.c:100
+#, c-format
+msgid "size of inode=%d\n"
+msgstr "inode大小=%d\n"
+
+#: e2fsck/scantest.c:121
+msgid "while starting inode scan"
+msgstr ""
+
+#: e2fsck/scantest.c:132
+msgid "while doing inode scan"
+msgstr ""
+
+#: e2fsck/super.c:187
+#, c-format
+msgid "while calling ext2fs_block_iterate for inode %d"
+msgstr ""
+
+#: e2fsck/super.c:209
+#, c-format
+msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
+msgstr ""
+
+#: e2fsck/super.c:267
+msgid "Truncating"
+msgstr "正在截断"
+
+#: e2fsck/super.c:268
+msgid "Clearing"
+msgstr "正在清除"
+
+#: e2fsck/unix.c:76
+#, c-format
+msgid ""
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
+"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extended-options] device\n"
+msgstr ""
+
+#: e2fsck/unix.c:82
+#, c-format
+msgid ""
+"\n"
+"Emergency help:\n"
+" -p                   Automatic repair (no questions)\n"
+" -n                   Make no changes to the filesystem\n"
+" -y                   Assume \"yes\" to all questions\n"
+" -c                   Check for bad blocks and add them to the badblock "
+"list\n"
+" -f                   Force checking even if filesystem is marked clean\n"
+msgstr ""
+
+#: e2fsck/unix.c:88
+#, c-format
+msgid ""
+" -v                   Be verbose\n"
+" -b superblock        Use alternative superblock\n"
+" -B blocksize         Force blocksize when looking for superblock\n"
+" -j external_journal  Set location of the external journal\n"
+" -l bad_blocks_file   Add to badblocks list\n"
+" -L bad_blocks_file   Set badblocks list\n"
+msgstr ""
+
+#: e2fsck/unix.c:132
+#, c-format
+msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
+msgstr ""
+
+#: e2fsck/unix.c:150
+#, c-format
+msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr ""
+
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr ""
+
+#: e2fsck/unix.c:207 misc/badblocks.c:928 misc/tune2fs.c:1584 misc/util.c:151
+#: resize/main.c:249
+#, c-format
+msgid "while determining whether %s is mounted."
+msgstr ""
+
+#: e2fsck/unix.c:225
+#, c-format
+msgid "Warning!  %s is mounted.\n"
+msgstr "警告! %s已挂载.\n"
+
+#: e2fsck/unix.c:229
+#, c-format
+msgid "%s is mounted.  "
+msgstr "%s 已挂载."
+
+#: e2fsck/unix.c:231
+msgid ""
+"Cannot continue, aborting.\n"
+"\n"
+msgstr "无法继续, 中止.\n"
+
+#: e2fsck/unix.c:232
+#, c-format
+msgid ""
+"\n"
+"\n"
+"\a\a\a\aWARNING!!!  Running e2fsck on a mounted filesystem may cause\n"
+"SEVERE filesystem damage.\a\a\a\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:235
+msgid "Do you really want to continue"
+msgstr "你真的想要要继续"
+
+#: e2fsck/unix.c:237
+#, c-format
+msgid "check aborted.\n"
+msgstr "检查被中止\n"
+
+#: e2fsck/unix.c:310
+msgid " contains a file system with errors"
+msgstr ""
+
+#: e2fsck/unix.c:312
+msgid " was not cleanly unmounted"
+msgstr ""
+
+#: e2fsck/unix.c:314
+msgid " primary superblock features different from backup"
+msgstr ""
+
+#: e2fsck/unix.c:318
+#, c-format
+msgid " has been mounted %u times without being checked"
+msgstr ""
+
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr ""
+
+#: e2fsck/unix.c:330
+#, c-format
+msgid " has gone %u days without being checked"
+msgstr ""
+
+#: e2fsck/unix.c:339
+msgid ", check forced.\n"
+msgstr ", 强制检查.\n"
+
+#: e2fsck/unix.c:342
+#, c-format
+msgid "%s: clean, %u/%u files, %u/%u blocks"
+msgstr ""
+
+#: e2fsck/unix.c:359
+msgid " (check deferred; on battery)"
+msgstr ""
+
+#: e2fsck/unix.c:362
+msgid " (check after next mount)"
+msgstr "(将于下次挂载时进行检查)"
+
+#: e2fsck/unix.c:364
+#, c-format
+msgid " (check in %ld mounts)"
+msgstr ""
+
+#: e2fsck/unix.c:511
+#, c-format
+msgid "ERROR: Couldn't open /dev/null (%s)\n"
+msgstr ""
+
+#: e2fsck/unix.c:581
+#, fuzzy, c-format
+msgid "Invalid EA version.\n"
+msgstr "无效的EA版本号.\n"
+
+#: e2fsck/unix.c:590
+#, c-format
+msgid "Unknown extended option: %s\n"
+msgstr ""
+
+#: e2fsck/unix.c:612
+#, c-format
+msgid ""
+"Syntax error in e2fsck config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"e2fsck 配置文件中语法错误(%s, 行 #%d)\n"
+"\t%s\n"
+
+#: e2fsck/unix.c:680
+#, c-format
+msgid "Error validating file descriptor %d: %s\n"
+msgstr ""
+
+#: e2fsck/unix.c:684
+msgid "Invalid completion information file descriptor"
+msgstr ""
+
+#: e2fsck/unix.c:699
+msgid "Only one of the options -p/-a, -n or -y may be specified."
+msgstr ""
+
+#: e2fsck/unix.c:720
+#, c-format
+msgid "The -t option is not supported on this version of e2fsck.\n"
+msgstr ""
+
+#: e2fsck/unix.c:801 misc/tune2fs.c:550 misc/tune2fs.c:835 misc/tune2fs.c:853
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr ""
+
+#: e2fsck/unix.c:830
+#, c-format
+msgid "The -c and the -l/-L options may not be both used at the same time.\n"
+msgstr ""
+
+#: e2fsck/unix.c:878
+#, c-format
+msgid ""
+"E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:887
+#, c-format
+msgid ""
+"\n"
+"Invalid non-numeric argument to -%c (\"%s\")\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:961
+#, c-format
+msgid "Error: ext2fs library version out of date!\n"
+msgstr "错误: ext2fs库版本过旧!\n"
+
+#: e2fsck/unix.c:969
+msgid "while trying to initialize program"
+msgstr ""
+
+#: e2fsck/unix.c:980
+#, fuzzy, c-format
+msgid "\tUsing %s, %s\n"
+msgstr "\t使用 %s\n"
+
+#: e2fsck/unix.c:992
+msgid "need terminal for interactive repairs"
+msgstr ""
+
+#: e2fsck/unix.c:1021
+#, c-format
+msgid "%s: %s trying backup blocks...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1023
+msgid "Superblock invalid,"
+msgstr "超级块无效,"
+
+#: e2fsck/unix.c:1024
+msgid "Group descriptors look bad..."
+msgstr ""
+
+#: e2fsck/unix.c:1034
+#, fuzzy, c-format
+msgid "%s: going back to original superblock\n"
+msgstr "%s: 没有发现日志超级块\n"
+
+#: e2fsck/unix.c:1060
+#, c-format
+msgid ""
+"The filesystem revision is apparently too high for this version of e2fsck.\n"
+"(Or the filesystem superblock is corrupt)\n"
+"\n"
+msgstr ""
+
+#: e2fsck/unix.c:1066
+#, c-format
+msgid "Could this be a zero-length partition?\n"
+msgstr ""
+
+#: e2fsck/unix.c:1068
+#, c-format
+msgid "You must have %s access to the filesystem or be root\n"
+msgstr ""
+
+#: e2fsck/unix.c:1073
+#, c-format
+msgid "Possibly non-existent or swap device?\n"
+msgstr ""
+
+#: e2fsck/unix.c:1075
+#, c-format
+msgid "Filesystem mounted or opened exclusively by another program?\n"
+msgstr ""
+
+#: e2fsck/unix.c:1079
+#, c-format
+msgid ""
+"Disk write-protected; use the -n option to do a read-only\n"
+"check of the device.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1143
+msgid "Get a newer version of e2fsck!"
+msgstr ""
+
+#: e2fsck/unix.c:1173
+#, fuzzy, c-format
+msgid "while checking ext3 journal for %s"
+msgstr "当检查在线文件系统大小调整支持时"
+
+#: e2fsck/unix.c:1184
+#, c-format
+msgid ""
+"Warning: skipping journal recovery because doing a read-only filesystem "
+"check.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1197
+#, c-format
+msgid "unable to set superblock flags on %s\n"
+msgstr ""
+
+#: e2fsck/unix.c:1203
+#, c-format
+msgid "while recovering ext3 journal of %s"
+msgstr ""
+
+#: e2fsck/unix.c:1228
+#, c-format
+msgid "%s has unsupported feature(s):"
+msgstr ""
+
+#: e2fsck/unix.c:1244
+msgid "Warning: compression support is experimental.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1249
+#, c-format
+msgid ""
+"E2fsck not compiled with HTREE support,\n"
+"\tbut filesystem %s has HTREE directories.\n"
+msgstr ""
+
+#: e2fsck/unix.c:1302
+#, fuzzy
+msgid "while reading bad blocks inode"
+msgstr "当读取坏块inode时"
+
+#: e2fsck/unix.c:1304
+#, c-format
+msgid "This doesn't bode well, but we'll try to go on...\n"
+msgstr ""
+
+#: e2fsck/unix.c:1330
+msgid "Couldn't determine journal size"
+msgstr ""
+
+#: e2fsck/unix.c:1333
+#, fuzzy, c-format
+msgid "Creating journal (%d blocks): "
+msgstr "<坏块 inode>"
+
+#: e2fsck/unix.c:1340 misc/mke2fs.c:2113
+msgid ""
+"\n"
+"\twhile trying to create journal"
+msgstr ""
+
+#: e2fsck/unix.c:1343
+#, fuzzy, c-format
+msgid " Done.\n"
+msgstr "完毕。\n"
+
+#: e2fsck/unix.c:1344
+#, c-format
+msgid ""
+"\n"
+"*** journal has been re-created - filesystem is now ext3 again ***\n"
+msgstr ""
+
+#: e2fsck/unix.c:1351
+#, c-format
+msgid "Restarting e2fsck from the beginning...\n"
+msgstr "正在从头开始e2fsck...\n"
+
+#: e2fsck/unix.c:1355
+msgid "while resetting context"
+msgstr ""
+
+#: e2fsck/unix.c:1362
+#, c-format
+msgid "%s: e2fsck canceled.\n"
+msgstr "%s: e2fsck被取消.\n"
+
+#: e2fsck/unix.c:1367
+msgid "aborted"
+msgstr "已中止"
+
+#: e2fsck/unix.c:1379
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
+msgstr ""
+"\n"
+"%s: ***** 文件系统已修改 *****\n"
+
+#: e2fsck/unix.c:1382
+#, c-format
+msgid "%s: ***** REBOOT LINUX *****\n"
+msgstr "%s: ***** 重新启动 LINUX *****\n"
+
+#: e2fsck/unix.c:1390
+#, c-format
+msgid ""
+"\n"
+"%s: ********** WARNING: Filesystem still has errors **********\n"
+"\n"
+msgstr ""
+"\n"
+"%s: ********** 警告: 文件系统上仍有错误 **********\n"
+"\n"
+
+#: e2fsck/unix.c:1426
+msgid "while setting block group checksum info"
+msgstr ""
+
+#: e2fsck/util.c:138 misc/util.c:68
+msgid "yY"
+msgstr "yY"
+
+#: e2fsck/util.c:139
+msgid "nN"
+msgstr "nN"
+
+#: e2fsck/util.c:153
+msgid "<y>"
+msgstr "<y>"
+
+#: e2fsck/util.c:155
+msgid "<n>"
+msgstr "<n>"
+
+#: e2fsck/util.c:157
+msgid " (y/n)"
+msgstr " (y/n)"
+
+#: e2fsck/util.c:172
+msgid "cancelled!\n"
+msgstr "已取消!\n"
+
+#: e2fsck/util.c:187
+msgid "yes\n"
+msgstr "是\n"
+
+#: e2fsck/util.c:189
+msgid "no\n"
+msgstr "否\n"
+
+#: e2fsck/util.c:199
+#, fuzzy, c-format
+msgid ""
+"%s? no\n"
+"\n"
+msgstr ""
+"%s? 否\n"
+"\n"
+
+#: e2fsck/util.c:203
+#, c-format
+msgid ""
+"%s? yes\n"
+"\n"
+msgstr ""
+"%s? 是\n"
+"\n"
+
+#: e2fsck/util.c:207
+#, fuzzy
+msgid "yes"
+msgstr "yes"
+
+#: e2fsck/util.c:207
+#, fuzzy
+msgid "no"
+msgstr "no"
+
+#: e2fsck/util.c:221
+#, c-format
+msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
+msgstr ""
+
+#: e2fsck/util.c:226
+msgid "reading inode and block bitmaps"
+msgstr ""
+
+#: e2fsck/util.c:231
+#, c-format
+msgid "while retrying to read bitmaps for %s"
+msgstr ""
+
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr ""
+
+#: e2fsck/util.c:248
+#, c-format
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr ""
+
+#: e2fsck/util.c:260
+#, c-format
+msgid ""
+"\n"
+"\n"
+"%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n"
+"\t(i.e., without -a or -p options)\n"
+msgstr ""
+
+#: e2fsck/util.c:341
+#, fuzzy, c-format
+msgid "Memory used: %luk/%luk (%luk/%luk), "
+msgstr "内存使用量: %dk/%dk (%dk/%dk), "
+
+#: e2fsck/util.c:345
+#, fuzzy, c-format
+msgid "Memory used: %lu, "
+msgstr "已使用内存: %d, "
+
+#: e2fsck/util.c:352
+#, c-format
+msgid "time: %5.2f/%5.2f/%5.2f\n"
+msgstr "时间: %5.2f/%5.2f/%5.2f\n"
+
+#: e2fsck/util.c:357
+#, c-format
+msgid "elapsed time: %6.3f\n"
+msgstr ""
+
+#: e2fsck/util.c:391 e2fsck/util.c:405
+#, fuzzy, c-format
+msgid "while reading inode %lu in %s"
+msgstr "当读取坏块inode时"
+
+#: e2fsck/util.c:419 e2fsck/util.c:432
+#, fuzzy, c-format
+msgid "while writing inode %lu in %s"
+msgstr "当读取坏块inode时"
+
+#: e2fsck/util.c:581
+msgid "while allocating zeroizing buffer"
+msgstr ""
+
+#: misc/badblocks.c:66
+msgid "done                                \n"
+msgstr "完成                                \n"
+
+#: misc/badblocks.c:89
+#, c-format
+msgid ""
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
+"max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
+msgstr ""
+
+#: misc/badblocks.c:100
+#, c-format
+msgid ""
+"%s: The -n and -w options are mutually exclusive.\n"
+"\n"
+msgstr ""
+
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:293
+msgid "Testing with random pattern: "
+msgstr ""
+
+#: misc/badblocks.c:311
+msgid "Testing with pattern 0x"
+msgstr ""
+
+#: misc/badblocks.c:339 misc/badblocks.c:408
+msgid "during seek"
+msgstr ""
+
+#: misc/badblocks.c:350
+#, c-format
+msgid "Weird value (%ld) in do_read\n"
+msgstr ""
+
+#: misc/badblocks.c:428
+msgid "during ext2fs_sync_device"
+msgstr ""
+
+#: misc/badblocks.c:447 misc/badblocks.c:711
+msgid "while beginning bad block list iteration"
+msgstr ""
+
+#: misc/badblocks.c:461 misc/badblocks.c:563 misc/badblocks.c:721
+msgid "while allocating buffers"
+msgstr ""
+
+#: misc/badblocks.c:465
+#, c-format
+msgid "Checking blocks %lu to %lu\n"
+msgstr "正在检查从 %lu 到 %lu的块\n"
+
+#: misc/badblocks.c:470
+msgid "Checking for bad blocks in read-only mode\n"
+msgstr ""
+
+#: misc/badblocks.c:479
+msgid "Checking for bad blocks (read-only test): "
+msgstr ""
+
+#: misc/badblocks.c:487 misc/badblocks.c:595 misc/badblocks.c:640
+#: misc/badblocks.c:784
+msgid "Too many bad blocks, aborting test\n"
+msgstr ""
+
+#: misc/badblocks.c:570
+msgid "Checking for bad blocks in read-write mode\n"
+msgstr ""
+
+#: misc/badblocks.c:572 misc/badblocks.c:734
+#, c-format
+msgid "From block %lu to %lu\n"
+msgstr ""
+
+#: misc/badblocks.c:630
+msgid "Reading and comparing: "
+msgstr "正在读取并比较: "
+
+#: misc/badblocks.c:733
+msgid "Checking for bad blocks in non-destructive read-write mode\n"
+msgstr ""
+
+#: misc/badblocks.c:739
+msgid "Checking for bad blocks (non-destructive read-write test)\n"
+msgstr ""
+
+#: misc/badblocks.c:746
+msgid ""
+"\n"
+"Interrupt caught, cleaning up\n"
+msgstr ""
+
+#: misc/badblocks.c:822
+#, c-format
+msgid "during test data write, block %lu"
+msgstr ""
+
+#: misc/badblocks.c:933 misc/util.c:156
+#, c-format
+msgid "%s is mounted; "
+msgstr "%s 已经挂载;"
+
+#: misc/badblocks.c:935
+msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr ""
+
+#: misc/badblocks.c:940
+msgid "it's not safe to run badblocks!\n"
+msgstr ""
+
+#: misc/badblocks.c:945 misc/util.c:167
+#, c-format
+msgid "%s is apparently in use by the system; "
+msgstr ""
+
+#: misc/badblocks.c:948
+#, fuzzy
+msgid "badblocks forced anyway.\n"
+msgstr "mke2fs 强制执行.\n"
+
+#: misc/badblocks.c:968
+#, c-format
+msgid "invalid %s - %s"
+msgstr "无效的%s - %s"
+
+#: misc/badblocks.c:1077
+#, c-format
+msgid "can't allocate memory for test_pattern - %s"
+msgstr ""
+
+#: misc/badblocks.c:1104
+msgid "Maximum of one test_pattern may be specified in read-only mode"
+msgstr ""
+
+#: misc/badblocks.c:1110
+msgid "Random test_pattern is not allowed in read-only mode"
+msgstr ""
+
+#: misc/badblocks.c:1124
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size manually\n"
+msgstr ""
+
+#: misc/badblocks.c:1130
+msgid "while trying to determine device size"
+msgstr ""
+
+#: misc/badblocks.c:1135
+#, fuzzy
+msgid "last block"
+msgstr "最后一个块"
+
+#: misc/badblocks.c:1141
+#, fuzzy
+msgid "first block"
+msgstr "第一个块"
+
+#: misc/badblocks.c:1144
+#, c-format
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr ""
+
+#: misc/badblocks.c:1200
+msgid "while creating in-memory bad blocks list"
+msgstr ""
+
+#: misc/badblocks.c:1215
+msgid "while adding to in-memory bad block list"
+msgstr ""
+
+#: misc/badblocks.c:1239
+#, c-format
+msgid "Pass completed, %u bad blocks found.\n"
+msgstr ""
+
+#: misc/chattr.c:85
+#, fuzzy, c-format
+msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
+msgstr "用法: %s [-RVadlv] [files...]\n"
+
+#: misc/chattr.c:153
+#, c-format
+msgid "bad version - %s\n"
+msgstr "错误的版本 - %s\n"
+
+#: misc/chattr.c:200 misc/lsattr.c:115
+#, fuzzy, c-format
+msgid "while trying to stat %s"
+msgstr "当尝试对%s进行stat调用时"
+
+#: misc/chattr.c:207
+#, c-format
+msgid "while reading flags on %s"
+msgstr ""
+
+#: misc/chattr.c:216 misc/chattr.c:235
+#, c-format
+msgid "Clearing extent flag not supported on %s"
+msgstr ""
+
+#: misc/chattr.c:221 misc/chattr.c:240
+#, c-format
+msgid "Flags of %s set as "
+msgstr "%s的标志被设为 "
+
+#: misc/chattr.c:249
+#, c-format
+msgid "while setting flags on %s"
+msgstr ""
+
+#: misc/chattr.c:257
+#, c-format
+msgid "Version of %s set as %lu\n"
+msgstr ""
+
+#: misc/chattr.c:261
+#, c-format
+msgid "while setting version on %s"
+msgstr ""
+
+#: misc/chattr.c:281
+#, c-format
+msgid "Couldn't allocate path variable in chattr_dir_proc"
+msgstr ""
+
+#: misc/chattr.c:320
+msgid "= is incompatible with - and +\n"
+msgstr ""
+
+#: misc/chattr.c:328
+msgid "Must use '-v', =, - or +\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:53
+#, c-format
+msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:168
+#, c-format
+msgid "Group %lu: (Blocks "
+msgstr ""
+
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr "  校验和 0x%04x,%d个未使用的inode\n"
+
+#: misc/dumpe2fs.c:178
+#, c-format
+msgid "  %s superblock at "
+msgstr ""
+
+#: misc/dumpe2fs.c:179
+msgid "Primary"
+msgstr "主"
+
+#: misc/dumpe2fs.c:179
+msgid "Backup"
+msgstr "备份"
+
+#: misc/dumpe2fs.c:183
+#, fuzzy, c-format
+msgid ", Group descriptors at "
+msgstr ", 组描述符位于 "
+
+#: misc/dumpe2fs.c:187
+#, c-format
+msgid ""
+"\n"
+"  Reserved GDT blocks at "
+msgstr ""
+"\n"
+"  保留的GDT块位于 "
+
+#: misc/dumpe2fs.c:194
+#, c-format
+msgid " Group descriptor at "
+msgstr ""
+
+#: misc/dumpe2fs.c:200
+msgid "  Block bitmap at "
+msgstr ""
+
+#: misc/dumpe2fs.c:205
+msgid ", Inode bitmap at "
+msgstr ""
+
+#: misc/dumpe2fs.c:210
+msgid ""
+"\n"
+"  Inode table at "
+msgstr ""
+"\n"
+"  Inode表位于 "
+
+#: misc/dumpe2fs.c:217
+#, c-format
+msgid ""
+"\n"
+"  %u free blocks, %u free inodes, %u directories%s"
+msgstr ""
+
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u个未使用的inodes\n"
+
+#: misc/dumpe2fs.c:227
+msgid "  Free blocks: "
+msgstr "  可用块数: "
+
+#: misc/dumpe2fs.c:237
+msgid "  Free inodes: "
+msgstr "  可用inode数: "
+
+#: misc/dumpe2fs.c:268
+msgid "while printing bad block list"
+msgstr ""
+
+#: misc/dumpe2fs.c:274
+#, c-format
+msgid "Bad blocks: %u"
+msgstr "坏块数: %u"
+
+#: misc/dumpe2fs.c:297 misc/tune2fs.c:281
+msgid "while reading journal inode"
+msgstr ""
+
+#: misc/dumpe2fs.c:300
+msgid "Journal size:             "
+msgstr "日志大小:             "
+
+#: misc/dumpe2fs.c:324 misc/tune2fs.c:202
+msgid "while reading journal superblock"
+msgstr ""
+
+#: misc/dumpe2fs.c:332
+msgid "Couldn't find journal superblock magic numbers"
+msgstr ""
+
+#: misc/dumpe2fs.c:336
+#, c-format
+msgid ""
+"\n"
+"Journal block size:       %u\n"
+"Journal length:           %u\n"
+"Journal first block:      %u\n"
+"Journal sequence:         0x%08x\n"
+"Journal start:            %u\n"
+"Journal number of users:  %u\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:349
+#, c-format
+msgid "Journal users:            %s\n"
+msgstr "日志使用者:            %s\n"
+
+#: misc/dumpe2fs.c:365 misc/mke2fs.c:693 misc/tune2fs.c:872
+#, c-format
+msgid "Couldn't allocate memory to parse options!\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:391
+#, c-format
+msgid "Invalid superblock parameter: %s\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:406
+#, c-format
+msgid "Invalid blocksize parameter: %s\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:417
+#, c-format
+msgid ""
+"\n"
+"Bad extended option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tsuperblock=<superblock number>\n"
+"\tblocksize=<blocksize>\n"
+msgstr ""
+
+#: misc/dumpe2fs.c:476 misc/mke2fs.c:1355
+#, fuzzy, c-format
+msgid "\tUsing %s\n"
+msgstr "\t使用 %s\n"
+
+#: misc/dumpe2fs.c:512 misc/e2image.c:681 misc/tune2fs.c:1535
+#: resize/main.c:314
+#, c-format
+msgid "Couldn't find valid filesystem superblock.\n"
+msgstr "找不到有效的文件系统超级块.\n"
+
+#: misc/dumpe2fs.c:537
+#, c-format
+msgid ""
+"\n"
+"%s: %s: error reading bitmaps: %s\n"
+msgstr ""
+
+#: misc/e2image.c:52
+#, c-format
+msgid "Usage: %s [-rsI] device image_file\n"
+msgstr ""
+
+#: misc/e2image.c:64
+msgid "Couldn't allocate header buffer\n"
+msgstr ""
+
+#: misc/e2image.c:83
+#, c-format
+msgid "short write (only %d bytes) for writing image header"
+msgstr ""
+
+#: misc/e2image.c:102
+msgid "while writing superblock"
+msgstr ""
+
+#: misc/e2image.c:110
+msgid "while writing inode table"
+msgstr ""
+
+#: misc/e2image.c:117
+msgid "while writing block bitmap"
+msgstr ""
+
+#: misc/e2image.c:124
+msgid "while writing inode bitmap"
+msgstr ""
+
+#: misc/e2label.c:57
+#, c-format
+msgid "e2label: cannot open %s\n"
+msgstr "e2label: 无法打开 %s\n"
+
+#: misc/e2label.c:62
+#, c-format
+msgid "e2label: cannot seek to superblock\n"
+msgstr ""
+
+#: misc/e2label.c:67
+#, c-format
+msgid "e2label: error reading superblock\n"
+msgstr "e2label: 读取superblock出错\n"
+
+#: misc/e2label.c:71
+#, c-format
+msgid "e2label: not an ext2 filesystem\n"
+msgstr "e2label: 不是一个ex2文件系统\n"
+
+#: misc/e2label.c:96 misc/tune2fs.c:1670
+#, c-format
+msgid "Warning: label too long, truncating.\n"
+msgstr ""
+
+#: misc/e2label.c:99
+#, c-format
+msgid "e2label: cannot seek to superblock again\n"
+msgstr ""
+
+#: misc/e2label.c:104
+#, fuzzy, c-format
+msgid "e2label: error writing superblock\n"
+msgstr "写入“%s”出错"
+
+#: misc/e2label.c:116 misc/tune2fs.c:542
+#, fuzzy, c-format
+msgid "Usage: e2label device [newlabel]\n"
+msgstr "用法: %s [-F] [-I inode_buffer_blocks] device\n"
+
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr ""
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr ""
+
+#: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "tdb_fetch %s 失败\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr ""
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr ""
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open %s 失败\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr ""
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr ""
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "打开%s失败\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr ""
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "写入%s失败\n"
+
+#: misc/fsck.c:343
+#, c-format
+msgid "WARNING: couldn't open %s: %s\n"
+msgstr ""
+
+#: misc/fsck.c:353
+#, c-format
+msgid "WARNING: bad format on line %d of %s\n"
+msgstr ""
+
+#: misc/fsck.c:368
+msgid ""
+"\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
+"\tfield.  I will kludge around things for you, but you\n"
+"\tshould fix your /etc/fstab file as soon as you can.\n"
+"\n"
+msgstr ""
+
+#: misc/fsck.c:477
+#, c-format
+msgid "fsck: %s: not found\n"
+msgstr ""
+
+#: misc/fsck.c:593
+#, c-format
+msgid "%s: wait: No more child process?!?\n"
+msgstr ""
+
+#: misc/fsck.c:615
+#, c-format
+msgid "Warning... %s for device %s exited with signal %d.\n"
+msgstr ""
+
+#: misc/fsck.c:621
+#, c-format
+msgid "%s %s: status is %x, should never happen.\n"
+msgstr ""
+
+#: misc/fsck.c:660
+#, c-format
+msgid "Finished with %s (exit status %d)\n"
+msgstr ""
+
+#: misc/fsck.c:720
+#, c-format
+msgid "%s: Error %d while executing fsck.%s for %s\n"
+msgstr ""
+
+#: misc/fsck.c:741
+msgid ""
+"Either all or none of the filesystem types passed to -t must be prefixed\n"
+"with 'no' or '!'.\n"
+msgstr ""
+
+#: misc/fsck.c:760
+msgid "Couldn't allocate memory for filesystem types\n"
+msgstr ""
+
+#: misc/fsck.c:883
+#, c-format
+msgid ""
+"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
+"number\n"
+msgstr ""
+
+#: misc/fsck.c:910
+#, c-format
+msgid "fsck: cannot check %s: fsck.%s not found\n"
+msgstr ""
+
+#: misc/fsck.c:966
+msgid "Checking all file systems.\n"
+msgstr "正在检查所有文件系统.\n"
+
+#: misc/fsck.c:1057
+#, c-format
+msgid "--waiting-- (pass %d)\n"
+msgstr "--请稍候-- (完成 %d)\n"
+
+#: misc/fsck.c:1077
+msgid ""
+"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr ""
+"用法: Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] "
+"[filesys ...]\n"
+
+#: misc/fsck.c:1119
+#, c-format
+msgid "%s: too many devices\n"
+msgstr "%s: 设备过多\n"
+
+#: misc/fsck.c:1152 misc/fsck.c:1238
+#, c-format
+msgid "%s: too many arguments\n"
+msgstr "%s: 参数过多\n"
+
+#: misc/lsattr.c:73
+#, c-format
+msgid "Usage: %s [-RVadlv] [files...]\n"
+msgstr "用法: %s [-RVadlv] [files...]\n"
+
+#: misc/lsattr.c:83
+#, c-format
+msgid "While reading flags on %s"
+msgstr ""
+
+#: misc/lsattr.c:90
+#, c-format
+msgid "While reading version on %s"
+msgstr ""
+
+#: misc/mke2fs.c:104
+#, c-format
+msgid ""
+"Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
+"\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
+"\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
+msgstr ""
+
+#: misc/mke2fs.c:206
+#, c-format
+msgid "Running command: %s\n"
+msgstr "正在执行命令: %s\n"
+
+#: misc/mke2fs.c:210
+#, c-format
+msgid "while trying to run '%s'"
+msgstr "当尝试运行 '%s' 时"
+
+#: misc/mke2fs.c:217
+msgid "while processing list of bad blocks from program"
+msgstr ""
+
+#: misc/mke2fs.c:244
+#, c-format
+msgid "Block %d in primary superblock/group descriptor area bad.\n"
+msgstr ""
+
+#: misc/mke2fs.c:246
+#, c-format
+msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
+msgstr ""
+
+#: misc/mke2fs.c:249
+msgid "Aborting....\n"
+msgstr "正在终止...\n"
+
+#: misc/mke2fs.c:269
+#, c-format
+msgid ""
+"Warning: the backup superblock/group descriptors at block %u contain\n"
+"\tbad blocks.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:288
+msgid "while marking bad blocks as used"
+msgstr ""
+
+#: misc/mke2fs.c:346
+msgid "done                            \n"
+msgstr "完成                            \n"
+
+#: misc/mke2fs.c:360
+msgid "Writing inode tables: "
+msgstr "正在写入inode表: "
+
+#: misc/mke2fs.c:383
+#, c-format
+msgid ""
+"\n"
+"Could not write %d blocks in inode table starting at %u: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:407
+msgid "while creating root dir"
+msgstr ""
+
+#: misc/mke2fs.c:414
+msgid "while reading root inode"
+msgstr "当读取坏块inode时"
+
+#: misc/mke2fs.c:428
+msgid "while setting root inode ownership"
+msgstr ""
+
+#: misc/mke2fs.c:446
+msgid "while creating /lost+found"
+msgstr ""
+
+#: misc/mke2fs.c:453
+msgid "while looking up /lost+found"
+msgstr ""
+
+#: misc/mke2fs.c:466
+msgid "while expanding /lost+found"
+msgstr ""
+
+#: misc/mke2fs.c:481
+msgid "while setting bad block inode"
+msgstr ""
+
+#: misc/mke2fs.c:508
+#, c-format
+msgid "Out of memory erasing sectors %d-%d\n"
+msgstr ""
+
+#: misc/mke2fs.c:518
+#, c-format
+msgid "Warning: could not read block 0: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:534
+#, c-format
+msgid "Warning: could not erase sector %d: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:550
+msgid "while initializing journal superblock"
+msgstr ""
+
+#: misc/mke2fs.c:556
+msgid "Zeroing journal device: "
+msgstr "正在将日志设备清零: "
+
+#: misc/mke2fs.c:569
+#, c-format
+msgid "while zeroing journal device (block %u, count %d)"
+msgstr ""
+
+#: misc/mke2fs.c:585
+msgid "while writing journal superblock"
+msgstr ""
+
+#: misc/mke2fs.c:601
+#, c-format
+msgid ""
+"warning: %u blocks unused.\n"
+"\n"
+msgstr ""
+"警告: %u 块未使用.\n"
+"\n"
+
+#: misc/mke2fs.c:606
+#, c-format
+msgid "Filesystem label=%s\n"
+msgstr "文件系统标签=%s\n"
+
+#: misc/mke2fs.c:607
+msgid "OS type: "
+msgstr "操作系统:"
+
+#: misc/mke2fs.c:612
+#, c-format
+msgid "Block size=%u (log=%u)\n"
+msgstr "块大小=%u (log=%u)\n"
+
+#: misc/mke2fs.c:614
+#, c-format
+msgid "Fragment size=%u (log=%u)\n"
+msgstr "分块大小=%u (log=%u)\n"
+
+#: misc/mke2fs.c:616
+#, c-format
+msgid "%u inodes, %u blocks\n"
+msgstr ""
+
+#: misc/mke2fs.c:618
+#, c-format
+msgid "%u blocks (%2.2f%%) reserved for the super user\n"
+msgstr ""
+
+#: misc/mke2fs.c:621
+#, c-format
+msgid "First data block=%u\n"
+msgstr "第一个数据块=%u\n"
+
+#: misc/mke2fs.c:623
+#, c-format
+msgid "Maximum filesystem blocks=%lu\n"
+msgstr ""
+
+#: misc/mke2fs.c:627
+#, c-format
+msgid "%u block groups\n"
+msgstr ""
+
+#: misc/mke2fs.c:629
+#, c-format
+msgid "%u block group\n"
+msgstr ""
+
+#: misc/mke2fs.c:630
+#, c-format
+msgid "%u blocks per group, %u fragments per group\n"
+msgstr ""
+
+#: misc/mke2fs.c:632
+#, c-format
+msgid "%u inodes per group\n"
+msgstr ""
+
+#: misc/mke2fs.c:639
+#, c-format
+msgid "Superblock backups stored on blocks: "
+msgstr ""
+
+#: misc/mke2fs.c:718
+#, c-format
+msgid "Invalid stride parameter: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:733
+#, c-format
+msgid "Invalid stripe-width parameter: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:755
+#, c-format
+msgid "Invalid resize parameter: %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:762
+#, c-format
+msgid "The resize maximum must be greater than the filesystem size.\n"
+msgstr ""
+
+#: misc/mke2fs.c:786
+#, c-format
+msgid "On-line resizing not supported with revision 0 filesystems\n"
+msgstr ""
+
+#: misc/mke2fs.c:808
+#, c-format
+msgid ""
+"\n"
+"Bad option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk data chunk in blocks>\n"
+"\tstripe-width=<RAID stride * data disks in blocks>\n"
+"\tresize=<resize maximum size in blocks>\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+"\ttest_fs\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:824
+#, c-format
+msgid ""
+"\n"
+"Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:856
+#, c-format
+msgid ""
+"Syntax error in mke2fs config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+
+#: misc/mke2fs.c:869 misc/tune2fs.c:355
+#, c-format
+msgid "Invalid filesystem option set: %s\n"
+msgstr "设置了无效的文件系统选项: %s\n"
+
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1176
+#, c-format
+msgid "invalid block size - %s"
+msgstr "无效的块大小 - %s"
+
+#: misc/mke2fs.c:1180
+#, c-format
+msgid "Warning: blocksize %d not usable on most systems.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1196
+#, c-format
+msgid "invalid fragment size - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1202
+#, c-format
+msgid "Warning: fragments not supported.  Ignoring -f option\n"
+msgstr ""
+
+#: misc/mke2fs.c:1209
+msgid "Illegal number for blocks per group"
+msgstr ""
+
+#: misc/mke2fs.c:1214
+msgid "blocks per group must be multiple of 8"
+msgstr ""
+
+#: misc/mke2fs.c:1222
+msgid "Illegal number for flex_bg size"
+msgstr ""
+
+#: misc/mke2fs.c:1228
+msgid "flex_bg size must be a power of 2"
+msgstr "flex_bg 大小必须是2的次方"
+
+#: misc/mke2fs.c:1238
+#, c-format
+msgid "invalid inode ratio %s (min %d/max %d)"
+msgstr ""
+
+#: misc/mke2fs.c:1255
+msgid "in malloc for bad_blocks_filename"
+msgstr ""
+
+#: misc/mke2fs.c:1265
+#, c-format
+msgid "invalid reserved blocks percent - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1283
+#, c-format
+msgid "bad revision level - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1295
+#, c-format
+msgid "invalid inode size - %s"
+msgstr "无效的inode大小 - %s"
+
+#: misc/mke2fs.c:1315
+#, c-format
+msgid "bad num inodes - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1380 misc/mke2fs.c:2068
+#, c-format
+msgid "while trying to open journal device %s\n"
+msgstr ""
+
+#: misc/mke2fs.c:1386
+#, c-format
+msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
+msgstr ""
+
+#: misc/mke2fs.c:1392
+#, fuzzy, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "%s 不是一个日志设备.\n"
+
+#: misc/mke2fs.c:1401
+#, c-format
+msgid "%d-byte blocks too big for system (max %d)"
+msgstr ""
+
+#: misc/mke2fs.c:1405
+#, c-format
+msgid ""
+"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr ""
+
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1423
+msgid "filesystem"
+msgstr "文件系统"
+
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1468 resize/main.c:376
+msgid "while trying to determine filesystem size"
+msgstr ""
+
+#: misc/mke2fs.c:1475
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size of the filesystem\n"
+msgstr ""
+
+#: misc/mke2fs.c:1482
+msgid ""
+"Device size reported to be zero.  Invalid partition specified, or\n"
+"\tpartition table wasn't reread after running fdisk, due to\n"
+"\ta modified partition being busy and in use.  You may need to reboot\n"
+"\tto re-read your partition table.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1500
+msgid "Filesystem larger than apparent device size."
+msgstr ""
+
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr ""
+
+#: misc/mke2fs.c:1540
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr ""
+
+#: misc/mke2fs.c:1547
+#, c-format
+msgid "Filesystem features not supported with revision 0 filesystems\n"
+msgstr ""
+
+#: misc/mke2fs.c:1554
+#, c-format
+msgid "Sparse superblocks not supported with revision 0 filesystems\n"
+msgstr ""
+
+#: misc/mke2fs.c:1566
+#, c-format
+msgid "Journals not supported with revision 0 filesystems\n"
+msgstr ""
+
+#: misc/mke2fs.c:1584
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1601
+msgid "while trying to determine hardware sector size"
+msgstr ""
+
+#: misc/mke2fs.c:1658
+msgid "reserved online resize blocks not supported on non-sparse filesystem"
+msgstr ""
+
+#: misc/mke2fs.c:1667
+msgid "blocks per group count out of range"
+msgstr ""
+
+#: misc/mke2fs.c:1682
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr ""
+
+#: misc/mke2fs.c:1694
+#, c-format
+msgid "invalid inode size %d (min %d/max %d)"
+msgstr ""
+
+#: misc/mke2fs.c:1708
+#, c-format
+msgid "too many inodes (%llu), raise inode ratio?"
+msgstr ""
+
+#: misc/mke2fs.c:1713
+#, c-format
+msgid "too many inodes (%llu), specify < 2^32 inodes"
+msgstr ""
+
+#: misc/mke2fs.c:1728
+#, c-format
+msgid ""
+"inode_size (%u) * inodes_count (%u) too big for a\n"
+"\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
+"\tor lower inode count (-N).\n"
+msgstr ""
+
+#: misc/mke2fs.c:1821 misc/tune2fs.c:1453
+#, fuzzy
+msgid "Couldn't allocate memory for tdb filename\n"
+msgstr "无法分配块缓存 (大小=%d)\n"
+
+#: misc/mke2fs.c:1834 misc/tune2fs.c:1475
+#, c-format
+msgid "while trying to delete %s"
+msgstr "当尝试删除 %s 时"
+
+#: misc/mke2fs.c:1844
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1893
+msgid "while setting up superblock"
+msgstr ""
+
+#: misc/mke2fs.c:1952
+#, c-format
+msgid "unknown os - %s"
+msgstr "未知操作系统 - %s"
+
+#: misc/mke2fs.c:2006
+msgid "while trying to allocate filesystem tables"
+msgstr ""
+
+#: misc/mke2fs.c:2037
+#, c-format
+msgid "while zeroing block %u at end of filesystem"
+msgstr ""
+
+#: misc/mke2fs.c:2050
+msgid "while reserving blocks for online resize"
+msgstr ""
+
+#: misc/mke2fs.c:2061 misc/tune2fs.c:479
+msgid "journal"
+msgstr "日志"
+
+#: misc/mke2fs.c:2073
+#, c-format
+msgid "Adding journal to device %s: "
+msgstr ""
+
+#: misc/mke2fs.c:2080
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to add journal to device %s"
+msgstr ""
+
+#: misc/mke2fs.c:2085 misc/mke2fs.c:2117 misc/tune2fs.c:508 misc/tune2fs.c:522
+#, c-format
+msgid "done\n"
+msgstr "完成\n"
+
+#: misc/mke2fs.c:2094
+#, c-format
+msgid "Skipping journal creation in super-only mode\n"
+msgstr ""
+
+#: misc/mke2fs.c:2105
+#, fuzzy, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "<坏块 inode>"
+
+#: misc/mke2fs.c:2122
+#, c-format
+msgid "Writing superblocks and filesystem accounting information: "
+msgstr ""
+
+#: misc/mke2fs.c:2127
+#, c-format
+msgid ""
+"\n"
+"Warning, had trouble writing out superblocks."
+msgstr ""
+
+#: misc/mke2fs.c:2130
+#, c-format
+msgid ""
+"done\n"
+"\n"
+msgstr ""
+"完成\n"
+"\n"
+
+#: misc/mklost+found.c:49
+#, c-format
+msgid "Usage: mklost+found\n"
+msgstr "用法: mklost+found\n"
+
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"用法: %s device...\n"
+"\n"
+"输出每个给定设备的分区信息.\n"
+"例如: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "无法打开 %s: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr ""
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "无法获得 %s 的大小: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr ""
+
+#: misc/tune2fs.c:96
+msgid "Please run e2fsck on the filesystem.\n"
+msgstr "请在这个文件系统上运行 e2fsck.\n"
+
+#: misc/tune2fs.c:105
+#, c-format
+msgid ""
+"Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
+"\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
+"\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
+msgstr ""
+
+#: misc/tune2fs.c:190
+msgid "while trying to open external journal"
+msgstr ""
+
+#: misc/tune2fs.c:194
+#, fuzzy, c-format
+msgid "%s is not a journal device.\n"
+msgstr "%s 不是一个日志设备.\n"
+
+#: misc/tune2fs.c:209
+msgid "Journal superblock not found!\n"
+msgstr "日志超级块未找到!\n"
+
+#: misc/tune2fs.c:221
+msgid "Filesystem's UUID not found on journal device.\n"
+msgstr ""
+
+#: misc/tune2fs.c:242
+#, fuzzy
+msgid "Journal NOT removed\n"
+msgstr "日志未删除\n"
+
+#: misc/tune2fs.c:248
+msgid "Journal removed\n"
+msgstr "日志已删除\n"
+
+#: misc/tune2fs.c:288
+msgid "while reading bitmaps"
+msgstr "当读取位图时"
+
+#: misc/tune2fs.c:296
+msgid "while clearing journal inode"
+msgstr "当读取坏块inode时"
+
+#: misc/tune2fs.c:307
+msgid "while writing journal inode"
+msgstr ""
+
+#: misc/tune2fs.c:322
+#, fuzzy, c-format
+msgid "Invalid mount option set: %s\n"
+msgstr "设置了无效的挂载选项: %s\n"
+
+#: misc/tune2fs.c:358
+#, c-format
+msgid "Clearing filesystem feature '%s' not supported.\n"
+msgstr ""
+
+#: misc/tune2fs.c:364
+#, c-format
+msgid "Setting filesystem feature '%s' not supported.\n"
+msgstr ""
+
+#: misc/tune2fs.c:373
+msgid ""
+"The has_journal feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+
+#: misc/tune2fs.c:381
+msgid ""
+"The needs_recovery flag is set.  Please run e2fsck before clearing\n"
+"the has_journal flag.\n"
+msgstr ""
+
+#: misc/tune2fs.c:414
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+
+#: misc/tune2fs.c:425
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+
+#: misc/tune2fs.c:453
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(并且过后重启!)\n"
+
+#: misc/tune2fs.c:474
+msgid "The filesystem already has a journal.\n"
+msgstr ""
+
+#: misc/tune2fs.c:492
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to open journal on %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:496
+#, c-format
+msgid "Creating journal on device %s: "
+msgstr ""
+
+#: misc/tune2fs.c:504
+#, c-format
+msgid "while adding filesystem to journal on %s"
+msgstr ""
+
+#: misc/tune2fs.c:510
+msgid "Creating journal inode: "
+msgstr ""
+
+#: misc/tune2fs.c:519
+msgid ""
+"\n"
+"\twhile trying to create journal file"
+msgstr ""
+
+#: misc/tune2fs.c:585
+#, c-format
+msgid "Couldn't parse date/time specifier: %s"
+msgstr ""
+
+#: misc/tune2fs.c:609 misc/tune2fs.c:622
+#, c-format
+msgid "bad mounts count - %s"
+msgstr "错误挂载计数 - %s"
+
+#: misc/tune2fs.c:638
+#, c-format
+msgid "bad error behavior - %s"
+msgstr ""
+
+#: misc/tune2fs.c:665
+#, c-format
+msgid "bad gid/group name - %s"
+msgstr ""
+
+#: misc/tune2fs.c:698
+#, c-format
+msgid "bad interval - %s"
+msgstr ""
+
+#: misc/tune2fs.c:727
+#, c-format
+msgid "bad reserved block ratio - %s"
+msgstr ""
+
+#: misc/tune2fs.c:742
+msgid "-o may only be specified once"
+msgstr "-o只能被指定一次"
+
+#: misc/tune2fs.c:752
+msgid "-O may only be specified once"
+msgstr "-O只能被指定一次"
+
+#: misc/tune2fs.c:762
+#, c-format
+msgid "bad reserved blocks count - %s"
+msgstr ""
+
+#: misc/tune2fs.c:791
+#, c-format
+msgid "bad uid/user name - %s"
+msgstr ""
+
+#: misc/tune2fs.c:808
+#, fuzzy, c-format
+msgid "bad inode size - %s"
+msgstr "无效的inode大小 - %s"
+
+#: misc/tune2fs.c:815
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Inode 大小必须是2的次方- %s"
+
+#: misc/tune2fs.c:904
+#, c-format
+msgid "Invalid RAID stride: %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:919
+#, c-format
+msgid "Invalid RAID stripe-width: %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:934
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:940
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:948
+#, c-format
+msgid ""
+"\n"
+"Bad options specified.\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk chunk size in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+msgstr ""
+
+#: misc/tune2fs.c:1388 misc/tune2fs.c:1393 resize/resize2fs.c:785
+msgid "blocks to be moved"
+msgstr ""
+
+#: misc/tune2fs.c:1485
+#, fuzzy, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"要撤销 tune2fs 操作请运行命令:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1546
+#, fuzzy, c-format
+msgid "The inode size is already %lu\n"
+msgstr "正在将inode大小设置为 %lu\n"
+
+#: misc/tune2fs.c:1551
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr ""
+
+#: misc/tune2fs.c:1594
+#, c-format
+msgid "Setting maximal mount count to %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1600
+#, c-format
+msgid "Setting current mount count to %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1605
+#, c-format
+msgid "Setting error behavior to %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1610
+#, c-format
+msgid "Setting reserved blocks gid to %lu\n"
+msgstr ""
+
+#: misc/tune2fs.c:1615
+#, c-format
+msgid "Setting interval between checks to %lu seconds\n"
+msgstr ""
+
+#: misc/tune2fs.c:1622
+#, c-format
+msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
+msgstr ""
+
+#: misc/tune2fs.c:1629
+#, c-format
+msgid "reserved blocks count is too big (%lu)"
+msgstr "保留块的数量太大 (%lu)"
+
+#: misc/tune2fs.c:1635
+#, c-format
+msgid "Setting reserved blocks count to %lu\n"
+msgstr ""
+
+#: misc/tune2fs.c:1641
+msgid ""
+"\n"
+"The filesystem already has sparse superblocks.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1648
+#, c-format
+msgid ""
+"\n"
+"Sparse superblock flag set.  %s"
+msgstr ""
+
+#: misc/tune2fs.c:1653
+msgid ""
+"\n"
+"Clearing the sparse superflag not supported.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1660
+#, c-format
+msgid "Setting time filesystem last checked to %s\n"
+msgstr ""
+
+#: misc/tune2fs.c:1666
+#, c-format
+msgid "Setting reserved blocks uid to %lu\n"
+msgstr ""
+
+#: misc/tune2fs.c:1717
+msgid "Invalid UUID format\n"
+msgstr "无效的 UUID 格式\n"
+
+#: misc/tune2fs.c:1729
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1736
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1748
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+
+#: misc/tune2fs.c:1752
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "正在将inode大小设置为 %lu\n"
+
+#: misc/tune2fs.c:1762
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr ""
+
+#: misc/tune2fs.c:1767
+#, c-format
+msgid "Setting stripe width to %d\n"
+msgstr ""
+
+#: misc/util.c:72
+msgid "Proceed anyway? (y,n) "
+msgstr "无论如何也要继续? (y,n) "
+
+#: misc/util.c:93
+#, c-format
+msgid "Could not stat %s --- %s\n"
+msgstr "无法对 %s 进行 stat 调用 --- %s\n"
+
+#: misc/util.c:96
+msgid ""
+"\n"
+"The device apparently does not exist; did you specify it correctly?\n"
+msgstr ""
+
+#: misc/util.c:107
+#, fuzzy, c-format
+msgid "%s is not a block special device.\n"
+msgstr "错误:%s 不是块设备\n"
+
+#: misc/util.c:136
+#, c-format
+msgid "%s is entire device, not just one partition!\n"
+msgstr ""
+
+#: misc/util.c:158
+msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr ""
+
+#: misc/util.c:163
+#, c-format
+msgid "will not make a %s here!\n"
+msgstr ""
+
+#: misc/util.c:170
+msgid "mke2fs forced anyway.\n"
+msgstr "mke2fs 强制执行.\n"
+
+#: misc/util.c:186
+msgid "Couldn't allocate memory to parse journal options!\n"
+msgstr ""
+
+#: misc/util.c:228
+msgid ""
+"\n"
+"Bad journal options specified.\n"
+"\n"
+"Journal options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid journal options are:\n"
+"\tsize=<journal size in megabytes>\n"
+"\tdevice=<journal device>\n"
+"\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
+"\n"
+msgstr ""
+
+#: misc/util.c:258
+msgid ""
+"\n"
+"Filesystem too small for a journal\n"
+msgstr ""
+"\n"
+"文件系统小得无法记录日志\n"
+
+#: misc/util.c:265
+#, c-format
+msgid ""
+"\n"
+"The requested journal size is %d blocks; it must be\n"
+"between 1024 and 10240000 blocks.  Aborting.\n"
+msgstr ""
+
+#: misc/util.c:273
+msgid ""
+"\n"
+"Journal size too big for filesystem.\n"
+msgstr ""
+
+#: misc/util.c:283
+#, c-format
+msgid ""
+"This filesystem will be automatically checked every %d mounts or\n"
+"%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
+msgstr ""
+
+#: misc/uuidgen.c:31
+#, c-format
+msgid "Usage: %s [-r] [-t]\n"
+msgstr "用法: %s [-r] [-t]\n"
+
+#: resize/extent.c:196
+msgid "# Extent dump:\n"
+msgstr ""
+
+#: resize/extent.c:197
+#, c-format
+msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
+msgstr ""
+
+#: resize/extent.c:200
+#, c-format
+msgid "#\t\t %u -> %u (%d)\n"
+msgstr ""
+
+#: resize/main.c:42
+#, c-format
+msgid ""
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
+"\n"
+msgstr ""
+
+#: resize/main.c:64
+#, fuzzy
+msgid "Extending the inode table"
+msgstr "正在扩充inode表"
+
+#: resize/main.c:67
+#, fuzzy
+msgid "Relocating blocks"
+msgstr "正在重定位块"
+
+#: resize/main.c:70
+msgid "Scanning inode table"
+msgstr "正在扫描inode表"
+
+#: resize/main.c:73
+#, fuzzy
+msgid "Updating inode references"
+msgstr "正在更新inode引用时"
+
+#: resize/main.c:76
+msgid "Moving inode table"
+msgstr "移动inode表"
+
+#: resize/main.c:79
+#, fuzzy
+msgid "Unknown pass?!?"
+msgstr "未知步骤?!?"
+
+#: resize/main.c:82
+#, c-format
+msgid "Begin pass %d (max = %lu)\n"
+msgstr ""
+
+#: resize/main.c:267
+#, c-format
+msgid "while opening %s"
+msgstr "打开%s时"
+
+#: resize/main.c:279
+#, c-format
+msgid "while getting stat information for %s"
+msgstr "获取%s的stat信息时出错。"
+
+#: resize/main.c:340
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+
+#: resize/main.c:350
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr ""
+
+#: resize/main.c:386
+#, fuzzy, c-format
+msgid "Invalid new size: %s\n"
+msgstr "无效的inode大小 - %s"
+
+#: resize/main.c:398
+#, c-format
+msgid "New size smaller than minimum (%u)\n"
+msgstr ""
+
+#: resize/main.c:404
+#, fuzzy
+msgid "Invalid stride length"
+msgstr "无效的后缀长度"
+
+#: resize/main.c:428
+#, c-format
+msgid ""
+"The containing partition (or device) is only %u (%dk) blocks.\n"
+"You requested a new size of %u blocks.\n"
+"\n"
+msgstr ""
+
+#: resize/main.c:435
+#, c-format
+msgid ""
+"The filesystem is already %u blocks long.  Nothing to do!\n"
+"\n"
+msgstr ""
+
+#: resize/main.c:446
+#, c-format
+msgid ""
+"Please run 'e2fsck -f %s' first.\n"
+"\n"
+msgstr ""
+"请先运行 'e2fsck -f %s'.\n"
+"\n"
+
+#: resize/main.c:457
+#, c-format
+msgid "while trying to resize %s"
+msgstr "当尝试调整%s的大小时"
+
+#: resize/main.c:462
+#, c-format
+msgid ""
+"The filesystem on %s is now %u blocks long.\n"
+"\n"
+msgstr ""
+
+#: resize/main.c:477
+#, fuzzy, c-format
+msgid "while trying to truncate %s"
+msgstr "当尝试对%s进行stat调用时"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr ""
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr ""
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "文件系统不支持在线(online)调整大小"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr ""
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "没有调整文件系统大小的权限"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "内核不支持在线(online)调整大小"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "当检查在线文件系统大小调整支持时"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr ""
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr ""
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr ""
+
+#: resize/online.c:191
+#, c-format
+msgid ""
+"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
+"this system.\n"
+msgstr "文件系统 %s 被挂载在 %s,并且这个系统不支持在线调整大小.\n"
+
+#: resize/resize2fs.c:345
+#, c-format
+msgid "inodes (%llu) must be less than %u"
+msgstr ""
+
+#: resize/resize2fs.c:577
+msgid "reserved blocks"
+msgstr "保留的块"
+
+#: resize/resize2fs.c:790
+msgid "meta-data blocks"
+msgstr "元数据块"
+
+#: resize/resize2fs.c:1747
+#, c-format
+msgid "Should never happen: resize inode corrupt!\n"
+msgstr ""
+
+#~ msgid "bad block size - %s"
+#~ msgstr "错误的块大小 - %s"
diff --git a/resize/Android.mk b/resize/Android.mk
index 0385355..b9b4f67 100644
--- a/resize/Android.mk
+++ b/resize/Android.mk
@@ -1,16 +1,15 @@
 LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
+resize2fs_src_files := \
 	extent.c \
 	resize2fs.c \
 	main.c \
 	online.c \
 	sim_progress.c
 
-LOCAL_C_INCLUDES := external/e2fsprogs/lib
+resize2fs_c_includes := external/e2fsprogs/lib
 
-LOCAL_CFLAGS := -O2 -g -W -Wall \
+resize2fs_cflags := -O2 -g -W -Wall \
 	-DHAVE_UNISTD_H \
 	-DHAVE_ERRNO_H \
 	-DHAVE_NETINET_IN_H \
@@ -31,12 +30,38 @@
 	-DHAVE_LSEEK64_PROTOTYPE \
 	-DHAVE_EXT2_IOCTLS \
 	-DHAVE_LINUX_FD_H \
-	-DHAVE_TYPE_SSIZE_T
+	-DHAVE_TYPE_SSIZE_T \
+	-DHAVE_SYS_TIME_H \
+	-DHAVE_SYSCONF
 
+resize2fs_shared_libraries := \
+	libext2fs \
+	libext2_com_err \
+	libext2_e2p \
+	libext2_uuid \
+	libext2_blkid
 
+resize2fs_system_shared_libraries := libc
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(resize2fs_src_files)
+LOCAL_C_INCLUDES := $(resize2fs_c_includes)
+LOCAL_CFLAGS := $(resize2fs_cflags)
+LOCAL_SHARED_LIBRARIES := $(resize2fs_shared_libraries)
+LOCAL_SYSTEM_SHARED_LIBRARIES := $(resize2fs_system_shared_libraries)
 LOCAL_MODULE := resize2fs
-LOCAL_MODULE_TAGS := eng
-LOCAL_SYSTEM_SHARED_LIBRARIES := libext2fs libext2_com_err libext2_e2p libc
-
-
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
 include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(resize2fs_src_files)
+LOCAL_C_INCLUDES := $(resize2fs_c_includes)
+LOCAL_CFLAGS := $(resize2fs_cflags)
+LOCAL_SHARED_LIBRARIES := $(resize2fs_shared_libraries)
+LOCAL_MODULE := resize2fs_host
+LOCAL_MODULE_STEM := resize2fs
+LOCAL_MODULE_TAGS := $(use_e2fsprog_module_tags)
+
+include $(BUILD_HOST_EXECUTABLE)
diff --git a/resize/Makefile.in b/resize/Makefile.in
index 6758912..b2739ac 100644
--- a/resize/Makefile.in
+++ b/resize/Makefile.in
@@ -27,46 +27,46 @@
 	$(srcdir)/sim_progress.c
 
 LIBS= $(LIBE2P) $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBINTL)
-DEPLIBS= $(LIBE2P) $(LIBEXT2FS) $(LIBCOM_ERR)
+DEPLIBS= $(LIBE2P) $(LIBEXT2FS) $(DEPLIBCOM_ERR)
 
 STATIC_LIBS= $(STATIC_LIBE2P) $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) \
 	$(LIBINTL)
-STATIC_DEPLIBS= $(STATIC_LIBE2P) $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) 
+DEPSTATIC_LIBS= $(STATIC_LIBE2P) $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) 
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $< -o $@
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
 
 all:: $(PROGS) $(TEST_PROGS) $(MANPAGES) 
 
 resize2fs: $(RESIZE_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o resize2fs $(RESIZE_OBJS) $(LIBS) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o resize2fs $(RESIZE_OBJS) $(LIBS) 
 
-resize2fs.static: $(RESIZE_OBJS)  $(STATIC_DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) $(LDFLAG_STATIC) -o resize2fs.static \
+resize2fs.static: $(RESIZE_OBJS) $(DEPSTATIC_LIBS)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) $(LDFLAG_STATIC) -o resize2fs.static \
 		$(RESIZE_OBJS) $(STATIC_LIBS) 
 
 resize2fs.8: $(DEP_SUBSTITUTE) $(srcdir)/resize2fs.8.in
-	@echo "	SUBST $@"
-	@$(SUBSTITUTE_UPTIME) $(srcdir)/resize2fs.8.in resize2fs.8
+	$(E) "	SUBST $@"
+	$(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/resize2fs.8.in resize2fs.8
 
 test_extent: $(TEST_EXTENT_OBJS)
-	@echo "	LD $@"
-	@$(CC) $(ALL_LDFLAGS) -o test_extent $(TEST_EXTENT_OBJS) $(LIBS) 
+	$(E) "	LD $@"
+	$(Q) $(CC) $(ALL_LDFLAGS) -o test_extent $(TEST_EXTENT_OBJS) $(LIBS) 
 
 installdirs:
-	@echo "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
-	@$(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+	$(E) "	MKINSTALLDIRS $(root_sbindir) $(man8dir)"
+	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
 		$(DESTDIR)$(man8dir)
 
 install: $(PROGS) $(MANPAGES) installdirs
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	INSTALL $(root_sbindir)/$$i"; \
 		$(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
 	done
-	@for i in $(MANPAGES); do \
+	$(Q) for i in $(MANPAGES); do \
 		for j in $(COMPRESS_EXT); do \
 			$(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
 		done; \
@@ -75,7 +75,7 @@
 	done
 
 install-strip: install
-	@for i in $(PROGS); do \
+	$(Q) for i in $(PROGS); do \
 		echo "	STRIP $(root_sbindir)/$$i"; \
 		$(STRIP) $(DESTDIR)$(root_sbindir)/$$i; \
 	done
@@ -93,7 +93,7 @@
 		> test_extent.out
 
 check:: test_extent.out
-	@if cmp -s test_extent.out $(srcdir)/test_extent.in ; then \
+	$(Q) if cmp -s test_extent.out $(srcdir)/test_extent.in ; then \
 		echo "Test succeeded." ; \
 	else \
 		echo "Test failed!" ; \
@@ -146,27 +146,36 @@
 #
 extent.o: $(srcdir)/extent.c $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
 resize2fs.o: $(srcdir)/resize2fs.c $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
 main.o: $(srcdir)/main.c $(top_srcdir)/lib/e2p/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/resize2fs.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
- $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/version.h
 online.o: $(srcdir)/online.c $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
 sim_progress.o: $(srcdir)/sim_progress.c $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
- $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
- $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
diff --git a/resize/extent.c b/resize/extent.c
index ca2c68c..2ed7591 100644
--- a/resize/extent.c
+++ b/resize/extent.c
@@ -9,7 +9,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000 by Theosore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -34,11 +34,11 @@
 /*
  * Create an extent table
  */
-errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, int size) 
+errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, int size)
 {
 	ext2_extent	extent;
 	errcode_t	retval;
-	
+
 	retval = ext2fs_get_mem(sizeof(struct _ext2_extent), &extent);
 	if (retval)
 		return retval;
@@ -86,9 +86,9 @@
 
 	if (extent->num >= extent->size) {
 		newsize = extent->size + 100;
-		retval = ext2fs_resize_mem(sizeof(struct ext2_extent_entry) * 
-					   extent->size, 
-					   sizeof(struct ext2_extent_entry) * 
+		retval = ext2fs_resize_mem(sizeof(struct ext2_extent_entry) *
+					   extent->size,
+					   sizeof(struct ext2_extent_entry) *
 					   newsize, &extent->list);
 		if (retval)
 			return retval;
@@ -128,12 +128,12 @@
 {
 	const struct ext2_extent_entry *db_a;
 	const struct ext2_extent_entry *db_b;
-	
+
 	db_a = (const struct ext2_extent_entry *) a;
 	db_b = (const struct ext2_extent_entry *) b;
-	
+
 	return (db_a->old_loc - db_b->old_loc);
-}	
+}
 
 /*
  * Given an inode map and inode number, look up the old inode number
@@ -167,7 +167,7 @@
 				range = 0;
 			else if (old_loc > highval)
 				range = 1;
-			else 
+			else
 				range = ((float) (old_loc - lowval)) /
 					(highval - lowval);
 			mid = low + ((int) (range * (high-low)));
@@ -192,7 +192,7 @@
 {
 	int	i;
 	struct ext2_extent_entry *ent;
-	
+
 	fputs(_("# Extent dump:\n"), out);
 	fprintf(out, _("#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"),
 	       extent->num, extent->size, extent->cursor, extent->sorted);
@@ -209,7 +209,7 @@
 				__u32 *new_loc, int *size)
 {
 	struct ext2_extent_entry *ent;
-	
+
 	if (!old_loc) {
 		extent->cursor = 0;
 		return 0;
@@ -229,7 +229,7 @@
 	*size = ent->size;
 	return 0;
 }
-	
-	
-		
-	       
+
+
+
+
diff --git a/resize/main.c b/resize/main.c
index f283e41..220c192 100644
--- a/resize/main.c
+++ b/resize/main.c
@@ -5,7 +5,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 by Theodore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -22,6 +22,9 @@
 extern int optind;
 #endif
 #include <unistd.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -36,8 +39,8 @@
 
 static void usage (char *prog)
 {
-	fprintf (stderr, _("Usage: %s [-d debug_flags] [-f] [-F] [-p] "
-			   "device [new_size]\n\n"), prog);
+	fprintf (stderr, _("Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] "
+			   "[-p] device [new_size]\n\n"), prog);
 
 	exit (1);
 }
@@ -108,11 +111,11 @@
 		has_sb = ext2fs_bg_has_super(fs, group);
 		if (group == 0 || has_sb != prev_has_sb)
 			goto next;
-		b_stride = fs->group_desc[group].bg_block_bitmap - 
-			fs->group_desc[group-1].bg_block_bitmap - 
+		b_stride = fs->group_desc[group].bg_block_bitmap -
+			fs->group_desc[group-1].bg_block_bitmap -
 			fs->super->s_blocks_per_group;
-		i_stride = fs->group_desc[group].bg_inode_bitmap - 
-			fs->group_desc[group-1].bg_inode_bitmap - 
+		i_stride = fs->group_desc[group].bg_inode_bitmap -
+			fs->group_desc[group-1].bg_inode_bitmap -
 			fs->super->s_blocks_per_group;
 		if (b_stride != i_stride ||
 		    b_stride < 0)
@@ -121,7 +124,7 @@
 		/* printf("group %d has stride %d\n", group, b_stride); */
 		sum += b_stride;
 		num++;
-			
+
 	next:
 		prev_has_sb = has_sb;
 	}
@@ -152,9 +155,12 @@
 	int		flush = 0;
 	int		force = 0;
 	int		io_flags = 0;
+	int		force_min_size = 0;
+	int		print_min_size = 0;
 	int		fd, ret;
 	blk_t		new_size = 0;
 	blk_t		max_size = 0;
+	blk_t		min_size = 0;
 	io_manager	io_ptr;
 	char		*new_size_str = 0;
 	int		use_stride = -1;
@@ -183,7 +189,7 @@
 	if (argc && *argv)
 		program_name = *argv;
 
-	while ((c = getopt (argc, argv, "d:fFhpS:")) != EOF) {
+	while ((c = getopt (argc, argv, "d:fFhMPpS:")) != EOF) {
 		switch (c) {
 		case 'h':
 			usage(program_name);
@@ -194,6 +200,12 @@
 		case 'F':
 			flush = 1;
 			break;
+		case 'M':
+			force_min_size = 1;
+			break;
+		case 'P':
+			print_min_size = 1;
+			break;
 		case 'd':
 			flags |= atoi(optarg);
 			break;
@@ -215,7 +227,7 @@
 		new_size_str = argv[optind++];
 	if (optind < argc)
 		usage(program_name);
-	
+
 	io_options = strchr(device_name, '?');
 	if (io_options)
 		*io_options++ = 0;
@@ -230,7 +242,7 @@
 		if (!mtpt)
 			return ENOMEM;
 		mtpt[len-1] = 0;
-		retval = ext2fs_check_mount_point(device_name, &mount_flags, 
+		retval = ext2fs_check_mount_point(device_name, &mount_flags,
 						  mtpt, len);
 		if (retval) {
 			com_err("ext2fs_check_mount_point", retval,
@@ -261,16 +273,16 @@
 	ret = fstat(fd, &st_buf);
 #endif
 	if (ret < 0) {
-		com_err("open", errno, 
+		com_err("open", errno,
 			_("while getting stat information for %s"),
 			device_name);
 		exit(1);
 	}
-	
+
 	if (flush) {
 		retval = ext2fs_sync_device(fd, 1);
 		if (retval) {
-			com_err(argv[0], retval, 
+			com_err(argv[0], retval,
 				_("while trying to flush %s"),
 				device_name);
 			exit(1);
@@ -282,15 +294,17 @@
 		fd = -1;
 	}
 
-	if (flags & RESIZE_DEBUG_IO) {
+#ifdef CONFIG_TESTIO_DEBUG
+	if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
 		io_ptr = test_io_manager;
 		test_io_backing_manager = unix_io_manager;
-	} else 
+	} else
+#endif
 		io_ptr = unix_io_manager;
 
 	if (!(mount_flags & EXT2_MF_MOUNTED))
 		io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
-	retval = ext2fs_open2(device_name, io_options, io_flags, 
+	retval = ext2fs_open2(device_name, io_options, io_flags,
 			      0, 0, io_ptr, &fs);
 	if (retval) {
 		com_err (program_name, retval, _("while trying to open %s"),
@@ -298,6 +312,7 @@
 		printf (_("Couldn't find valid filesystem superblock.\n"));
 		exit (1);
 	}
+
 	/*
 	 * Check for compatibility with the feature sets.  We need to
 	 * be more stringent than ext2fs_open().
@@ -307,7 +322,34 @@
 			"(%s)", device_name);
 		exit(1);
 	}
-	
+
+	/*
+	 * XXXX   The combination of flex_bg and !resize_inode causes
+	 * major problems for resize2fs, since when the group descriptors
+	 * grow in size this can potentially require multiple inode
+	 * tables to be moved aside to make room, and resize2fs chokes
+	 * rather badly in this scenario.  It's a rare combination,
+	 * except when a filesystem is expanded more than a certain
+	 * size, so for now, we'll just prohibit that combination.
+	 * This is something we should fix eventually, though.
+	 */
+	if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) &&
+	    !(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
+		com_err(program_name, 0, _("%s: The combination of flex_bg "
+					   "and\n\t!resize_inode features "
+					   "is not supported by resize2fs.\n"),
+			device_name);
+		exit(1);
+	}
+
+	min_size = calculate_minimum_resize_size(fs);
+
+	if (print_min_size) {
+		printf(_("Estimated minimum size of the filesystem: %u\n"),
+		       min_size);
+		exit(0);
+	}
+
 	/* Determine the system page size if possible */
 #ifdef HAVE_SYSCONF
 #if (!defined(_SC_PAGESIZE) && defined(_SC_PAGE_SIZE))
@@ -332,12 +374,14 @@
 			_("while trying to determine filesystem size"));
 		exit(1);
 	}
-	if (new_size_str) {
-		new_size = parse_num_blocks(new_size_str, 
+	if (force_min_size)
+		new_size = min_size;
+	else if (new_size_str) {
+		new_size = parse_num_blocks(new_size_str,
 					    fs->super->s_log_block_size);
-		if (!new_size) {
-			com_err(program_name, 0, _("bad filesystem size - %s"),
-				new_size_str);
+		if (new_size == 0) {
+			com_err(program_name, 0,
+				_("Invalid new size: %s\n"), new_size_str);
 			exit(1);
 		}
 	} else {
@@ -347,9 +391,14 @@
 			new_size &= ~((sys_page_size / fs->blocksize)-1);
 	}
 
+	if (!force && new_size < min_size) {
+		com_err(program_name, 0,
+			_("New size smaller than minimum (%u)\n"), min_size);
+		exit(1);
+	}
 	if (use_stride >= 0) {
 		if (use_stride >= (int) fs->super->s_blocks_per_group) {
-			com_err(program_name, 0, 
+			com_err(program_name, 0,
 				_("Invalid stride length"));
 			exit(1);
 		}
@@ -357,14 +406,14 @@
 		ext2fs_mark_super_dirty(fs);
 	} else
 		  determine_fs_stride(fs);
-	
+
 	/*
 	 * If we are resizing a plain file, and it's not big enough,
 	 * automatically extend it in a sparse fashion by writing the
 	 * last requested block.
 	 */
 	new_file_size = ((__u64) new_size) * fs->blocksize;
-	if ((__u64) new_file_size > 
+	if ((__u64) new_file_size >
 	    (((__u64) 1) << (sizeof(st_buf.st_size)*8 - 1)) - 1)
 		fd = -1;
 	if ((new_file_size > st_buf.st_size) &&
@@ -391,21 +440,27 @@
 		if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
 			       (fs->super->s_state & EXT2_ERROR_FS) ||
 			       ((fs->super->s_state & EXT2_VALID_FS) == 0))) {
-			fprintf(stderr, 
+			fprintf(stderr,
 				_("Please run 'e2fsck -f %s' first.\n\n"),
 				device_name);
 			exit(1);
 		}
-	printf("Resizing the filesystem on %s to %u (%dk) blocks.\n",
+		printf(_("Resizing the filesystem on "
+			 "%s to %u (%dk) blocks.\n"),
 		       device_name, new_size, fs->blocksize / 1024);
 		retval = resize_fs(fs, &new_size, flags,
 				   ((flags & RESIZE_PERCENT_COMPLETE) ?
 				    resize_progress_func : 0));
 	}
+	free(mtpt);
 	if (retval) {
 		com_err(program_name, retval, _("while trying to resize %s"),
 			device_name);
-		ext2fs_close (fs);
+		fprintf(stderr,
+			_("Please run 'e2fsck -fy %s' to fix the filesystem\n"
+			  "after the aborted resize operation.\n"),
+			device_name);
+		ext2fs_close(fs);
 		exit(1);
 	}
 	printf(_("The filesystem on %s is now %u blocks long.\n\n"),
@@ -414,12 +469,17 @@
 	if ((st_buf.st_size > new_file_size) &&
 	    (fd > 0)) {
 #ifdef HAVE_FTRUNCATE64
-		ftruncate64(fd, new_file_size);
+		retval = ftruncate64(fd, new_file_size);
 #else
+		retval = 0;
 		/* Only truncate if new_file_size doesn't overflow off_t */
 		if (((off_t) new_file_size) == new_file_size)
-			ftruncate(fd, (off_t) new_file_size);
+			retval = ftruncate(fd, (off_t) new_file_size);
 #endif
+		if (retval)
+			com_err(program_name, retval,
+				_("while trying to truncate %s"),
+				device_name);
 	}
 	if (fd > 0)
 		close(fd);
diff --git a/resize/online.c b/resize/online.c
index fc1f7a2..4bc5451 100644
--- a/resize/online.c
+++ b/resize/online.c
@@ -1,8 +1,8 @@
 /*
  * online.c --- Do on-line resizing of the ext3 filesystem
  *
- * Copyright (C) 2006 by Theodore Ts'o 
- * 
+ * Copyright (C) 2006 by Theodore Ts'o
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -18,18 +18,21 @@
 
 extern char *program_name;
 
-errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt, 
+errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
 			   blk_t *new_size, int flags EXT2FS_ATTR((unused)))
 {
 #ifdef __linux__
 	struct ext2_new_group_input input;
+	struct ext4_new_group_input input64;
 	struct ext2_super_block *sb = fs->super;
 	unsigned long		new_desc_blocks;
 	ext2_filsys 		new_fs;
 	errcode_t 		retval;
+	double			percent;
 	dgrp_t			i;
 	blk_t			size;
-	int			fd, r_frac, overhead;
+	int			fd, overhead;
+	int			use_old_ioctl = 1;
 
 	printf(_("Filesystem at %s is mounted on %s; "
 		 "on-line resizing required\n"), fs->device_name, mtpt);
@@ -41,7 +44,7 @@
 	}
 
 	/*
-	 * If the number of descriptor blocks is going to increase, 
+	 * If the number of descriptor blocks is going to increase,
 	 * the on-line resizing inode must be present.
 	 */
 	new_desc_blocks = ext2fs_div_ceil(
@@ -49,19 +52,19 @@
 				fs->super->s_first_data_block,
 				EXT2_BLOCKS_PER_GROUP(fs->super)),
 		EXT2_DESC_PER_BLOCK(fs->super));
-	printf("old desc_blocks = %lu, new_desc_blocks = %lu\n", 
+	printf("old desc_blocks = %lu, new_desc_blocks = %lu\n",
 	       fs->desc_blocks, new_desc_blocks);
-	if (!(fs->super->s_feature_compat & 
+	if (!(fs->super->s_feature_compat &
 	      EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
 	    new_desc_blocks != fs->desc_blocks) {
-		com_err(program_name, 0, 
+		com_err(program_name, 0,
 			_("Filesystem does not support online resizing"));
 		exit(1);
 	}
 
 	fd = open(mtpt, O_RDONLY);
 	if (fd < 0) {
-		com_err(program_name, errno, 
+		com_err(program_name, errno,
 			_("while trying to open mountpoint %s"), mtpt);
 		exit(1);
 	}
@@ -69,18 +72,18 @@
 	size=sb->s_blocks_count;
 	if (ioctl(fd, EXT2_IOC_GROUP_EXTEND, &size)) {
 		if (errno == EPERM)
-			com_err(program_name, 0, 
+			com_err(program_name, 0,
 				_("Permission denied to resize filesystem"));
 		else if (errno == ENOTTY)
-			com_err(program_name, 0, 
+			com_err(program_name, 0,
 			_("Kernel does not support online resizing"));
-		else 
-			com_err(program_name, errno, 
+		else
+			com_err(program_name, errno,
 			_("While checking for on-line resizing support"));
 		exit(1);
 	}
 
-	r_frac = ext2fs_div_ceil(100 * sb->s_r_blocks_count, sb->s_blocks_count);
+	percent = (sb->s_r_blocks_count * 100.0) / sb->s_blocks_count;
 
 	retval = ext2fs_read_bitmaps(fs);
 	if (retval)
@@ -90,20 +93,31 @@
 	if (retval)
 		return retval;
 
-	retval = adjust_fs_info(new_fs, fs, *new_size);
+	/* The current method of adding one block group at a time to a
+	 * mounted filesystem means it is impossible to accomodate the
+	 * flex_bg allocation method of placing the metadata together
+	 * in a single block group.  For now we "fix" this issue by
+	 * using the traditional layout for new block groups, where
+	 * each block group is self-contained and contains its own
+	 * bitmap blocks and inode tables.  This means we don't get
+	 * the layout advantages of flex_bg in the new block groups,
+	 * but at least it allows on-line resizing to function.
+	 */
+	new_fs->super->s_feature_incompat &= ~EXT4_FEATURE_INCOMPAT_FLEX_BG;
+	retval = adjust_fs_info(new_fs, fs, 0, *new_size);
 	if (retval)
 		return retval;
 
 	printf(_("Performing an on-line resize of %s to %u (%dk) blocks.\n"),
 	       fs->device_name, *new_size, fs->blocksize / 1024);
 
-	size = fs->group_desc_count * sb->s_blocks_per_group + 
+	size = fs->group_desc_count * sb->s_blocks_per_group +
 		sb->s_first_data_block;
 	if (size > *new_size)
 		size = *new_size;
 
 	if (ioctl(fd, EXT2_IOC_GROUP_EXTEND, &size)) {
-		com_err(program_name, errno, 
+		com_err(program_name, errno,
 			_("While trying to extend the last group"));
 		exit(1);
 	}
@@ -114,7 +128,7 @@
 		overhead = (int) (2 + new_fs->inode_blocks_per_group);
 
 		if (ext2fs_bg_has_super(new_fs, new_fs->group_desc_count - 1))
-			overhead += 1 + new_fs->desc_blocks + 
+			overhead += 1 + new_fs->desc_blocks +
 				new_fs->super->s_reserved_gdt_blocks;
 
 		input.group = i;
@@ -124,32 +138,46 @@
 		input.blocks_count = sb->s_blocks_per_group;
 		if (i == new_fs->group_desc_count-1) {
 			input.blocks_count = new_fs->super->s_blocks_count -
-				sb->s_first_data_block - 
+				sb->s_first_data_block -
 				(i * sb->s_blocks_per_group);
 		}
-		input.reserved_blocks = e2p_percent(r_frac, 
-						    input.blocks_count);
+		input.reserved_blocks = (blk_t) (percent * input.blocks_count
+						 / 100.0);
 
 #if 0
 		printf("new block bitmap is at 0x%04x\n", input.block_bitmap);
 		printf("new inode bitmap is at 0x%04x\n", input.inode_bitmap);
-		printf("new inode table is at 0x%04x-0x%04x\n", 
+		printf("new inode table is at 0x%04x-0x%04x\n",
 		       input.inode_table,
 		       input.inode_table + new_fs->inode_blocks_per_group-1);
 		printf("new group has %u blocks\n", input.blocks_count);
-		printf("new group will reserve %d blocks\n", 
+		printf("new group will reserve %d blocks\n",
 		       input.reserved_blocks);
-		printf("new group has %d free blocks\n", 
+		printf("new group has %d free blocks\n",
 		       new_fs->group_desc[i].bg_free_blocks_count);
 		printf("new group has %d free inodes (%d blocks)\n",
-		       new_fs->group_desc[i].bg_free_inodes_count, 
+		       new_fs->group_desc[i].bg_free_inodes_count,
 		       new_fs->inode_blocks_per_group);
 		printf("Adding group #%d\n", input.group);
 #endif
 
-		if (ioctl(fd, EXT2_IOC_GROUP_ADD, &input) < 0) {
-			com_err(program_name, errno, 
-				_("While trying to add group #%d"), 
+		if (use_old_ioctl &&
+		    ioctl(fd, EXT2_IOC_GROUP_ADD, &input) == 0)
+			continue;
+		else
+			use_old_ioctl = 0;
+
+		input64.group = input.group;
+		input64.block_bitmap = input.block_bitmap;
+		input64.inode_bitmap = input.inode_bitmap;
+		input64.inode_table = input.inode_table;
+		input64.blocks_count = input.blocks_count;
+		input64.reserved_blocks = input.reserved_blocks;
+		input64.unused = input.unused;
+
+		if (ioctl(fd, EXT4_IOC_GROUP_ADD, &input64) < 0) {
+			com_err(program_name, errno,
+				_("While trying to add group #%d"),
 				input.group);
 			exit(1);
 		}
@@ -160,7 +188,7 @@
 
 	return 0;
 #else
-	printf(_("Filesystem at %s is mounted on %s, and on-line resizing is"
+	printf(_("Filesystem at %s is mounted on %s, and on-line resizing is "
 		 "not supported on this system.\n"), fs->device_name, mtpt);
 	exit(1);
 #endif
diff --git a/resize/resize2fs.8.in b/resize/resize2fs.8.in
index d43adad..3ea7a63 100644
--- a/resize/resize2fs.8.in
+++ b/resize/resize2fs.8.in
@@ -4,10 +4,13 @@
 .\" .TH RESIZE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .TH RESIZE2FS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
 .SH NAME
-resize2fs \- ext2/ext3 file system resizer
+resize2fs \- ext2/ext3/ext4 file system resizer
 .SH SYNOPSIS
 .B resize2fs
 [
+.B \-fFpPM
+]
+[
 .B \-d 
 .I debug-flags
 ]
@@ -15,15 +18,6 @@
 .B \-S
 .I RAID-stride
 ]
-[
-.B \-f
-]
-[
-.B \-F
-]
-[
-.B \-p
-]
 .I device
 [
 .I size
@@ -31,8 +25,8 @@
 .SH DESCRIPTION
 The 
 .B resize2fs 
-program will resize ext2 or ext3 file systems.  It can be used to enlarge or
-shrink an unmounted file system located on 
+program will resize ext2, ext3, or ext4 file systems.  It can be used to
+enlarge or shrink an unmounted file system located on 
 .IR device .
 If the filesystem is mounted, it can be used to expand the size of the
 mounted filesystem, assuming the kernel supports on-line resizing.  (As
@@ -92,26 +86,11 @@
 should be computed by adding the numbers of the desired features 
 from the following list:
 .br
-\	1\	\-\ Print out all disk I/O 
-.br
 \	2\	\-\ Debug block relocations
 .br
-\	8\	\-\ Debug inode relocations
+\	4\	\-\ Debug inode relocations
 .br
-\	16\	\-\ Debug moving the inode table
-.TP
-.B \-S \fIRAID-stride
-The 
-.B resize2fs
-program will heuristically determine the RAID stride that was specified 
-when the filesystem was created.  This option allows the user to 
-explicitly specify a RAID stride setting to be used by resize2fs instead.
-.TP
-.B \-p
-Prints out a percentage completion bars for each 
-.B resize2fs
-operation, so that the user can keep track of what
-the program is doing.
+\	8\	\-\ Debug moving the inode table
 .TP 
 .B \-f
 Forces resize2fs to proceed with the filesystem resize operation, overriding 
@@ -122,6 +101,28 @@
 really useful for doing 
 .B resize2fs
 time trials.
+.TP
+.B \-M
+Shrink the filesystem to the minimum size.
+.TP
+.B \-p
+Prints out a percentage completion bars for each
+.B resize2fs
+operation, so that the user can keep track of what
+the program is doing.
+.TP
+.B \-P
+Print the minimum size of the filesystem and exit.
+.TP
+.B \-S \fIRAID-stride
+The
+.B resize2fs
+program will heuristically determine the RAID stride that was specified
+when the filesystem was created.  This option allows the user to
+explicitly specify a RAID stride setting to be used by resize2fs instead.
+.SH KNOWN BUGS
+The minimum size of the filesystem as estimated by resize2fs may be
+incorrect, especially for filesystems with 1k and 2k blocksizes.
 .SH AUTHOR
 .B resize2fs
 was written by Theodore Ts'o <tytso@mit.edu>.
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index 6dec3eb..346fd53 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -5,7 +5,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000 by Theosore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -40,6 +40,7 @@
 #define RESIZE2FS_DEBUG
 #endif
 
+static void fix_uninit_block_bitmaps(ext2_filsys fs);
 static errcode_t adjust_superblock(ext2_resize_t rfs, blk_t new_size);
 static errcode_t blocks_to_move(ext2_resize_t rfs);
 static errcode_t block_mover(ext2_resize_t rfs);
@@ -48,6 +49,7 @@
 static errcode_t move_itables(ext2_resize_t rfs);
 static errcode_t fix_resize_inode(ext2_filsys fs);
 static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs);
+static errcode_t fix_sb_journal_backup(ext2_filsys fs);
 
 /*
  * Some helper CPP macros
@@ -63,15 +65,17 @@
 				 ((blk) < (FS_INODE_TB((fs), (i)) + \
 					   (fs)->inode_blocks_per_group)))
 
-
+#define META_OVERHEAD(fs) (2 + (fs)->inode_blocks_per_group)
+#define SUPER_OVERHEAD(fs) (1 + (fs)->desc_blocks +\
+			    (fs)->super->s_reserved_gdt_blocks)
 
 /*
  * This is the top-level routine which does the dirty deed....
  */
 errcode_t resize_fs(ext2_filsys fs, blk_t *new_size, int flags,
 		    errcode_t (*progress)(ext2_resize_t rfs, int pass,
-				     unsigned long cur,
-				     unsigned long max_val))
+					  unsigned long cur,
+					  unsigned long max_val))
 {
 	ext2_resize_t	rfs;
 	errcode_t	retval;
@@ -79,7 +83,11 @@
 	retval = ext2fs_read_bitmaps(fs);
 	if (retval)
 		return retval;
-	
+
+	fs->super->s_state |= EXT2_ERROR_FS;
+	ext2fs_mark_super_dirty(fs);
+	ext2fs_flush(fs);
+
 	/*
 	 * Create the data structure
 	 */
@@ -88,6 +96,8 @@
 		return retval;
 	memset(rfs, 0, sizeof(struct ext2_resize_struct));
 
+	fix_uninit_block_bitmaps(fs);
+	fs->priv_data = rfs;
 	rfs->old_fs = fs;
 	rfs->flags = flags;
 	rfs->itable_buf	 = 0;
@@ -100,6 +110,11 @@
 	if (retval)
 		goto errout;
 
+	fix_uninit_block_bitmaps(rfs->new_fs);
+	/* Clear the block bitmap uninit flag for the last block group */
+	rfs->new_fs->group_desc[rfs->new_fs->group_desc_count-1].bg_flags &=
+		~EXT2_BG_BLOCK_UNINIT;
+
 	*new_size = rfs->new_fs->super->s_blocks_count;
 
 	retval = blocks_to_move(rfs);
@@ -113,7 +128,7 @@
 		       rfs->new_fs->super->s_free_blocks_count,
 		       rfs->needed_blocks);
 #endif
-	
+
 	retval = block_mover(rfs);
 	if (retval)
 		goto errout;
@@ -133,23 +148,32 @@
 	retval = ext2fs_calculate_summary_stats(rfs->new_fs);
 	if (retval)
 		goto errout;
-	
+
 	retval = fix_resize_inode(rfs->new_fs);
 	if (retval)
 		goto errout;
 
-	rfs->new_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;	
+	retval = fix_sb_journal_backup(rfs->new_fs);
+	if (retval)
+		goto errout;
+
+	rfs->new_fs->super->s_state &= ~EXT2_ERROR_FS;
+	rfs->new_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
 	retval = ext2fs_close(rfs->new_fs);
 	if (retval)
 		goto errout;
 
 	rfs->flags = flags;
-	
+
 	ext2fs_free(rfs->old_fs);
 	if (rfs->itable_buf)
 		ext2fs_free_mem(&rfs->itable_buf);
+	if (rfs->reserve_blocks)
+		ext2fs_free_block_bitmap(rfs->reserve_blocks);
+	if (rfs->move_blocks)
+		ext2fs_free_block_bitmap(rfs->move_blocks);
 	ext2fs_free_mem(&rfs);
-	
+
 	return 0;
 
 errout:
@@ -161,6 +185,55 @@
 	return retval;
 }
 
+/*
+ * Clean up the bitmaps for unitialized bitmaps
+ */
+static void fix_uninit_block_bitmaps(ext2_filsys fs)
+{
+	blk_t		i, blk, super_blk, old_desc_blk, new_desc_blk;
+	int		old_desc_blocks;
+	dgrp_t		g;
+
+	if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					 EXT4_FEATURE_RO_COMPAT_GDT_CSUM)))
+		return;
+
+	for (g=0; g < fs->group_desc_count; g++) {
+		if (!(fs->group_desc[g].bg_flags & EXT2_BG_BLOCK_UNINIT))
+			continue;
+
+		blk = (g * fs->super->s_blocks_per_group) +
+			fs->super->s_first_data_block;
+
+		ext2fs_super_and_bgd_loc(fs, g, &super_blk,
+					 &old_desc_blk, &new_desc_blk, 0);
+
+		if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
+			old_desc_blocks = fs->super->s_first_meta_bg;
+		else
+			old_desc_blocks = fs->desc_blocks +
+				fs->super->s_reserved_gdt_blocks;
+
+		for (i=0; i < fs->super->s_blocks_per_group; i++, blk++) {
+			if (blk >= fs->super->s_blocks_count)
+				break;
+			if ((blk == super_blk) ||
+			    (old_desc_blk && old_desc_blocks &&
+			     (blk >= old_desc_blk) &&
+			     (blk < old_desc_blk + old_desc_blocks)) ||
+			    (new_desc_blk && (blk == new_desc_blk)) ||
+			    (blk == fs->group_desc[g].bg_block_bitmap) ||
+			    (blk == fs->group_desc[g].bg_inode_bitmap) ||
+			    (blk >= fs->group_desc[g].bg_inode_table &&
+			     (blk < fs->group_desc[g].bg_inode_table
+			      + fs->inode_blocks_per_group)))
+				ext2fs_fast_mark_block_bitmap(fs->block_map, blk);
+			else
+				ext2fs_fast_unmark_block_bitmap(fs->block_map, blk);
+		}
+	}
+}
+
 /* --------------------------------------------------------------------
  *
  * Resize processing, phase 1.
@@ -173,10 +246,53 @@
  */
 
 /*
+ * If the group descriptor's bitmap and inode table blocks are valid,
+ * release them in the new filesystem data structure, and mark them as
+ * reserved so the old inode table blocks don't get overwritten.
+ */
+static void free_gdp_blocks(ext2_filsys fs,
+			    ext2fs_block_bitmap reserve_blocks,
+			    struct ext2_group_desc *gdp)
+{
+	blk_t	blk;
+	int	j;
+
+	if (gdp->bg_block_bitmap &&
+	    (gdp->bg_block_bitmap < fs->super->s_blocks_count)) {
+		ext2fs_block_alloc_stats(fs, gdp->bg_block_bitmap, -1);
+		ext2fs_mark_block_bitmap(reserve_blocks,
+					 gdp->bg_block_bitmap);
+	}
+
+	if (gdp->bg_inode_bitmap &&
+	    (gdp->bg_inode_bitmap < fs->super->s_blocks_count)) {
+		ext2fs_block_alloc_stats(fs, gdp->bg_inode_bitmap, -1);
+		ext2fs_mark_block_bitmap(reserve_blocks,
+					 gdp->bg_inode_bitmap);
+	}
+
+	if (gdp->bg_inode_table == 0 ||
+	    (gdp->bg_inode_table >= fs->super->s_blocks_count))
+		return;
+
+	for (blk = gdp->bg_inode_table, j = 0;
+	     j < fs->inode_blocks_per_group; j++, blk++) {
+		if (blk >= fs->super->s_blocks_count)
+			break;
+		ext2fs_block_alloc_stats(fs, blk, -1);
+		ext2fs_mark_block_bitmap(reserve_blocks, blk);
+	}
+}
+
+/*
  * This routine is shared by the online and offline resize routines.
  * All of the information which is adjusted in memory is done here.
+ *
+ * The reserve_blocks parameter is only needed when shrinking the
+ * filesystem.
  */
-errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, blk_t new_size)
+errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
+			 ext2fs_block_bitmap reserve_blocks, blk_t new_size)
 {
 	errcode_t	retval;
 	int		overhead = 0;
@@ -186,8 +302,9 @@
 	int		adj, old_numblocks, numblocks, adjblocks;
 	unsigned long	i, j, old_desc_blocks, max_group;
 	unsigned int	meta_bg, meta_bg_size;
-	int		has_super;
+	int		has_super, csum_flag;
 	unsigned long long new_inodes;	/* u64 to check for overflow */
+	double		percent;
 
 	fs->super->s_blocks_count = new_size;
 
@@ -197,7 +314,7 @@
 				       EXT2_BLOCKS_PER_GROUP(fs->super));
 	if (fs->group_desc_count == 0)
 		return EXT2_ET_TOOSMALL;
-	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, 
+	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count,
 					  EXT2_DESC_PER_BLOCK(fs->super));
 
 	/*
@@ -209,7 +326,7 @@
 	overhead = (int) (2 + fs->inode_blocks_per_group);
 
 	if (ext2fs_bg_has_super(fs, fs->group_desc_count - 1))
-		overhead += 1 + fs->desc_blocks + 
+		overhead += 1 + fs->desc_blocks +
 			fs->super->s_reserved_gdt_blocks;
 
 	/*
@@ -251,10 +368,10 @@
 	/*
 	 * Adjust the number of reserved blocks
 	 */
-	blk = (__u64)old_fs->super->s_r_blocks_count * 100 /
+	percent = (old_fs->super->s_r_blocks_count * 100.0) /
 		old_fs->super->s_blocks_count;
-	fs->super->s_r_blocks_count = e2p_percent(blk, 
-						  fs->super->s_blocks_count);
+	fs->super->s_r_blocks_count = (unsigned int) (percent *
+					fs->super->s_blocks_count / 100.0);
 
 	/*
 	 * Adjust the bitmaps for size
@@ -263,7 +380,7 @@
 					    fs->super->s_inodes_count,
 					    fs->inode_map);
 	if (retval) goto errout;
-	
+
 	real_end = ((EXT2_BLOCKS_PER_GROUP(fs->super)
 		     * fs->group_desc_count)) - 1 +
 			     fs->super->s_first_data_block;
@@ -282,8 +399,8 @@
 					   &fs->group_desc);
 		if (retval)
 			goto errout;
-		if (fs->desc_blocks > old_fs->desc_blocks) 
-			memset((char *) fs->group_desc + 
+		if (fs->desc_blocks > old_fs->desc_blocks)
+			memset((char *) fs->group_desc +
 			       (old_fs->desc_blocks * fs->blocksize), 0,
 			       (fs->desc_blocks - old_fs->desc_blocks) *
 			       fs->blocksize);
@@ -295,28 +412,34 @@
 	 * s_reserved_gdt_blocks if possible to avoid needing to move
 	 * the inode table either now or in the future.
 	 */
-	if ((fs->super->s_feature_compat & 
+	if ((fs->super->s_feature_compat &
 	     EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
 	    (old_fs->desc_blocks != fs->desc_blocks)) {
 		int new;
 
-		new = ((int) fs->super->s_reserved_gdt_blocks) + 
+		new = ((int) fs->super->s_reserved_gdt_blocks) +
 			(old_fs->desc_blocks - fs->desc_blocks);
 		if (new < 0)
 			new = 0;
 		if (new > (int) fs->blocksize/4)
 			new = fs->blocksize/4;
 		fs->super->s_reserved_gdt_blocks = new;
-		if (new == 0)
-			fs->super->s_feature_compat &= 
-				~EXT2_FEATURE_COMPAT_RESIZE_INODE;
 	}
 
 	/*
-	 * If we are shrinking the number block groups, we're done and
-	 * can exit now.
+	 * If we are shrinking the number of block groups, we're done
+	 * and can exit now.
 	 */
 	if (old_fs->group_desc_count > fs->group_desc_count) {
+		/*
+		 * Check the block groups that we are chopping off
+		 * and free any blocks associated with their metadata
+		 */
+		for (i = fs->group_desc_count;
+		     i < old_fs->group_desc_count; i++) {
+			free_gdp_blocks(fs, reserve_blocks,
+					&old_fs->group_desc[i]);
+		}
 		retval = 0;
 		goto errout;
 	}
@@ -339,7 +462,8 @@
 		numblocks = fs->super->s_blocks_per_group;
 	i = old_fs->group_desc_count - 1;
 	fs->group_desc[i].bg_free_blocks_count += (numblocks-old_numblocks);
-		
+	ext2fs_group_desc_csum_set(fs, i);
+
 	/*
 	 * If the number of block groups is staying the same, we're
 	 * done and can exit now.  (If the number block groups is
@@ -356,12 +480,14 @@
 	group_block = fs->super->s_first_data_block +
 		old_fs->group_desc_count * fs->super->s_blocks_per_group;
 
+	csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
 	adj = old_fs->group_desc_count;
 	max_group = fs->group_desc_count - adj;
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
 		old_desc_blocks = fs->super->s_first_meta_bg;
 	else
-		old_desc_blocks = fs->desc_blocks + 
+		old_desc_blocks = fs->desc_blocks +
 			fs->super->s_reserved_gdt_blocks;
 	for (i = old_fs->group_desc_count;
 	     i < fs->group_desc_count; i++) {
@@ -369,30 +495,37 @@
 		       sizeof(struct ext2_group_desc));
 		adjblocks = 0;
 
+		fs->group_desc[i].bg_flags = 0;
+		if (csum_flag)
+			fs->group_desc[i].bg_flags |= EXT2_BG_INODE_UNINIT |
+				EXT2_BG_INODE_ZEROED;
 		if (i == fs->group_desc_count-1) {
 			numblocks = (fs->super->s_blocks_count -
 				     fs->super->s_first_data_block) %
 					     fs->super->s_blocks_per_group;
 			if (!numblocks)
 				numblocks = fs->super->s_blocks_per_group;
-		} else
+		} else {
 			numblocks = fs->super->s_blocks_per_group;
+			if (csum_flag)
+				fs->group_desc[i].bg_flags |=
+					EXT2_BG_BLOCK_UNINIT;
+		}
 
 		has_super = ext2fs_bg_has_super(fs, i);
 		if (has_super) {
-			ext2fs_mark_block_bitmap(fs->block_map, group_block);
+			ext2fs_block_alloc_stats(fs, group_block, +1);
 			adjblocks++;
 		}
-		meta_bg_size = (fs->blocksize /
-				sizeof (struct ext2_group_desc));
+		meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
 		meta_bg = i / meta_bg_size;
 		if (!(fs->super->s_feature_incompat &
 		      EXT2_FEATURE_INCOMPAT_META_BG) ||
 		    (meta_bg < fs->super->s_first_meta_bg)) {
 			if (has_super) {
 				for (j=0; j < old_desc_blocks; j++)
-					ext2fs_mark_block_bitmap(fs->block_map,
-							 group_block + 1 + j);
+					ext2fs_block_alloc_stats(fs,
+						 group_block + 1 + j, +1);
 				adjblocks += old_desc_blocks;
 			}
 		} else {
@@ -401,12 +534,12 @@
 			if (((i % meta_bg_size) == 0) ||
 			    ((i % meta_bg_size) == 1) ||
 			    ((i % meta_bg_size) == (meta_bg_size-1)))
-				ext2fs_mark_block_bitmap(fs->block_map,
-						 group_block + has_super);
+				ext2fs_block_alloc_stats(fs,
+						 group_block + has_super, +1);
 		}
-		
+
 		adjblocks += 2 + fs->inode_blocks_per_group;
-		
+
 		numblocks -= adjblocks;
 		fs->super->s_free_blocks_count -= adjblocks;
 		fs->super->s_free_inodes_count +=
@@ -415,6 +548,7 @@
 		fs->group_desc[i].bg_free_inodes_count =
 			fs->super->s_inodes_per_group;
 		fs->group_desc[i].bg_used_dirs_count = 0;
+		ext2fs_group_desc_csum_set(fs, i);
 
 		retval = ext2fs_allocate_group_table(fs, i, 0);
 		if (retval) goto errout;
@@ -439,13 +573,18 @@
 	blk_t		group_block;
 	unsigned long	i;
 	unsigned long	max_group;
-	
+
 	fs = rfs->new_fs;
 	ext2fs_mark_super_dirty(fs);
 	ext2fs_mark_bb_dirty(fs);
 	ext2fs_mark_ib_dirty(fs);
 
-	retval = adjust_fs_info(fs, rfs->old_fs, new_size);
+	retval = ext2fs_allocate_block_bitmap(fs, _("reserved blocks"),
+					      &rfs->reserve_blocks);
+	if (retval)
+		return retval;
+
+	retval = adjust_fs_info(fs, rfs->old_fs, rfs->reserve_blocks, new_size);
 	if (retval)
 		goto errout;
 
@@ -550,15 +689,15 @@
 	unsigned long		meta_bg_size;
 	unsigned int		old_desc_blocks;
 
-	meta_bg_size = (fs->blocksize / sizeof (struct ext2_group_desc));
+	meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
 		old_desc_blocks = fs->super->s_first_meta_bg;
 	else
-		old_desc_blocks = fs->desc_blocks + 
+		old_desc_blocks = fs->desc_blocks +
 			fs->super->s_reserved_gdt_blocks;
 	for (i = 0; i < fs->group_desc_count; i++) {
 		ext2fs_reserve_super_and_bgd(fs, i, bmap);
-	
+
 		/*
 		 * Mark the blocks used for the inode table
 		 */
@@ -566,15 +705,15 @@
 		     j < (unsigned int) fs->inode_blocks_per_group;
 		     j++, b++)
 			ext2fs_mark_block_bitmap(bmap, b);
-			    
+
 		/*
-		 * Mark block used for the block bitmap 
+		 * Mark block used for the block bitmap
 		 */
 		ext2fs_mark_block_bitmap(bmap,
 					 fs->group_desc[i].bg_block_bitmap);
 
 		/*
-		 * Mark block used for the inode bitmap 
+		 * Mark block used for the inode bitmap
 		 */
 		ext2fs_mark_block_bitmap(bmap,
 					 fs->group_desc[i].bg_inode_bitmap);
@@ -592,9 +731,9 @@
 			      int group, blk_t blk)
 {
 	ext2_filsys 	fs = rfs->new_fs;
-	
+
 	ext2fs_mark_block_bitmap(rfs->reserve_blocks, blk);
-	ext2fs_mark_block_bitmap(fs->block_map, blk);
+	ext2fs_block_alloc_stats(fs, blk, +1);
 
 	/*
 	 * Check to see if we overlap with the inode or block bitmap,
@@ -610,6 +749,14 @@
 	} else if (IS_INODE_TB(fs, group, blk)) {
 		FS_INODE_TB(fs, group) = 0;
 		rfs->needed_blocks++;
+	} else if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					      EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
+		   (fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT)) {
+		/*
+		 * If the block bitmap is uninitialized, which means
+		 * nothing other than standard metadata in use.
+		 */
+		return;
 	} else if (ext2fs_test_block_bitmap(rfs->old_fs->block_map, blk) &&
 		   !ext2fs_test_block_bitmap(meta_bmap, blk)) {
 		ext2fs_mark_block_bitmap(rfs->move_blocks, blk);
@@ -626,46 +773,54 @@
 static errcode_t blocks_to_move(ext2_resize_t rfs)
 {
 	int		j, has_super;
-	dgrp_t		i, max_groups;
+	dgrp_t		i, max_groups, g;
 	blk_t		blk, group_blk;
 	unsigned long	old_blocks, new_blocks;
 	unsigned int	meta_bg, meta_bg_size;
 	errcode_t	retval;
 	ext2_filsys 	fs, old_fs;
 	ext2fs_block_bitmap	meta_bmap;
+	__u32		save_incompat_flag;
 
 	fs = rfs->new_fs;
 	old_fs = rfs->old_fs;
 	if (old_fs->super->s_blocks_count > fs->super->s_blocks_count)
 		fs = rfs->old_fs;
-	
-	retval = ext2fs_allocate_block_bitmap(fs, _("reserved blocks"),
-					      &rfs->reserve_blocks);
-	if (retval)
-		return retval;
 
 	retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"),
 					      &rfs->move_blocks);
 	if (retval)
 		return retval;
 
-	retval = ext2fs_allocate_block_bitmap(fs, _("meta-data blocks"), 
+	retval = ext2fs_allocate_block_bitmap(fs, _("meta-data blocks"),
 					      &meta_bmap);
 	if (retval)
 		return retval;
-	
+
 	retval = mark_table_blocks(old_fs, meta_bmap);
 	if (retval)
 		return retval;
 
 	fs = rfs->new_fs;
-	
+
 	/*
 	 * If we're shrinking the filesystem, we need to move all of
 	 * the blocks that don't fit any more
 	 */
 	for (blk = fs->super->s_blocks_count;
 	     blk < old_fs->super->s_blocks_count; blk++) {
+		g = ext2fs_group_of_blk(fs, blk);
+		if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+					       EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
+		    (old_fs->group_desc[g].bg_flags & EXT2_BG_BLOCK_UNINIT)) {
+			/*
+			 * The block bitmap is uninitialized, so skip
+			 * to the next block group.
+			 */
+			blk = ((g+1) * fs->super->s_blocks_per_group) +
+				fs->super->s_first_data_block - 1;
+			continue;
+		}
 		if (ext2fs_test_block_bitmap(old_fs->block_map, blk) &&
 		    !ext2fs_test_block_bitmap(meta_bmap, blk)) {
 			ext2fs_mark_block_bitmap(rfs->move_blocks, blk);
@@ -673,7 +828,7 @@
 		}
 		ext2fs_mark_block_bitmap(rfs->reserve_blocks, blk);
 	}
-	
+
 	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) {
 		old_blocks = old_fs->super->s_first_meta_bg;
 		new_blocks = fs->super->s_first_meta_bg;
@@ -681,7 +836,7 @@
 		old_blocks = old_fs->desc_blocks + old_fs->super->s_reserved_gdt_blocks;
 		new_blocks = fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
 	}
-	
+
 	if (old_blocks == new_blocks) {
 		retval = 0;
 		goto errout;
@@ -704,8 +859,7 @@
 			}
 			for (blk = group_blk+1+new_blocks;
 			     blk < group_blk+1+old_blocks; blk++) {
-				ext2fs_unmark_block_bitmap(fs->block_map,
-							   blk);
+				ext2fs_block_alloc_stats(fs, blk, -1);
 				rfs->needed_blocks--;
 			}
 			group_blk += fs->super->s_blocks_per_group;
@@ -715,9 +869,9 @@
 	}
 	/*
 	 * If we're increasing the number of descriptor blocks, life
-	 * gets interesting....  
+	 * gets interesting....
 	 */
-	meta_bg_size = (fs->blocksize / sizeof (struct ext2_group_desc));
+	meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
 	for (i = 0; i < max_groups; i++) {
 		has_super = ext2fs_bg_has_super(fs, i);
 		if (has_super)
@@ -730,7 +884,7 @@
 			if (has_super) {
 				for (blk = group_blk+1;
 				     blk < group_blk + 1 + new_blocks; blk++)
-					mark_fs_metablock(rfs, meta_bmap, 
+					mark_fs_metablock(rfs, meta_bmap,
 							  i, blk);
 			}
 		} else {
@@ -766,9 +920,29 @@
 
 		/*
 		 * Allocate the missing data structures
+		 *
+		 * XXX We have a problem with FLEX_BG and off-line
+		 * resizing where we are growing the size of the
+		 * filesystem.  ext2fs_allocate_group_table() will try
+		 * to reserve the inode table in the desired flex_bg
+		 * location.  However, passing rfs->reserve_blocks
+		 * doesn't work since it only has reserved the blocks
+		 * that will be used in the new block group -- and
+		 * with flex_bg, we can and will allocate the tables
+		 * outside of the block group.  And we can't pass in
+		 * the fs->block_map because it doesn't handle
+		 * overlapping inode table movements right.  So for
+		 * now, we temporarily disable flex_bg to force
+		 * ext2fs_allocate_group_tables() to allocate the bg
+		 * metadata in side the block group, and the restore
+		 * it afterwards.  Ugly, until we can fix this up
+		 * right later.
 		 */
+		save_incompat_flag = fs->super->s_feature_incompat;
+		fs->super->s_feature_incompat &= ~EXT4_FEATURE_INCOMPAT_FLEX_BG;
 		retval = ext2fs_allocate_group_table(fs, i,
 						     rfs->reserve_blocks);
+		fs->super->s_feature_incompat = save_incompat_flag;
 		if (retval)
 			goto errout;
 
@@ -778,7 +952,7 @@
 		 */
 		if (FS_BLOCK_BM(old_fs, i) !=
 		    (blk = FS_BLOCK_BM(fs, i))) {
-			ext2fs_mark_block_bitmap(fs->block_map, blk);
+			ext2fs_block_alloc_stats(fs, blk, +1);
 			if (ext2fs_test_block_bitmap(old_fs->block_map, blk) &&
 			    !ext2fs_test_block_bitmap(meta_bmap, blk))
 				ext2fs_mark_block_bitmap(rfs->move_blocks,
@@ -786,7 +960,7 @@
 		}
 		if (FS_INODE_BM(old_fs, i) !=
 		    (blk = FS_INODE_BM(fs, i))) {
-			ext2fs_mark_block_bitmap(fs->block_map, blk);
+			ext2fs_block_alloc_stats(fs, blk, +1);
 			if (ext2fs_test_block_bitmap(old_fs->block_map, blk) &&
 			    !ext2fs_test_block_bitmap(meta_bmap, blk))
 				ext2fs_mark_block_bitmap(rfs->move_blocks,
@@ -807,18 +981,18 @@
 
 		/*
 		 * Mark the new inode table as in use in the new block
-		 * allocation bitmap, and move any blocks that might 
+		 * allocation bitmap, and move any blocks that might
 		 * be necessary.
 		 */
 		for (blk = fs->group_desc[i].bg_inode_table, j=0;
 		     j < fs->inode_blocks_per_group ; j++, blk++) {
-			ext2fs_mark_block_bitmap(fs->block_map, blk);
+			ext2fs_block_alloc_stats(fs, blk, +1);
 			if (ext2fs_test_block_bitmap(old_fs->block_map, blk) &&
 			    !ext2fs_test_block_bitmap(meta_bmap, blk))
 				ext2fs_mark_block_bitmap(rfs->move_blocks,
 							 blk);
 		}
-		
+
 		/*
 		 * Make sure the old inode table is reserved in the
 		 * block reservation bitmap.
@@ -826,7 +1000,7 @@
 		for (blk = rfs->old_fs->group_desc[i].bg_inode_table, j=0;
 		     j < fs->inode_blocks_per_group ; j++, blk++)
 			ext2fs_mark_block_bitmap(rfs->reserve_blocks, blk);
-		
+
 	next_group:
 		group_blk += rfs->new_fs->super->s_blocks_per_group;
 	}
@@ -835,7 +1009,7 @@
 errout:
 	if (meta_bmap)
 		ext2fs_free_block_bitmap(meta_bmap);
-	
+
 	return retval;
 }
 
@@ -871,7 +1045,7 @@
 static blk_t get_new_block(ext2_resize_t rfs)
 {
 	ext2_filsys	fs = rfs->new_fs;
-	
+
 	while (1) {
 		if (rfs->new_blk >= fs->super->s_blocks_count) {
 			if (rfs->alloc_state == DESPERATION)
@@ -881,7 +1055,7 @@
 			if (rfs->flags & RESIZE_DEBUG_BMOVE)
 				printf("Going into desperation mode "
 				       "for block allocations\n");
-#endif			
+#endif
 			rfs->alloc_state = DESPERATION;
 			rfs->new_blk = fs->super->s_first_data_block;
 			continue;
@@ -900,6 +1074,27 @@
 	}
 }
 
+static errcode_t resize2fs_get_alloc_block(ext2_filsys fs, blk64_t goal,
+					   blk64_t *ret)
+{
+	ext2_resize_t rfs = (ext2_resize_t) fs->priv_data;
+	blk_t blk;
+
+	blk = get_new_block(rfs);
+	if (!blk)
+		return ENOSPC;
+
+#ifdef RESIZE2FS_DEBUG
+	if (rfs->flags & 0xF)
+		printf("get_alloc_block allocating %u\n", blk);
+#endif
+
+	ext2fs_mark_block_bitmap(rfs->old_fs->block_map, blk);
+	ext2fs_mark_block_bitmap(rfs->new_fs->block_map, blk);
+	*ret = (blk64_t) blk;
+	return 0;
+}
+
 static errcode_t block_mover(ext2_resize_t rfs)
 {
 	blk_t			blk, old_blk, new_blk;
@@ -910,7 +1105,10 @@
 	int			to_move, moved;
 	ext2_badblocks_list	badblock_list = 0;
 	int			bb_modified = 0;
-	
+
+	fs->get_alloc_block = resize2fs_get_alloc_block;
+	old_fs->get_alloc_block = resize2fs_get_alloc_block;
+
 	retval = ext2fs_read_bb_inode(old_fs, &badblock_list);
 	if (retval)
 		return retval;
@@ -950,11 +1148,11 @@
 			retval = ENOSPC;
 			goto errout;
 		}
-		ext2fs_mark_block_bitmap(fs->block_map, new_blk);
+		ext2fs_block_alloc_stats(fs, new_blk, +1);
 		ext2fs_add_extent_entry(rfs->bmap, blk, new_blk);
 		to_move++;
 	}
-	
+
 	if (to_move == 0) {
 		if (rfs->bmap) {
 			ext2fs_free_extent_table(rfs->bmap);
@@ -1041,7 +1239,7 @@
 };
 
 static int process_block(ext2_filsys fs, blk_t	*block_nr,
-			 e2_blkcnt_t blockcnt, 
+			 e2_blkcnt_t blockcnt,
 			 blk_t ref_block EXT2FS_ATTR((unused)),
 			 int ref_offset EXT2FS_ATTR((unused)), void *priv_data)
 {
@@ -1060,7 +1258,7 @@
 			pb->changed = 1;
 #ifdef RESIZE2FS_DEBUG
 			if (pb->rfs->flags & RESIZE_DEBUG_BMOVE)
-				printf("ino=%u, blockcnt=%lld, %u->%u\n", 
+				printf("ino=%u, blockcnt=%lld, %u->%u\n",
 				       pb->ino, blockcnt, block, new_block);
 #endif
 			block = new_block;
@@ -1080,7 +1278,7 @@
 /*
  * Progress callback
  */
-static errcode_t progress_callback(ext2_filsys fs, 
+static errcode_t progress_callback(ext2_filsys fs,
 				   ext2_inode_scan scan EXT2FS_ATTR((unused)),
 				   dgrp_t group, void * priv_data)
 {
@@ -1101,7 +1299,7 @@
 		if (retval)
 			return retval;
 	}
-	
+
 	return 0;
 }
 
@@ -1112,12 +1310,11 @@
 	struct ext2_inode 	*inode = NULL;
 	ext2_inode_scan 	scan = NULL;
 	errcode_t		retval;
-	int			group;
 	char			*block_buf = 0;
 	ext2_ino_t		start_to_move;
 	blk_t			orig_size, new_block;
 	int			inode_size;
-	
+
 	if ((rfs->old_fs->group_desc_count <=
 	     rfs->new_fs->group_desc_count) &&
 	    !rfs->bmap)
@@ -1144,7 +1341,7 @@
 
 	start_to_move = (rfs->new_fs->group_desc_count *
 			 rfs->new_fs->super->s_inodes_per_group);
-	
+
 	if (rfs->progress) {
 		retval = (rfs->progress)(rfs, E2_RSZ_INODE_SCAN_PASS,
 					 0, rfs->old_fs->group_desc_count);
@@ -1179,16 +1376,16 @@
 		pb.changed = 0;
 
 		if (inode->i_file_acl && rfs->bmap) {
-			new_block = ext2fs_extent_translate(rfs->bmap, 
+			new_block = ext2fs_extent_translate(rfs->bmap,
 							    inode->i_file_acl);
 			if (new_block) {
 				inode->i_file_acl = new_block;
-				retval = ext2fs_write_inode_full(rfs->old_fs, 
+				retval = ext2fs_write_inode_full(rfs->old_fs,
 							    ino, inode, inode_size);
 				if (retval) goto errout;
 			}
 		}
-		
+
 		if (ext2fs_inode_has_valid_blocks(inode) &&
 		    (rfs->bmap || pb.is_dir)) {
 			pb.ino = ino;
@@ -1209,17 +1406,12 @@
 		/*
 		 * Find a new inode
 		 */
-		while (1) { 
-			if (!ext2fs_test_inode_bitmap(rfs->new_fs->inode_map, 
-						      new_inode))
-				break;
-			new_inode++;
-			if (new_inode > rfs->new_fs->super->s_inodes_count) {
-				retval = ENOSPC;
-				goto errout;
-			}
-		}
-		ext2fs_mark_inode_bitmap(rfs->new_fs->inode_map, new_inode);
+		retval = ext2fs_new_inode(rfs->new_fs, 0, 0, 0, &new_inode);
+		if (retval)
+			goto errout;
+
+		ext2fs_inode_alloc_stats2(rfs->new_fs, new_inode, +1,
+					  pb.is_dir);
 		if (pb.changed) {
 			/* Get the new version of the inode */
 			retval = ext2fs_read_inode_full(rfs->old_fs, ino,
@@ -1231,10 +1423,6 @@
 						inode, inode_size);
 		if (retval) goto errout;
 
-		group = (new_inode-1) / EXT2_INODES_PER_GROUP(rfs->new_fs->super);
-		if (LINUX_S_ISDIR(inode->i_mode))
-			rfs->new_fs->group_desc[group].bg_used_dirs_count++;
-		
 #ifdef RESIZE2FS_DEBUG
 		if (rfs->flags & RESIZE_DEBUG_INODEMAP)
 			printf("Inode moved %u->%u\n", ino, new_inode);
@@ -1258,8 +1446,7 @@
 		ext2fs_close_inode_scan(scan);
 	if (block_buf)
 		ext2fs_free_mem(&block_buf);
-	if (inode)
-		free(inode);
+	free(inode);
 	return retval;
 }
 
@@ -1273,15 +1460,15 @@
 struct istruct {
 	ext2_resize_t rfs;
 	errcode_t	err;
-	unsigned long	max_dirs;
-	int		num;
+	unsigned int	max_dirs;
+	unsigned int	num;
 };
 
-static int check_and_change_inodes(ext2_ino_t dir, 
+static int check_and_change_inodes(ext2_ino_t dir,
 				   int entry EXT2FS_ATTR((unused)),
 				   struct ext2_dir_entry *dirent, int offset,
 				   int	blocksize EXT2FS_ATTR((unused)),
-				   char *buf EXT2FS_ATTR((unused)), 
+				   char *buf EXT2FS_ATTR((unused)),
 				   void *priv_data)
 {
 	struct istruct *is = (struct istruct *) priv_data;
@@ -1330,10 +1517,10 @@
 {
 	errcode_t		retval;
 	struct istruct 		is;
-	
+
 	if (!rfs->imap)
 		return 0;
-       
+
 	/*
 	 * Now, we iterate over all of the directories to update the
 	 * inode references
@@ -1349,7 +1536,7 @@
 		if (retval)
 			goto errout;
 	}
-	
+
 	retval = ext2fs_dblist_dir_iterate(rfs->old_fs->dblist,
 					   DIRENT_FLAG_INCLUDE_EMPTY, 0,
 					   check_and_change_inodes, &is);
@@ -1360,6 +1547,10 @@
 		goto errout;
 	}
 
+	if (rfs->progress && (is.num < is.max_dirs))
+		(rfs->progress)(rfs, E2_RSZ_INODE_REF_UPD_PASS,
+				is.max_dirs, is.max_dirs);
+
 errout:
 	ext2fs_free_extent_table(rfs->imap);
 	rfs->imap = 0;
@@ -1433,20 +1624,20 @@
 		old_blk = rfs->old_fs->group_desc[i].bg_inode_table;
 		new_blk = fs->group_desc[i].bg_inode_table;
 		diff = new_blk - old_blk;
-		
+
 #ifdef RESIZE2FS_DEBUG
-		if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) 
+		if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE)
 			printf("Itable move group %d block %u->%u (diff %d)\n",
 			       i, old_blk, new_blk, diff);
 #endif
-		
+
 		if (!diff)
 			continue;
 
 		retval = io_channel_read_blk(fs->io, old_blk,
 					     fs->inode_blocks_per_group,
 					     rfs->itable_buf);
-		if (retval) 
+		if (retval)
 			goto errout;
 		/*
 		 * The end of the inode table segment often contains
@@ -1460,7 +1651,7 @@
 				break;
 		n = n >> EXT2_BLOCK_SIZE_BITS(fs->super);
 #ifdef RESIZE2FS_DEBUG
-		if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) 
+		if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE)
 			printf("%d blocks of zeros...\n", n);
 #endif
 		num = fs->inode_blocks_per_group;
@@ -1486,9 +1677,10 @@
 
 		for (blk = rfs->old_fs->group_desc[i].bg_inode_table, j=0;
 		     j < fs->inode_blocks_per_group ; j++, blk++)
-			ext2fs_unmark_block_bitmap(fs->block_map, blk);
+			ext2fs_block_alloc_stats(fs, blk, -1);
 
 		rfs->old_fs->group_desc[i].bg_inode_table = new_blk;
+		ext2fs_group_desc_csum_set(rfs->old_fs, i);
 		ext2fs_mark_super_dirty(rfs->old_fs);
 		ext2fs_flush(rfs->old_fs);
 
@@ -1502,25 +1694,26 @@
 	mark_table_blocks(fs, fs->block_map);
 	ext2fs_flush(fs);
 #ifdef RESIZE2FS_DEBUG
-	if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) 
+	if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE)
 		printf("Inode table move finished.\n");
 #endif
 	return 0;
-	
+
 errout:
 	return retval;
 }
 
 /*
- * Fix the resize inode 
+ * Fix the resize inode
  */
 static errcode_t fix_resize_inode(ext2_filsys fs)
 {
 	struct ext2_inode	inode;
 	errcode_t		retval;
 	char *			block_buf;
+	blk_t			blk;
 
-	if (!(fs->super->s_feature_compat & 
+	if (!(fs->super->s_feature_compat &
 	      EXT2_FEATURE_COMPAT_RESIZE_INODE))
 		return 0;
 
@@ -1530,18 +1723,32 @@
 	retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
 	if (retval) goto errout;
 
-	inode.i_blocks = fs->blocksize/512;
+	if (fs->super->s_reserved_gdt_blocks == 0) {
+		fs->super->s_feature_compat &=
+			~EXT2_FEATURE_COMPAT_RESIZE_INODE;
+		ext2fs_mark_super_dirty(fs);
+
+		if ((blk = inode.i_block[EXT2_DIND_BLOCK]) != 0)
+			ext2fs_block_alloc_stats(fs, blk, -1);
+
+		memset(&inode, 0, sizeof(inode));
+
+		retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
+		goto errout;
+	}
+
+	ext2fs_iblk_set(fs, &inode, 1);
 
 	retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
 	if (retval) goto errout;
 
 	if (!inode.i_block[EXT2_DIND_BLOCK]) {
-		/* 
+		/*
 		 * Avoid zeroing out block #0; that's rude.  This
 		 * should never happen anyway since the filesystem
 		 * should be fsck'ed and we assume it is consistent.
 		 */
-		fprintf(stderr, 
+		fprintf(stderr,
 			_("Should never happen: resize inode corrupt!\n"));
 		exit(1);
 	}
@@ -1551,7 +1758,7 @@
 	retval = io_channel_write_blk(fs->io, inode.i_block[EXT2_DIND_BLOCK],
 				      1, block_buf);
 	if (retval) goto errout;
-	
+
 	retval = ext2fs_create_resize_inode(fs);
 	if (retval)
 		goto errout;
@@ -1573,27 +1780,64 @@
 	unsigned int	count = 0;
 	int		total_free = 0;
 	int		group_free = 0;
+	int		uninit = 0;
+	blk_t		super_blk, old_desc_blk, new_desc_blk;
+	int		old_desc_blocks;
 
 	/*
 	 * First calculate the block statistics
 	 */
+	uninit = fs->group_desc[group].bg_flags & EXT2_BG_BLOCK_UNINIT;
+	ext2fs_super_and_bgd_loc(fs, group, &super_blk, &old_desc_blk,
+				 &new_desc_blk, 0);
+	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
+		old_desc_blocks = fs->super->s_first_meta_bg;
+	else
+		old_desc_blocks = fs->desc_blocks +
+			fs->super->s_reserved_gdt_blocks;
 	for (blk = fs->super->s_first_data_block;
 	     blk < fs->super->s_blocks_count; blk++) {
-		if (!ext2fs_fast_test_block_bitmap(fs->block_map, blk)) {
+		if ((uninit &&
+		     !((blk == super_blk) ||
+		       ((old_desc_blk && old_desc_blocks &&
+			 (blk >= old_desc_blk) &&
+			 (blk < old_desc_blk + old_desc_blocks))) ||
+		       ((new_desc_blk && (blk == new_desc_blk))) ||
+		       (blk == fs->group_desc[group].bg_block_bitmap) ||
+		       (blk == fs->group_desc[group].bg_inode_bitmap) ||
+		       ((blk >= fs->group_desc[group].bg_inode_table &&
+			 (blk < fs->group_desc[group].bg_inode_table
+			  + fs->inode_blocks_per_group))))) ||
+		    (!ext2fs_fast_test_block_bitmap(fs->block_map, blk))) {
 			group_free++;
 			total_free++;
 		}
 		count++;
 		if ((count == fs->super->s_blocks_per_group) ||
 		    (blk == fs->super->s_blocks_count-1)) {
-			fs->group_desc[group++].bg_free_blocks_count =
+			fs->group_desc[group].bg_free_blocks_count =
 				group_free;
+			ext2fs_group_desc_csum_set(fs, group);
+			group++;
+			if (group >= fs->group_desc_count)
+				break;
 			count = 0;
 			group_free = 0;
+			uninit = (fs->group_desc[group].bg_flags &
+				  EXT2_BG_BLOCK_UNINIT);
+			ext2fs_super_and_bgd_loc(fs, group, &super_blk,
+						 &old_desc_blk,
+						 &new_desc_blk, 0);
+			if (fs->super->s_feature_incompat &
+			    EXT2_FEATURE_INCOMPAT_META_BG)
+				old_desc_blocks = fs->super->s_first_meta_bg;
+			else
+				old_desc_blocks = fs->desc_blocks +
+					fs->super->s_reserved_gdt_blocks;
 		}
 	}
 	fs->super->s_free_blocks_count = total_free;
-	
+
 	/*
 	 * Next, calculate the inode statistics
 	 */
@@ -1603,21 +1847,232 @@
 	group = 0;
 
 	/* Protect loop from wrap-around if s_inodes_count maxed */
+	uninit = fs->group_desc[group].bg_flags & EXT2_BG_INODE_UNINIT;
 	for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
-		if (!ext2fs_fast_test_inode_bitmap(fs->inode_map, ino)) {
+		if (uninit ||
+		    !ext2fs_fast_test_inode_bitmap(fs->inode_map, ino)) {
 			group_free++;
 			total_free++;
 		}
 		count++;
 		if ((count == fs->super->s_inodes_per_group) ||
 		    (ino == fs->super->s_inodes_count)) {
-			fs->group_desc[group++].bg_free_inodes_count =
+			fs->group_desc[group].bg_free_inodes_count =
 				group_free;
+			ext2fs_group_desc_csum_set(fs, group);
+			group++;
+			if (group >= fs->group_desc_count)
+				break;
 			count = 0;
 			group_free = 0;
+			uninit = (fs->group_desc[group].bg_flags &
+				  EXT2_BG_INODE_UNINIT);
 		}
 	}
 	fs->super->s_free_inodes_count = total_free;
 	ext2fs_mark_super_dirty(fs);
 	return 0;
 }
+
+/*
+ *  Journal may have been relocated; update the backup journal blocks
+ *  in the superblock.
+ */
+static errcode_t fix_sb_journal_backup(ext2_filsys fs)
+{
+	errcode_t	  retval;
+	struct ext2_inode inode;
+
+	if (!(fs->super->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
+		return 0;
+
+	/* External journal? Nothing to do. */
+	if (fs->super->s_journal_dev && !fs->super->s_journal_inum)
+		return 0;
+
+	retval = ext2fs_read_inode(fs, fs->super->s_journal_inum, &inode);
+	if (retval)
+		return retval;
+	memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4);
+	fs->super->s_jnl_blocks[16] = inode.i_size;
+	fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
+	ext2fs_mark_super_dirty(fs);
+	return 0;
+}
+
+/*
+ * calcluate the minimum number of blocks the given fs can be resized to
+ */
+blk_t calculate_minimum_resize_size(ext2_filsys fs)
+{
+	blk_t inode_count, blks_needed, groups, data_blocks;
+	blk_t grp, data_needed, last_start;
+	int overhead = 0, num_of_superblocks = 0;
+	int extra_groups = 0;
+	int flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+
+	/*
+	 * first figure out how many group descriptors we need to
+	 * handle the number of inodes we have
+	 */
+	inode_count = fs->super->s_inodes_count -
+		fs->super->s_free_inodes_count;
+	blks_needed = ext2fs_div_ceil(inode_count,
+				      fs->super->s_inodes_per_group) *
+		EXT2_BLOCKS_PER_GROUP(fs->super);
+	groups = ext2fs_div_ceil(blks_needed,
+				 EXT2_BLOCKS_PER_GROUP(fs->super));
+
+	/*
+	 * we need to figure out how many backup superblocks we have so we can
+	 * account for that in the metadata
+	 */
+	for (grp = 0; grp < fs->group_desc_count; grp++) {
+		if (ext2fs_bg_has_super(fs, grp))
+			num_of_superblocks++;
+	}
+
+	/* calculate how many blocks are needed for data */
+	data_needed = fs->super->s_blocks_count -
+		fs->super->s_free_blocks_count;
+	data_needed -= SUPER_OVERHEAD(fs) * num_of_superblocks;
+	data_needed -= META_OVERHEAD(fs) * fs->group_desc_count;
+
+	if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+		/*
+		 * For ext4 we need to allow for up to a flex_bg worth
+		 * of inode tables of slack space so the resize
+		 * operation can be guaranteed to finish.
+		 */
+		extra_groups = flexbg_size - (groups & (flexbg_size - 1));
+		data_needed += META_OVERHEAD(fs) * extra_groups;
+		extra_groups = groups % flexbg_size;
+	}
+
+	/*
+	 * figure out how many data blocks we have given the number of groups
+	 * we need for our inodes
+	 */
+	data_blocks = groups * EXT2_BLOCKS_PER_GROUP(fs->super);
+	last_start = 0;
+	for (grp = 0; grp < groups; grp++) {
+		overhead = META_OVERHEAD(fs);
+
+		if (ext2fs_bg_has_super(fs, grp))
+			overhead += SUPER_OVERHEAD(fs);
+
+		/*
+		 * we want to keep track of how much data we can store in
+		 * the groups leading up to the last group so we can determine
+		 * how big the last group needs to be
+		 */
+		if (grp != (groups - 1))
+			last_start += EXT2_BLOCKS_PER_GROUP(fs->super) -
+				overhead;
+
+		data_blocks -= overhead;
+	}
+
+	/*
+	 * if we need more group descriptors in order to accomodate our data
+	 * then we need to add them here
+	 */
+	while (data_needed > data_blocks) {
+		blk_t remainder = data_needed - data_blocks;
+		blk_t extra_grps;
+
+		/* figure out how many more groups we need for the data */
+		extra_grps = ext2fs_div_ceil(remainder,
+					     EXT2_BLOCKS_PER_GROUP(fs->super));
+
+		data_blocks += extra_grps * EXT2_BLOCKS_PER_GROUP(fs->super);
+
+		/* ok we have to account for the last group */
+		overhead = META_OVERHEAD(fs);
+		if (ext2fs_bg_has_super(fs, groups-1))
+			overhead += SUPER_OVERHEAD(fs);
+		last_start += EXT2_BLOCKS_PER_GROUP(fs->super) - overhead;
+
+		for (grp = groups; grp < groups+extra_grps; grp++) {
+			overhead = META_OVERHEAD(fs);
+			if (ext2fs_bg_has_super(fs, grp))
+				overhead += SUPER_OVERHEAD(fs);
+
+			/*
+			 * again, we need to see how much data we cram into
+			 * all of the groups leading up to the last group
+			 */
+			if (grp != (groups + extra_grps - 1))
+				last_start += EXT2_BLOCKS_PER_GROUP(fs->super)
+					- overhead;
+
+			data_blocks -= overhead;
+		}
+
+		groups += extra_grps;
+		extra_groups += extra_grps;
+		if (fs->super->s_feature_incompat
+			& EXT4_FEATURE_INCOMPAT_FLEX_BG
+		    && extra_groups > flexbg_size) {
+			/*
+			 * For ext4 we need to allow for up to a flex_bg worth
+			 * of inode tables of slack space so the resize
+			 * operation can be guaranteed to finish.
+			 */
+			extra_groups = flexbg_size -
+						(groups & (flexbg_size - 1));
+			data_needed += META_OVERHEAD(fs) * extra_groups;
+			extra_groups = groups % flexbg_size;
+		}
+	}
+
+	/* now for the fun voodoo */
+	overhead = META_OVERHEAD(fs);
+
+	/*
+	 * if this is the case then the last group is going to have data in it
+	 * so we need to adjust the size of the last group accordingly
+	 */
+	if (last_start < data_needed) {
+		blk_t remainder = data_needed - last_start;
+
+		/*
+		 * 50 is a magic number that mkfs/resize uses to see if its
+		 * even worth making/resizing the fs.  basically you need to
+		 * have at least 50 blocks in addition to the blocks needed
+		 * for the metadata in the last group
+		 */
+		if (remainder > 50)
+			overhead += remainder;
+		else
+			overhead += 50;
+	} else
+		overhead += 50;
+
+	if (ext2fs_bg_has_super(fs, groups-1))
+		overhead += SUPER_OVERHEAD(fs);
+
+	/*
+	 * since our last group doesn't have to be BLOCKS_PER_GROUP large, we
+	 * only do groups-1, and then add the number of blocks needed to
+	 * handle the group descriptor metadata+data that we need
+	 */
+	blks_needed = (groups-1) * EXT2_BLOCKS_PER_GROUP(fs->super);
+	blks_needed += overhead;
+
+	/*
+	 * If at this point we've already added up more "needed" than
+	 * the current size, just return current size as minimum.
+	 */
+	if (blks_needed >= fs->super->s_blocks_count)
+		return fs->super->s_blocks_count;
+	/*
+	 * We need to reserve a few extra blocks if extents are
+	 * enabled, in case we need to grow the extent tree.  The more
+	 * we shrink the file system, the more space we need.
+	 */
+	if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS)
+		blks_needed += (fs->super->s_blocks_count - blks_needed)/500;
+
+	return blks_needed;
+}
diff --git a/resize/resize2fs.h b/resize/resize2fs.h
index f87d04e..fab7290 100644
--- a/resize/resize2fs.h
+++ b/resize/resize2fs.h
@@ -5,7 +5,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000 by Theosore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -127,8 +127,10 @@
 					    int pass, unsigned long cur,
 					    unsigned long max));
 
-extern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, 
+extern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
+				ext2fs_block_bitmap reserve_blocks,
 				blk_t new_size);
+extern blk_t calculate_minimum_resize_size(ext2_filsys fs);
 
 
 /* extent.c */
@@ -143,7 +145,7 @@
 				       __u32 *new_loc, int *size);
 
 /* online.c */
-extern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt, 
+extern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
 				  blk_t *new_size, int flags);
 
 /* sim_progress.c */
diff --git a/resize/sim_progress.c b/resize/sim_progress.c
index 400e364..e7dba88 100644
--- a/resize/sim_progress.c
+++ b/resize/sim_progress.c
@@ -5,7 +5,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000 by Theosore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -58,7 +58,7 @@
 	num = level - old_level;
 	if (num == 0)
 		return;
-	
+
 	if (num > 0) {
 		for (i=0; i < num; i++)
 			putc('X', prog->f);
@@ -83,7 +83,7 @@
 	errcode_t		retval;
 
 	retval = ext2fs_get_mem(sizeof(struct ext2_sim_progress), &prog);
-	if (!prog)
+	if (retval)
 		return retval;
 	memset(prog, 0, sizeof(struct ext2_sim_progress));
 
@@ -100,7 +100,7 @@
 	prog->current = 0;
 	prog->shown = 0;
 	prog->f = stdout;
-	
+
 	*ret_prog = prog;
 
 	return ext2fs_progress_display(prog);
diff --git a/resize/test_extent.c b/resize/test_extent.c
index c52d556..887b476 100644
--- a/resize/test_extent.c
+++ b/resize/test_extent.c
@@ -5,7 +5,7 @@
  * 	PowerQuest, Inc.
  *
  * Copyright (C) 1999, 2000 by Theosore Ts'o
- * 
+ *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
@@ -25,7 +25,7 @@
 	errcode_t	retval;
 	ext2_extent	extent = 0;
 	const char	*no_table = "# No extent table\n";
-	
+
 	while (!feof(in)) {
 		if (!fgets(buf, sizeof(buf), in))
 			break;
@@ -55,7 +55,7 @@
 			*cp++ = '\0';
 			arg1 = cp;
 			num1 = strtoul(arg1, 0, 0);
-			
+
 			cp = strchr(cp, ' ');
 		}
 		if (cp) {
@@ -63,7 +63,7 @@
 			arg2 = cp;
 			num2 = strtoul(arg2, 0, 0);
 		}
-		
+
 		if (!strcmp(cmd, "create")) {
 			retval = ext2fs_create_extent_table(&extent, num1);
 			if (retval) {
@@ -77,7 +77,7 @@
 		if (!extent) {
 			fputs(no_table, out);
 			continue;
-		}		
+		}
 		if (!strcmp(cmd, "free")) {
 			ext2fs_free_extent_table(extent);
 			extent = 0;
@@ -105,12 +105,18 @@
 				fprintf(out, "# %u -> %u (%d)\n",
 					num1, num2, size);
 			}
-		} else 
+		} else
 			fputs("# Syntax error\n", out);
 	}
 }
 
-int main(int argc, char **argv)
+#ifdef __GNUC__
+#define ATTR(x) __attribute__(x)
+#else
+#define ATTR(x)
+#endif
+
+int main(int argc ATTR((unused)), char **argv ATTR((unused)))
 {
 	do_test(stdin, stdout);
 	exit(0);
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f9d5d78..3659087 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -13,7 +13,7 @@
 
 all:: @DO_TEST_SUITE@
 
-test_script: test_script.in Makefile
+test_script: test_script.in Makefile mke2fs.conf
 	@echo "Creating test_script..."
 	@echo "#!/bin/sh" > test_script
 @HTREE_CMT@	@echo "HTREE=y" >> test_script
@@ -23,6 +23,9 @@
 	@cat $(srcdir)/test_script.in >> test_script
 	@chmod +x test_script
 
+mke2fs.conf: $(srcdir)/../misc/mke2fs.conf
+	sed -e 's/blocksize = -1/blocksize = 4096/' $(srcdir)/../misc/mke2fs.conf >mke2fs.conf
+
 check:: test_script
 	@echo "Running e2fsprogs test suite..."
 	@echo " "
@@ -63,7 +66,7 @@
 	@echo "If all is well, edit ${TDIR}/name and rename ${TDIR}."
 
 clean::
-	$(RM) -f *~ *.log *.new *.failed *.ok test.img test_script
+	$(RM) -f *~ *.log *.new *.failed *.ok test.img test_script mke2fs.conf
 
 distclean:: clean
 	$(RM) -f Makefile
diff --git a/tests/d_loaddump/expect b/tests/d_loaddump/expect
index 1fc4561..f66e218 100644
--- a/tests/d_loaddump/expect
+++ b/tests/d_loaddump/expect
@@ -10,7 +10,7 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 12/64 files (8.3% non-contiguous), 158/512 blocks
+test_filesys: 12/64 files (0.0% non-contiguous), 158/512 blocks
 Exit status is 0
 debugfs -R ''dump test_data test.verify'' ./test.img
 Exit status is 0
diff --git a/tests/f_bad_disconnected_inode/expect.1 b/tests/f_bad_disconnected_inode/expect.1
index b4851f0..11862f6 100644
--- a/tests/f_bad_disconnected_inode/expect.1
+++ b/tests/f_bad_disconnected_inode/expect.1
@@ -1,4 +1,13 @@
 Pass 1: Checking inodes, blocks, and sizes
+Inode 1 has EXTENTS_FL flag set on filesystem without extents support.
+Clear? yes
+
+Inode 15 has EXTENTS_FL flag set on filesystem without extents support.
+Clear? yes
+
+Inode 16 has EXTENTS_FL flag set on filesystem without extents support.
+Clear? yes
+
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 /lost+found not found.  Create? yes
@@ -18,26 +27,6 @@
 Inode 14 (...) has invalid mode (0154247).
 Clear? yes
 
-i_file_acl for inode 15 (...) is 1143674715, should be zero.
-Clear? yes
-
-Inode 15 (...) has invalid mode (074044).
-Clear? yes
-
-i_file_acl for inode 16 (...) is 2007517039, should be zero.
-Clear? yes
-
-i_faddr for inode 16 (...) is 1003914917, should be zero.
-Clear? yes
-
-i_blocks_hi for inode 16 (...) is 62762, should be zero.
-Clear? yes
-
-Unattached inode 16
-Connect to /lost+found? yes
-
-Inode 16 ref count is 5925, should be 1.  Fix? yes
-
 Pass 5: Checking group summary information
 Block bitmap differences:  -(9--19)
 Fix? yes
@@ -48,19 +37,16 @@
 Free blocks count wrong (79, counted=91).
 Fix? yes
 
-Inode bitmap differences:  +16
-Fix? yes
-
-Free inodes count wrong for group #0 (7, counted=4).
+Free inodes count wrong for group #0 (6, counted=5).
 Fix? yes
 
 Directories count wrong for group #0 (3, counted=2).
 Fix? yes
 
-Free inodes count wrong (7, counted=4).
+Free inodes count wrong (6, counted=5).
 Fix? yes
 
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 12/16 files (0.0% non-contiguous), 9/100 blocks
+test_filesys: 11/16 files (0.0% non-contiguous), 9/100 blocks
 Exit status is 1
diff --git a/tests/f_bad_disconnected_inode/expect.2 b/tests/f_bad_disconnected_inode/expect.2
index 1739210..8dfeb70 100644
--- a/tests/f_bad_disconnected_inode/expect.2
+++ b/tests/f_bad_disconnected_inode/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 12/16 files (0.0% non-contiguous), 9/100 blocks
+test_filesys: 11/16 files (0.0% non-contiguous), 9/100 blocks
 Exit status is 0
diff --git a/tests/f_badbblocks/expect.1 b/tests/f_badbblocks/expect.1
index d64e745..3107a29 100644
--- a/tests/f_badbblocks/expect.1
+++ b/tests/f_badbblocks/expect.1
@@ -8,7 +8,7 @@
 Illegal block #1 (101) in bad block inode.  CLEARED.
 Illegal block #2 (103) in bad block inode.  CLEARED.
 Illegal block #3 (234523) in bad block inode.  CLEARED.
-Illegal block #-1 (200) in bad block inode.  CLEARED.
+Illegal indirect block (200) in bad block inode.  CLEARED.
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
diff --git a/tests/f_baddir/expect.1 b/tests/f_baddir/expect.1
index 52f0d20..3973506 100644
--- a/tests/f_baddir/expect.1
+++ b/tests/f_baddir/expect.1
@@ -19,7 +19,7 @@
 
 Entry 'dot' in /test (14) is a link to '.'  Clear? yes
 
-Directory inode 12, block 0, offset 0: directory corrupted
+Directory inode 12, block #0, offset 0: directory corrupted
 Salvage? yes
 
 Missing '.' in directory inode 12.
diff --git a/tests/f_baddir2/expect.1 b/tests/f_baddir2/expect.1
index 1bfea69..ec6ed32 100644
--- a/tests/f_baddir2/expect.1
+++ b/tests/f_baddir2/expect.1
@@ -1,6 +1,6 @@
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Directory inode 12, block 0, offset 60: directory corrupted
+Directory inode 12, block #0, offset 60: directory corrupted
 Salvage? yes
 
 Pass 3: Checking directory connectivity
diff --git a/tests/f_badjour_indblks/expect.1 b/tests/f_badjour_indblks/expect.1
index c0de516..7ccc59b 100644
--- a/tests/f_badjour_indblks/expect.1
+++ b/tests/f_badjour_indblks/expect.1
@@ -1,4 +1,4 @@
-Superblock has an invalid ext3 journal (inode 8).
+Superblock has an invalid journal (inode 8).
 Clear? yes
 
 *** ext3 journal has been deleted - filesystem is now ext2 only ***
@@ -21,13 +21,12 @@
 Free blocks count wrong (7080, counted=8110).
 Fix? yes
 
-Recreate journal to make the filesystem ext3 again?
-Fix? yes
+Recreate journal? yes
 
 Creating journal (1024 blocks):  Done.
 
 *** journal has been re-created - filesystem is now ext3 again ***
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/256 files (9.1% non-contiguous), 1112/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1111/8192 blocks
 Exit status is 1
diff --git a/tests/f_badjour_indblks/expect.2 b/tests/f_badjour_indblks/expect.2
index 74153ad..3fbb8b3 100644
--- a/tests/f_badjour_indblks/expect.2
+++ b/tests/f_badjour_indblks/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/256 files (9.1% non-contiguous), 1112/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1111/8192 blocks
 Exit status is 0
diff --git a/tests/f_badjourblks/expect.1 b/tests/f_badjourblks/expect.1
index 5a0bfef..34c6658 100644
--- a/tests/f_badjourblks/expect.1
+++ b/tests/f_badjourblks/expect.1
@@ -1,4 +1,4 @@
-Superblock has an invalid ext3 journal (inode 8).
+Superblock has an invalid journal (inode 8).
 Clear? yes
 
 *** ext3 journal has been deleted - filesystem is now ext2 only ***
@@ -19,13 +19,12 @@
 Free blocks count wrong (7112, counted=8142).
 Fix? yes
 
-Recreate journal to make the filesystem ext3 again?
-Fix? yes
+Recreate journal? yes
 
 Creating journal (1024 blocks):  Done.
 
 *** journal has been re-created - filesystem is now ext3 again ***
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/256 files (0.0% non-contiguous), 1080/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1079/8192 blocks
 Exit status is 1
diff --git a/tests/f_badjourblks/expect.2 b/tests/f_badjourblks/expect.2
index 632dc71..7c50703 100644
--- a/tests/f_badjourblks/expect.2
+++ b/tests/f_badjourblks/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/256 files (0.0% non-contiguous), 1080/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1079/8192 blocks
 Exit status is 0
diff --git a/tests/f_dup3/expect.1 b/tests/f_dup3/expect.1
index 1393416..9b1a28f 100644
--- a/tests/f_dup3/expect.1
+++ b/tests/f_dup3/expect.1
@@ -24,8 +24,8 @@
 Clone multiply-claimed blocks? yes
 
 Pass 2: Checking directory structure
-Directory inode 11, block 12, offset 0: directory corrupted
-Salvage? yes
+Entry '' in /lost+found (11) has invalid inode #: 24.
+Clear? yes
 
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
diff --git a/tests/f_dup_de/expect.1 b/tests/f_dup_de/expect.1
index 78545cc..e421547 100644
--- a/tests/f_dup_de/expect.1
+++ b/tests/f_dup_de/expect.1
@@ -5,24 +5,24 @@
 
 Pass 3: Checking directory connectivity
 Pass 3A: Optimizing directories
-Duplicate entry 'mailcap.dpkg-old' in /etc (12) found.  Clear? yes
-
 Duplicate entry 'fstab' in /etc (12) found.  Clear? yes
 
 Duplicate entry 'localtime' in /etc (12) found.  Clear? yes
 
-Duplicate entry 'resolv.conf' in /etc (12) found.  Clear? yes
-
-Duplicate entry 'usb.permissions' in /etc (12) found.  Clear? yes
+Duplicate entry 'mailcap.dpkg-old' in /etc (12) found.  Clear? yes
 
 Duplicate entry 'modules.conf.old' in /etc (12) found.  Clear? yes
 
 Entry 'modules.conf.old' in /etc (12) has a non-unique filename.
 Rename to modules.conf.o~0? yes
 
+Duplicate entry 'resolv.conf' in /etc (12) found.  Clear? yes
+
+Duplicate entry 'usb.permissions' in /etc (12) found.  Clear? yes
+
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 18/2048 files (5.6% non-contiguous), 325/330 blocks
+test_filesys: 18/2048 files (5.6% non-contiguous), 324/330 blocks
 Exit status is 1
diff --git a/tests/f_dup_de/expect.2 b/tests/f_dup_de/expect.2
index e3accc6..4d680af 100644
--- a/tests/f_dup_de/expect.2
+++ b/tests/f_dup_de/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 18/2048 files (5.6% non-contiguous), 325/330 blocks
+test_filesys: 18/2048 files (5.6% non-contiguous), 324/330 blocks
 Exit status is 0
diff --git a/tests/f_dup_de2/expect.1 b/tests/f_dup_de2/expect.1
new file mode 100644
index 0000000..8dd3d91
--- /dev/null
+++ b/tests/f_dup_de2/expect.1
@@ -0,0 +1,16 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Duplicate entry 'test-008' found.
+	Marking / (2) to be rebuilt.
+
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Entry 'test-008' in / (2) has a non-unique filename.
+Rename to test-0~0? yes
+
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 21/256 files (0.0% non-contiguous), 1087/2048 blocks
+Exit status is 1
diff --git a/tests/f_dup_de2/expect.2 b/tests/f_dup_de2/expect.2
new file mode 100644
index 0000000..8781274
--- /dev/null
+++ b/tests/f_dup_de2/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 21/256 files (0.0% non-contiguous), 1087/2048 blocks
+Exit status is 0
diff --git a/tests/f_dup_de2/image.gz b/tests/f_dup_de2/image.gz
new file mode 100644
index 0000000..a8e4db3
--- /dev/null
+++ b/tests/f_dup_de2/image.gz
Binary files differ
diff --git a/tests/f_dup_de2/name b/tests/f_dup_de2/name
new file mode 100644
index 0000000..e337f10
--- /dev/null
+++ b/tests/f_dup_de2/name
@@ -0,0 +1 @@
+duplicate directory entries for non-indexed dirs
diff --git a/tests/f_dup_resize/expect.2 b/tests/f_dup_resize/expect.2
index ed116f4..198acb9 100644
--- a/tests/f_dup_resize/expect.2
+++ b/tests/f_dup_resize/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 12/2560 files (16.7% non-contiguous), 485/10240 blocks
+test_filesys: 12/2560 files (8.3% non-contiguous), 485/10240 blocks
 Exit status is 0
diff --git a/tests/f_dupfsblks/expect.1 b/tests/f_dupfsblks/expect.1
index 661e164..aba2f52 100644
--- a/tests/f_dupfsblks/expect.1
+++ b/tests/f_dupfsblks/expect.1
@@ -35,18 +35,16 @@
 Clone multiply-claimed blocks? yes
 
 Pass 2: Checking directory structure
-Directory inode 12, block 1, offset 0: directory corrupted
-Salvage? yes
+Entry '' in ??? (12) has invalid inode #: 4194303.
+Clear? yes
 
-Directory inode 12, block 2, offset 0: directory corrupted
-Salvage? yes
+Entry 'M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?' in ??? (12) has invalid inode #: 16383.
+Clear? yes
 
-Directory inode 12, block 3, offset 0: directory corrupted
-Salvage? yes
+Entry '' in ??? (12) has a zero-length name.
+Clear? yes
 
-Entry '' in ??? (12) has deleted/unused inode 32.  Clear? yes
-
-Directory inode 12, block 4, offset 100: directory corrupted
+Directory inode 12, block #4, offset 100: directory corrupted
 Salvage? yes
 
 Pass 3: Checking directory connectivity
diff --git a/tests/f_ea_checks/expect.1 b/tests/f_ea_checks/expect.1
new file mode 100644
index 0000000..eb215a2
--- /dev/null
+++ b/tests/f_ea_checks/expect.1
@@ -0,0 +1,57 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 13 has a bad extended attribute block 26.  Clear? yes
+
+Inode 13, i_blocks is 4, should be 2.  Fix? yes
+
+Extended attribute in inode 14 has a hash (1649340189) which is invalid
+Clear? yes
+
+Inode 14, i_blocks is 2, should be 0.  Fix? yes
+
+Inode 17 has a bad extended attribute block 28.  Clear? yes
+
+Inode 17, i_blocks is 4, should be 2.  Fix? yes
+
+Inode 16 has a bad extended attribute block 29.  Clear? yes
+
+Inode 16, i_blocks is 2, should be 0.  Fix? yes
+
+Inode 19 has a bad extended attribute block 33.  Clear? yes
+
+Inode 19, i_blocks is 2, should be 0.  Fix? yes
+
+Inode 12 has a bad extended attribute block 55.  Clear? yes
+
+Inode 12, i_blocks is 2, should be 0.  Fix? yes
+
+Inode 15, i_blocks is 2, should be 0.  Fix? yes
+
+Pass 2: Checking directory structure
+Extended attribute block for inode 15 (/far) is invalid (999).
+Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -(26--29) -33 -55
+Fix? yes
+
+Free blocks count wrong for group #0 (481, counted=484).
+Fix? yes
+
+Free blocks count wrong (481, counted=484).
+Fix? yes
+
+Inode bitmap differences:  -18
+Fix? yes
+
+Free inodes count wrong for group #0 (47, counted=46).
+Fix? yes
+
+Free inodes count wrong (47, counted=46).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 18/64 files (0.0% non-contiguous), 28/512 blocks
+Exit status is 1
diff --git a/tests/f_ea_checks/expect.2 b/tests/f_ea_checks/expect.2
new file mode 100644
index 0000000..2a11cd2
--- /dev/null
+++ b/tests/f_ea_checks/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 18/64 files (0.0% non-contiguous), 28/512 blocks
+Exit status is 0
diff --git a/tests/f_ea_checks/image.gz b/tests/f_ea_checks/image.gz
new file mode 100644
index 0000000..253da06
--- /dev/null
+++ b/tests/f_ea_checks/image.gz
Binary files differ
diff --git a/tests/f_ea_checks/name b/tests/f_ea_checks/name
new file mode 100644
index 0000000..160fdea
--- /dev/null
+++ b/tests/f_ea_checks/name
@@ -0,0 +1 @@
+extended attribute block checks
diff --git a/tests/f_extent_bad_node/expect.1 b/tests/f_extent_bad_node/expect.1
new file mode 100644
index 0000000..0c0bc28
--- /dev/null
+++ b/tests/f_extent_bad_node/expect.1
@@ -0,0 +1,23 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 has an invalid extent node (blk 22, lblk 0)
+Clear? yes
+
+Inode 12, i_blocks is 16, should be 8.  Fix? yes
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -(21--23) -25
+Fix? yes
+
+Free blocks count wrong for group #0 (71, counted=75).
+Fix? yes
+
+Free blocks count wrong (71, counted=75).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/16 files (0.0% non-contiguous), 25/100 blocks
+Exit status is 1
diff --git a/tests/f_extent_bad_node/expect.2 b/tests/f_extent_bad_node/expect.2
new file mode 100644
index 0000000..568c792
--- /dev/null
+++ b/tests/f_extent_bad_node/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 12/16 files (0.0% non-contiguous), 25/100 blocks
+Exit status is 0
diff --git a/tests/f_extent_bad_node/image.gz b/tests/f_extent_bad_node/image.gz
new file mode 100644
index 0000000..01d9b45
--- /dev/null
+++ b/tests/f_extent_bad_node/image.gz
Binary files differ
diff --git a/tests/f_extent_bad_node/name b/tests/f_extent_bad_node/name
new file mode 100644
index 0000000..9c9d79f
--- /dev/null
+++ b/tests/f_extent_bad_node/name
@@ -0,0 +1 @@
+bad interior node in extent tree
diff --git a/tests/f_extents/expect.1 b/tests/f_extents/expect.1
new file mode 100644
index 0000000..2abe32e
--- /dev/null
+++ b/tests/f_extents/expect.1
@@ -0,0 +1,52 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 is in extent format, but superblock is missing EXTENTS feature
+Fix? yes
+
+Inode 12 has an invalid extent
+	(logical block 0, invalid physical block 21994527527949, len 17)
+Clear? yes
+
+Inode 12, i_blocks is 34, should be 0.  Fix? yes
+
+Inode 13 missing EXTENT_FL, but is in extents format
+Fix? yes
+
+Inode 17 has an invalid extent
+	(logical block 0, invalid physical block 22011707397135, len 15)
+Clear? yes
+
+Inode 17, i_blocks is 32, should be 0.  Fix? yes
+
+Error while reading over extent tree in inode 18: Corrupt extent header
+Clear inode? yes
+
+Inode 18, i_blocks is 2, should be 0.  Fix? yes
+
+Pass 2: Checking directory structure
+Entry 'fbad-flag' in / (2) has deleted/unused inode 18.  Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -1081 +4611 -(5121--5142)
+Fix? yes
+
+Free blocks count wrong for group #0 (7081, counted=7098).
+Fix? yes
+
+Free blocks count wrong (7081, counted=7098).
+Fix? yes
+
+Inode bitmap differences:  -18
+Fix? yes
+
+Free inodes count wrong for group #0 (237, counted=238).
+Fix? yes
+
+Free inodes count wrong (237, counted=238).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 18/256 files (0.0% non-contiguous), 1094/8192 blocks
+Exit status is 1
diff --git a/tests/f_extents/expect.2 b/tests/f_extents/expect.2
new file mode 100644
index 0000000..6162cdf
--- /dev/null
+++ b/tests/f_extents/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 18/256 files (0.0% non-contiguous), 1094/8192 blocks
+Exit status is 0
diff --git a/tests/f_extents/name b/tests/f_extents/name
new file mode 100644
index 0000000..edede57
--- /dev/null
+++ b/tests/f_extents/name
@@ -0,0 +1 @@
+basic extents support
diff --git a/tests/f_extents2/expect.1 b/tests/f_extents2/expect.1
new file mode 100644
index 0000000..fa7f6eb
--- /dev/null
+++ b/tests/f_extents2/expect.1
@@ -0,0 +1,70 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 has out of order extents
+	(invalid logical block 0, physical block 23, len 12)
+Clear? yes
+
+Inode 12, i_blocks is 86, should be 62.  Fix? yes
+
+Inode 13, i_size is 13295, should be 14336.  Fix? yes
+
+Inode 13, i_blocks is 26, should be 28.  Fix? yes
+
+Inode 15, i_size is 42197, should be 44032.  Fix? yes
+
+Inode 15, i_blocks is 84, should be 86.  Fix? yes
+
+Inode 16 has an invalid extent
+	(logical block 0, invalid physical block 500, len 10)
+Clear? yes
+
+Inode 17 has an invalid extent
+	(logical block 0, physical block 120, invalid len 6000)
+Clear? yes
+
+Inode 18 has out of order extents
+	(invalid logical block 10, physical block 155, len 45)
+Clear? yes
+
+Inode 18, i_blocks is 116, should be 24.  Fix? yes
+
+
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 13: 80 80
+Multiply-claimed block(s) in inode 14: 85
+Multiply-claimed block(s) in inode 15: 85
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 3 inodes containing multiply-claimed blocks.)
+
+File /block.c (inode #13, mod time Mon Jun  2 05:20:22 2008) 
+  has 2 multiply-claimed block(s), shared with 0 file(s):
+Clone multiply-claimed blocks? yes
+
+File /inode.c (inode #14, mod time Mon Jun  2 05:28:16 2008) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+	/ext2fs.h (inode #15, mod time Mon Jun  2 07:22:57 2008)
+Clone multiply-claimed blocks? yes
+
+File /ext2fs.h (inode #15, mod time Mon Jun  2 07:22:57 2008) 
+  has 1 multiply-claimed block(s), shared with 1 file(s):
+	/inode.c (inode #14, mod time Mon Jun  2 05:28:16 2008)
+Multiply-claimed blocks already reassigned or cloned.
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -(26--34) -(154--199)
+Fix? yes
+
+Free blocks count wrong for group #0 (65535, counted=55).
+Fix? yes
+
+Free blocks count wrong (4294967295, counted=55).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 18/32 files (22.2% non-contiguous), 145/200 blocks
+Exit status is 1
diff --git a/tests/f_extents2/expect.2 b/tests/f_extents2/expect.2
new file mode 100644
index 0000000..0082a64
--- /dev/null
+++ b/tests/f_extents2/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 18/32 files (22.2% non-contiguous), 145/200 blocks
+Exit status is 0
diff --git a/tests/f_extents2/image.gz b/tests/f_extents2/image.gz
new file mode 100644
index 0000000..52df257
--- /dev/null
+++ b/tests/f_extents2/image.gz
Binary files differ
diff --git a/tests/f_extents2/name b/tests/f_extents2/name
new file mode 100644
index 0000000..4a7e4eb
--- /dev/null
+++ b/tests/f_extents2/name
@@ -0,0 +1 @@
+multiply claimed blocks in extents and other illegal extents
diff --git a/tests/f_extra_journal/expect.1 b/tests/f_extra_journal/expect.1
index f8ccd64..8a74adb 100644
--- a/tests/f_extra_journal/expect.1
+++ b/tests/f_extra_journal/expect.1
@@ -1,4 +1,4 @@
-Superblock doesn't have has_journal flag, but has ext3 journal inode.
+Superblock has_journal flag is clear, but a journal inode is present.
 Clear? yes
 
 Pass 1: Checking inodes, blocks, and sizes
diff --git a/tests/f_fast_symlink_extents/expect.1 b/tests/f_fast_symlink_extents/expect.1
new file mode 100644
index 0000000..dc16c97
--- /dev/null
+++ b/tests/f_fast_symlink_extents/expect.1
@@ -0,0 +1,11 @@
+Pass 1: Checking inodes, blocks, and sizes
+Fast symlink 13 has EXTENT_FL set.  Clear? yes
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 13/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 1
diff --git a/tests/f_fast_symlink_extents/expect.2 b/tests/f_fast_symlink_extents/expect.2
new file mode 100644
index 0000000..416f49c
--- /dev/null
+++ b/tests/f_fast_symlink_extents/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 13/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 0
diff --git a/tests/f_fast_symlink_extents/image.gz b/tests/f_fast_symlink_extents/image.gz
new file mode 100644
index 0000000..37eb0af
--- /dev/null
+++ b/tests/f_fast_symlink_extents/image.gz
Binary files differ
diff --git a/tests/f_fast_symlink_extents/name b/tests/f_fast_symlink_extents/name
new file mode 100644
index 0000000..333cb52
--- /dev/null
+++ b/tests/f_fast_symlink_extents/name
@@ -0,0 +1 @@
+fast symlink with extents flag set
diff --git a/tests/f_file_acl_high/expect.1 b/tests/f_file_acl_high/expect.1
new file mode 100644
index 0000000..24d6e06
--- /dev/null
+++ b/tests/f_file_acl_high/expect.1
@@ -0,0 +1,12 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+i_file_acl_hi for inode 12 (/motd) is 2, should be zero.
+Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/16 files (0.0% non-contiguous), 22/100 blocks
+Exit status is 1
diff --git a/tests/f_file_acl_high/expect.2 b/tests/f_file_acl_high/expect.2
new file mode 100644
index 0000000..4c5476c
--- /dev/null
+++ b/tests/f_file_acl_high/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 12/16 files (0.0% non-contiguous), 22/100 blocks
+Exit status is 0
diff --git a/tests/f_file_acl_high/image.gz b/tests/f_file_acl_high/image.gz
new file mode 100644
index 0000000..6342d58
--- /dev/null
+++ b/tests/f_file_acl_high/image.gz
Binary files differ
diff --git a/tests/f_file_acl_high/name b/tests/f_file_acl_high/name
new file mode 100644
index 0000000..fd54b06
--- /dev/null
+++ b/tests/f_file_acl_high/name
@@ -0,0 +1 @@
+i_file_acl_high should be zero
diff --git a/tests/f_full_bg/expect.1 b/tests/f_full_bg/expect.1
index 00819bf..3d5453f 100644
--- a/tests/f_full_bg/expect.1
+++ b/tests/f_full_bg/expect.1
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+test_filesys: 11/3744 files (0.0% non-contiguous), 685/769 blocks
 Exit status is 0
diff --git a/tests/f_full_bg/expect.2 b/tests/f_full_bg/expect.2
index 00819bf..3d5453f 100644
--- a/tests/f_full_bg/expect.2
+++ b/tests/f_full_bg/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+test_filesys: 11/3744 files (0.0% non-contiguous), 685/769 blocks
 Exit status is 0
diff --git a/tests/f_h_badnode/expect.1 b/tests/f_h_badnode/expect.1
index 80c82d3..ce2adb3 100644
--- a/tests/f_h_badnode/expect.1
+++ b/tests/f_h_badnode/expect.1
@@ -1,11 +1,11 @@
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Problem in HTREE directory inode 12929: node (531) has bad max hash
-Problem in HTREE directory inode 12929: node (993) referenced twice
-Problem in HTREE directory inode 12929: node (1061) has bad min hash
-Problem in HTREE directory inode 12929: node (1062) has invalid depth
-Problem in HTREE directory inode 12929: node (1062) has bad max hash
-Problem in HTREE directory inode 12929: node (1062) not referenced
+Problem in HTREE directory inode 12929: block #531 has bad max hash
+Problem in HTREE directory inode 12929: block #993 referenced twice
+Problem in HTREE directory inode 12929: block #1061 has bad min hash
+Problem in HTREE directory inode 12929: block #1062 has invalid depth (2)
+Problem in HTREE directory inode 12929: block #1062 has bad max hash
+Problem in HTREE directory inode 12929: block #1062 not referenced
 Invalid HTREE directory inode 12929 (/test2).  Clear HTree index? yes
 
 Pass 3: Checking directory connectivity
@@ -14,5 +14,5 @@
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 47730/100192 files (0.0% non-contiguous), 13377/31745 blocks
+test_filesys: 47730/100192 files (0.0% non-contiguous), 13551/31745 blocks
 Exit status is 1
diff --git a/tests/f_h_badnode/expect.2 b/tests/f_h_badnode/expect.2
index 8a21997..b9dadb7 100644
--- a/tests/f_h_badnode/expect.2
+++ b/tests/f_h_badnode/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 47730/100192 files (0.0% non-contiguous), 13377/31745 blocks
+test_filesys: 47730/100192 files (0.0% non-contiguous), 13551/31745 blocks
 Exit status is 0
diff --git a/tests/f_h_badroot/expect.1 b/tests/f_h_badroot/expect.1
index 261000d..88eba51 100644
--- a/tests/f_h_badroot/expect.1
+++ b/tests/f_h_badroot/expect.1
@@ -17,17 +17,17 @@
 Clear HTree index? yes
 
 Pass 2: Checking directory structure
-Problem in HTREE directory inode 80065: node (0) has an unordered hash table
+Problem in HTREE directory inode 80065: block #0 has an unordered hash table
 Clear HTree index? yes
 
-Problem in HTREE directory inode 86737: node (0) has invalid limit (511)
+Problem in HTREE directory inode 86737: block #0 has invalid limit (511)
 Clear HTree index? yes
 
-Problem in HTREE directory inode 93409: node (0) has invalid count (234)
+Problem in HTREE directory inode 93409: block #0 has invalid count (234)
 Clear HTree index? yes
 
-Problem in HTREE directory inode 73393: node (1) has bad min hash
-Problem in HTREE directory inode 73393: node (2) has bad max hash
+Problem in HTREE directory inode 73393: block #1 has bad min hash
+Problem in HTREE directory inode 73393: block #2 has bad max hash
 Invalid HTREE directory inode 73393 (/test6).  Clear HTree index? yes
 
 Pass 3: Checking directory connectivity
@@ -36,5 +36,5 @@
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 1921/100080 files (0.0% non-contiguous), 13642/15361 blocks
+test_filesys: 1921/100080 files (0.0% non-contiguous), 13646/15361 blocks
 Exit status is 1
diff --git a/tests/f_h_badroot/expect.2 b/tests/f_h_badroot/expect.2
index 28f1d2a..d5772c1 100644
--- a/tests/f_h_badroot/expect.2
+++ b/tests/f_h_badroot/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 1921/100080 files (0.0% non-contiguous), 13642/15361 blocks
+test_filesys: 1921/100080 files (0.0% non-contiguous), 13646/15361 blocks
 Exit status is 0
diff --git a/tests/f_h_reindex/expect.1 b/tests/f_h_reindex/expect.1
index 4511893..2887239 100755
--- a/tests/f_h_reindex/expect.1
+++ b/tests/f_h_reindex/expect.1
@@ -2,950 +2,950 @@
 
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Problem in HTREE directory inode 16001: node (1) has bad max hash
-Problem in HTREE directory inode 16001: node (2) has bad min hash
-Problem in HTREE directory inode 16001: node (2) has bad max hash
-Problem in HTREE directory inode 16001: node (3) has bad min hash
-Problem in HTREE directory inode 16001: node (3) has bad max hash
-Problem in HTREE directory inode 16001: node (4) has bad min hash
-Problem in HTREE directory inode 16001: node (4) has bad max hash
-Problem in HTREE directory inode 16001: node (5) has bad min hash
-Problem in HTREE directory inode 16001: node (5) has bad max hash
-Problem in HTREE directory inode 16001: node (6) has bad min hash
-Problem in HTREE directory inode 16001: node (6) has bad max hash
-Problem in HTREE directory inode 16001: node (7) has bad min hash
-Problem in HTREE directory inode 16001: node (7) has bad max hash
-Problem in HTREE directory inode 16001: node (8) has bad min hash
+Problem in HTREE directory inode 16001: block #1 has bad max hash
+Problem in HTREE directory inode 16001: block #2 has bad min hash
+Problem in HTREE directory inode 16001: block #2 has bad max hash
+Problem in HTREE directory inode 16001: block #3 has bad min hash
+Problem in HTREE directory inode 16001: block #3 has bad max hash
+Problem in HTREE directory inode 16001: block #4 has bad min hash
+Problem in HTREE directory inode 16001: block #4 has bad max hash
+Problem in HTREE directory inode 16001: block #5 has bad min hash
+Problem in HTREE directory inode 16001: block #5 has bad max hash
+Problem in HTREE directory inode 16001: block #6 has bad min hash
+Problem in HTREE directory inode 16001: block #6 has bad max hash
+Problem in HTREE directory inode 16001: block #7 has bad min hash
+Problem in HTREE directory inode 16001: block #7 has bad max hash
+Problem in HTREE directory inode 16001: block #8 has bad min hash
 Invalid HTREE directory inode 16001 (/test).  Clear HTree index? yes
 
-Problem in HTREE directory inode 24001: node (1) has bad max hash
-Problem in HTREE directory inode 24001: node (2) has bad max hash
-Problem in HTREE directory inode 24001: node (3) has bad min hash
-Problem in HTREE directory inode 24001: node (3) has bad max hash
-Problem in HTREE directory inode 24001: node (4) has bad max hash
-Problem in HTREE directory inode 24001: node (5) has bad min hash
-Problem in HTREE directory inode 24001: node (5) has bad max hash
-Problem in HTREE directory inode 24001: node (6) has bad min hash
-Problem in HTREE directory inode 24001: node (6) has bad max hash
-Problem in HTREE directory inode 24001: node (7) has bad min hash
-Problem in HTREE directory inode 24001: node (7) has bad max hash
-Problem in HTREE directory inode 24001: node (8) has bad max hash
-Problem in HTREE directory inode 24001: node (9) has bad min hash
-Problem in HTREE directory inode 24001: node (9) has bad max hash
-Problem in HTREE directory inode 24001: node (10) has bad min hash
-Problem in HTREE directory inode 24001: node (10) has bad max hash
-Problem in HTREE directory inode 24001: node (11) has bad max hash
-Problem in HTREE directory inode 24001: node (12) has bad min hash
-Problem in HTREE directory inode 24001: node (12) has bad max hash
-Problem in HTREE directory inode 24001: node (13) has bad min hash
-Problem in HTREE directory inode 24001: node (13) has bad max hash
-Problem in HTREE directory inode 24001: node (14) has bad min hash
-Problem in HTREE directory inode 24001: node (14) has bad max hash
-Problem in HTREE directory inode 24001: node (15) has bad min hash
-Problem in HTREE directory inode 24001: node (15) has bad max hash
-Problem in HTREE directory inode 24001: node (16) has bad min hash
-Problem in HTREE directory inode 24001: node (16) has bad max hash
-Problem in HTREE directory inode 24001: node (17) has bad min hash
-Problem in HTREE directory inode 24001: node (17) has bad max hash
-Problem in HTREE directory inode 24001: node (18) has bad min hash
-Problem in HTREE directory inode 24001: node (18) has bad max hash
-Problem in HTREE directory inode 24001: node (19) has bad min hash
-Problem in HTREE directory inode 24001: node (19) has bad max hash
-Problem in HTREE directory inode 24001: node (20) has bad min hash
-Problem in HTREE directory inode 24001: node (20) has bad max hash
-Problem in HTREE directory inode 24001: node (21) has bad min hash
-Problem in HTREE directory inode 24001: node (21) has bad max hash
-Problem in HTREE directory inode 24001: node (22) has bad min hash
-Problem in HTREE directory inode 24001: node (22) has bad max hash
-Problem in HTREE directory inode 24001: node (23) has bad min hash
-Problem in HTREE directory inode 24001: node (23) has bad max hash
-Problem in HTREE directory inode 24001: node (24) has bad min hash
-Problem in HTREE directory inode 24001: node (24) has bad max hash
-Problem in HTREE directory inode 24001: node (25) has bad min hash
-Problem in HTREE directory inode 24001: node (25) has bad max hash
-Problem in HTREE directory inode 24001: node (26) has bad min hash
-Problem in HTREE directory inode 24001: node (26) has bad max hash
-Problem in HTREE directory inode 24001: node (27) has bad min hash
-Problem in HTREE directory inode 24001: node (27) has bad max hash
-Problem in HTREE directory inode 24001: node (28) has bad min hash
-Problem in HTREE directory inode 24001: node (28) has bad max hash
-Problem in HTREE directory inode 24001: node (29) has bad min hash
-Problem in HTREE directory inode 24001: node (29) has bad max hash
-Problem in HTREE directory inode 24001: node (30) has bad min hash
-Problem in HTREE directory inode 24001: node (30) has bad max hash
-Problem in HTREE directory inode 24001: node (31) has bad min hash
-Problem in HTREE directory inode 24001: node (31) has bad max hash
-Problem in HTREE directory inode 24001: node (32) has bad min hash
-Problem in HTREE directory inode 24001: node (32) has bad max hash
-Problem in HTREE directory inode 24001: node (33) has bad min hash
-Problem in HTREE directory inode 24001: node (33) has bad max hash
-Problem in HTREE directory inode 24001: node (34) has bad min hash
-Problem in HTREE directory inode 24001: node (34) has bad max hash
-Problem in HTREE directory inode 24001: node (35) has bad min hash
-Problem in HTREE directory inode 24001: node (35) has bad max hash
-Problem in HTREE directory inode 24001: node (36) has bad min hash
-Problem in HTREE directory inode 24001: node (36) has bad max hash
-Problem in HTREE directory inode 24001: node (37) has bad min hash
-Problem in HTREE directory inode 24001: node (37) has bad max hash
-Problem in HTREE directory inode 24001: node (38) has bad min hash
-Problem in HTREE directory inode 24001: node (38) has bad max hash
-Problem in HTREE directory inode 24001: node (39) has bad min hash
-Problem in HTREE directory inode 24001: node (39) has bad max hash
-Problem in HTREE directory inode 24001: node (40) has bad min hash
-Problem in HTREE directory inode 24001: node (40) has bad max hash
-Problem in HTREE directory inode 24001: node (41) has bad min hash
-Problem in HTREE directory inode 24001: node (41) has bad max hash
-Problem in HTREE directory inode 24001: node (42) has bad min hash
-Problem in HTREE directory inode 24001: node (42) has bad max hash
-Problem in HTREE directory inode 24001: node (43) has bad min hash
-Problem in HTREE directory inode 24001: node (43) has bad max hash
-Problem in HTREE directory inode 24001: node (44) has bad min hash
-Problem in HTREE directory inode 24001: node (44) has bad max hash
-Problem in HTREE directory inode 24001: node (45) has bad min hash
-Problem in HTREE directory inode 24001: node (45) has bad max hash
-Problem in HTREE directory inode 24001: node (46) has bad min hash
-Problem in HTREE directory inode 24001: node (46) has bad max hash
-Problem in HTREE directory inode 24001: node (47) has bad min hash
-Problem in HTREE directory inode 24001: node (47) has bad max hash
-Problem in HTREE directory inode 24001: node (48) has bad min hash
-Problem in HTREE directory inode 24001: node (48) has bad max hash
-Problem in HTREE directory inode 24001: node (49) has bad min hash
-Problem in HTREE directory inode 24001: node (49) has bad max hash
-Problem in HTREE directory inode 24001: node (50) has bad min hash
-Problem in HTREE directory inode 24001: node (50) has bad max hash
-Problem in HTREE directory inode 24001: node (51) has bad min hash
-Problem in HTREE directory inode 24001: node (51) has bad max hash
-Problem in HTREE directory inode 24001: node (52) has bad min hash
-Problem in HTREE directory inode 24001: node (52) has bad max hash
-Problem in HTREE directory inode 24001: node (53) has bad min hash
-Problem in HTREE directory inode 24001: node (53) has bad max hash
-Problem in HTREE directory inode 24001: node (54) has bad min hash
-Problem in HTREE directory inode 24001: node (54) has bad max hash
-Problem in HTREE directory inode 24001: node (55) has bad min hash
-Problem in HTREE directory inode 24001: node (55) has bad max hash
-Problem in HTREE directory inode 24001: node (56) has bad min hash
-Problem in HTREE directory inode 24001: node (56) has bad max hash
-Problem in HTREE directory inode 24001: node (57) has bad min hash
-Problem in HTREE directory inode 24001: node (57) has bad max hash
-Problem in HTREE directory inode 24001: node (58) has bad min hash
-Problem in HTREE directory inode 24001: node (58) has bad max hash
-Problem in HTREE directory inode 24001: node (59) has bad min hash
-Problem in HTREE directory inode 24001: node (59) has bad max hash
-Problem in HTREE directory inode 24001: node (60) has bad min hash
-Problem in HTREE directory inode 24001: node (60) has bad max hash
-Problem in HTREE directory inode 24001: node (61) has bad min hash
-Problem in HTREE directory inode 24001: node (61) has bad max hash
-Problem in HTREE directory inode 24001: node (62) has bad min hash
-Problem in HTREE directory inode 24001: node (62) has bad max hash
-Problem in HTREE directory inode 24001: node (63) has bad min hash
-Problem in HTREE directory inode 24001: node (63) has bad max hash
-Problem in HTREE directory inode 24001: node (64) has bad min hash
-Problem in HTREE directory inode 24001: node (64) has bad max hash
-Problem in HTREE directory inode 24001: node (65) has bad min hash
-Problem in HTREE directory inode 24001: node (65) has bad max hash
-Problem in HTREE directory inode 24001: node (66) has bad min hash
-Problem in HTREE directory inode 24001: node (66) has bad max hash
-Problem in HTREE directory inode 24001: node (67) has bad min hash
-Problem in HTREE directory inode 24001: node (67) has bad max hash
-Problem in HTREE directory inode 24001: node (68) has bad min hash
-Problem in HTREE directory inode 24001: node (68) has bad max hash
-Problem in HTREE directory inode 24001: node (69) has bad min hash
-Problem in HTREE directory inode 24001: node (69) has bad max hash
-Problem in HTREE directory inode 24001: node (70) has bad min hash
-Problem in HTREE directory inode 24001: node (70) has bad max hash
-Problem in HTREE directory inode 24001: node (71) has bad min hash
-Problem in HTREE directory inode 24001: node (71) has bad max hash
-Problem in HTREE directory inode 24001: node (72) has bad min hash
-Problem in HTREE directory inode 24001: node (72) has bad max hash
-Problem in HTREE directory inode 24001: node (73) has bad min hash
-Problem in HTREE directory inode 24001: node (73) has bad max hash
-Problem in HTREE directory inode 24001: node (74) has bad min hash
-Problem in HTREE directory inode 24001: node (74) has bad max hash
-Problem in HTREE directory inode 24001: node (75) has bad min hash
-Problem in HTREE directory inode 24001: node (75) has bad max hash
-Problem in HTREE directory inode 24001: node (76) has bad min hash
-Problem in HTREE directory inode 24001: node (76) has bad max hash
-Problem in HTREE directory inode 24001: node (77) has bad min hash
-Problem in HTREE directory inode 24001: node (77) has bad max hash
-Problem in HTREE directory inode 24001: node (78) has bad min hash
-Problem in HTREE directory inode 24001: node (78) has bad max hash
-Problem in HTREE directory inode 24001: node (79) has bad min hash
-Problem in HTREE directory inode 24001: node (79) has bad max hash
-Problem in HTREE directory inode 24001: node (80) has bad min hash
-Problem in HTREE directory inode 24001: node (80) has bad max hash
-Problem in HTREE directory inode 24001: node (81) has bad min hash
-Problem in HTREE directory inode 24001: node (81) has bad max hash
-Problem in HTREE directory inode 24001: node (82) has bad min hash
-Problem in HTREE directory inode 24001: node (82) has bad max hash
-Problem in HTREE directory inode 24001: node (83) has bad min hash
-Problem in HTREE directory inode 24001: node (83) has bad max hash
-Problem in HTREE directory inode 24001: node (84) has bad min hash
-Problem in HTREE directory inode 24001: node (84) has bad max hash
-Problem in HTREE directory inode 24001: node (85) has bad min hash
-Problem in HTREE directory inode 24001: node (85) has bad max hash
-Problem in HTREE directory inode 24001: node (86) has bad min hash
-Problem in HTREE directory inode 24001: node (86) has bad max hash
-Problem in HTREE directory inode 24001: node (87) has bad min hash
-Problem in HTREE directory inode 24001: node (87) has bad max hash
-Problem in HTREE directory inode 24001: node (88) has bad min hash
-Problem in HTREE directory inode 24001: node (88) has bad max hash
-Problem in HTREE directory inode 24001: node (89) has bad min hash
-Problem in HTREE directory inode 24001: node (89) has bad max hash
-Problem in HTREE directory inode 24001: node (90) has bad min hash
-Problem in HTREE directory inode 24001: node (90) has bad max hash
-Problem in HTREE directory inode 24001: node (91) has bad min hash
-Problem in HTREE directory inode 24001: node (91) has bad max hash
-Problem in HTREE directory inode 24001: node (92) has bad min hash
-Problem in HTREE directory inode 24001: node (92) has bad max hash
-Problem in HTREE directory inode 24001: node (93) has bad min hash
-Problem in HTREE directory inode 24001: node (93) has bad max hash
-Problem in HTREE directory inode 24001: node (94) has bad min hash
-Problem in HTREE directory inode 24001: node (94) has bad max hash
-Problem in HTREE directory inode 24001: node (95) has bad min hash
-Problem in HTREE directory inode 24001: node (95) has bad max hash
-Problem in HTREE directory inode 24001: node (96) has bad min hash
-Problem in HTREE directory inode 24001: node (96) has bad max hash
-Problem in HTREE directory inode 24001: node (97) has bad min hash
-Problem in HTREE directory inode 24001: node (97) has bad max hash
-Problem in HTREE directory inode 24001: node (98) has bad min hash
-Problem in HTREE directory inode 24001: node (98) has bad max hash
-Problem in HTREE directory inode 24001: node (99) has bad min hash
-Problem in HTREE directory inode 24001: node (99) has bad max hash
-Problem in HTREE directory inode 24001: node (100) has bad min hash
-Problem in HTREE directory inode 24001: node (100) has bad max hash
-Problem in HTREE directory inode 24001: node (101) has bad min hash
-Problem in HTREE directory inode 24001: node (101) has bad max hash
-Problem in HTREE directory inode 24001: node (102) has bad min hash
-Problem in HTREE directory inode 24001: node (102) has bad max hash
-Problem in HTREE directory inode 24001: node (103) has bad min hash
-Problem in HTREE directory inode 24001: node (103) has bad max hash
-Problem in HTREE directory inode 24001: node (104) has bad min hash
-Problem in HTREE directory inode 24001: node (104) has bad max hash
-Problem in HTREE directory inode 24001: node (105) has bad min hash
-Problem in HTREE directory inode 24001: node (105) has bad max hash
-Problem in HTREE directory inode 24001: node (106) has bad min hash
-Problem in HTREE directory inode 24001: node (106) has bad max hash
-Problem in HTREE directory inode 24001: node (107) has bad min hash
-Problem in HTREE directory inode 24001: node (107) has bad max hash
-Problem in HTREE directory inode 24001: node (108) has bad min hash
-Problem in HTREE directory inode 24001: node (108) has bad max hash
-Problem in HTREE directory inode 24001: node (109) has bad min hash
-Problem in HTREE directory inode 24001: node (109) has bad max hash
-Problem in HTREE directory inode 24001: node (110) has bad min hash
-Problem in HTREE directory inode 24001: node (110) has bad max hash
-Problem in HTREE directory inode 24001: node (111) has bad min hash
-Problem in HTREE directory inode 24001: node (111) has bad max hash
-Problem in HTREE directory inode 24001: node (112) has bad min hash
-Problem in HTREE directory inode 24001: node (112) has bad max hash
-Problem in HTREE directory inode 24001: node (113) has bad min hash
-Problem in HTREE directory inode 24001: node (113) has bad max hash
-Problem in HTREE directory inode 24001: node (114) has bad min hash
-Problem in HTREE directory inode 24001: node (114) has bad max hash
-Problem in HTREE directory inode 24001: node (115) has bad min hash
-Problem in HTREE directory inode 24001: node (115) has bad max hash
-Problem in HTREE directory inode 24001: node (116) has bad min hash
-Problem in HTREE directory inode 24001: node (116) has bad max hash
-Problem in HTREE directory inode 24001: node (117) has bad min hash
-Problem in HTREE directory inode 24001: node (117) has bad max hash
-Problem in HTREE directory inode 24001: node (118) has bad min hash
-Problem in HTREE directory inode 24001: node (118) has bad max hash
-Problem in HTREE directory inode 24001: node (119) has bad min hash
-Problem in HTREE directory inode 24001: node (119) has bad max hash
-Problem in HTREE directory inode 24001: node (120) has bad min hash
-Problem in HTREE directory inode 24001: node (120) has bad max hash
-Problem in HTREE directory inode 24001: node (121) has bad min hash
-Problem in HTREE directory inode 24001: node (121) has bad max hash
-Problem in HTREE directory inode 24001: node (122) has bad min hash
-Problem in HTREE directory inode 24001: node (122) has bad max hash
-Problem in HTREE directory inode 24001: node (123) has bad min hash
-Problem in HTREE directory inode 24001: node (123) has bad max hash
-Problem in HTREE directory inode 24001: node (124) has bad min hash
-Problem in HTREE directory inode 24001: node (124) has bad max hash
-Problem in HTREE directory inode 24001: node (125) has bad min hash
-Problem in HTREE directory inode 24001: node (125) has bad max hash
-Problem in HTREE directory inode 24001: node (126) has bad min hash
-Problem in HTREE directory inode 24001: node (126) has bad max hash
-Problem in HTREE directory inode 24001: node (127) has bad min hash
-Problem in HTREE directory inode 24001: node (128) has bad max hash
-Problem in HTREE directory inode 24001: node (129) has bad min hash
-Problem in HTREE directory inode 24001: node (129) has bad max hash
-Problem in HTREE directory inode 24001: node (130) has bad min hash
-Problem in HTREE directory inode 24001: node (130) has bad max hash
-Problem in HTREE directory inode 24001: node (131) has bad min hash
-Problem in HTREE directory inode 24001: node (131) has bad max hash
-Problem in HTREE directory inode 24001: node (132) has bad min hash
-Problem in HTREE directory inode 24001: node (132) has bad max hash
-Problem in HTREE directory inode 24001: node (133) has bad min hash
-Problem in HTREE directory inode 24001: node (133) has bad max hash
-Problem in HTREE directory inode 24001: node (134) has bad min hash
-Problem in HTREE directory inode 24001: node (134) has bad max hash
-Problem in HTREE directory inode 24001: node (135) has bad min hash
-Problem in HTREE directory inode 24001: node (135) has bad max hash
-Problem in HTREE directory inode 24001: node (136) has bad min hash
-Problem in HTREE directory inode 24001: node (136) has bad max hash
-Problem in HTREE directory inode 24001: node (137) has bad min hash
-Problem in HTREE directory inode 24001: node (137) has bad max hash
-Problem in HTREE directory inode 24001: node (138) has bad min hash
-Problem in HTREE directory inode 24001: node (138) has bad max hash
-Problem in HTREE directory inode 24001: node (139) has bad min hash
-Problem in HTREE directory inode 24001: node (139) has bad max hash
-Problem in HTREE directory inode 24001: node (140) has bad min hash
-Problem in HTREE directory inode 24001: node (140) has bad max hash
-Problem in HTREE directory inode 24001: node (141) has bad min hash
-Problem in HTREE directory inode 24001: node (141) has bad max hash
-Problem in HTREE directory inode 24001: node (142) has bad min hash
-Problem in HTREE directory inode 24001: node (142) has bad max hash
-Problem in HTREE directory inode 24001: node (143) has bad min hash
-Problem in HTREE directory inode 24001: node (143) has bad max hash
-Problem in HTREE directory inode 24001: node (144) has bad min hash
-Problem in HTREE directory inode 24001: node (144) has bad max hash
-Problem in HTREE directory inode 24001: node (145) has bad min hash
-Problem in HTREE directory inode 24001: node (145) has bad max hash
-Problem in HTREE directory inode 24001: node (146) has bad min hash
-Problem in HTREE directory inode 24001: node (146) has bad max hash
-Problem in HTREE directory inode 24001: node (147) has bad min hash
-Problem in HTREE directory inode 24001: node (147) has bad max hash
-Problem in HTREE directory inode 24001: node (148) has bad min hash
-Problem in HTREE directory inode 24001: node (148) has bad max hash
-Problem in HTREE directory inode 24001: node (149) has bad min hash
-Problem in HTREE directory inode 24001: node (149) has bad max hash
-Problem in HTREE directory inode 24001: node (150) has bad min hash
-Problem in HTREE directory inode 24001: node (150) has bad max hash
-Problem in HTREE directory inode 24001: node (151) has bad min hash
-Problem in HTREE directory inode 24001: node (151) has bad max hash
-Problem in HTREE directory inode 24001: node (152) has bad min hash
-Problem in HTREE directory inode 24001: node (152) has bad max hash
-Problem in HTREE directory inode 24001: node (153) has bad min hash
-Problem in HTREE directory inode 24001: node (153) has bad max hash
-Problem in HTREE directory inode 24001: node (154) has bad min hash
-Problem in HTREE directory inode 24001: node (154) has bad max hash
-Problem in HTREE directory inode 24001: node (155) has bad min hash
-Problem in HTREE directory inode 24001: node (155) has bad max hash
-Problem in HTREE directory inode 24001: node (156) has bad min hash
-Problem in HTREE directory inode 24001: node (156) has bad max hash
-Problem in HTREE directory inode 24001: node (157) has bad min hash
-Problem in HTREE directory inode 24001: node (157) has bad max hash
-Problem in HTREE directory inode 24001: node (158) has bad min hash
-Problem in HTREE directory inode 24001: node (158) has bad max hash
-Problem in HTREE directory inode 24001: node (159) has bad min hash
-Problem in HTREE directory inode 24001: node (159) has bad max hash
-Problem in HTREE directory inode 24001: node (160) has bad min hash
-Problem in HTREE directory inode 24001: node (160) has bad max hash
-Problem in HTREE directory inode 24001: node (161) has bad min hash
-Problem in HTREE directory inode 24001: node (161) has bad max hash
-Problem in HTREE directory inode 24001: node (162) has bad min hash
-Problem in HTREE directory inode 24001: node (162) has bad max hash
-Problem in HTREE directory inode 24001: node (163) has bad min hash
-Problem in HTREE directory inode 24001: node (163) has bad max hash
-Problem in HTREE directory inode 24001: node (164) has bad min hash
-Problem in HTREE directory inode 24001: node (164) has bad max hash
-Problem in HTREE directory inode 24001: node (165) has bad min hash
-Problem in HTREE directory inode 24001: node (165) has bad max hash
-Problem in HTREE directory inode 24001: node (166) has bad min hash
-Problem in HTREE directory inode 24001: node (166) has bad max hash
-Problem in HTREE directory inode 24001: node (167) has bad min hash
-Problem in HTREE directory inode 24001: node (167) has bad max hash
-Problem in HTREE directory inode 24001: node (168) has bad min hash
-Problem in HTREE directory inode 24001: node (168) has bad max hash
-Problem in HTREE directory inode 24001: node (169) has bad min hash
-Problem in HTREE directory inode 24001: node (169) has bad max hash
-Problem in HTREE directory inode 24001: node (170) has bad min hash
-Problem in HTREE directory inode 24001: node (170) has bad max hash
-Problem in HTREE directory inode 24001: node (171) has bad min hash
-Problem in HTREE directory inode 24001: node (171) has bad max hash
-Problem in HTREE directory inode 24001: node (172) has bad min hash
-Problem in HTREE directory inode 24001: node (172) has bad max hash
-Problem in HTREE directory inode 24001: node (173) has bad min hash
-Problem in HTREE directory inode 24001: node (173) has bad max hash
-Problem in HTREE directory inode 24001: node (174) has bad min hash
-Problem in HTREE directory inode 24001: node (174) has bad max hash
-Problem in HTREE directory inode 24001: node (175) has bad min hash
-Problem in HTREE directory inode 24001: node (175) has bad max hash
-Problem in HTREE directory inode 24001: node (176) has bad min hash
-Problem in HTREE directory inode 24001: node (176) has bad max hash
-Problem in HTREE directory inode 24001: node (177) has bad min hash
-Problem in HTREE directory inode 24001: node (177) has bad max hash
-Problem in HTREE directory inode 24001: node (178) has bad min hash
-Problem in HTREE directory inode 24001: node (178) has bad max hash
-Problem in HTREE directory inode 24001: node (179) has bad min hash
-Problem in HTREE directory inode 24001: node (179) has bad max hash
-Problem in HTREE directory inode 24001: node (180) has bad min hash
-Problem in HTREE directory inode 24001: node (180) has bad max hash
-Problem in HTREE directory inode 24001: node (181) has bad min hash
-Problem in HTREE directory inode 24001: node (181) has bad max hash
-Problem in HTREE directory inode 24001: node (182) has bad min hash
-Problem in HTREE directory inode 24001: node (182) has bad max hash
-Problem in HTREE directory inode 24001: node (183) has bad min hash
-Problem in HTREE directory inode 24001: node (183) has bad max hash
-Problem in HTREE directory inode 24001: node (184) has bad min hash
-Problem in HTREE directory inode 24001: node (184) has bad max hash
-Problem in HTREE directory inode 24001: node (185) has bad min hash
-Problem in HTREE directory inode 24001: node (185) has bad max hash
-Problem in HTREE directory inode 24001: node (186) has bad min hash
-Problem in HTREE directory inode 24001: node (186) has bad max hash
-Problem in HTREE directory inode 24001: node (187) has bad min hash
-Problem in HTREE directory inode 24001: node (187) has bad max hash
-Problem in HTREE directory inode 24001: node (188) has bad min hash
-Problem in HTREE directory inode 24001: node (188) has bad max hash
-Problem in HTREE directory inode 24001: node (189) has bad min hash
-Problem in HTREE directory inode 24001: node (189) has bad max hash
-Problem in HTREE directory inode 24001: node (190) has bad min hash
-Problem in HTREE directory inode 24001: node (190) has bad max hash
-Problem in HTREE directory inode 24001: node (191) has bad min hash
-Problem in HTREE directory inode 24001: node (191) has bad max hash
-Problem in HTREE directory inode 24001: node (192) has bad min hash
-Problem in HTREE directory inode 24001: node (192) has bad max hash
-Problem in HTREE directory inode 24001: node (193) has bad min hash
-Problem in HTREE directory inode 24001: node (193) has bad max hash
-Problem in HTREE directory inode 24001: node (194) has bad min hash
-Problem in HTREE directory inode 24001: node (194) has bad max hash
-Problem in HTREE directory inode 24001: node (195) has bad min hash
-Problem in HTREE directory inode 24001: node (195) has bad max hash
-Problem in HTREE directory inode 24001: node (196) has bad min hash
-Problem in HTREE directory inode 24001: node (196) has bad max hash
-Problem in HTREE directory inode 24001: node (197) has bad min hash
-Problem in HTREE directory inode 24001: node (197) has bad max hash
-Problem in HTREE directory inode 24001: node (198) has bad min hash
-Problem in HTREE directory inode 24001: node (198) has bad max hash
-Problem in HTREE directory inode 24001: node (199) has bad min hash
-Problem in HTREE directory inode 24001: node (199) has bad max hash
-Problem in HTREE directory inode 24001: node (200) has bad min hash
-Problem in HTREE directory inode 24001: node (200) has bad max hash
-Problem in HTREE directory inode 24001: node (201) has bad min hash
-Problem in HTREE directory inode 24001: node (201) has bad max hash
-Problem in HTREE directory inode 24001: node (202) has bad min hash
-Problem in HTREE directory inode 24001: node (202) has bad max hash
-Problem in HTREE directory inode 24001: node (203) has bad min hash
-Problem in HTREE directory inode 24001: node (203) has bad max hash
-Problem in HTREE directory inode 24001: node (204) has bad min hash
-Problem in HTREE directory inode 24001: node (204) has bad max hash
-Problem in HTREE directory inode 24001: node (205) has bad min hash
-Problem in HTREE directory inode 24001: node (205) has bad max hash
-Problem in HTREE directory inode 24001: node (206) has bad min hash
-Problem in HTREE directory inode 24001: node (206) has bad max hash
-Problem in HTREE directory inode 24001: node (207) has bad min hash
-Problem in HTREE directory inode 24001: node (207) has bad max hash
-Problem in HTREE directory inode 24001: node (208) has bad min hash
-Problem in HTREE directory inode 24001: node (208) has bad max hash
-Problem in HTREE directory inode 24001: node (209) has bad min hash
-Problem in HTREE directory inode 24001: node (209) has bad max hash
-Problem in HTREE directory inode 24001: node (210) has bad min hash
-Problem in HTREE directory inode 24001: node (210) has bad max hash
-Problem in HTREE directory inode 24001: node (211) has bad min hash
-Problem in HTREE directory inode 24001: node (211) has bad max hash
-Problem in HTREE directory inode 24001: node (212) has bad min hash
-Problem in HTREE directory inode 24001: node (212) has bad max hash
-Problem in HTREE directory inode 24001: node (213) has bad min hash
-Problem in HTREE directory inode 24001: node (213) has bad max hash
-Problem in HTREE directory inode 24001: node (214) has bad min hash
-Problem in HTREE directory inode 24001: node (214) has bad max hash
-Problem in HTREE directory inode 24001: node (215) has bad min hash
-Problem in HTREE directory inode 24001: node (215) has bad max hash
-Problem in HTREE directory inode 24001: node (216) has bad min hash
-Problem in HTREE directory inode 24001: node (216) has bad max hash
-Problem in HTREE directory inode 24001: node (217) has bad min hash
-Problem in HTREE directory inode 24001: node (217) has bad max hash
-Problem in HTREE directory inode 24001: node (218) has bad min hash
-Problem in HTREE directory inode 24001: node (218) has bad max hash
-Problem in HTREE directory inode 24001: node (219) has bad min hash
-Problem in HTREE directory inode 24001: node (219) has bad max hash
-Problem in HTREE directory inode 24001: node (220) has bad min hash
-Problem in HTREE directory inode 24001: node (220) has bad max hash
-Problem in HTREE directory inode 24001: node (221) has bad min hash
-Problem in HTREE directory inode 24001: node (221) has bad max hash
-Problem in HTREE directory inode 24001: node (222) has bad min hash
-Problem in HTREE directory inode 24001: node (222) has bad max hash
-Problem in HTREE directory inode 24001: node (223) has bad min hash
-Problem in HTREE directory inode 24001: node (223) has bad max hash
-Problem in HTREE directory inode 24001: node (224) has bad min hash
-Problem in HTREE directory inode 24001: node (224) has bad max hash
-Problem in HTREE directory inode 24001: node (225) has bad min hash
-Problem in HTREE directory inode 24001: node (225) has bad max hash
-Problem in HTREE directory inode 24001: node (226) has bad min hash
-Problem in HTREE directory inode 24001: node (226) has bad max hash
-Problem in HTREE directory inode 24001: node (227) has bad min hash
-Problem in HTREE directory inode 24001: node (227) has bad max hash
-Problem in HTREE directory inode 24001: node (228) has bad min hash
-Problem in HTREE directory inode 24001: node (228) has bad max hash
-Problem in HTREE directory inode 24001: node (229) has bad min hash
-Problem in HTREE directory inode 24001: node (229) has bad max hash
-Problem in HTREE directory inode 24001: node (230) has bad min hash
-Problem in HTREE directory inode 24001: node (230) has bad max hash
-Problem in HTREE directory inode 24001: node (231) has bad min hash
-Problem in HTREE directory inode 24001: node (231) has bad max hash
-Problem in HTREE directory inode 24001: node (232) has bad min hash
-Problem in HTREE directory inode 24001: node (232) has bad max hash
-Problem in HTREE directory inode 24001: node (233) has bad min hash
-Problem in HTREE directory inode 24001: node (233) has bad max hash
-Problem in HTREE directory inode 24001: node (234) has bad min hash
-Problem in HTREE directory inode 24001: node (234) has bad max hash
-Problem in HTREE directory inode 24001: node (235) has bad min hash
-Problem in HTREE directory inode 24001: node (235) has bad max hash
-Problem in HTREE directory inode 24001: node (236) has bad min hash
-Problem in HTREE directory inode 24001: node (236) has bad max hash
-Problem in HTREE directory inode 24001: node (237) has bad min hash
-Problem in HTREE directory inode 24001: node (237) has bad max hash
-Problem in HTREE directory inode 24001: node (238) has bad min hash
-Problem in HTREE directory inode 24001: node (238) has bad max hash
-Problem in HTREE directory inode 24001: node (239) has bad min hash
-Problem in HTREE directory inode 24001: node (239) has bad max hash
-Problem in HTREE directory inode 24001: node (240) has bad min hash
-Problem in HTREE directory inode 24001: node (240) has bad max hash
-Problem in HTREE directory inode 24001: node (241) has bad min hash
-Problem in HTREE directory inode 24001: node (241) has bad max hash
-Problem in HTREE directory inode 24001: node (242) has bad min hash
-Problem in HTREE directory inode 24001: node (242) has bad max hash
-Problem in HTREE directory inode 24001: node (243) has bad min hash
-Problem in HTREE directory inode 24001: node (243) has bad max hash
-Problem in HTREE directory inode 24001: node (244) has bad min hash
-Problem in HTREE directory inode 24001: node (244) has bad max hash
-Problem in HTREE directory inode 24001: node (245) has bad min hash
-Problem in HTREE directory inode 24001: node (245) has bad max hash
-Problem in HTREE directory inode 24001: node (246) has bad min hash
-Problem in HTREE directory inode 24001: node (246) has bad max hash
-Problem in HTREE directory inode 24001: node (247) has bad min hash
-Problem in HTREE directory inode 24001: node (247) has bad max hash
-Problem in HTREE directory inode 24001: node (248) has bad min hash
-Problem in HTREE directory inode 24001: node (248) has bad max hash
-Problem in HTREE directory inode 24001: node (249) has bad min hash
-Problem in HTREE directory inode 24001: node (249) has bad max hash
-Problem in HTREE directory inode 24001: node (250) has bad min hash
-Problem in HTREE directory inode 24001: node (250) has bad max hash
-Problem in HTREE directory inode 24001: node (251) has bad min hash
-Problem in HTREE directory inode 24001: node (251) has bad max hash
-Problem in HTREE directory inode 24001: node (252) has bad min hash
-Problem in HTREE directory inode 24001: node (252) has bad max hash
-Problem in HTREE directory inode 24001: node (253) has bad min hash
-Problem in HTREE directory inode 24001: node (253) has bad max hash
-Problem in HTREE directory inode 24001: node (254) has bad min hash
-Problem in HTREE directory inode 24001: node (255) has bad max hash
-Problem in HTREE directory inode 24001: node (256) has bad min hash
-Problem in HTREE directory inode 24001: node (256) has bad max hash
-Problem in HTREE directory inode 24001: node (257) has bad min hash
-Problem in HTREE directory inode 24001: node (257) has bad max hash
-Problem in HTREE directory inode 24001: node (258) has bad min hash
-Problem in HTREE directory inode 24001: node (258) has bad max hash
-Problem in HTREE directory inode 24001: node (259) has bad min hash
-Problem in HTREE directory inode 24001: node (259) has bad max hash
-Problem in HTREE directory inode 24001: node (260) has bad min hash
-Problem in HTREE directory inode 24001: node (260) has bad max hash
-Problem in HTREE directory inode 24001: node (261) has bad min hash
-Problem in HTREE directory inode 24001: node (261) has bad max hash
-Problem in HTREE directory inode 24001: node (262) has bad min hash
-Problem in HTREE directory inode 24001: node (262) has bad max hash
-Problem in HTREE directory inode 24001: node (263) has bad min hash
-Problem in HTREE directory inode 24001: node (263) has bad max hash
-Problem in HTREE directory inode 24001: node (264) has bad min hash
-Problem in HTREE directory inode 24001: node (264) has bad max hash
-Problem in HTREE directory inode 24001: node (265) has bad min hash
-Problem in HTREE directory inode 24001: node (265) has bad max hash
-Problem in HTREE directory inode 24001: node (266) has bad min hash
-Problem in HTREE directory inode 24001: node (266) has bad max hash
-Problem in HTREE directory inode 24001: node (267) has bad min hash
-Problem in HTREE directory inode 24001: node (267) has bad max hash
-Problem in HTREE directory inode 24001: node (268) has bad min hash
-Problem in HTREE directory inode 24001: node (268) has bad max hash
-Problem in HTREE directory inode 24001: node (269) has bad min hash
-Problem in HTREE directory inode 24001: node (269) has bad max hash
-Problem in HTREE directory inode 24001: node (270) has bad min hash
-Problem in HTREE directory inode 24001: node (270) has bad max hash
-Problem in HTREE directory inode 24001: node (271) has bad min hash
-Problem in HTREE directory inode 24001: node (271) has bad max hash
-Problem in HTREE directory inode 24001: node (272) has bad min hash
-Problem in HTREE directory inode 24001: node (272) has bad max hash
-Problem in HTREE directory inode 24001: node (273) has bad min hash
-Problem in HTREE directory inode 24001: node (273) has bad max hash
-Problem in HTREE directory inode 24001: node (274) has bad min hash
-Problem in HTREE directory inode 24001: node (274) has bad max hash
-Problem in HTREE directory inode 24001: node (275) has bad min hash
-Problem in HTREE directory inode 24001: node (275) has bad max hash
-Problem in HTREE directory inode 24001: node (276) has bad min hash
-Problem in HTREE directory inode 24001: node (276) has bad max hash
-Problem in HTREE directory inode 24001: node (277) has bad min hash
-Problem in HTREE directory inode 24001: node (277) has bad max hash
-Problem in HTREE directory inode 24001: node (278) has bad min hash
-Problem in HTREE directory inode 24001: node (278) has bad max hash
-Problem in HTREE directory inode 24001: node (279) has bad min hash
-Problem in HTREE directory inode 24001: node (279) has bad max hash
-Problem in HTREE directory inode 24001: node (280) has bad min hash
-Problem in HTREE directory inode 24001: node (280) has bad max hash
-Problem in HTREE directory inode 24001: node (281) has bad min hash
-Problem in HTREE directory inode 24001: node (281) has bad max hash
-Problem in HTREE directory inode 24001: node (282) has bad min hash
-Problem in HTREE directory inode 24001: node (282) has bad max hash
-Problem in HTREE directory inode 24001: node (283) has bad min hash
-Problem in HTREE directory inode 24001: node (283) has bad max hash
-Problem in HTREE directory inode 24001: node (284) has bad min hash
-Problem in HTREE directory inode 24001: node (284) has bad max hash
-Problem in HTREE directory inode 24001: node (285) has bad min hash
-Problem in HTREE directory inode 24001: node (285) has bad max hash
-Problem in HTREE directory inode 24001: node (286) has bad min hash
-Problem in HTREE directory inode 24001: node (286) has bad max hash
-Problem in HTREE directory inode 24001: node (287) has bad min hash
-Problem in HTREE directory inode 24001: node (287) has bad max hash
-Problem in HTREE directory inode 24001: node (288) has bad min hash
-Problem in HTREE directory inode 24001: node (288) has bad max hash
-Problem in HTREE directory inode 24001: node (289) has bad min hash
-Problem in HTREE directory inode 24001: node (289) has bad max hash
-Problem in HTREE directory inode 24001: node (290) has bad min hash
-Problem in HTREE directory inode 24001: node (290) has bad max hash
-Problem in HTREE directory inode 24001: node (291) has bad min hash
-Problem in HTREE directory inode 24001: node (291) has bad max hash
-Problem in HTREE directory inode 24001: node (292) has bad min hash
-Problem in HTREE directory inode 24001: node (292) has bad max hash
-Problem in HTREE directory inode 24001: node (293) has bad min hash
-Problem in HTREE directory inode 24001: node (293) has bad max hash
-Problem in HTREE directory inode 24001: node (294) has bad min hash
-Problem in HTREE directory inode 24001: node (294) has bad max hash
-Problem in HTREE directory inode 24001: node (295) has bad min hash
-Problem in HTREE directory inode 24001: node (295) has bad max hash
-Problem in HTREE directory inode 24001: node (296) has bad min hash
-Problem in HTREE directory inode 24001: node (296) has bad max hash
-Problem in HTREE directory inode 24001: node (297) has bad min hash
-Problem in HTREE directory inode 24001: node (297) has bad max hash
-Problem in HTREE directory inode 24001: node (298) has bad min hash
-Problem in HTREE directory inode 24001: node (298) has bad max hash
-Problem in HTREE directory inode 24001: node (299) has bad min hash
-Problem in HTREE directory inode 24001: node (299) has bad max hash
-Problem in HTREE directory inode 24001: node (300) has bad min hash
-Problem in HTREE directory inode 24001: node (300) has bad max hash
-Problem in HTREE directory inode 24001: node (301) has bad min hash
-Problem in HTREE directory inode 24001: node (301) has bad max hash
-Problem in HTREE directory inode 24001: node (302) has bad min hash
-Problem in HTREE directory inode 24001: node (302) has bad max hash
-Problem in HTREE directory inode 24001: node (303) has bad min hash
-Problem in HTREE directory inode 24001: node (303) has bad max hash
-Problem in HTREE directory inode 24001: node (304) has bad min hash
-Problem in HTREE directory inode 24001: node (304) has bad max hash
-Problem in HTREE directory inode 24001: node (305) has bad min hash
-Problem in HTREE directory inode 24001: node (305) has bad max hash
-Problem in HTREE directory inode 24001: node (306) has bad min hash
-Problem in HTREE directory inode 24001: node (306) has bad max hash
-Problem in HTREE directory inode 24001: node (307) has bad min hash
-Problem in HTREE directory inode 24001: node (307) has bad max hash
-Problem in HTREE directory inode 24001: node (308) has bad min hash
-Problem in HTREE directory inode 24001: node (308) has bad max hash
-Problem in HTREE directory inode 24001: node (309) has bad min hash
-Problem in HTREE directory inode 24001: node (309) has bad max hash
-Problem in HTREE directory inode 24001: node (310) has bad min hash
-Problem in HTREE directory inode 24001: node (310) has bad max hash
-Problem in HTREE directory inode 24001: node (311) has bad min hash
-Problem in HTREE directory inode 24001: node (311) has bad max hash
-Problem in HTREE directory inode 24001: node (312) has bad min hash
-Problem in HTREE directory inode 24001: node (312) has bad max hash
-Problem in HTREE directory inode 24001: node (313) has bad min hash
-Problem in HTREE directory inode 24001: node (313) has bad max hash
-Problem in HTREE directory inode 24001: node (314) has bad min hash
-Problem in HTREE directory inode 24001: node (314) has bad max hash
-Problem in HTREE directory inode 24001: node (315) has bad min hash
-Problem in HTREE directory inode 24001: node (315) has bad max hash
-Problem in HTREE directory inode 24001: node (316) has bad min hash
-Problem in HTREE directory inode 24001: node (316) has bad max hash
-Problem in HTREE directory inode 24001: node (317) has bad min hash
-Problem in HTREE directory inode 24001: node (317) has bad max hash
-Problem in HTREE directory inode 24001: node (318) has bad min hash
-Problem in HTREE directory inode 24001: node (318) has bad max hash
-Problem in HTREE directory inode 24001: node (319) has bad min hash
-Problem in HTREE directory inode 24001: node (319) has bad max hash
-Problem in HTREE directory inode 24001: node (320) has bad min hash
-Problem in HTREE directory inode 24001: node (320) has bad max hash
-Problem in HTREE directory inode 24001: node (321) has bad min hash
-Problem in HTREE directory inode 24001: node (321) has bad max hash
-Problem in HTREE directory inode 24001: node (322) has bad min hash
-Problem in HTREE directory inode 24001: node (322) has bad max hash
-Problem in HTREE directory inode 24001: node (323) has bad min hash
-Problem in HTREE directory inode 24001: node (323) has bad max hash
-Problem in HTREE directory inode 24001: node (324) has bad min hash
-Problem in HTREE directory inode 24001: node (324) has bad max hash
-Problem in HTREE directory inode 24001: node (325) has bad min hash
-Problem in HTREE directory inode 24001: node (325) has bad max hash
-Problem in HTREE directory inode 24001: node (326) has bad min hash
-Problem in HTREE directory inode 24001: node (326) has bad max hash
-Problem in HTREE directory inode 24001: node (327) has bad min hash
-Problem in HTREE directory inode 24001: node (327) has bad max hash
-Problem in HTREE directory inode 24001: node (328) has bad min hash
-Problem in HTREE directory inode 24001: node (328) has bad max hash
-Problem in HTREE directory inode 24001: node (329) has bad min hash
-Problem in HTREE directory inode 24001: node (329) has bad max hash
-Problem in HTREE directory inode 24001: node (330) has bad min hash
-Problem in HTREE directory inode 24001: node (330) has bad max hash
-Problem in HTREE directory inode 24001: node (331) has bad min hash
-Problem in HTREE directory inode 24001: node (331) has bad max hash
-Problem in HTREE directory inode 24001: node (332) has bad min hash
-Problem in HTREE directory inode 24001: node (332) has bad max hash
-Problem in HTREE directory inode 24001: node (333) has bad min hash
-Problem in HTREE directory inode 24001: node (333) has bad max hash
-Problem in HTREE directory inode 24001: node (334) has bad min hash
-Problem in HTREE directory inode 24001: node (334) has bad max hash
-Problem in HTREE directory inode 24001: node (335) has bad min hash
-Problem in HTREE directory inode 24001: node (335) has bad max hash
-Problem in HTREE directory inode 24001: node (336) has bad min hash
-Problem in HTREE directory inode 24001: node (336) has bad max hash
-Problem in HTREE directory inode 24001: node (337) has bad min hash
-Problem in HTREE directory inode 24001: node (337) has bad max hash
-Problem in HTREE directory inode 24001: node (338) has bad min hash
-Problem in HTREE directory inode 24001: node (338) has bad max hash
-Problem in HTREE directory inode 24001: node (339) has bad min hash
-Problem in HTREE directory inode 24001: node (339) has bad max hash
-Problem in HTREE directory inode 24001: node (340) has bad min hash
-Problem in HTREE directory inode 24001: node (340) has bad max hash
-Problem in HTREE directory inode 24001: node (341) has bad min hash
-Problem in HTREE directory inode 24001: node (341) has bad max hash
-Problem in HTREE directory inode 24001: node (342) has bad min hash
-Problem in HTREE directory inode 24001: node (342) has bad max hash
-Problem in HTREE directory inode 24001: node (343) has bad min hash
-Problem in HTREE directory inode 24001: node (343) has bad max hash
-Problem in HTREE directory inode 24001: node (344) has bad min hash
-Problem in HTREE directory inode 24001: node (344) has bad max hash
-Problem in HTREE directory inode 24001: node (345) has bad min hash
-Problem in HTREE directory inode 24001: node (345) has bad max hash
-Problem in HTREE directory inode 24001: node (346) has bad min hash
-Problem in HTREE directory inode 24001: node (346) has bad max hash
-Problem in HTREE directory inode 24001: node (347) has bad min hash
-Problem in HTREE directory inode 24001: node (347) has bad max hash
-Problem in HTREE directory inode 24001: node (348) has bad min hash
-Problem in HTREE directory inode 24001: node (348) has bad max hash
-Problem in HTREE directory inode 24001: node (349) has bad min hash
-Problem in HTREE directory inode 24001: node (349) has bad max hash
-Problem in HTREE directory inode 24001: node (350) has bad min hash
-Problem in HTREE directory inode 24001: node (350) has bad max hash
-Problem in HTREE directory inode 24001: node (351) has bad min hash
-Problem in HTREE directory inode 24001: node (351) has bad max hash
-Problem in HTREE directory inode 24001: node (352) has bad min hash
-Problem in HTREE directory inode 24001: node (352) has bad max hash
-Problem in HTREE directory inode 24001: node (353) has bad min hash
-Problem in HTREE directory inode 24001: node (353) has bad max hash
-Problem in HTREE directory inode 24001: node (354) has bad min hash
-Problem in HTREE directory inode 24001: node (354) has bad max hash
-Problem in HTREE directory inode 24001: node (355) has bad min hash
-Problem in HTREE directory inode 24001: node (355) has bad max hash
-Problem in HTREE directory inode 24001: node (356) has bad min hash
-Problem in HTREE directory inode 24001: node (356) has bad max hash
-Problem in HTREE directory inode 24001: node (357) has bad min hash
-Problem in HTREE directory inode 24001: node (357) has bad max hash
-Problem in HTREE directory inode 24001: node (358) has bad min hash
-Problem in HTREE directory inode 24001: node (358) has bad max hash
-Problem in HTREE directory inode 24001: node (359) has bad min hash
-Problem in HTREE directory inode 24001: node (359) has bad max hash
-Problem in HTREE directory inode 24001: node (360) has bad min hash
-Problem in HTREE directory inode 24001: node (360) has bad max hash
-Problem in HTREE directory inode 24001: node (361) has bad min hash
-Problem in HTREE directory inode 24001: node (361) has bad max hash
-Problem in HTREE directory inode 24001: node (362) has bad min hash
-Problem in HTREE directory inode 24001: node (362) has bad max hash
-Problem in HTREE directory inode 24001: node (363) has bad min hash
-Problem in HTREE directory inode 24001: node (363) has bad max hash
-Problem in HTREE directory inode 24001: node (364) has bad min hash
-Problem in HTREE directory inode 24001: node (364) has bad max hash
-Problem in HTREE directory inode 24001: node (365) has bad min hash
-Problem in HTREE directory inode 24001: node (365) has bad max hash
-Problem in HTREE directory inode 24001: node (366) has bad min hash
-Problem in HTREE directory inode 24001: node (366) has bad max hash
-Problem in HTREE directory inode 24001: node (367) has bad min hash
-Problem in HTREE directory inode 24001: node (367) has bad max hash
-Problem in HTREE directory inode 24001: node (368) has bad min hash
-Problem in HTREE directory inode 24001: node (368) has bad max hash
-Problem in HTREE directory inode 24001: node (369) has bad min hash
-Problem in HTREE directory inode 24001: node (369) has bad max hash
-Problem in HTREE directory inode 24001: node (370) has bad min hash
-Problem in HTREE directory inode 24001: node (370) has bad max hash
-Problem in HTREE directory inode 24001: node (371) has bad min hash
-Problem in HTREE directory inode 24001: node (371) has bad max hash
-Problem in HTREE directory inode 24001: node (372) has bad min hash
-Problem in HTREE directory inode 24001: node (372) has bad max hash
-Problem in HTREE directory inode 24001: node (373) has bad min hash
-Problem in HTREE directory inode 24001: node (373) has bad max hash
-Problem in HTREE directory inode 24001: node (374) has bad min hash
-Problem in HTREE directory inode 24001: node (374) has bad max hash
-Problem in HTREE directory inode 24001: node (375) has bad min hash
-Problem in HTREE directory inode 24001: node (375) has bad max hash
-Problem in HTREE directory inode 24001: node (376) has bad min hash
-Problem in HTREE directory inode 24001: node (376) has bad max hash
-Problem in HTREE directory inode 24001: node (377) has bad min hash
-Problem in HTREE directory inode 24001: node (377) has bad max hash
-Problem in HTREE directory inode 24001: node (378) has bad min hash
-Problem in HTREE directory inode 24001: node (378) has bad max hash
-Problem in HTREE directory inode 24001: node (379) has bad min hash
-Problem in HTREE directory inode 24001: node (379) has bad max hash
-Problem in HTREE directory inode 24001: node (380) has bad min hash
-Problem in HTREE directory inode 24001: node (380) has bad max hash
-Problem in HTREE directory inode 24001: node (381) has bad min hash
-Problem in HTREE directory inode 24001: node (382) has bad max hash
-Problem in HTREE directory inode 24001: node (383) has bad min hash
-Problem in HTREE directory inode 24001: node (383) has bad max hash
-Problem in HTREE directory inode 24001: node (384) has bad min hash
-Problem in HTREE directory inode 24001: node (384) has bad max hash
-Problem in HTREE directory inode 24001: node (385) has bad min hash
-Problem in HTREE directory inode 24001: node (385) has bad max hash
-Problem in HTREE directory inode 24001: node (386) has bad min hash
-Problem in HTREE directory inode 24001: node (386) has bad max hash
-Problem in HTREE directory inode 24001: node (387) has bad min hash
-Problem in HTREE directory inode 24001: node (387) has bad max hash
-Problem in HTREE directory inode 24001: node (388) has bad min hash
-Problem in HTREE directory inode 24001: node (388) has bad max hash
-Problem in HTREE directory inode 24001: node (389) has bad min hash
-Problem in HTREE directory inode 24001: node (389) has bad max hash
-Problem in HTREE directory inode 24001: node (390) has bad min hash
-Problem in HTREE directory inode 24001: node (390) has bad max hash
-Problem in HTREE directory inode 24001: node (391) has bad min hash
-Problem in HTREE directory inode 24001: node (391) has bad max hash
-Problem in HTREE directory inode 24001: node (392) has bad min hash
-Problem in HTREE directory inode 24001: node (392) has bad max hash
-Problem in HTREE directory inode 24001: node (393) has bad min hash
-Problem in HTREE directory inode 24001: node (393) has bad max hash
-Problem in HTREE directory inode 24001: node (394) has bad min hash
-Problem in HTREE directory inode 24001: node (394) has bad max hash
-Problem in HTREE directory inode 24001: node (395) has bad min hash
-Problem in HTREE directory inode 24001: node (395) has bad max hash
-Problem in HTREE directory inode 24001: node (396) has bad min hash
-Problem in HTREE directory inode 24001: node (396) has bad max hash
-Problem in HTREE directory inode 24001: node (397) has bad min hash
-Problem in HTREE directory inode 24001: node (397) has bad max hash
-Problem in HTREE directory inode 24001: node (398) has bad min hash
-Problem in HTREE directory inode 24001: node (398) has bad max hash
-Problem in HTREE directory inode 24001: node (399) has bad min hash
-Problem in HTREE directory inode 24001: node (399) has bad max hash
-Problem in HTREE directory inode 24001: node (400) has bad min hash
-Problem in HTREE directory inode 24001: node (400) has bad max hash
-Problem in HTREE directory inode 24001: node (401) has bad min hash
-Problem in HTREE directory inode 24001: node (401) has bad max hash
-Problem in HTREE directory inode 24001: node (402) has bad min hash
-Problem in HTREE directory inode 24001: node (402) has bad max hash
-Problem in HTREE directory inode 24001: node (403) has bad min hash
-Problem in HTREE directory inode 24001: node (403) has bad max hash
-Problem in HTREE directory inode 24001: node (404) has bad min hash
-Problem in HTREE directory inode 24001: node (404) has bad max hash
-Problem in HTREE directory inode 24001: node (405) has bad min hash
-Problem in HTREE directory inode 24001: node (405) has bad max hash
-Problem in HTREE directory inode 24001: node (406) has bad min hash
-Problem in HTREE directory inode 24001: node (406) has bad max hash
-Problem in HTREE directory inode 24001: node (407) has bad min hash
-Problem in HTREE directory inode 24001: node (407) has bad max hash
-Problem in HTREE directory inode 24001: node (408) has bad min hash
-Problem in HTREE directory inode 24001: node (408) has bad max hash
-Problem in HTREE directory inode 24001: node (409) has bad min hash
-Problem in HTREE directory inode 24001: node (409) has bad max hash
-Problem in HTREE directory inode 24001: node (410) has bad min hash
-Problem in HTREE directory inode 24001: node (410) has bad max hash
-Problem in HTREE directory inode 24001: node (411) has bad min hash
-Problem in HTREE directory inode 24001: node (411) has bad max hash
-Problem in HTREE directory inode 24001: node (412) has bad min hash
-Problem in HTREE directory inode 24001: node (412) has bad max hash
-Problem in HTREE directory inode 24001: node (413) has bad min hash
-Problem in HTREE directory inode 24001: node (413) has bad max hash
-Problem in HTREE directory inode 24001: node (414) has bad min hash
-Problem in HTREE directory inode 24001: node (414) has bad max hash
-Problem in HTREE directory inode 24001: node (415) has bad min hash
-Problem in HTREE directory inode 24001: node (415) has bad max hash
-Problem in HTREE directory inode 24001: node (416) has bad min hash
-Problem in HTREE directory inode 24001: node (416) has bad max hash
-Problem in HTREE directory inode 24001: node (417) has bad min hash
-Problem in HTREE directory inode 24001: node (417) has bad max hash
-Problem in HTREE directory inode 24001: node (418) has bad min hash
-Problem in HTREE directory inode 24001: node (418) has bad max hash
-Problem in HTREE directory inode 24001: node (419) has bad min hash
-Problem in HTREE directory inode 24001: node (419) has bad max hash
-Problem in HTREE directory inode 24001: node (420) has bad min hash
-Problem in HTREE directory inode 24001: node (420) has bad max hash
-Problem in HTREE directory inode 24001: node (421) has bad min hash
-Problem in HTREE directory inode 24001: node (421) has bad max hash
-Problem in HTREE directory inode 24001: node (422) has bad min hash
-Problem in HTREE directory inode 24001: node (422) has bad max hash
-Problem in HTREE directory inode 24001: node (423) has bad min hash
-Problem in HTREE directory inode 24001: node (423) has bad max hash
-Problem in HTREE directory inode 24001: node (424) has bad min hash
-Problem in HTREE directory inode 24001: node (424) has bad max hash
-Problem in HTREE directory inode 24001: node (425) has bad min hash
-Problem in HTREE directory inode 24001: node (425) has bad max hash
-Problem in HTREE directory inode 24001: node (426) has bad min hash
-Problem in HTREE directory inode 24001: node (426) has bad max hash
-Problem in HTREE directory inode 24001: node (427) has bad min hash
-Problem in HTREE directory inode 24001: node (427) has bad max hash
-Problem in HTREE directory inode 24001: node (428) has bad min hash
-Problem in HTREE directory inode 24001: node (428) has bad max hash
-Problem in HTREE directory inode 24001: node (429) has bad min hash
-Problem in HTREE directory inode 24001: node (429) has bad max hash
-Problem in HTREE directory inode 24001: node (430) has bad min hash
-Problem in HTREE directory inode 24001: node (430) has bad max hash
-Problem in HTREE directory inode 24001: node (431) has bad min hash
-Problem in HTREE directory inode 24001: node (431) has bad max hash
-Problem in HTREE directory inode 24001: node (432) has bad min hash
-Problem in HTREE directory inode 24001: node (432) has bad max hash
-Problem in HTREE directory inode 24001: node (433) has bad min hash
-Problem in HTREE directory inode 24001: node (433) has bad max hash
-Problem in HTREE directory inode 24001: node (434) has bad min hash
-Problem in HTREE directory inode 24001: node (434) has bad max hash
-Problem in HTREE directory inode 24001: node (435) has bad min hash
-Problem in HTREE directory inode 24001: node (435) has bad max hash
-Problem in HTREE directory inode 24001: node (436) has bad min hash
-Problem in HTREE directory inode 24001: node (436) has bad max hash
-Problem in HTREE directory inode 24001: node (437) has bad min hash
-Problem in HTREE directory inode 24001: node (437) has bad max hash
-Problem in HTREE directory inode 24001: node (438) has bad min hash
-Problem in HTREE directory inode 24001: node (438) has bad max hash
-Problem in HTREE directory inode 24001: node (439) has bad min hash
-Problem in HTREE directory inode 24001: node (439) has bad max hash
-Problem in HTREE directory inode 24001: node (440) has bad min hash
-Problem in HTREE directory inode 24001: node (440) has bad max hash
-Problem in HTREE directory inode 24001: node (441) has bad min hash
-Problem in HTREE directory inode 24001: node (441) has bad max hash
-Problem in HTREE directory inode 24001: node (442) has bad min hash
-Problem in HTREE directory inode 24001: node (442) has bad max hash
-Problem in HTREE directory inode 24001: node (443) has bad min hash
-Problem in HTREE directory inode 24001: node (443) has bad max hash
-Problem in HTREE directory inode 24001: node (444) has bad min hash
-Problem in HTREE directory inode 24001: node (444) has bad max hash
-Problem in HTREE directory inode 24001: node (445) has bad min hash
-Problem in HTREE directory inode 24001: node (445) has bad max hash
-Problem in HTREE directory inode 24001: node (446) has bad min hash
-Problem in HTREE directory inode 24001: node (446) has bad max hash
-Problem in HTREE directory inode 24001: node (447) has bad min hash
-Problem in HTREE directory inode 24001: node (447) has bad max hash
-Problem in HTREE directory inode 24001: node (448) has bad min hash
-Problem in HTREE directory inode 24001: node (448) has bad max hash
-Problem in HTREE directory inode 24001: node (449) has bad min hash
-Problem in HTREE directory inode 24001: node (449) has bad max hash
-Problem in HTREE directory inode 24001: node (450) has bad min hash
-Problem in HTREE directory inode 24001: node (450) has bad max hash
-Problem in HTREE directory inode 24001: node (451) has bad min hash
-Problem in HTREE directory inode 24001: node (451) has bad max hash
-Problem in HTREE directory inode 24001: node (452) has bad min hash
-Problem in HTREE directory inode 24001: node (452) has bad max hash
-Problem in HTREE directory inode 24001: node (453) has bad min hash
-Problem in HTREE directory inode 24001: node (453) has bad max hash
-Problem in HTREE directory inode 24001: node (454) has bad min hash
-Problem in HTREE directory inode 24001: node (454) has bad max hash
-Problem in HTREE directory inode 24001: node (455) has bad min hash
-Problem in HTREE directory inode 24001: node (455) has bad max hash
-Problem in HTREE directory inode 24001: node (456) has bad min hash
-Problem in HTREE directory inode 24001: node (457) has bad min hash
-Problem in HTREE directory inode 24001: node (457) has bad max hash
-Problem in HTREE directory inode 24001: node (458) has bad min hash
-Problem in HTREE directory inode 24001: node (458) has bad max hash
-Problem in HTREE directory inode 24001: node (459) has bad min hash
-Problem in HTREE directory inode 24001: node (459) has bad max hash
-Problem in HTREE directory inode 24001: node (460) has bad min hash
-Problem in HTREE directory inode 24001: node (460) has bad max hash
-Problem in HTREE directory inode 24001: node (461) has bad min hash
-Problem in HTREE directory inode 24001: node (461) has bad max hash
-Problem in HTREE directory inode 24001: node (462) has bad min hash
-Problem in HTREE directory inode 24001: node (463) has bad min hash
-Problem in HTREE directory inode 24001: node (463) has bad max hash
-Problem in HTREE directory inode 24001: node (464) has bad min hash
-Problem in HTREE directory inode 24001: node (464) has bad max hash
-Problem in HTREE directory inode 24001: node (465) has bad min hash
-Problem in HTREE directory inode 24001: node (466) has bad min hash
-Problem in HTREE directory inode 24001: node (466) has bad max hash
-Problem in HTREE directory inode 24001: node (467) has bad min hash
-Problem in HTREE directory inode 24001: node (468) has bad min hash
-Problem in HTREE directory inode 24001: node (468) has bad max hash
-Problem in HTREE directory inode 24001: node (469) has bad min hash
-Problem in HTREE directory inode 24001: node (470) has bad max hash
-Problem in HTREE directory inode 24001: node (471) has bad min hash
-Problem in HTREE directory inode 24001: node (471) has bad max hash
-Problem in HTREE directory inode 24001: node (472) has bad min hash
-Problem in HTREE directory inode 24001: node (472) has bad max hash
-Problem in HTREE directory inode 24001: node (473) has bad min hash
+Problem in HTREE directory inode 24001: block #1 has bad max hash
+Problem in HTREE directory inode 24001: block #2 has bad max hash
+Problem in HTREE directory inode 24001: block #3 has bad min hash
+Problem in HTREE directory inode 24001: block #3 has bad max hash
+Problem in HTREE directory inode 24001: block #4 has bad max hash
+Problem in HTREE directory inode 24001: block #5 has bad min hash
+Problem in HTREE directory inode 24001: block #5 has bad max hash
+Problem in HTREE directory inode 24001: block #6 has bad min hash
+Problem in HTREE directory inode 24001: block #6 has bad max hash
+Problem in HTREE directory inode 24001: block #7 has bad min hash
+Problem in HTREE directory inode 24001: block #7 has bad max hash
+Problem in HTREE directory inode 24001: block #8 has bad max hash
+Problem in HTREE directory inode 24001: block #9 has bad min hash
+Problem in HTREE directory inode 24001: block #9 has bad max hash
+Problem in HTREE directory inode 24001: block #10 has bad min hash
+Problem in HTREE directory inode 24001: block #10 has bad max hash
+Problem in HTREE directory inode 24001: block #11 has bad max hash
+Problem in HTREE directory inode 24001: block #12 has bad min hash
+Problem in HTREE directory inode 24001: block #12 has bad max hash
+Problem in HTREE directory inode 24001: block #13 has bad min hash
+Problem in HTREE directory inode 24001: block #13 has bad max hash
+Problem in HTREE directory inode 24001: block #14 has bad min hash
+Problem in HTREE directory inode 24001: block #14 has bad max hash
+Problem in HTREE directory inode 24001: block #15 has bad min hash
+Problem in HTREE directory inode 24001: block #15 has bad max hash
+Problem in HTREE directory inode 24001: block #16 has bad min hash
+Problem in HTREE directory inode 24001: block #16 has bad max hash
+Problem in HTREE directory inode 24001: block #17 has bad min hash
+Problem in HTREE directory inode 24001: block #17 has bad max hash
+Problem in HTREE directory inode 24001: block #18 has bad min hash
+Problem in HTREE directory inode 24001: block #18 has bad max hash
+Problem in HTREE directory inode 24001: block #19 has bad min hash
+Problem in HTREE directory inode 24001: block #19 has bad max hash
+Problem in HTREE directory inode 24001: block #20 has bad min hash
+Problem in HTREE directory inode 24001: block #20 has bad max hash
+Problem in HTREE directory inode 24001: block #21 has bad min hash
+Problem in HTREE directory inode 24001: block #21 has bad max hash
+Problem in HTREE directory inode 24001: block #22 has bad min hash
+Problem in HTREE directory inode 24001: block #22 has bad max hash
+Problem in HTREE directory inode 24001: block #23 has bad min hash
+Problem in HTREE directory inode 24001: block #23 has bad max hash
+Problem in HTREE directory inode 24001: block #24 has bad min hash
+Problem in HTREE directory inode 24001: block #24 has bad max hash
+Problem in HTREE directory inode 24001: block #25 has bad min hash
+Problem in HTREE directory inode 24001: block #25 has bad max hash
+Problem in HTREE directory inode 24001: block #26 has bad min hash
+Problem in HTREE directory inode 24001: block #26 has bad max hash
+Problem in HTREE directory inode 24001: block #27 has bad min hash
+Problem in HTREE directory inode 24001: block #27 has bad max hash
+Problem in HTREE directory inode 24001: block #28 has bad min hash
+Problem in HTREE directory inode 24001: block #28 has bad max hash
+Problem in HTREE directory inode 24001: block #29 has bad min hash
+Problem in HTREE directory inode 24001: block #29 has bad max hash
+Problem in HTREE directory inode 24001: block #30 has bad min hash
+Problem in HTREE directory inode 24001: block #30 has bad max hash
+Problem in HTREE directory inode 24001: block #31 has bad min hash
+Problem in HTREE directory inode 24001: block #31 has bad max hash
+Problem in HTREE directory inode 24001: block #32 has bad min hash
+Problem in HTREE directory inode 24001: block #32 has bad max hash
+Problem in HTREE directory inode 24001: block #33 has bad min hash
+Problem in HTREE directory inode 24001: block #33 has bad max hash
+Problem in HTREE directory inode 24001: block #34 has bad min hash
+Problem in HTREE directory inode 24001: block #34 has bad max hash
+Problem in HTREE directory inode 24001: block #35 has bad min hash
+Problem in HTREE directory inode 24001: block #35 has bad max hash
+Problem in HTREE directory inode 24001: block #36 has bad min hash
+Problem in HTREE directory inode 24001: block #36 has bad max hash
+Problem in HTREE directory inode 24001: block #37 has bad min hash
+Problem in HTREE directory inode 24001: block #37 has bad max hash
+Problem in HTREE directory inode 24001: block #38 has bad min hash
+Problem in HTREE directory inode 24001: block #38 has bad max hash
+Problem in HTREE directory inode 24001: block #39 has bad min hash
+Problem in HTREE directory inode 24001: block #39 has bad max hash
+Problem in HTREE directory inode 24001: block #40 has bad min hash
+Problem in HTREE directory inode 24001: block #40 has bad max hash
+Problem in HTREE directory inode 24001: block #41 has bad min hash
+Problem in HTREE directory inode 24001: block #41 has bad max hash
+Problem in HTREE directory inode 24001: block #42 has bad min hash
+Problem in HTREE directory inode 24001: block #42 has bad max hash
+Problem in HTREE directory inode 24001: block #43 has bad min hash
+Problem in HTREE directory inode 24001: block #43 has bad max hash
+Problem in HTREE directory inode 24001: block #44 has bad min hash
+Problem in HTREE directory inode 24001: block #44 has bad max hash
+Problem in HTREE directory inode 24001: block #45 has bad min hash
+Problem in HTREE directory inode 24001: block #45 has bad max hash
+Problem in HTREE directory inode 24001: block #46 has bad min hash
+Problem in HTREE directory inode 24001: block #46 has bad max hash
+Problem in HTREE directory inode 24001: block #47 has bad min hash
+Problem in HTREE directory inode 24001: block #47 has bad max hash
+Problem in HTREE directory inode 24001: block #48 has bad min hash
+Problem in HTREE directory inode 24001: block #48 has bad max hash
+Problem in HTREE directory inode 24001: block #49 has bad min hash
+Problem in HTREE directory inode 24001: block #49 has bad max hash
+Problem in HTREE directory inode 24001: block #50 has bad min hash
+Problem in HTREE directory inode 24001: block #50 has bad max hash
+Problem in HTREE directory inode 24001: block #51 has bad min hash
+Problem in HTREE directory inode 24001: block #51 has bad max hash
+Problem in HTREE directory inode 24001: block #52 has bad min hash
+Problem in HTREE directory inode 24001: block #52 has bad max hash
+Problem in HTREE directory inode 24001: block #53 has bad min hash
+Problem in HTREE directory inode 24001: block #53 has bad max hash
+Problem in HTREE directory inode 24001: block #54 has bad min hash
+Problem in HTREE directory inode 24001: block #54 has bad max hash
+Problem in HTREE directory inode 24001: block #55 has bad min hash
+Problem in HTREE directory inode 24001: block #55 has bad max hash
+Problem in HTREE directory inode 24001: block #56 has bad min hash
+Problem in HTREE directory inode 24001: block #56 has bad max hash
+Problem in HTREE directory inode 24001: block #57 has bad min hash
+Problem in HTREE directory inode 24001: block #57 has bad max hash
+Problem in HTREE directory inode 24001: block #58 has bad min hash
+Problem in HTREE directory inode 24001: block #58 has bad max hash
+Problem in HTREE directory inode 24001: block #59 has bad min hash
+Problem in HTREE directory inode 24001: block #59 has bad max hash
+Problem in HTREE directory inode 24001: block #60 has bad min hash
+Problem in HTREE directory inode 24001: block #60 has bad max hash
+Problem in HTREE directory inode 24001: block #61 has bad min hash
+Problem in HTREE directory inode 24001: block #61 has bad max hash
+Problem in HTREE directory inode 24001: block #62 has bad min hash
+Problem in HTREE directory inode 24001: block #62 has bad max hash
+Problem in HTREE directory inode 24001: block #63 has bad min hash
+Problem in HTREE directory inode 24001: block #63 has bad max hash
+Problem in HTREE directory inode 24001: block #64 has bad min hash
+Problem in HTREE directory inode 24001: block #64 has bad max hash
+Problem in HTREE directory inode 24001: block #65 has bad min hash
+Problem in HTREE directory inode 24001: block #65 has bad max hash
+Problem in HTREE directory inode 24001: block #66 has bad min hash
+Problem in HTREE directory inode 24001: block #66 has bad max hash
+Problem in HTREE directory inode 24001: block #67 has bad min hash
+Problem in HTREE directory inode 24001: block #67 has bad max hash
+Problem in HTREE directory inode 24001: block #68 has bad min hash
+Problem in HTREE directory inode 24001: block #68 has bad max hash
+Problem in HTREE directory inode 24001: block #69 has bad min hash
+Problem in HTREE directory inode 24001: block #69 has bad max hash
+Problem in HTREE directory inode 24001: block #70 has bad min hash
+Problem in HTREE directory inode 24001: block #70 has bad max hash
+Problem in HTREE directory inode 24001: block #71 has bad min hash
+Problem in HTREE directory inode 24001: block #71 has bad max hash
+Problem in HTREE directory inode 24001: block #72 has bad min hash
+Problem in HTREE directory inode 24001: block #72 has bad max hash
+Problem in HTREE directory inode 24001: block #73 has bad min hash
+Problem in HTREE directory inode 24001: block #73 has bad max hash
+Problem in HTREE directory inode 24001: block #74 has bad min hash
+Problem in HTREE directory inode 24001: block #74 has bad max hash
+Problem in HTREE directory inode 24001: block #75 has bad min hash
+Problem in HTREE directory inode 24001: block #75 has bad max hash
+Problem in HTREE directory inode 24001: block #76 has bad min hash
+Problem in HTREE directory inode 24001: block #76 has bad max hash
+Problem in HTREE directory inode 24001: block #77 has bad min hash
+Problem in HTREE directory inode 24001: block #77 has bad max hash
+Problem in HTREE directory inode 24001: block #78 has bad min hash
+Problem in HTREE directory inode 24001: block #78 has bad max hash
+Problem in HTREE directory inode 24001: block #79 has bad min hash
+Problem in HTREE directory inode 24001: block #79 has bad max hash
+Problem in HTREE directory inode 24001: block #80 has bad min hash
+Problem in HTREE directory inode 24001: block #80 has bad max hash
+Problem in HTREE directory inode 24001: block #81 has bad min hash
+Problem in HTREE directory inode 24001: block #81 has bad max hash
+Problem in HTREE directory inode 24001: block #82 has bad min hash
+Problem in HTREE directory inode 24001: block #82 has bad max hash
+Problem in HTREE directory inode 24001: block #83 has bad min hash
+Problem in HTREE directory inode 24001: block #83 has bad max hash
+Problem in HTREE directory inode 24001: block #84 has bad min hash
+Problem in HTREE directory inode 24001: block #84 has bad max hash
+Problem in HTREE directory inode 24001: block #85 has bad min hash
+Problem in HTREE directory inode 24001: block #85 has bad max hash
+Problem in HTREE directory inode 24001: block #86 has bad min hash
+Problem in HTREE directory inode 24001: block #86 has bad max hash
+Problem in HTREE directory inode 24001: block #87 has bad min hash
+Problem in HTREE directory inode 24001: block #87 has bad max hash
+Problem in HTREE directory inode 24001: block #88 has bad min hash
+Problem in HTREE directory inode 24001: block #88 has bad max hash
+Problem in HTREE directory inode 24001: block #89 has bad min hash
+Problem in HTREE directory inode 24001: block #89 has bad max hash
+Problem in HTREE directory inode 24001: block #90 has bad min hash
+Problem in HTREE directory inode 24001: block #90 has bad max hash
+Problem in HTREE directory inode 24001: block #91 has bad min hash
+Problem in HTREE directory inode 24001: block #91 has bad max hash
+Problem in HTREE directory inode 24001: block #92 has bad min hash
+Problem in HTREE directory inode 24001: block #92 has bad max hash
+Problem in HTREE directory inode 24001: block #93 has bad min hash
+Problem in HTREE directory inode 24001: block #93 has bad max hash
+Problem in HTREE directory inode 24001: block #94 has bad min hash
+Problem in HTREE directory inode 24001: block #94 has bad max hash
+Problem in HTREE directory inode 24001: block #95 has bad min hash
+Problem in HTREE directory inode 24001: block #95 has bad max hash
+Problem in HTREE directory inode 24001: block #96 has bad min hash
+Problem in HTREE directory inode 24001: block #96 has bad max hash
+Problem in HTREE directory inode 24001: block #97 has bad min hash
+Problem in HTREE directory inode 24001: block #97 has bad max hash
+Problem in HTREE directory inode 24001: block #98 has bad min hash
+Problem in HTREE directory inode 24001: block #98 has bad max hash
+Problem in HTREE directory inode 24001: block #99 has bad min hash
+Problem in HTREE directory inode 24001: block #99 has bad max hash
+Problem in HTREE directory inode 24001: block #100 has bad min hash
+Problem in HTREE directory inode 24001: block #100 has bad max hash
+Problem in HTREE directory inode 24001: block #101 has bad min hash
+Problem in HTREE directory inode 24001: block #101 has bad max hash
+Problem in HTREE directory inode 24001: block #102 has bad min hash
+Problem in HTREE directory inode 24001: block #102 has bad max hash
+Problem in HTREE directory inode 24001: block #103 has bad min hash
+Problem in HTREE directory inode 24001: block #103 has bad max hash
+Problem in HTREE directory inode 24001: block #104 has bad min hash
+Problem in HTREE directory inode 24001: block #104 has bad max hash
+Problem in HTREE directory inode 24001: block #105 has bad min hash
+Problem in HTREE directory inode 24001: block #105 has bad max hash
+Problem in HTREE directory inode 24001: block #106 has bad min hash
+Problem in HTREE directory inode 24001: block #106 has bad max hash
+Problem in HTREE directory inode 24001: block #107 has bad min hash
+Problem in HTREE directory inode 24001: block #107 has bad max hash
+Problem in HTREE directory inode 24001: block #108 has bad min hash
+Problem in HTREE directory inode 24001: block #108 has bad max hash
+Problem in HTREE directory inode 24001: block #109 has bad min hash
+Problem in HTREE directory inode 24001: block #109 has bad max hash
+Problem in HTREE directory inode 24001: block #110 has bad min hash
+Problem in HTREE directory inode 24001: block #110 has bad max hash
+Problem in HTREE directory inode 24001: block #111 has bad min hash
+Problem in HTREE directory inode 24001: block #111 has bad max hash
+Problem in HTREE directory inode 24001: block #112 has bad min hash
+Problem in HTREE directory inode 24001: block #112 has bad max hash
+Problem in HTREE directory inode 24001: block #113 has bad min hash
+Problem in HTREE directory inode 24001: block #113 has bad max hash
+Problem in HTREE directory inode 24001: block #114 has bad min hash
+Problem in HTREE directory inode 24001: block #114 has bad max hash
+Problem in HTREE directory inode 24001: block #115 has bad min hash
+Problem in HTREE directory inode 24001: block #115 has bad max hash
+Problem in HTREE directory inode 24001: block #116 has bad min hash
+Problem in HTREE directory inode 24001: block #116 has bad max hash
+Problem in HTREE directory inode 24001: block #117 has bad min hash
+Problem in HTREE directory inode 24001: block #117 has bad max hash
+Problem in HTREE directory inode 24001: block #118 has bad min hash
+Problem in HTREE directory inode 24001: block #118 has bad max hash
+Problem in HTREE directory inode 24001: block #119 has bad min hash
+Problem in HTREE directory inode 24001: block #119 has bad max hash
+Problem in HTREE directory inode 24001: block #120 has bad min hash
+Problem in HTREE directory inode 24001: block #120 has bad max hash
+Problem in HTREE directory inode 24001: block #121 has bad min hash
+Problem in HTREE directory inode 24001: block #121 has bad max hash
+Problem in HTREE directory inode 24001: block #122 has bad min hash
+Problem in HTREE directory inode 24001: block #122 has bad max hash
+Problem in HTREE directory inode 24001: block #123 has bad min hash
+Problem in HTREE directory inode 24001: block #123 has bad max hash
+Problem in HTREE directory inode 24001: block #124 has bad min hash
+Problem in HTREE directory inode 24001: block #124 has bad max hash
+Problem in HTREE directory inode 24001: block #125 has bad min hash
+Problem in HTREE directory inode 24001: block #125 has bad max hash
+Problem in HTREE directory inode 24001: block #126 has bad min hash
+Problem in HTREE directory inode 24001: block #126 has bad max hash
+Problem in HTREE directory inode 24001: block #127 has bad min hash
+Problem in HTREE directory inode 24001: block #128 has bad max hash
+Problem in HTREE directory inode 24001: block #129 has bad min hash
+Problem in HTREE directory inode 24001: block #129 has bad max hash
+Problem in HTREE directory inode 24001: block #130 has bad min hash
+Problem in HTREE directory inode 24001: block #130 has bad max hash
+Problem in HTREE directory inode 24001: block #131 has bad min hash
+Problem in HTREE directory inode 24001: block #131 has bad max hash
+Problem in HTREE directory inode 24001: block #132 has bad min hash
+Problem in HTREE directory inode 24001: block #132 has bad max hash
+Problem in HTREE directory inode 24001: block #133 has bad min hash
+Problem in HTREE directory inode 24001: block #133 has bad max hash
+Problem in HTREE directory inode 24001: block #134 has bad min hash
+Problem in HTREE directory inode 24001: block #134 has bad max hash
+Problem in HTREE directory inode 24001: block #135 has bad min hash
+Problem in HTREE directory inode 24001: block #135 has bad max hash
+Problem in HTREE directory inode 24001: block #136 has bad min hash
+Problem in HTREE directory inode 24001: block #136 has bad max hash
+Problem in HTREE directory inode 24001: block #137 has bad min hash
+Problem in HTREE directory inode 24001: block #137 has bad max hash
+Problem in HTREE directory inode 24001: block #138 has bad min hash
+Problem in HTREE directory inode 24001: block #138 has bad max hash
+Problem in HTREE directory inode 24001: block #139 has bad min hash
+Problem in HTREE directory inode 24001: block #139 has bad max hash
+Problem in HTREE directory inode 24001: block #140 has bad min hash
+Problem in HTREE directory inode 24001: block #140 has bad max hash
+Problem in HTREE directory inode 24001: block #141 has bad min hash
+Problem in HTREE directory inode 24001: block #141 has bad max hash
+Problem in HTREE directory inode 24001: block #142 has bad min hash
+Problem in HTREE directory inode 24001: block #142 has bad max hash
+Problem in HTREE directory inode 24001: block #143 has bad min hash
+Problem in HTREE directory inode 24001: block #143 has bad max hash
+Problem in HTREE directory inode 24001: block #144 has bad min hash
+Problem in HTREE directory inode 24001: block #144 has bad max hash
+Problem in HTREE directory inode 24001: block #145 has bad min hash
+Problem in HTREE directory inode 24001: block #145 has bad max hash
+Problem in HTREE directory inode 24001: block #146 has bad min hash
+Problem in HTREE directory inode 24001: block #146 has bad max hash
+Problem in HTREE directory inode 24001: block #147 has bad min hash
+Problem in HTREE directory inode 24001: block #147 has bad max hash
+Problem in HTREE directory inode 24001: block #148 has bad min hash
+Problem in HTREE directory inode 24001: block #148 has bad max hash
+Problem in HTREE directory inode 24001: block #149 has bad min hash
+Problem in HTREE directory inode 24001: block #149 has bad max hash
+Problem in HTREE directory inode 24001: block #150 has bad min hash
+Problem in HTREE directory inode 24001: block #150 has bad max hash
+Problem in HTREE directory inode 24001: block #151 has bad min hash
+Problem in HTREE directory inode 24001: block #151 has bad max hash
+Problem in HTREE directory inode 24001: block #152 has bad min hash
+Problem in HTREE directory inode 24001: block #152 has bad max hash
+Problem in HTREE directory inode 24001: block #153 has bad min hash
+Problem in HTREE directory inode 24001: block #153 has bad max hash
+Problem in HTREE directory inode 24001: block #154 has bad min hash
+Problem in HTREE directory inode 24001: block #154 has bad max hash
+Problem in HTREE directory inode 24001: block #155 has bad min hash
+Problem in HTREE directory inode 24001: block #155 has bad max hash
+Problem in HTREE directory inode 24001: block #156 has bad min hash
+Problem in HTREE directory inode 24001: block #156 has bad max hash
+Problem in HTREE directory inode 24001: block #157 has bad min hash
+Problem in HTREE directory inode 24001: block #157 has bad max hash
+Problem in HTREE directory inode 24001: block #158 has bad min hash
+Problem in HTREE directory inode 24001: block #158 has bad max hash
+Problem in HTREE directory inode 24001: block #159 has bad min hash
+Problem in HTREE directory inode 24001: block #159 has bad max hash
+Problem in HTREE directory inode 24001: block #160 has bad min hash
+Problem in HTREE directory inode 24001: block #160 has bad max hash
+Problem in HTREE directory inode 24001: block #161 has bad min hash
+Problem in HTREE directory inode 24001: block #161 has bad max hash
+Problem in HTREE directory inode 24001: block #162 has bad min hash
+Problem in HTREE directory inode 24001: block #162 has bad max hash
+Problem in HTREE directory inode 24001: block #163 has bad min hash
+Problem in HTREE directory inode 24001: block #163 has bad max hash
+Problem in HTREE directory inode 24001: block #164 has bad min hash
+Problem in HTREE directory inode 24001: block #164 has bad max hash
+Problem in HTREE directory inode 24001: block #165 has bad min hash
+Problem in HTREE directory inode 24001: block #165 has bad max hash
+Problem in HTREE directory inode 24001: block #166 has bad min hash
+Problem in HTREE directory inode 24001: block #166 has bad max hash
+Problem in HTREE directory inode 24001: block #167 has bad min hash
+Problem in HTREE directory inode 24001: block #167 has bad max hash
+Problem in HTREE directory inode 24001: block #168 has bad min hash
+Problem in HTREE directory inode 24001: block #168 has bad max hash
+Problem in HTREE directory inode 24001: block #169 has bad min hash
+Problem in HTREE directory inode 24001: block #169 has bad max hash
+Problem in HTREE directory inode 24001: block #170 has bad min hash
+Problem in HTREE directory inode 24001: block #170 has bad max hash
+Problem in HTREE directory inode 24001: block #171 has bad min hash
+Problem in HTREE directory inode 24001: block #171 has bad max hash
+Problem in HTREE directory inode 24001: block #172 has bad min hash
+Problem in HTREE directory inode 24001: block #172 has bad max hash
+Problem in HTREE directory inode 24001: block #173 has bad min hash
+Problem in HTREE directory inode 24001: block #173 has bad max hash
+Problem in HTREE directory inode 24001: block #174 has bad min hash
+Problem in HTREE directory inode 24001: block #174 has bad max hash
+Problem in HTREE directory inode 24001: block #175 has bad min hash
+Problem in HTREE directory inode 24001: block #175 has bad max hash
+Problem in HTREE directory inode 24001: block #176 has bad min hash
+Problem in HTREE directory inode 24001: block #176 has bad max hash
+Problem in HTREE directory inode 24001: block #177 has bad min hash
+Problem in HTREE directory inode 24001: block #177 has bad max hash
+Problem in HTREE directory inode 24001: block #178 has bad min hash
+Problem in HTREE directory inode 24001: block #178 has bad max hash
+Problem in HTREE directory inode 24001: block #179 has bad min hash
+Problem in HTREE directory inode 24001: block #179 has bad max hash
+Problem in HTREE directory inode 24001: block #180 has bad min hash
+Problem in HTREE directory inode 24001: block #180 has bad max hash
+Problem in HTREE directory inode 24001: block #181 has bad min hash
+Problem in HTREE directory inode 24001: block #181 has bad max hash
+Problem in HTREE directory inode 24001: block #182 has bad min hash
+Problem in HTREE directory inode 24001: block #182 has bad max hash
+Problem in HTREE directory inode 24001: block #183 has bad min hash
+Problem in HTREE directory inode 24001: block #183 has bad max hash
+Problem in HTREE directory inode 24001: block #184 has bad min hash
+Problem in HTREE directory inode 24001: block #184 has bad max hash
+Problem in HTREE directory inode 24001: block #185 has bad min hash
+Problem in HTREE directory inode 24001: block #185 has bad max hash
+Problem in HTREE directory inode 24001: block #186 has bad min hash
+Problem in HTREE directory inode 24001: block #186 has bad max hash
+Problem in HTREE directory inode 24001: block #187 has bad min hash
+Problem in HTREE directory inode 24001: block #187 has bad max hash
+Problem in HTREE directory inode 24001: block #188 has bad min hash
+Problem in HTREE directory inode 24001: block #188 has bad max hash
+Problem in HTREE directory inode 24001: block #189 has bad min hash
+Problem in HTREE directory inode 24001: block #189 has bad max hash
+Problem in HTREE directory inode 24001: block #190 has bad min hash
+Problem in HTREE directory inode 24001: block #190 has bad max hash
+Problem in HTREE directory inode 24001: block #191 has bad min hash
+Problem in HTREE directory inode 24001: block #191 has bad max hash
+Problem in HTREE directory inode 24001: block #192 has bad min hash
+Problem in HTREE directory inode 24001: block #192 has bad max hash
+Problem in HTREE directory inode 24001: block #193 has bad min hash
+Problem in HTREE directory inode 24001: block #193 has bad max hash
+Problem in HTREE directory inode 24001: block #194 has bad min hash
+Problem in HTREE directory inode 24001: block #194 has bad max hash
+Problem in HTREE directory inode 24001: block #195 has bad min hash
+Problem in HTREE directory inode 24001: block #195 has bad max hash
+Problem in HTREE directory inode 24001: block #196 has bad min hash
+Problem in HTREE directory inode 24001: block #196 has bad max hash
+Problem in HTREE directory inode 24001: block #197 has bad min hash
+Problem in HTREE directory inode 24001: block #197 has bad max hash
+Problem in HTREE directory inode 24001: block #198 has bad min hash
+Problem in HTREE directory inode 24001: block #198 has bad max hash
+Problem in HTREE directory inode 24001: block #199 has bad min hash
+Problem in HTREE directory inode 24001: block #199 has bad max hash
+Problem in HTREE directory inode 24001: block #200 has bad min hash
+Problem in HTREE directory inode 24001: block #200 has bad max hash
+Problem in HTREE directory inode 24001: block #201 has bad min hash
+Problem in HTREE directory inode 24001: block #201 has bad max hash
+Problem in HTREE directory inode 24001: block #202 has bad min hash
+Problem in HTREE directory inode 24001: block #202 has bad max hash
+Problem in HTREE directory inode 24001: block #203 has bad min hash
+Problem in HTREE directory inode 24001: block #203 has bad max hash
+Problem in HTREE directory inode 24001: block #204 has bad min hash
+Problem in HTREE directory inode 24001: block #204 has bad max hash
+Problem in HTREE directory inode 24001: block #205 has bad min hash
+Problem in HTREE directory inode 24001: block #205 has bad max hash
+Problem in HTREE directory inode 24001: block #206 has bad min hash
+Problem in HTREE directory inode 24001: block #206 has bad max hash
+Problem in HTREE directory inode 24001: block #207 has bad min hash
+Problem in HTREE directory inode 24001: block #207 has bad max hash
+Problem in HTREE directory inode 24001: block #208 has bad min hash
+Problem in HTREE directory inode 24001: block #208 has bad max hash
+Problem in HTREE directory inode 24001: block #209 has bad min hash
+Problem in HTREE directory inode 24001: block #209 has bad max hash
+Problem in HTREE directory inode 24001: block #210 has bad min hash
+Problem in HTREE directory inode 24001: block #210 has bad max hash
+Problem in HTREE directory inode 24001: block #211 has bad min hash
+Problem in HTREE directory inode 24001: block #211 has bad max hash
+Problem in HTREE directory inode 24001: block #212 has bad min hash
+Problem in HTREE directory inode 24001: block #212 has bad max hash
+Problem in HTREE directory inode 24001: block #213 has bad min hash
+Problem in HTREE directory inode 24001: block #213 has bad max hash
+Problem in HTREE directory inode 24001: block #214 has bad min hash
+Problem in HTREE directory inode 24001: block #214 has bad max hash
+Problem in HTREE directory inode 24001: block #215 has bad min hash
+Problem in HTREE directory inode 24001: block #215 has bad max hash
+Problem in HTREE directory inode 24001: block #216 has bad min hash
+Problem in HTREE directory inode 24001: block #216 has bad max hash
+Problem in HTREE directory inode 24001: block #217 has bad min hash
+Problem in HTREE directory inode 24001: block #217 has bad max hash
+Problem in HTREE directory inode 24001: block #218 has bad min hash
+Problem in HTREE directory inode 24001: block #218 has bad max hash
+Problem in HTREE directory inode 24001: block #219 has bad min hash
+Problem in HTREE directory inode 24001: block #219 has bad max hash
+Problem in HTREE directory inode 24001: block #220 has bad min hash
+Problem in HTREE directory inode 24001: block #220 has bad max hash
+Problem in HTREE directory inode 24001: block #221 has bad min hash
+Problem in HTREE directory inode 24001: block #221 has bad max hash
+Problem in HTREE directory inode 24001: block #222 has bad min hash
+Problem in HTREE directory inode 24001: block #222 has bad max hash
+Problem in HTREE directory inode 24001: block #223 has bad min hash
+Problem in HTREE directory inode 24001: block #223 has bad max hash
+Problem in HTREE directory inode 24001: block #224 has bad min hash
+Problem in HTREE directory inode 24001: block #224 has bad max hash
+Problem in HTREE directory inode 24001: block #225 has bad min hash
+Problem in HTREE directory inode 24001: block #225 has bad max hash
+Problem in HTREE directory inode 24001: block #226 has bad min hash
+Problem in HTREE directory inode 24001: block #226 has bad max hash
+Problem in HTREE directory inode 24001: block #227 has bad min hash
+Problem in HTREE directory inode 24001: block #227 has bad max hash
+Problem in HTREE directory inode 24001: block #228 has bad min hash
+Problem in HTREE directory inode 24001: block #228 has bad max hash
+Problem in HTREE directory inode 24001: block #229 has bad min hash
+Problem in HTREE directory inode 24001: block #229 has bad max hash
+Problem in HTREE directory inode 24001: block #230 has bad min hash
+Problem in HTREE directory inode 24001: block #230 has bad max hash
+Problem in HTREE directory inode 24001: block #231 has bad min hash
+Problem in HTREE directory inode 24001: block #231 has bad max hash
+Problem in HTREE directory inode 24001: block #232 has bad min hash
+Problem in HTREE directory inode 24001: block #232 has bad max hash
+Problem in HTREE directory inode 24001: block #233 has bad min hash
+Problem in HTREE directory inode 24001: block #233 has bad max hash
+Problem in HTREE directory inode 24001: block #234 has bad min hash
+Problem in HTREE directory inode 24001: block #234 has bad max hash
+Problem in HTREE directory inode 24001: block #235 has bad min hash
+Problem in HTREE directory inode 24001: block #235 has bad max hash
+Problem in HTREE directory inode 24001: block #236 has bad min hash
+Problem in HTREE directory inode 24001: block #236 has bad max hash
+Problem in HTREE directory inode 24001: block #237 has bad min hash
+Problem in HTREE directory inode 24001: block #237 has bad max hash
+Problem in HTREE directory inode 24001: block #238 has bad min hash
+Problem in HTREE directory inode 24001: block #238 has bad max hash
+Problem in HTREE directory inode 24001: block #239 has bad min hash
+Problem in HTREE directory inode 24001: block #239 has bad max hash
+Problem in HTREE directory inode 24001: block #240 has bad min hash
+Problem in HTREE directory inode 24001: block #240 has bad max hash
+Problem in HTREE directory inode 24001: block #241 has bad min hash
+Problem in HTREE directory inode 24001: block #241 has bad max hash
+Problem in HTREE directory inode 24001: block #242 has bad min hash
+Problem in HTREE directory inode 24001: block #242 has bad max hash
+Problem in HTREE directory inode 24001: block #243 has bad min hash
+Problem in HTREE directory inode 24001: block #243 has bad max hash
+Problem in HTREE directory inode 24001: block #244 has bad min hash
+Problem in HTREE directory inode 24001: block #244 has bad max hash
+Problem in HTREE directory inode 24001: block #245 has bad min hash
+Problem in HTREE directory inode 24001: block #245 has bad max hash
+Problem in HTREE directory inode 24001: block #246 has bad min hash
+Problem in HTREE directory inode 24001: block #246 has bad max hash
+Problem in HTREE directory inode 24001: block #247 has bad min hash
+Problem in HTREE directory inode 24001: block #247 has bad max hash
+Problem in HTREE directory inode 24001: block #248 has bad min hash
+Problem in HTREE directory inode 24001: block #248 has bad max hash
+Problem in HTREE directory inode 24001: block #249 has bad min hash
+Problem in HTREE directory inode 24001: block #249 has bad max hash
+Problem in HTREE directory inode 24001: block #250 has bad min hash
+Problem in HTREE directory inode 24001: block #250 has bad max hash
+Problem in HTREE directory inode 24001: block #251 has bad min hash
+Problem in HTREE directory inode 24001: block #251 has bad max hash
+Problem in HTREE directory inode 24001: block #252 has bad min hash
+Problem in HTREE directory inode 24001: block #252 has bad max hash
+Problem in HTREE directory inode 24001: block #253 has bad min hash
+Problem in HTREE directory inode 24001: block #253 has bad max hash
+Problem in HTREE directory inode 24001: block #254 has bad min hash
+Problem in HTREE directory inode 24001: block #255 has bad max hash
+Problem in HTREE directory inode 24001: block #256 has bad min hash
+Problem in HTREE directory inode 24001: block #256 has bad max hash
+Problem in HTREE directory inode 24001: block #257 has bad min hash
+Problem in HTREE directory inode 24001: block #257 has bad max hash
+Problem in HTREE directory inode 24001: block #258 has bad min hash
+Problem in HTREE directory inode 24001: block #258 has bad max hash
+Problem in HTREE directory inode 24001: block #259 has bad min hash
+Problem in HTREE directory inode 24001: block #259 has bad max hash
+Problem in HTREE directory inode 24001: block #260 has bad min hash
+Problem in HTREE directory inode 24001: block #260 has bad max hash
+Problem in HTREE directory inode 24001: block #261 has bad min hash
+Problem in HTREE directory inode 24001: block #261 has bad max hash
+Problem in HTREE directory inode 24001: block #262 has bad min hash
+Problem in HTREE directory inode 24001: block #262 has bad max hash
+Problem in HTREE directory inode 24001: block #263 has bad min hash
+Problem in HTREE directory inode 24001: block #263 has bad max hash
+Problem in HTREE directory inode 24001: block #264 has bad min hash
+Problem in HTREE directory inode 24001: block #264 has bad max hash
+Problem in HTREE directory inode 24001: block #265 has bad min hash
+Problem in HTREE directory inode 24001: block #265 has bad max hash
+Problem in HTREE directory inode 24001: block #266 has bad min hash
+Problem in HTREE directory inode 24001: block #266 has bad max hash
+Problem in HTREE directory inode 24001: block #267 has bad min hash
+Problem in HTREE directory inode 24001: block #267 has bad max hash
+Problem in HTREE directory inode 24001: block #268 has bad min hash
+Problem in HTREE directory inode 24001: block #268 has bad max hash
+Problem in HTREE directory inode 24001: block #269 has bad min hash
+Problem in HTREE directory inode 24001: block #269 has bad max hash
+Problem in HTREE directory inode 24001: block #270 has bad min hash
+Problem in HTREE directory inode 24001: block #270 has bad max hash
+Problem in HTREE directory inode 24001: block #271 has bad min hash
+Problem in HTREE directory inode 24001: block #271 has bad max hash
+Problem in HTREE directory inode 24001: block #272 has bad min hash
+Problem in HTREE directory inode 24001: block #272 has bad max hash
+Problem in HTREE directory inode 24001: block #273 has bad min hash
+Problem in HTREE directory inode 24001: block #273 has bad max hash
+Problem in HTREE directory inode 24001: block #274 has bad min hash
+Problem in HTREE directory inode 24001: block #274 has bad max hash
+Problem in HTREE directory inode 24001: block #275 has bad min hash
+Problem in HTREE directory inode 24001: block #275 has bad max hash
+Problem in HTREE directory inode 24001: block #276 has bad min hash
+Problem in HTREE directory inode 24001: block #276 has bad max hash
+Problem in HTREE directory inode 24001: block #277 has bad min hash
+Problem in HTREE directory inode 24001: block #277 has bad max hash
+Problem in HTREE directory inode 24001: block #278 has bad min hash
+Problem in HTREE directory inode 24001: block #278 has bad max hash
+Problem in HTREE directory inode 24001: block #279 has bad min hash
+Problem in HTREE directory inode 24001: block #279 has bad max hash
+Problem in HTREE directory inode 24001: block #280 has bad min hash
+Problem in HTREE directory inode 24001: block #280 has bad max hash
+Problem in HTREE directory inode 24001: block #281 has bad min hash
+Problem in HTREE directory inode 24001: block #281 has bad max hash
+Problem in HTREE directory inode 24001: block #282 has bad min hash
+Problem in HTREE directory inode 24001: block #282 has bad max hash
+Problem in HTREE directory inode 24001: block #283 has bad min hash
+Problem in HTREE directory inode 24001: block #283 has bad max hash
+Problem in HTREE directory inode 24001: block #284 has bad min hash
+Problem in HTREE directory inode 24001: block #284 has bad max hash
+Problem in HTREE directory inode 24001: block #285 has bad min hash
+Problem in HTREE directory inode 24001: block #285 has bad max hash
+Problem in HTREE directory inode 24001: block #286 has bad min hash
+Problem in HTREE directory inode 24001: block #286 has bad max hash
+Problem in HTREE directory inode 24001: block #287 has bad min hash
+Problem in HTREE directory inode 24001: block #287 has bad max hash
+Problem in HTREE directory inode 24001: block #288 has bad min hash
+Problem in HTREE directory inode 24001: block #288 has bad max hash
+Problem in HTREE directory inode 24001: block #289 has bad min hash
+Problem in HTREE directory inode 24001: block #289 has bad max hash
+Problem in HTREE directory inode 24001: block #290 has bad min hash
+Problem in HTREE directory inode 24001: block #290 has bad max hash
+Problem in HTREE directory inode 24001: block #291 has bad min hash
+Problem in HTREE directory inode 24001: block #291 has bad max hash
+Problem in HTREE directory inode 24001: block #292 has bad min hash
+Problem in HTREE directory inode 24001: block #292 has bad max hash
+Problem in HTREE directory inode 24001: block #293 has bad min hash
+Problem in HTREE directory inode 24001: block #293 has bad max hash
+Problem in HTREE directory inode 24001: block #294 has bad min hash
+Problem in HTREE directory inode 24001: block #294 has bad max hash
+Problem in HTREE directory inode 24001: block #295 has bad min hash
+Problem in HTREE directory inode 24001: block #295 has bad max hash
+Problem in HTREE directory inode 24001: block #296 has bad min hash
+Problem in HTREE directory inode 24001: block #296 has bad max hash
+Problem in HTREE directory inode 24001: block #297 has bad min hash
+Problem in HTREE directory inode 24001: block #297 has bad max hash
+Problem in HTREE directory inode 24001: block #298 has bad min hash
+Problem in HTREE directory inode 24001: block #298 has bad max hash
+Problem in HTREE directory inode 24001: block #299 has bad min hash
+Problem in HTREE directory inode 24001: block #299 has bad max hash
+Problem in HTREE directory inode 24001: block #300 has bad min hash
+Problem in HTREE directory inode 24001: block #300 has bad max hash
+Problem in HTREE directory inode 24001: block #301 has bad min hash
+Problem in HTREE directory inode 24001: block #301 has bad max hash
+Problem in HTREE directory inode 24001: block #302 has bad min hash
+Problem in HTREE directory inode 24001: block #302 has bad max hash
+Problem in HTREE directory inode 24001: block #303 has bad min hash
+Problem in HTREE directory inode 24001: block #303 has bad max hash
+Problem in HTREE directory inode 24001: block #304 has bad min hash
+Problem in HTREE directory inode 24001: block #304 has bad max hash
+Problem in HTREE directory inode 24001: block #305 has bad min hash
+Problem in HTREE directory inode 24001: block #305 has bad max hash
+Problem in HTREE directory inode 24001: block #306 has bad min hash
+Problem in HTREE directory inode 24001: block #306 has bad max hash
+Problem in HTREE directory inode 24001: block #307 has bad min hash
+Problem in HTREE directory inode 24001: block #307 has bad max hash
+Problem in HTREE directory inode 24001: block #308 has bad min hash
+Problem in HTREE directory inode 24001: block #308 has bad max hash
+Problem in HTREE directory inode 24001: block #309 has bad min hash
+Problem in HTREE directory inode 24001: block #309 has bad max hash
+Problem in HTREE directory inode 24001: block #310 has bad min hash
+Problem in HTREE directory inode 24001: block #310 has bad max hash
+Problem in HTREE directory inode 24001: block #311 has bad min hash
+Problem in HTREE directory inode 24001: block #311 has bad max hash
+Problem in HTREE directory inode 24001: block #312 has bad min hash
+Problem in HTREE directory inode 24001: block #312 has bad max hash
+Problem in HTREE directory inode 24001: block #313 has bad min hash
+Problem in HTREE directory inode 24001: block #313 has bad max hash
+Problem in HTREE directory inode 24001: block #314 has bad min hash
+Problem in HTREE directory inode 24001: block #314 has bad max hash
+Problem in HTREE directory inode 24001: block #315 has bad min hash
+Problem in HTREE directory inode 24001: block #315 has bad max hash
+Problem in HTREE directory inode 24001: block #316 has bad min hash
+Problem in HTREE directory inode 24001: block #316 has bad max hash
+Problem in HTREE directory inode 24001: block #317 has bad min hash
+Problem in HTREE directory inode 24001: block #317 has bad max hash
+Problem in HTREE directory inode 24001: block #318 has bad min hash
+Problem in HTREE directory inode 24001: block #318 has bad max hash
+Problem in HTREE directory inode 24001: block #319 has bad min hash
+Problem in HTREE directory inode 24001: block #319 has bad max hash
+Problem in HTREE directory inode 24001: block #320 has bad min hash
+Problem in HTREE directory inode 24001: block #320 has bad max hash
+Problem in HTREE directory inode 24001: block #321 has bad min hash
+Problem in HTREE directory inode 24001: block #321 has bad max hash
+Problem in HTREE directory inode 24001: block #322 has bad min hash
+Problem in HTREE directory inode 24001: block #322 has bad max hash
+Problem in HTREE directory inode 24001: block #323 has bad min hash
+Problem in HTREE directory inode 24001: block #323 has bad max hash
+Problem in HTREE directory inode 24001: block #324 has bad min hash
+Problem in HTREE directory inode 24001: block #324 has bad max hash
+Problem in HTREE directory inode 24001: block #325 has bad min hash
+Problem in HTREE directory inode 24001: block #325 has bad max hash
+Problem in HTREE directory inode 24001: block #326 has bad min hash
+Problem in HTREE directory inode 24001: block #326 has bad max hash
+Problem in HTREE directory inode 24001: block #327 has bad min hash
+Problem in HTREE directory inode 24001: block #327 has bad max hash
+Problem in HTREE directory inode 24001: block #328 has bad min hash
+Problem in HTREE directory inode 24001: block #328 has bad max hash
+Problem in HTREE directory inode 24001: block #329 has bad min hash
+Problem in HTREE directory inode 24001: block #329 has bad max hash
+Problem in HTREE directory inode 24001: block #330 has bad min hash
+Problem in HTREE directory inode 24001: block #330 has bad max hash
+Problem in HTREE directory inode 24001: block #331 has bad min hash
+Problem in HTREE directory inode 24001: block #331 has bad max hash
+Problem in HTREE directory inode 24001: block #332 has bad min hash
+Problem in HTREE directory inode 24001: block #332 has bad max hash
+Problem in HTREE directory inode 24001: block #333 has bad min hash
+Problem in HTREE directory inode 24001: block #333 has bad max hash
+Problem in HTREE directory inode 24001: block #334 has bad min hash
+Problem in HTREE directory inode 24001: block #334 has bad max hash
+Problem in HTREE directory inode 24001: block #335 has bad min hash
+Problem in HTREE directory inode 24001: block #335 has bad max hash
+Problem in HTREE directory inode 24001: block #336 has bad min hash
+Problem in HTREE directory inode 24001: block #336 has bad max hash
+Problem in HTREE directory inode 24001: block #337 has bad min hash
+Problem in HTREE directory inode 24001: block #337 has bad max hash
+Problem in HTREE directory inode 24001: block #338 has bad min hash
+Problem in HTREE directory inode 24001: block #338 has bad max hash
+Problem in HTREE directory inode 24001: block #339 has bad min hash
+Problem in HTREE directory inode 24001: block #339 has bad max hash
+Problem in HTREE directory inode 24001: block #340 has bad min hash
+Problem in HTREE directory inode 24001: block #340 has bad max hash
+Problem in HTREE directory inode 24001: block #341 has bad min hash
+Problem in HTREE directory inode 24001: block #341 has bad max hash
+Problem in HTREE directory inode 24001: block #342 has bad min hash
+Problem in HTREE directory inode 24001: block #342 has bad max hash
+Problem in HTREE directory inode 24001: block #343 has bad min hash
+Problem in HTREE directory inode 24001: block #343 has bad max hash
+Problem in HTREE directory inode 24001: block #344 has bad min hash
+Problem in HTREE directory inode 24001: block #344 has bad max hash
+Problem in HTREE directory inode 24001: block #345 has bad min hash
+Problem in HTREE directory inode 24001: block #345 has bad max hash
+Problem in HTREE directory inode 24001: block #346 has bad min hash
+Problem in HTREE directory inode 24001: block #346 has bad max hash
+Problem in HTREE directory inode 24001: block #347 has bad min hash
+Problem in HTREE directory inode 24001: block #347 has bad max hash
+Problem in HTREE directory inode 24001: block #348 has bad min hash
+Problem in HTREE directory inode 24001: block #348 has bad max hash
+Problem in HTREE directory inode 24001: block #349 has bad min hash
+Problem in HTREE directory inode 24001: block #349 has bad max hash
+Problem in HTREE directory inode 24001: block #350 has bad min hash
+Problem in HTREE directory inode 24001: block #350 has bad max hash
+Problem in HTREE directory inode 24001: block #351 has bad min hash
+Problem in HTREE directory inode 24001: block #351 has bad max hash
+Problem in HTREE directory inode 24001: block #352 has bad min hash
+Problem in HTREE directory inode 24001: block #352 has bad max hash
+Problem in HTREE directory inode 24001: block #353 has bad min hash
+Problem in HTREE directory inode 24001: block #353 has bad max hash
+Problem in HTREE directory inode 24001: block #354 has bad min hash
+Problem in HTREE directory inode 24001: block #354 has bad max hash
+Problem in HTREE directory inode 24001: block #355 has bad min hash
+Problem in HTREE directory inode 24001: block #355 has bad max hash
+Problem in HTREE directory inode 24001: block #356 has bad min hash
+Problem in HTREE directory inode 24001: block #356 has bad max hash
+Problem in HTREE directory inode 24001: block #357 has bad min hash
+Problem in HTREE directory inode 24001: block #357 has bad max hash
+Problem in HTREE directory inode 24001: block #358 has bad min hash
+Problem in HTREE directory inode 24001: block #358 has bad max hash
+Problem in HTREE directory inode 24001: block #359 has bad min hash
+Problem in HTREE directory inode 24001: block #359 has bad max hash
+Problem in HTREE directory inode 24001: block #360 has bad min hash
+Problem in HTREE directory inode 24001: block #360 has bad max hash
+Problem in HTREE directory inode 24001: block #361 has bad min hash
+Problem in HTREE directory inode 24001: block #361 has bad max hash
+Problem in HTREE directory inode 24001: block #362 has bad min hash
+Problem in HTREE directory inode 24001: block #362 has bad max hash
+Problem in HTREE directory inode 24001: block #363 has bad min hash
+Problem in HTREE directory inode 24001: block #363 has bad max hash
+Problem in HTREE directory inode 24001: block #364 has bad min hash
+Problem in HTREE directory inode 24001: block #364 has bad max hash
+Problem in HTREE directory inode 24001: block #365 has bad min hash
+Problem in HTREE directory inode 24001: block #365 has bad max hash
+Problem in HTREE directory inode 24001: block #366 has bad min hash
+Problem in HTREE directory inode 24001: block #366 has bad max hash
+Problem in HTREE directory inode 24001: block #367 has bad min hash
+Problem in HTREE directory inode 24001: block #367 has bad max hash
+Problem in HTREE directory inode 24001: block #368 has bad min hash
+Problem in HTREE directory inode 24001: block #368 has bad max hash
+Problem in HTREE directory inode 24001: block #369 has bad min hash
+Problem in HTREE directory inode 24001: block #369 has bad max hash
+Problem in HTREE directory inode 24001: block #370 has bad min hash
+Problem in HTREE directory inode 24001: block #370 has bad max hash
+Problem in HTREE directory inode 24001: block #371 has bad min hash
+Problem in HTREE directory inode 24001: block #371 has bad max hash
+Problem in HTREE directory inode 24001: block #372 has bad min hash
+Problem in HTREE directory inode 24001: block #372 has bad max hash
+Problem in HTREE directory inode 24001: block #373 has bad min hash
+Problem in HTREE directory inode 24001: block #373 has bad max hash
+Problem in HTREE directory inode 24001: block #374 has bad min hash
+Problem in HTREE directory inode 24001: block #374 has bad max hash
+Problem in HTREE directory inode 24001: block #375 has bad min hash
+Problem in HTREE directory inode 24001: block #375 has bad max hash
+Problem in HTREE directory inode 24001: block #376 has bad min hash
+Problem in HTREE directory inode 24001: block #376 has bad max hash
+Problem in HTREE directory inode 24001: block #377 has bad min hash
+Problem in HTREE directory inode 24001: block #377 has bad max hash
+Problem in HTREE directory inode 24001: block #378 has bad min hash
+Problem in HTREE directory inode 24001: block #378 has bad max hash
+Problem in HTREE directory inode 24001: block #379 has bad min hash
+Problem in HTREE directory inode 24001: block #379 has bad max hash
+Problem in HTREE directory inode 24001: block #380 has bad min hash
+Problem in HTREE directory inode 24001: block #380 has bad max hash
+Problem in HTREE directory inode 24001: block #381 has bad min hash
+Problem in HTREE directory inode 24001: block #382 has bad max hash
+Problem in HTREE directory inode 24001: block #383 has bad min hash
+Problem in HTREE directory inode 24001: block #383 has bad max hash
+Problem in HTREE directory inode 24001: block #384 has bad min hash
+Problem in HTREE directory inode 24001: block #384 has bad max hash
+Problem in HTREE directory inode 24001: block #385 has bad min hash
+Problem in HTREE directory inode 24001: block #385 has bad max hash
+Problem in HTREE directory inode 24001: block #386 has bad min hash
+Problem in HTREE directory inode 24001: block #386 has bad max hash
+Problem in HTREE directory inode 24001: block #387 has bad min hash
+Problem in HTREE directory inode 24001: block #387 has bad max hash
+Problem in HTREE directory inode 24001: block #388 has bad min hash
+Problem in HTREE directory inode 24001: block #388 has bad max hash
+Problem in HTREE directory inode 24001: block #389 has bad min hash
+Problem in HTREE directory inode 24001: block #389 has bad max hash
+Problem in HTREE directory inode 24001: block #390 has bad min hash
+Problem in HTREE directory inode 24001: block #390 has bad max hash
+Problem in HTREE directory inode 24001: block #391 has bad min hash
+Problem in HTREE directory inode 24001: block #391 has bad max hash
+Problem in HTREE directory inode 24001: block #392 has bad min hash
+Problem in HTREE directory inode 24001: block #392 has bad max hash
+Problem in HTREE directory inode 24001: block #393 has bad min hash
+Problem in HTREE directory inode 24001: block #393 has bad max hash
+Problem in HTREE directory inode 24001: block #394 has bad min hash
+Problem in HTREE directory inode 24001: block #394 has bad max hash
+Problem in HTREE directory inode 24001: block #395 has bad min hash
+Problem in HTREE directory inode 24001: block #395 has bad max hash
+Problem in HTREE directory inode 24001: block #396 has bad min hash
+Problem in HTREE directory inode 24001: block #396 has bad max hash
+Problem in HTREE directory inode 24001: block #397 has bad min hash
+Problem in HTREE directory inode 24001: block #397 has bad max hash
+Problem in HTREE directory inode 24001: block #398 has bad min hash
+Problem in HTREE directory inode 24001: block #398 has bad max hash
+Problem in HTREE directory inode 24001: block #399 has bad min hash
+Problem in HTREE directory inode 24001: block #399 has bad max hash
+Problem in HTREE directory inode 24001: block #400 has bad min hash
+Problem in HTREE directory inode 24001: block #400 has bad max hash
+Problem in HTREE directory inode 24001: block #401 has bad min hash
+Problem in HTREE directory inode 24001: block #401 has bad max hash
+Problem in HTREE directory inode 24001: block #402 has bad min hash
+Problem in HTREE directory inode 24001: block #402 has bad max hash
+Problem in HTREE directory inode 24001: block #403 has bad min hash
+Problem in HTREE directory inode 24001: block #403 has bad max hash
+Problem in HTREE directory inode 24001: block #404 has bad min hash
+Problem in HTREE directory inode 24001: block #404 has bad max hash
+Problem in HTREE directory inode 24001: block #405 has bad min hash
+Problem in HTREE directory inode 24001: block #405 has bad max hash
+Problem in HTREE directory inode 24001: block #406 has bad min hash
+Problem in HTREE directory inode 24001: block #406 has bad max hash
+Problem in HTREE directory inode 24001: block #407 has bad min hash
+Problem in HTREE directory inode 24001: block #407 has bad max hash
+Problem in HTREE directory inode 24001: block #408 has bad min hash
+Problem in HTREE directory inode 24001: block #408 has bad max hash
+Problem in HTREE directory inode 24001: block #409 has bad min hash
+Problem in HTREE directory inode 24001: block #409 has bad max hash
+Problem in HTREE directory inode 24001: block #410 has bad min hash
+Problem in HTREE directory inode 24001: block #410 has bad max hash
+Problem in HTREE directory inode 24001: block #411 has bad min hash
+Problem in HTREE directory inode 24001: block #411 has bad max hash
+Problem in HTREE directory inode 24001: block #412 has bad min hash
+Problem in HTREE directory inode 24001: block #412 has bad max hash
+Problem in HTREE directory inode 24001: block #413 has bad min hash
+Problem in HTREE directory inode 24001: block #413 has bad max hash
+Problem in HTREE directory inode 24001: block #414 has bad min hash
+Problem in HTREE directory inode 24001: block #414 has bad max hash
+Problem in HTREE directory inode 24001: block #415 has bad min hash
+Problem in HTREE directory inode 24001: block #415 has bad max hash
+Problem in HTREE directory inode 24001: block #416 has bad min hash
+Problem in HTREE directory inode 24001: block #416 has bad max hash
+Problem in HTREE directory inode 24001: block #417 has bad min hash
+Problem in HTREE directory inode 24001: block #417 has bad max hash
+Problem in HTREE directory inode 24001: block #418 has bad min hash
+Problem in HTREE directory inode 24001: block #418 has bad max hash
+Problem in HTREE directory inode 24001: block #419 has bad min hash
+Problem in HTREE directory inode 24001: block #419 has bad max hash
+Problem in HTREE directory inode 24001: block #420 has bad min hash
+Problem in HTREE directory inode 24001: block #420 has bad max hash
+Problem in HTREE directory inode 24001: block #421 has bad min hash
+Problem in HTREE directory inode 24001: block #421 has bad max hash
+Problem in HTREE directory inode 24001: block #422 has bad min hash
+Problem in HTREE directory inode 24001: block #422 has bad max hash
+Problem in HTREE directory inode 24001: block #423 has bad min hash
+Problem in HTREE directory inode 24001: block #423 has bad max hash
+Problem in HTREE directory inode 24001: block #424 has bad min hash
+Problem in HTREE directory inode 24001: block #424 has bad max hash
+Problem in HTREE directory inode 24001: block #425 has bad min hash
+Problem in HTREE directory inode 24001: block #425 has bad max hash
+Problem in HTREE directory inode 24001: block #426 has bad min hash
+Problem in HTREE directory inode 24001: block #426 has bad max hash
+Problem in HTREE directory inode 24001: block #427 has bad min hash
+Problem in HTREE directory inode 24001: block #427 has bad max hash
+Problem in HTREE directory inode 24001: block #428 has bad min hash
+Problem in HTREE directory inode 24001: block #428 has bad max hash
+Problem in HTREE directory inode 24001: block #429 has bad min hash
+Problem in HTREE directory inode 24001: block #429 has bad max hash
+Problem in HTREE directory inode 24001: block #430 has bad min hash
+Problem in HTREE directory inode 24001: block #430 has bad max hash
+Problem in HTREE directory inode 24001: block #431 has bad min hash
+Problem in HTREE directory inode 24001: block #431 has bad max hash
+Problem in HTREE directory inode 24001: block #432 has bad min hash
+Problem in HTREE directory inode 24001: block #432 has bad max hash
+Problem in HTREE directory inode 24001: block #433 has bad min hash
+Problem in HTREE directory inode 24001: block #433 has bad max hash
+Problem in HTREE directory inode 24001: block #434 has bad min hash
+Problem in HTREE directory inode 24001: block #434 has bad max hash
+Problem in HTREE directory inode 24001: block #435 has bad min hash
+Problem in HTREE directory inode 24001: block #435 has bad max hash
+Problem in HTREE directory inode 24001: block #436 has bad min hash
+Problem in HTREE directory inode 24001: block #436 has bad max hash
+Problem in HTREE directory inode 24001: block #437 has bad min hash
+Problem in HTREE directory inode 24001: block #437 has bad max hash
+Problem in HTREE directory inode 24001: block #438 has bad min hash
+Problem in HTREE directory inode 24001: block #438 has bad max hash
+Problem in HTREE directory inode 24001: block #439 has bad min hash
+Problem in HTREE directory inode 24001: block #439 has bad max hash
+Problem in HTREE directory inode 24001: block #440 has bad min hash
+Problem in HTREE directory inode 24001: block #440 has bad max hash
+Problem in HTREE directory inode 24001: block #441 has bad min hash
+Problem in HTREE directory inode 24001: block #441 has bad max hash
+Problem in HTREE directory inode 24001: block #442 has bad min hash
+Problem in HTREE directory inode 24001: block #442 has bad max hash
+Problem in HTREE directory inode 24001: block #443 has bad min hash
+Problem in HTREE directory inode 24001: block #443 has bad max hash
+Problem in HTREE directory inode 24001: block #444 has bad min hash
+Problem in HTREE directory inode 24001: block #444 has bad max hash
+Problem in HTREE directory inode 24001: block #445 has bad min hash
+Problem in HTREE directory inode 24001: block #445 has bad max hash
+Problem in HTREE directory inode 24001: block #446 has bad min hash
+Problem in HTREE directory inode 24001: block #446 has bad max hash
+Problem in HTREE directory inode 24001: block #447 has bad min hash
+Problem in HTREE directory inode 24001: block #447 has bad max hash
+Problem in HTREE directory inode 24001: block #448 has bad min hash
+Problem in HTREE directory inode 24001: block #448 has bad max hash
+Problem in HTREE directory inode 24001: block #449 has bad min hash
+Problem in HTREE directory inode 24001: block #449 has bad max hash
+Problem in HTREE directory inode 24001: block #450 has bad min hash
+Problem in HTREE directory inode 24001: block #450 has bad max hash
+Problem in HTREE directory inode 24001: block #451 has bad min hash
+Problem in HTREE directory inode 24001: block #451 has bad max hash
+Problem in HTREE directory inode 24001: block #452 has bad min hash
+Problem in HTREE directory inode 24001: block #452 has bad max hash
+Problem in HTREE directory inode 24001: block #453 has bad min hash
+Problem in HTREE directory inode 24001: block #453 has bad max hash
+Problem in HTREE directory inode 24001: block #454 has bad min hash
+Problem in HTREE directory inode 24001: block #454 has bad max hash
+Problem in HTREE directory inode 24001: block #455 has bad min hash
+Problem in HTREE directory inode 24001: block #455 has bad max hash
+Problem in HTREE directory inode 24001: block #456 has bad min hash
+Problem in HTREE directory inode 24001: block #457 has bad min hash
+Problem in HTREE directory inode 24001: block #457 has bad max hash
+Problem in HTREE directory inode 24001: block #458 has bad min hash
+Problem in HTREE directory inode 24001: block #458 has bad max hash
+Problem in HTREE directory inode 24001: block #459 has bad min hash
+Problem in HTREE directory inode 24001: block #459 has bad max hash
+Problem in HTREE directory inode 24001: block #460 has bad min hash
+Problem in HTREE directory inode 24001: block #460 has bad max hash
+Problem in HTREE directory inode 24001: block #461 has bad min hash
+Problem in HTREE directory inode 24001: block #461 has bad max hash
+Problem in HTREE directory inode 24001: block #462 has bad min hash
+Problem in HTREE directory inode 24001: block #463 has bad min hash
+Problem in HTREE directory inode 24001: block #463 has bad max hash
+Problem in HTREE directory inode 24001: block #464 has bad min hash
+Problem in HTREE directory inode 24001: block #464 has bad max hash
+Problem in HTREE directory inode 24001: block #465 has bad min hash
+Problem in HTREE directory inode 24001: block #466 has bad min hash
+Problem in HTREE directory inode 24001: block #466 has bad max hash
+Problem in HTREE directory inode 24001: block #467 has bad min hash
+Problem in HTREE directory inode 24001: block #468 has bad min hash
+Problem in HTREE directory inode 24001: block #468 has bad max hash
+Problem in HTREE directory inode 24001: block #469 has bad min hash
+Problem in HTREE directory inode 24001: block #470 has bad max hash
+Problem in HTREE directory inode 24001: block #471 has bad min hash
+Problem in HTREE directory inode 24001: block #471 has bad max hash
+Problem in HTREE directory inode 24001: block #472 has bad min hash
+Problem in HTREE directory inode 24001: block #472 has bad max hash
+Problem in HTREE directory inode 24001: block #473 has bad min hash
 Invalid HTREE directory inode 24001 (/test2).  Clear HTree index? yes
 
 Pass 3: Checking directory connectivity
@@ -954,5 +954,5 @@
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 30514/32000 files (0.0% non-contiguous), 5558/8000 blocks
+test_filesys: 30514/32000 files (0.0% non-contiguous), 5669/8000 blocks
 Exit status is 1
diff --git a/tests/f_h_reindex/expect.2 b/tests/f_h_reindex/expect.2
index 99de4cf..7f785af 100644
--- a/tests/f_h_reindex/expect.2
+++ b/tests/f_h_reindex/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 30514/32000 files (0.0% non-contiguous), 5558/8000 blocks
+test_filesys: 30514/32000 files (0.0% non-contiguous), 5669/8000 blocks
 Exit status is 0
diff --git a/tests/f_holedir2/expect.1 b/tests/f_holedir2/expect.1
new file mode 100644
index 0000000..5124f61
--- /dev/null
+++ b/tests/f_holedir2/expect.1
@@ -0,0 +1,24 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12, i_size is 0, should be 5120.  Fix? yes
+
+Inode 13, i_size is 4096, should be 5120.  Fix? yes
+
+Pass 2: Checking directory structure
+Directory inode 12 has an unallocated block #3.  Allocate? yes
+
+Directory inode 13 has an unallocated block #1.  Allocate? yes
+
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Free blocks count wrong for group #0 (79, counted=77).
+Fix? yes
+
+Free blocks count wrong (79, counted=77).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 13/16 files (7.7% non-contiguous), 23/100 blocks
+Exit status is 1
diff --git a/tests/f_holedir2/expect.2 b/tests/f_holedir2/expect.2
new file mode 100644
index 0000000..636c6e9
--- /dev/null
+++ b/tests/f_holedir2/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 13/16 files (0.0% non-contiguous), 23/100 blocks
+Exit status is 0
diff --git a/tests/f_holedir2/image.gz b/tests/f_holedir2/image.gz
new file mode 100644
index 0000000..63dda07
--- /dev/null
+++ b/tests/f_holedir2/image.gz
Binary files differ
diff --git a/tests/f_holedir2/name b/tests/f_holedir2/name
new file mode 100644
index 0000000..ec153f3
--- /dev/null
+++ b/tests/f_holedir2/name
@@ -0,0 +1,2 @@
+directories with holes and zero i_size
+
diff --git a/tests/f_illitable_flexbg/expect.1 b/tests/f_illitable_flexbg/expect.1
new file mode 100644
index 0000000..2d8bd0c
--- /dev/null
+++ b/tests/f_illitable_flexbg/expect.1
@@ -0,0 +1,27 @@
+../e2fsck/e2fsck: Group descriptors look bad... trying backup blocks...
+One or more block group descriptor checksums are invalid.  Fix? yes
+
+Group descriptor 0 checksum is invalid.  FIXED.
+Inode table for group 1 is not in group.  (block 0)
+WARNING: SEVERE DATA LOSS POSSIBLE.
+Relocate? yes
+
+Group descriptor 1 checksum is invalid.  FIXED.
+Group descriptor 2 checksum is invalid.  FIXED.
+Group descriptor 3 checksum is invalid.  FIXED.
+Pass 1: Checking inodes, blocks, and sizes
+Relocating group 1's inode table to 142...
+Restarting e2fsck from the beginning...
+Group descriptor 1 checksum is invalid.  FIXED.
+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
+Inode bitmap differences:  -(65--128)
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/256 files (0.0% non-contiguous), 31163/32768 blocks
+Exit status is 1
diff --git a/tests/f_illitable_flexbg/expect.2 b/tests/f_illitable_flexbg/expect.2
new file mode 100644
index 0000000..8ef43c2
--- /dev/null
+++ b/tests/f_illitable_flexbg/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 12/256 files (0.0% non-contiguous), 31163/32768 blocks
+Exit status is 0
diff --git a/tests/f_illitable_flexbg/image.gz b/tests/f_illitable_flexbg/image.gz
new file mode 100755
index 0000000..7fa1446
--- /dev/null
+++ b/tests/f_illitable_flexbg/image.gz
Binary files differ
diff --git a/tests/f_illitable_flexbg/name b/tests/f_illitable_flexbg/name
new file mode 100644
index 0000000..58b0850
--- /dev/null
+++ b/tests/f_illitable_flexbg/name
@@ -0,0 +1 @@
+illegal inode table with FLEX_BG
diff --git a/tests/f_miss_journal/expect.1 b/tests/f_miss_journal/expect.1
index cad69f6..6ec8b38 100644
--- a/tests/f_miss_journal/expect.1
+++ b/tests/f_miss_journal/expect.1
@@ -1,4 +1,4 @@
-Superblock has an invalid ext3 journal (inode 8).
+Superblock has an invalid journal (inode 8).
 Clear? yes
 
 *** ext3 journal has been deleted - filesystem is now ext2 only ***
@@ -17,13 +17,12 @@
 Free blocks count wrong (968, counted=1998).
 Fix? yes
 
-Recreate journal to make the filesystem ext3 again?
-Fix? yes
+Recreate journal? yes
 
 Creating journal (1024 blocks):  Done.
 
 *** journal has been re-created - filesystem is now ext3 again ***
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/256 files (0.0% non-contiguous), 1080/2048 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1079/2048 blocks
 Exit status is 1
diff --git a/tests/f_miss_journal/expect.2 b/tests/f_miss_journal/expect.2
index 1e8c47f..ad32763 100644
--- a/tests/f_miss_journal/expect.2
+++ b/tests/f_miss_journal/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/256 files (0.0% non-contiguous), 1080/2048 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1079/2048 blocks
 Exit status is 0
diff --git a/tests/f_rehash_dir/expect.1 b/tests/f_rehash_dir/expect.1
new file mode 100644
index 0000000..6076765
--- /dev/null
+++ b/tests/f_rehash_dir/expect.1
@@ -0,0 +1,10 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 3A: Optimizing directories
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 105/2048 files (2.9% non-contiguous), 336/512 blocks
+Exit status is 1
diff --git a/tests/f_rehash_dir/expect.2 b/tests/f_rehash_dir/expect.2
new file mode 100644
index 0000000..3c78fe5
--- /dev/null
+++ b/tests/f_rehash_dir/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 105/2048 files (3.8% non-contiguous), 336/512 blocks
+Exit status is 0
diff --git a/tests/f_rehash_dir/image.gz b/tests/f_rehash_dir/image.gz
new file mode 100644
index 0000000..4e36dce
--- /dev/null
+++ b/tests/f_rehash_dir/image.gz
Binary files differ
diff --git a/tests/f_rehash_dir/script b/tests/f_rehash_dir/script
new file mode 100644
index 0000000..f4dcb74
--- /dev/null
+++ b/tests/f_rehash_dir/script
@@ -0,0 +1,3 @@
+FSCK_OPT=-yfD
+
+. $cmd_dir/run_e2fsck
diff --git a/tests/f_resize_inode/expect b/tests/f_resize_inode/expect
index 8e96059..3af16c3 100644
--- a/tests/f_resize_inode/expect
+++ b/tests/f_resize_inode/expect
@@ -3,6 +3,7 @@
 OS type: Linux
 Block size=1024 (log=0)
 Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
 4096 inodes, 16384 blocks
 819 blocks (5.00%) reserved for the super user
 First data block=1
@@ -111,15 +112,16 @@
  
 debugfs -R ''set_super_value reserved_gdt_blocks 15679'' -w ./test.img
 Exit status is 0
-Corruption found in superblock.  (reserved_gdt_blocks = 15679).
+../e2fsck/e2fsck: Group descriptors look bad... trying backup blocks...
+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
 
-The superblock could not be read or does not describe a correct ext2
-filesystem.  If the device is valid and it really contains an ext2
-filesystem (and not swap or ufs or something else), then the superblock
-is corrupt, and you might try running e2fsck with an alternate superblock:
-    e2fsck -b 1025 <device>
-
-Exit status is 8
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 11/4096 files (0.0% non-contiguous), 2107/16384 blocks
+Exit status is 1
 -----------------------------------------------
  
 debugfs -R ''set_super_value reserved_gdt_blocks 32'' -w ./test.img
diff --git a/tests/f_salvage_dir/expect.1 b/tests/f_salvage_dir/expect.1
index fc37883..3286384 100644
--- a/tests/f_salvage_dir/expect.1
+++ b/tests/f_salvage_dir/expect.1
@@ -1,13 +1,13 @@
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Directory inode 13, block 0, offset 48: directory corrupted
+Directory inode 13, block #0, offset 48: directory corrupted
 Salvage? yes
 
-Directory inode 12, block 1, offset 0: directory corrupted
+Directory inode 12, block #1, offset 0: directory corrupted
 Salvage? yes
 
 Setting filetype for entry 'c' in /test (12) to 1.
-Directory inode 12, block 1, offset 1016: directory corrupted
+Directory inode 12, block #1, offset 1016: directory corrupted
 Salvage? yes
 
 Pass 3: Checking directory connectivity
diff --git a/tests/f_uninit_last_uninit/expect.1 b/tests/f_uninit_last_uninit/expect.1
new file mode 100644
index 0000000..248bd29
--- /dev/null
+++ b/tests/f_uninit_last_uninit/expect.1
@@ -0,0 +1,9 @@
+Last group block bitmap uninitialized.  Fix? yes
+
+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
+test_filesys: 11/32 files (0.0% non-contiguous), 105/10000 blocks
+Exit status is 0
diff --git a/tests/f_uninit_last_uninit/expect.2 b/tests/f_uninit_last_uninit/expect.2
new file mode 100644
index 0000000..e95e5ed
--- /dev/null
+++ b/tests/f_uninit_last_uninit/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 11/32 files (0.0% non-contiguous), 105/10000 blocks
+Exit status is 0
diff --git a/tests/f_uninit_last_uninit/name b/tests/f_uninit_last_uninit/name
new file mode 100644
index 0000000..4f93e23
--- /dev/null
+++ b/tests/f_uninit_last_uninit/name
@@ -0,0 +1,2 @@
+last group has BLOCK_UNINIT set
+
diff --git a/tests/f_uninit_last_uninit/script b/tests/f_uninit_last_uninit/script
new file mode 100644
index 0000000..8700329
--- /dev/null
+++ b/tests/f_uninit_last_uninit/script
@@ -0,0 +1,20 @@
+SKIP_GUNZIP="true"
+
+touch $TMPFILE
+$MKE2FS -N 32 -F -o Linux -O uninit_bg -b 1024 $TMPFILE 10000 > /dev/null 2>&1 
+$DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
+set_current_time 200704102100
+set_super_value lastcheck 0
+set_super_value hash_seed null
+set_super_value mkfs_time 0
+set_bg 1 flags 0x7
+set_bg 1 checksum calc
+q
+EOF
+
+E2FSCK_TIME=200704102100
+export E2FSCK_TIME
+
+. $cmd_dir/run_e2fsck
+
+unset E2FSCK_TIME
diff --git a/tests/f_unsorted_EAs/expect.1 b/tests/f_unsorted_EAs/expect.1
new file mode 100644
index 0000000..7d588d7
--- /dev/null
+++ b/tests/f_unsorted_EAs/expect.1
@@ -0,0 +1,11 @@
+Adding dirhash hint to filesystem.
+
+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
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/2048 files (0.0% non-contiguous), 1294/2048 blocks
+Exit status is 1
diff --git a/tests/f_unsorted_EAs/expect.2 b/tests/f_unsorted_EAs/expect.2
new file mode 100644
index 0000000..414cc29
--- /dev/null
+++ b/tests/f_unsorted_EAs/expect.2
@@ -0,0 +1,7 @@
+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
+test_filesys: 12/2048 files (0.0% non-contiguous), 1294/2048 blocks
+Exit status is 0
diff --git a/tests/f_unsorted_EAs/image.gz b/tests/f_unsorted_EAs/image.gz
new file mode 100644
index 0000000..42ab502
--- /dev/null
+++ b/tests/f_unsorted_EAs/image.gz
Binary files differ
diff --git a/tests/f_unsorted_EAs/name b/tests/f_unsorted_EAs/name
new file mode 100644
index 0000000..da9c9c3
--- /dev/null
+++ b/tests/f_unsorted_EAs/name
@@ -0,0 +1 @@
+unsorted EAs in inode should not be deleted
diff --git a/tests/f_zero_inode_size/expect.1 b/tests/f_zero_inode_size/expect.1
index 3e54170..9202131 100644
--- a/tests/f_zero_inode_size/expect.1
+++ b/tests/f_zero_inode_size/expect.1
@@ -6,5 +6,5 @@
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/2512 files (9.1% non-contiguous), 415/10000 blocks
+test_filesys: 11/2512 files (0.0% non-contiguous), 415/10000 blocks
 Exit status is 1
diff --git a/tests/f_zero_inode_size/expect.2 b/tests/f_zero_inode_size/expect.2
index a6f1434..da94806 100644
--- a/tests/f_zero_inode_size/expect.2
+++ b/tests/f_zero_inode_size/expect.2
@@ -3,5 +3,5 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/2512 files (9.1% non-contiguous), 415/10000 blocks
+test_filesys: 11/2512 files (0.0% non-contiguous), 415/10000 blocks
 Exit status is 0
diff --git a/tests/filter_dumpe2fs b/tests/filter_dumpe2fs
index 51211f3..7544217 100644
--- a/tests/filter_dumpe2fs
+++ b/tests/filter_dumpe2fs
@@ -8,5 +8,7 @@
 /^Directory Hash Seed:/d
 /^Next check after:/d
 /^Maximum mount count:/d
+/^Lifetime writes:/d
 /Reserved blocks uid:/s/ (user .*)//
 /Reserved blocks gid:/s/ (group .*)//
+/^  Checksum /d
diff --git a/tests/m_dasd_bs/expect.1 b/tests/m_dasd_bs/expect.1
index ffaa4aa..808bc0e 100644
--- a/tests/m_dasd_bs/expect.1
+++ b/tests/m_dasd_bs/expect.1
@@ -2,6 +2,7 @@
 OS type: Linux
 Block size=2048 (log=1)
 Fragment size=2048 (log=1)
+Stride=0 blocks, Stripe width=0 blocks
 16384 inodes, 32768 blocks
 1638 blocks (5.00%) reserved for the super user
 First data block=0
@@ -22,7 +23,7 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/16384 files (9.1% non-contiguous), 1104/32768 blocks
+test_filesys: 11/16384 files (0.0% non-contiguous), 1104/32768 blocks
 Exit status is 0
 
 Filesystem volume name:   <none>
@@ -52,8 +53,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 0-16383)
diff --git a/tests/m_large_file/expect.1 b/tests/m_large_file/expect.1
index 2323eac..e4d0ea0 100644
--- a/tests/m_large_file/expect.1
+++ b/tests/m_large_file/expect.1
@@ -1,8 +1,8 @@
-Warning: 256-byte inodes not usable on older systems
 Filesystem label=
 OS type: Linux
 Block size=4096 (log=2)
 Fragment size=4096 (log=2)
+Stride=0 blocks, Stripe width=0 blocks
 64 inodes, 16384 blocks
 819 blocks (5.00%) reserved for the super user
 First data block=0
@@ -21,7 +21,7 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/64 files (9.1% non-contiguous), 17/16384 blocks
+test_filesys: 11/64 files (0.0% non-contiguous), 17/16384 blocks
 Exit status is 0
 
 Filesystem volume name:   <none>
@@ -51,8 +51,10 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  256
-Default directory hash:   tea
+Inode size:	          256
+Required extra isize:     28
+Desired extra isize:      28
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 0-16383)
diff --git a/tests/m_meta_bg/expect.1 b/tests/m_meta_bg/expect.1
index 95fb708..c2df838 100644
--- a/tests/m_meta_bg/expect.1
+++ b/tests/m_meta_bg/expect.1
@@ -2,10 +2,10 @@
 OS type: Linux
 Block size=1024 (log=0)
 Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
 32768 inodes, 131072 blocks
 6553 blocks (5.00%) reserved for the super user
 First data block=1
-Maximum filesystem blocks=8519680
 128 block groups
 1024 blocks per group, 1024 fragments per group
 256 inodes per group
@@ -15,63 +15,21 @@
 Writing inode tables: done                            
 Writing superblocks and filesystem accounting information: done
 
-Filesystem features: ext_attr resize_inode dir_index filetype meta_bg sparse_super
+Filesystem features: ext_attr dir_index filetype meta_bg sparse_super
  
 Pass 1: Checking inodes, blocks, and sizes
-Reserved inode 9 (<Reserved inode 9>) has invalid mode.  Clear? yes
-
-Inode 9, i_blocks is 50182, should be 0.  Fix? yes
-
 Pass 2: Checking directory structure
-Directory inode 2, block 0, offset 0: directory corrupted
-Salvage? yes
-
-First entry '' (inode=1061) in directory inode 2 (???) should be '.'
-Fix? yes
-
-Setting filetype for entry '.' in ??? (2) to 2.
-Missing '..' in directory inode 2.
-Fix? yes
-
-Setting filetype for entry '..' in ??? (2) to 2.
 Pass 3: Checking directory connectivity
-'..' in / (2) is <The NULL inode> (0), should be / (2).
-Fix? yes
-
-/lost+found not found.  Create? yes
-
 Pass 4: Checking reference counts
-Inode 2 ref count is 4, should be 3.  Fix? yes
-
 Pass 5: Checking group summary information
-Block bitmap differences:  -(39--49)
-Fix? yes
-
-Free blocks count wrong for group #0 (973, counted=985).
-Fix? yes
-
-Free blocks count wrong (126681, counted=126693).
-Fix? yes
-
-Free inodes count wrong for group #0 (244, counted=245).
-Fix? yes
-
-Directories count wrong for group #0 (3, counted=2).
-Fix? yes
-
-Free inodes count wrong (32756, counted=32757).
-Fix? yes
-
-
-test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/32768 files (0.0% non-contiguous), 4379/131072 blocks
-Exit status is 1
+test_filesys: 11/32768 files (0.0% non-contiguous), 4389/131072 blocks
+Exit status is 0
 
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
 Filesystem revision #:    1 (dynamic)
-Filesystem features:      ext_attr resize_inode dir_index filetype meta_bg sparse_super
+Filesystem features:      ext_attr dir_index filetype meta_bg sparse_super
 Default mount options:    (none)
 Filesystem state:         clean
 Errors behavior:          Continue
@@ -79,12 +37,11 @@
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
-Free blocks:              126693
+Free blocks:              126683
 Free inodes:              32757
 First block:              1
 Block size:               1024
 Fragment size:            1024
-Reserved GDT blocks:      256
 Blocks per group:         1024
 Fragments per group:      1024
 Inodes per group:         256
@@ -94,16 +51,16 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-1024)
   Primary superblock at 1, Group descriptor at 2
   Block bitmap at 3 (+2), Inode bitmap at 4 (+3)
   Inode table at 5-36 (+4)
-  985 free blocks, 245 free inodes, 2 directories
-  Free blocks: 39-294, 296-1024
+  975 free blocks, 245 free inodes, 2 directories
+  Free blocks: 50-1024
   Free inodes: 12-256
 Group 1: (Blocks 1025-2048)
   Backup superblock at 1025, Group descriptor at 1026
diff --git a/tests/m_meta_bg/script b/tests/m_meta_bg/script
index c08dc04..7ca2bea 100644
--- a/tests/m_meta_bg/script
+++ b/tests/m_meta_bg/script
@@ -1,4 +1,4 @@
 DESCRIPTION="meta blockgroup feature"
 FS_SIZE=131072
-MKE2FS_OPTS="-O meta_bg,sparse_super -g 1024"
+MKE2FS_OPTS="-O meta_bg,sparse_super,^resize_inode -g 1024"
 . $cmd_dir/run_mke2fs
diff --git a/tests/m_no_opt/expect.1 b/tests/m_no_opt/expect.1
index 18ce190..eac91b1 100644
--- a/tests/m_no_opt/expect.1
+++ b/tests/m_no_opt/expect.1
@@ -1,10 +1,113 @@
-mke2fs: reserved online resize blocks not supported on non-sparse filesystem
-./test.img: Attempt to read block from filesystem resulted in short read while opening filesystem
-features: Filesystem not open
- 
-../e2fsck/e2fsck: Attempt to read block from filesystem resulted in short read while trying to open ./test.img
-Could this be a zero-length partition?
-Exit status is 8
+Filesystem label=
+OS type: Linux
+Block size=1024 (log=0)
+Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
+16384 inodes, 65536 blocks
+3276 blocks (5.00%) reserved for the super user
+First data block=1
+8 block groups
+8192 blocks per group, 8192 fragments per group
+2048 inodes per group
+Superblock backups stored on blocks: 
+	8193, 16385, 24577, 32769, 40961, 49153, 57345
 
-../misc/dumpe2fs: Attempt to read block from filesystem resulted in short read while trying to open ./test.img
-Couldn't find valid filesystem superblock.
+Writing inode tables: done                            
+Writing superblocks and filesystem accounting information: done
+
+Filesystem features:(none)
+ 
+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
+test_filesys: 11/16384 files (0.0% non-contiguous), 2094/65536 blocks
+Exit status is 0
+
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      (none)
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              16384
+Block count:              65536
+Reserved block count:     3276
+Free blocks:              63442
+Free inodes:              16373
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         2048
+Inode blocks per group:   256
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:	          128
+Default directory hash:   half_md4
+
+
+Group 0: (Blocks 1-8192)
+  Primary superblock at 1, Group descriptors at 2-2
+  Block bitmap at 3 (+2), Inode bitmap at 4 (+3)
+  Inode table at 5-260 (+4)
+  7919 free blocks, 2037 free inodes, 2 directories
+  Free blocks: 274-8192
+  Free inodes: 12-2048
+Group 1: (Blocks 8193-16384)
+  Backup superblock at 8193, Group descriptors at 8194-8194
+  Block bitmap at 8195 (+2), Inode bitmap at 8196 (+3)
+  Inode table at 8197-8452 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 8453-16384
+  Free inodes: 2049-4096
+Group 2: (Blocks 16385-24576)
+  Backup superblock at 16385, Group descriptors at 16386-16386
+  Block bitmap at 16387 (+2), Inode bitmap at 16388 (+3)
+  Inode table at 16389-16644 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 16645-24576
+  Free inodes: 4097-6144
+Group 3: (Blocks 24577-32768)
+  Backup superblock at 24577, Group descriptors at 24578-24578
+  Block bitmap at 24579 (+2), Inode bitmap at 24580 (+3)
+  Inode table at 24581-24836 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 24837-32768
+  Free inodes: 6145-8192
+Group 4: (Blocks 32769-40960)
+  Backup superblock at 32769, Group descriptors at 32770-32770
+  Block bitmap at 32771 (+2), Inode bitmap at 32772 (+3)
+  Inode table at 32773-33028 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 33029-40960
+  Free inodes: 8193-10240
+Group 5: (Blocks 40961-49152)
+  Backup superblock at 40961, Group descriptors at 40962-40962
+  Block bitmap at 40963 (+2), Inode bitmap at 40964 (+3)
+  Inode table at 40965-41220 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 41221-49152
+  Free inodes: 10241-12288
+Group 6: (Blocks 49153-57344)
+  Backup superblock at 49153, Group descriptors at 49154-49154
+  Block bitmap at 49155 (+2), Inode bitmap at 49156 (+3)
+  Inode table at 49157-49412 (+4)
+  7932 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 49413-57344
+  Free inodes: 12289-14336
+Group 7: (Blocks 57345-65535)
+  Backup superblock at 57345, Group descriptors at 57346-57346
+  Block bitmap at 57347 (+2), Inode bitmap at 57348 (+3)
+  Inode table at 57349-57604 (+4)
+  7931 free blocks, 2048 free inodes, 0 directories
+  Free blocks: 57605-65535
+  Free inodes: 14337-16384
diff --git a/tests/m_no_opt/script b/tests/m_no_opt/script
index e6244b2..6d1d0eb 100644
--- a/tests/m_no_opt/script
+++ b/tests/m_no_opt/script
@@ -1,4 +1,4 @@
 DESCRIPTION="no filesystem extensions"
 FS_SIZE=65536
-MKE2FS_OPTS="-O ^sparse_super,^filetype"
+MKE2FS_OPTS="-O ^sparse_super,^filetype,^resize_inode,^dir_index,^ext_attr"
 . $cmd_dir/run_mke2fs
diff --git a/tests/m_raid_opt/expect.1 b/tests/m_raid_opt/expect.1
index 9bd7894..88d2484 100644
--- a/tests/m_raid_opt/expect.1
+++ b/tests/m_raid_opt/expect.1
@@ -2,6 +2,7 @@
 OS type: Linux
 Block size=1024 (log=0)
 Fragment size=1024 (log=0)
+Stride=13 blocks, Stripe width=0 blocks
 32768 inodes, 131072 blocks
 6553 blocks (5.00%) reserved for the super user
 First data block=1
@@ -15,125 +16,21 @@
 Writing inode tables: done                            
 Writing superblocks and filesystem accounting information: done
 
-Filesystem features: ext_attr resize_inode dir_index filetype meta_bg sparse_super
+Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
  
-Resize inode not valid.  Recreate? yes
-
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
-Directory inode 2, block 0, offset 0: directory corrupted
-Salvage? yes
-
-First entry '' (inode=1061) in directory inode 2 (???) should be '.'
-Fix? yes
-
-Setting filetype for entry '.' in ??? (2) to 2.
-Missing '..' in directory inode 2.
-Fix? yes
-
-Setting filetype for entry '..' in ??? (2) to 2.
-Directory inode 11, block 0, offset 0: directory corrupted
-Salvage? yes
-
-First entry '' (inode=1062) in directory inode 11 (???) should be '.'
-Fix? yes
-
-Setting filetype for entry '.' in ??? (11) to 2.
-Missing '..' in directory inode 11.
-Fix? yes
-
-Setting filetype for entry '..' in ??? (11) to 2.
-Directory inode 11, block 1, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1063.  Clear? yes
-
-Directory inode 11, block 2, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1064.  Clear? yes
-
-Directory inode 11, block 3, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1065.  Clear? yes
-
-Directory inode 11, block 4, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1066.  Clear? yes
-
-Directory inode 11, block 5, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1067.  Clear? yes
-
-Directory inode 11, block 6, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1068.  Clear? yes
-
-Directory inode 11, block 7, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1069.  Clear? yes
-
-Directory inode 11, block 8, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1070.  Clear? yes
-
-Directory inode 11, block 9, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1071.  Clear? yes
-
-Directory inode 11, block 10, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1072.  Clear? yes
-
-Directory inode 11, block 11, offset 0: directory corrupted
-Salvage? yes
-
-Entry '' in ??? (11) has deleted/unused inode 1073.  Clear? yes
-
 Pass 3: Checking directory connectivity
-'..' in / (2) is <The NULL inode> (0), should be / (2).
-Fix? yes
-
-Unconnected directory inode 11 (/???)
-Connect to /lost+found? yes
-
-/lost+found not found.  Create? yes
-
-Pass 3A: Optimizing directories
 Pass 4: Checking reference counts
-Inode 11 ref count is 3, should be 2.  Fix? yes
-
 Pass 5: Checking group summary information
-Block bitmap differences:  +(3--5) +(7--10) +(12--32) +(35--37) +39 -(65--66) -70 -75 -77 -(97--98) -102 -(107--109) -(129--130) -134 -139 -142 -(161--162) -166 -171 -(174--175) -(193--194) -198 -(203--204) -(206--207) -(225--226) -230 -235 -(239--240) -(257--258) -262 -267 -271 -273 -(289--290) -294 +295 -299 -(301--305)
-Fix? yes
-
-Free blocks count wrong for group #0 (982, counted=983).
-Fix? yes
-
-Free blocks count wrong (126690, counted=126691).
-Fix? yes
-
-Inode bitmap differences:  +(1--2) +(4--5) +(7--10) -35 -38 -(43--44) -67 -70 -75 -77 -99 -102 -(107--109) -131 -134 -139 -142 -163 -166 -171 -(174--175) -195 -198 -(203--204) -(206--207) -227 -230 -235 -(239--240)
-Fix? yes
-
-
-test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 12/32768 files (0.0% non-contiguous), 4381/131072 blocks
-Exit status is 1
+test_filesys: 11/32768 files (0.0% non-contiguous), 7238/131072 blocks
+Exit status is 0
 
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
 Filesystem revision #:    1 (dynamic)
-Filesystem features:      ext_attr resize_inode dir_index filetype meta_bg sparse_super
+Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
 Default mount options:    (none)
 Filesystem state:         clean
 Errors behavior:          Continue
@@ -141,8 +38,8 @@
 Inode count:              32768
 Block count:              131072
 Reserved block count:     6553
-Free blocks:              126691
-Free inodes:              32756
+Free blocks:              123834
+Free inodes:              32757
 First block:              1
 Block size:               1024
 Fragment size:            1024
@@ -157,23 +54,25 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-1024)
-  Primary superblock at 1, Group descriptor at 2
-  Block bitmap at 35 (+34), Inode bitmap at 36 (+35)
-  Inode table at 3-34 (+2)
-  983 free blocks, 244 free inodes, 3 directories
-  Free blocks: 40-49, 51-294, 296-1024
-  Free inodes: 13-256
+  Primary superblock at 1, Group descriptors at 2-5
+  Reserved GDT blocks at 6-261
+  Block bitmap at 294 (+293), Inode bitmap at 295 (+294)
+  Inode table at 262-293 (+261)
+  715 free blocks, 245 free inodes, 2 directories
+  Free blocks: 310-1024
+  Free inodes: 12-256
 Group 1: (Blocks 1025-2048)
-  Backup superblock at 1025, Group descriptor at 1026
-  Block bitmap at 1072 (+47), Inode bitmap at 1073 (+48)
-  Inode table at 1027-1058 (+2)
-  988 free blocks, 256 free inodes, 0 directories
-  Free blocks: 1059-1071, 1074-2048
+  Backup superblock at 1025, Group descriptors at 1026-1029
+  Reserved GDT blocks at 1030-1285
+  Block bitmap at 1331 (+306), Inode bitmap at 1332 (+307)
+  Inode table at 1286-1317 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 1318-1330, 1333-2048
   Free inodes: 257-512
 Group 2: (Blocks 2049-3072)
   Block bitmap at 2107 (+58), Inode bitmap at 2108 (+59)
@@ -182,11 +81,12 @@
   Free blocks: 2081-2106, 2109-3072
   Free inodes: 513-768
 Group 3: (Blocks 3073-4096)
-  Backup superblock at 3073
-  Block bitmap at 3145 (+72), Inode bitmap at 3146 (+73)
-  Inode table at 3074-3105 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 3106-3144, 3147-4096
+  Backup superblock at 3073, Group descriptors at 3074-3077
+  Reserved GDT blocks at 3078-3333
+  Block bitmap at 3405 (+332), Inode bitmap at 3406 (+333)
+  Inode table at 3334-3365 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 3366-3404, 3407-4096
   Free inodes: 769-1024
 Group 4: (Blocks 4097-5120)
   Block bitmap at 4181 (+84), Inode bitmap at 4182 (+85)
@@ -195,11 +95,12 @@
   Free blocks: 4129-4180, 4183-5120
   Free inodes: 1025-1280
 Group 5: (Blocks 5121-6144)
-  Backup superblock at 5121
-  Block bitmap at 5219 (+98), Inode bitmap at 5220 (+99)
-  Inode table at 5122-5153 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 5154-5218, 5221-6144
+  Backup superblock at 5121, Group descriptors at 5122-5125
+  Reserved GDT blocks at 5126-5381
+  Block bitmap at 5479 (+358), Inode bitmap at 5480 (+359)
+  Inode table at 5382-5413 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 5414-5478, 5481-6144
   Free inodes: 1281-1536
 Group 6: (Blocks 6145-7168)
   Block bitmap at 6255 (+110), Inode bitmap at 6256 (+111)
@@ -208,11 +109,12 @@
   Free blocks: 6177-6254, 6257-7168
   Free inodes: 1537-1792
 Group 7: (Blocks 7169-8192)
-  Backup superblock at 7169
-  Block bitmap at 7293 (+124), Inode bitmap at 7294 (+125)
-  Inode table at 7170-7201 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 7202-7292, 7295-8192
+  Backup superblock at 7169, Group descriptors at 7170-7173
+  Reserved GDT blocks at 7174-7429
+  Block bitmap at 7553 (+384), Inode bitmap at 7554 (+385)
+  Inode table at 7430-7461 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 7462-7552, 7555-8192
   Free inodes: 1793-2048
 Group 8: (Blocks 8193-9216)
   Block bitmap at 8329 (+136), Inode bitmap at 8330 (+137)
@@ -221,11 +123,12 @@
   Free blocks: 8225-8328, 8331-9216
   Free inodes: 2049-2304
 Group 9: (Blocks 9217-10240)
-  Backup superblock at 9217
-  Block bitmap at 9367 (+150), Inode bitmap at 9368 (+151)
-  Inode table at 9218-9249 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 9250-9366, 9369-10240
+  Backup superblock at 9217, Group descriptors at 9218-9221
+  Reserved GDT blocks at 9222-9477
+  Block bitmap at 9627 (+410), Inode bitmap at 9628 (+411)
+  Inode table at 9478-9509 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 9510-9626, 9629-10240
   Free inodes: 2305-2560
 Group 10: (Blocks 10241-11264)
   Block bitmap at 10403 (+162), Inode bitmap at 10404 (+163)
@@ -318,11 +221,12 @@
   Free blocks: 24609-24920, 24923-25600
   Free inodes: 6145-6400
 Group 25: (Blocks 25601-26624)
-  Backup superblock at 25601
-  Block bitmap at 25959 (+358), Inode bitmap at 25960 (+359)
-  Inode table at 25602-25633 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 25634-25958, 25961-26624
+  Backup superblock at 25601, Group descriptors at 25602-25605
+  Reserved GDT blocks at 25606-25861
+  Block bitmap at 26219 (+618), Inode bitmap at 26220 (+619)
+  Inode table at 25862-25893 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 25894-26218, 26221-26624
   Free inodes: 6401-6656
 Group 26: (Blocks 26625-27648)
   Block bitmap at 26995 (+370), Inode bitmap at 26996 (+371)
@@ -331,11 +235,12 @@
   Free blocks: 26657-26994, 26997-27648
   Free inodes: 6657-6912
 Group 27: (Blocks 27649-28672)
-  Backup superblock at 27649
-  Block bitmap at 28033 (+384), Inode bitmap at 28034 (+385)
-  Inode table at 27650-27681 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 27682-28032, 28035-28672
+  Backup superblock at 27649, Group descriptors at 27650-27653
+  Reserved GDT blocks at 27654-27909
+  Block bitmap at 28293 (+644), Inode bitmap at 28294 (+645)
+  Inode table at 27910-27941 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 27942-28292, 28295-28672
   Free inodes: 6913-7168
 Group 28: (Blocks 28673-29696)
   Block bitmap at 29069 (+396), Inode bitmap at 29070 (+397)
@@ -356,25 +261,22 @@
   Free blocks: 30753-31142, 31145-31744
   Free inodes: 7681-7936
 Group 31: (Blocks 31745-32768)
-  Group descriptor at 31745
-  Block bitmap at 32181 (+436), Inode bitmap at 32182 (+437)
-  Inode table at 31746-31777 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 31778-32180, 32183-32768
+  Block bitmap at 32180 (+435), Inode bitmap at 32181 (+436)
+  Inode table at 31745-31776
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 31777-32179, 32182-32768
   Free inodes: 7937-8192
 Group 32: (Blocks 32769-33792)
-  Group descriptor at 32769
-  Block bitmap at 33218 (+449), Inode bitmap at 33219 (+450)
-  Inode table at 32770-32801 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 32802-33217, 33220-33792
+  Block bitmap at 33217 (+448), Inode bitmap at 33218 (+449)
+  Inode table at 32769-32800
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 32801-33216, 33219-33792
   Free inodes: 8193-8448
 Group 33: (Blocks 33793-34816)
-  Group descriptor at 33793
-  Block bitmap at 34255 (+462), Inode bitmap at 34256 (+463)
-  Inode table at 33794-33825 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 33826-34254, 34257-34816
+  Block bitmap at 34254 (+461), Inode bitmap at 34255 (+462)
+  Inode table at 33793-33824
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 33825-34253, 34256-34816
   Free inodes: 8449-8704
 Group 34: (Blocks 34817-35840)
   Block bitmap at 35291 (+474), Inode bitmap at 35292 (+475)
@@ -467,11 +369,12 @@
   Free blocks: 49185-49808, 49811-50176
   Free inodes: 12289-12544
 Group 49: (Blocks 50177-51200)
-  Backup superblock at 50177
-  Block bitmap at 50847 (+670), Inode bitmap at 50848 (+671)
-  Inode table at 50178-50209 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 50210-50846, 50849-51200
+  Backup superblock at 50177, Group descriptors at 50178-50181
+  Reserved GDT blocks at 50182-50437
+  Block bitmap at 51107 (+930), Inode bitmap at 51108 (+931)
+  Inode table at 50438-50469 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 50470-51106, 51109-51200
   Free inodes: 12545-12800
 Group 50: (Blocks 51201-52224)
   Block bitmap at 51883 (+682), Inode bitmap at 51884 (+683)
@@ -552,25 +455,22 @@
   Free blocks: 63521-64326, 64329-64512
   Free inodes: 15873-16128
 Group 63: (Blocks 64513-65536)
-  Group descriptor at 64513
-  Block bitmap at 65365 (+852), Inode bitmap at 65366 (+853)
-  Inode table at 64514-64545 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 64546-65364, 65367-65536
+  Block bitmap at 65364 (+851), Inode bitmap at 65365 (+852)
+  Inode table at 64513-64544
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 64545-65363, 65366-65536
   Free inodes: 16129-16384
 Group 64: (Blocks 65537-66560)
-  Group descriptor at 65537
-  Block bitmap at 66402 (+865), Inode bitmap at 66403 (+866)
-  Inode table at 65538-65569 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 65570-66401, 66404-66560
+  Block bitmap at 66401 (+864), Inode bitmap at 66402 (+865)
+  Inode table at 65537-65568
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 65569-66400, 66403-66560
   Free inodes: 16385-16640
 Group 65: (Blocks 66561-67584)
-  Group descriptor at 66561
-  Block bitmap at 67439 (+878), Inode bitmap at 67440 (+879)
-  Inode table at 66562-66593 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 66594-67438, 67441-67584
+  Block bitmap at 67438 (+877), Inode bitmap at 67439 (+878)
+  Inode table at 66561-66592
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 66593-67437, 67440-67584
   Free inodes: 16641-16896
 Group 66: (Blocks 67585-68608)
   Block bitmap at 68475 (+890), Inode bitmap at 68476 (+891)
@@ -663,11 +563,12 @@
   Free blocks: 81953-82000, 82003-82944
   Free inodes: 20481-20736
 Group 81: (Blocks 82945-83968)
-  Backup superblock at 82945
-  Block bitmap at 83040 (+95), Inode bitmap at 83041 (+96)
-  Inode table at 82946-82977 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 82978-83039, 83042-83968
+  Backup superblock at 82945, Group descriptors at 82946-82949
+  Reserved GDT blocks at 82950-83205
+  Block bitmap at 83560 (+615), Inode bitmap at 83561 (+616)
+  Inode table at 83206-83237 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 83238-83559, 83562-83968
   Free inodes: 20737-20992
 Group 82: (Blocks 83969-84992)
   Block bitmap at 84075 (+106), Inode bitmap at 84076 (+107)
@@ -748,25 +649,22 @@
   Free blocks: 96289-96518, 96521-97280
   Free inodes: 24065-24320
 Group 95: (Blocks 97281-98304)
-  Group descriptor at 97281
-  Block bitmap at 97558 (+277), Inode bitmap at 97559 (+278)
-  Inode table at 97282-97313 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 97314-97557, 97560-98304
+  Block bitmap at 97556 (+275), Inode bitmap at 97557 (+276)
+  Inode table at 97281-97312
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 97313-97555, 97558-98304
   Free inodes: 24321-24576
 Group 96: (Blocks 98305-99328)
-  Group descriptor at 98305
-  Block bitmap at 98595 (+290), Inode bitmap at 98596 (+291)
-  Inode table at 98306-98337 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 98338-98594, 98597-99328
+  Block bitmap at 98593 (+288), Inode bitmap at 98594 (+289)
+  Inode table at 98305-98336
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 98337-98592, 98595-99328
   Free inodes: 24577-24832
 Group 97: (Blocks 99329-100352)
-  Group descriptor at 99329
-  Block bitmap at 99632 (+303), Inode bitmap at 99633 (+304)
-  Inode table at 99330-99361 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 99362-99631, 99634-100352
+  Block bitmap at 99630 (+301), Inode bitmap at 99631 (+302)
+  Inode table at 99329-99360
+  990 free blocks, 256 free inodes, 0 directories
+  Free blocks: 99361-99629, 99632-100352
   Free inodes: 24833-25088
 Group 98: (Blocks 100353-101376)
   Block bitmap at 100667 (+314), Inode bitmap at 100668 (+315)
@@ -931,11 +829,12 @@
   Free blocks: 127009-127628, 127631-128000
   Free inodes: 31745-32000
 Group 125: (Blocks 128001-129024)
-  Backup superblock at 128001
-  Block bitmap at 128668 (+667), Inode bitmap at 128669 (+668)
-  Inode table at 128002-128033 (+1)
-  989 free blocks, 256 free inodes, 0 directories
-  Free blocks: 128034-128667, 128670-129024
+  Backup superblock at 128001, Group descriptors at 128002-128005
+  Reserved GDT blocks at 128006-128261
+  Block bitmap at 128457 (+456), Inode bitmap at 128458 (+457)
+  Inode table at 128262-128293 (+261)
+  729 free blocks, 256 free inodes, 0 directories
+  Free blocks: 128294-128456, 128459-129024
   Free inodes: 32001-32256
 Group 126: (Blocks 129025-130048)
   Block bitmap at 129703 (+678), Inode bitmap at 129704 (+679)
@@ -944,9 +843,8 @@
   Free blocks: 129057-129702, 129705-130048
   Free inodes: 32257-32512
 Group 127: (Blocks 130049-131071)
-  Group descriptor at 130049
-  Block bitmap at 130743 (+694), Inode bitmap at 130744 (+695)
-  Inode table at 130050-130081 (+1)
-  988 free blocks, 256 free inodes, 0 directories
-  Free blocks: 130082-130742, 130745-131071
+  Block bitmap at 130741 (+692), Inode bitmap at 130742 (+693)
+  Inode table at 130049-130080
+  989 free blocks, 256 free inodes, 0 directories
+  Free blocks: 130081-130740, 130743-131071
   Free inodes: 32513-32768
diff --git a/tests/m_raid_opt/script b/tests/m_raid_opt/script
index fdbf960..1e47cc1 100644
--- a/tests/m_raid_opt/script
+++ b/tests/m_raid_opt/script
@@ -1,4 +1,4 @@
 DESCRIPTION="raid options"
 FS_SIZE=131072
-MKE2FS_OPTS="-R stride=13 -O meta_bg,sparse_super -g 1024"
+MKE2FS_OPTS="-R stride=13 -O sparse_super -g 1024"
 . $cmd_dir/run_mke2fs
diff --git a/tests/m_std/expect.1 b/tests/m_std/expect.1
index 376d188..e9599dc 100644
--- a/tests/m_std/expect.1
+++ b/tests/m_std/expect.1
@@ -2,6 +2,7 @@
 OS type: Linux
 Block size=1024 (log=0)
 Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
 16384 inodes, 65536 blocks
 3276 blocks (5.00%) reserved for the super user
 First data block=1
@@ -22,7 +23,7 @@
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 11/16384 files (9.1% non-contiguous), 3364/65536 blocks
+test_filesys: 11/16384 files (0.0% non-contiguous), 3364/65536 blocks
 Exit status is 0
 
 Filesystem volume name:   <none>
@@ -52,8 +53,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-8192)
diff --git a/tests/m_uninit/expect.1 b/tests/m_uninit/expect.1
new file mode 100644
index 0000000..5fed62c
--- /dev/null
+++ b/tests/m_uninit/expect.1
@@ -0,0 +1,167 @@
+Filesystem label=
+OS type: Linux
+Block size=1024 (log=0)
+Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
+32768 inodes, 131072 blocks
+6553 blocks (5.00%) reserved for the super user
+First data block=1
+Maximum filesystem blocks=67371008
+16 block groups
+8192 blocks per group, 8192 fragments per group
+2048 inodes per group
+Superblock backups stored on blocks: 
+	8193, 24577, 40961, 57345, 73729
+
+Writing inode tables: done                            
+Writing superblocks and filesystem accounting information: done
+
+Filesystem features: ext_attr resize_inode dir_index filetype sparse_super uninit_bg
+ 
+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
+test_filesys: 11/32768 files (0.0% non-contiguous), 5691/131072 blocks
+Exit status is 0
+
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super uninit_bg
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              32768
+Block count:              131072
+Reserved block count:     6553
+Free blocks:              125381
+Free inodes:              32757
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Reserved GDT blocks:      256
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         2048
+Inode blocks per group:   256
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:	          128
+Default directory hash:   half_md4
+
+
+Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
+  Primary superblock at 1, Group descriptors at 2-2
+  Reserved GDT blocks at 3-258
+  Block bitmap at 259 (+258), Inode bitmap at 260 (+259)
+  Inode table at 261-516 (+260)
+  7662 free blocks, 2037 free inodes, 2 directories, 2037 unused inodes
+  Free blocks: 531-8192
+  Free inodes: 12-2048
+Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 8193, Group descriptors at 8194-8194
+  Reserved GDT blocks at 8195-8450
+  Block bitmap at 8451 (+258), Inode bitmap at 8452 (+259)
+  Inode table at 8453-8708 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 8709-16384
+  Free inodes: 2049-4096
+Group 2: (Blocks 16385-24576) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 16385 (+0), Inode bitmap at 16386 (+1)
+  Inode table at 16387-16642 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 16385-24576
+  Free inodes: 4097-6144
+Group 3: (Blocks 24577-32768) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 24577, Group descriptors at 24578-24578
+  Reserved GDT blocks at 24579-24834
+  Block bitmap at 24835 (+258), Inode bitmap at 24836 (+259)
+  Inode table at 24837-25092 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 25093-32768
+  Free inodes: 6145-8192
+Group 4: (Blocks 32769-40960) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 32769 (+0), Inode bitmap at 32770 (+1)
+  Inode table at 32771-33026 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 32769-40960
+  Free inodes: 8193-10240
+Group 5: (Blocks 40961-49152) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 40961, Group descriptors at 40962-40962
+  Reserved GDT blocks at 40963-41218
+  Block bitmap at 41219 (+258), Inode bitmap at 41220 (+259)
+  Inode table at 41221-41476 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 41477-49152
+  Free inodes: 10241-12288
+Group 6: (Blocks 49153-57344) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 49153 (+0), Inode bitmap at 49154 (+1)
+  Inode table at 49155-49410 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 49153-57344
+  Free inodes: 12289-14336
+Group 7: (Blocks 57345-65536) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 57345, Group descriptors at 57346-57346
+  Reserved GDT blocks at 57347-57602
+  Block bitmap at 57603 (+258), Inode bitmap at 57604 (+259)
+  Inode table at 57605-57860 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 57861-65536
+  Free inodes: 14337-16384
+Group 8: (Blocks 65537-73728) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 65537 (+0), Inode bitmap at 65538 (+1)
+  Inode table at 65539-65794 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 65537-73728
+  Free inodes: 16385-18432
+Group 9: (Blocks 73729-81920) [INODE_UNINIT, ITABLE_ZEROED]
+  Backup superblock at 73729, Group descriptors at 73730-73730
+  Reserved GDT blocks at 73731-73986
+  Block bitmap at 73987 (+258), Inode bitmap at 73988 (+259)
+  Inode table at 73989-74244 (+260)
+  7676 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 74245-81920
+  Free inodes: 18433-20480
+Group 10: (Blocks 81921-90112) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 81921 (+0), Inode bitmap at 81922 (+1)
+  Inode table at 81923-82178 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 81921-90112
+  Free inodes: 20481-22528
+Group 11: (Blocks 90113-98304) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 90113 (+0), Inode bitmap at 90114 (+1)
+  Inode table at 90115-90370 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 90113-98304
+  Free inodes: 22529-24576
+Group 12: (Blocks 98305-106496) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 98305 (+0), Inode bitmap at 98306 (+1)
+  Inode table at 98307-98562 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 98305-106496
+  Free inodes: 24577-26624
+Group 13: (Blocks 106497-114688) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 106497 (+0), Inode bitmap at 106498 (+1)
+  Inode table at 106499-106754 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 106497-114688
+  Free inodes: 26625-28672
+Group 14: (Blocks 114689-122880) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 114689 (+0), Inode bitmap at 114690 (+1)
+  Inode table at 114691-114946 (+2)
+  7934 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 114689-122880
+  Free inodes: 28673-30720
+Group 15: (Blocks 122881-131071) [INODE_UNINIT, ITABLE_ZEROED]
+  Block bitmap at 122881 (+0), Inode bitmap at 122882 (+1)
+  Inode table at 122883-123138 (+2)
+  7933 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
+  Free blocks: 123139-131071
+  Free inodes: 30721-32768
diff --git a/tests/m_uninit/script b/tests/m_uninit/script
new file mode 100644
index 0000000..0b565ac
--- /dev/null
+++ b/tests/m_uninit/script
@@ -0,0 +1,4 @@
+DESCRIPTION="uninitialized group feature"
+FS_SIZE=131072
+MKE2FS_OPTS="-O uninit_bg"
+. $cmd_dir/run_mke2fs
diff --git a/tests/progs/Makefile.in b/tests/progs/Makefile.in
index 74d40ff..0e28192 100644
--- a/tests/progs/Makefile.in
+++ b/tests/progs/Makefile.in
@@ -22,29 +22,29 @@
 SRCS=	$(srcdir)/test_rel.c 
 
 LIBS= $(LIBEXT2FS) $(LIBSS) $(LIBCOM_ERR)
-DEPLIBS= $(LIBEXT2FS) $(LIBSS) $(LIBCOM_ERR)
+DEPLIBS= $(LIBEXT2FS) $(DEPLIBSS) $(DEPLIBCOM_ERR)
 
 .c.o:
-	@echo "	CC $<"
-	@$(CC) -c $(ALL_CFLAGS) $< -o $@
+	$(E) "	CC $<"
+	$(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
 
 all:: $(PROGS)
 
 test_rel: $(TEST_REL_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o test_rel $(TEST_REL_OBJS) $(LIBS)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o test_rel $(TEST_REL_OBJS) $(LIBS)
 
 test_rel_cmds.c: test_rel_cmds.ct
-	@echo "	MK_CMDS $@"
-	@$(MK_CMDS) $(srcdir)/test_rel_cmds.ct
+	$(E) "	MK_CMDS $@"
+	$(Q) $(MK_CMDS) $(srcdir)/test_rel_cmds.ct
 
 test_icount: $(TEST_ICOUNT_OBJS) $(DEPLIBS)
-	@echo "	LD $@"
-	@$(LD) $(ALL_LDFLAGS) -o test_icount $(TEST_ICOUNT_OBJS) $(LIBS)
+	$(E) "	LD $@"
+	$(Q) $(LD) $(ALL_LDFLAGS) -o test_icount $(TEST_ICOUNT_OBJS) $(LIBS)
 
 test_icount_cmds.c: test_icount_cmds.ct
-	@echo "	MK_CMDS $@"
-	@$(MK_CMDS) $(srcdir)/test_icount_cmds.ct
+	$(E) "	MK_CMDS $@"
+	$(Q) $(MK_CMDS) $(srcdir)/test_icount_cmds.ct
 
 clean:
 	$(RM) -f $(PROGS) test_rel_cmds.c test_icount_cmds.c \
diff --git a/tests/progs/random_exercise.c b/tests/progs/random_exercise.c
index 8f6fb2d..0be389f 100644
--- a/tests/progs/random_exercise.c
+++ b/tests/progs/random_exercise.c
@@ -4,7 +4,7 @@
  * 	directory, while holding some files open while they are being
  * 	deleted.  This exercises the orphan list code, as well as
  * 	creating lots of fodder for the ext3 journal.
- * 
+ *
  * Copyright (C) 2000 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -74,7 +74,7 @@
 	int	fd;
 	int	isdir = 0;
 	int	size;
-	
+
 	mktemp(template);
 	isdir = random() & 1;
 	if (isdir) {
@@ -84,7 +84,7 @@
 		printf("Created temp directory %s, fd = %d\n",
 		       template, fd);
 	} else {
-		size = random() & (DATA_SIZE-1);		
+		size = random() & (DATA_SIZE-1);
 		fd = open(template, O_CREAT|O_RDWR, 0600);
 		write(fd, data_buffer, size);
 		printf("Created temp file %s, fd = %d, size=%d\n",
@@ -116,7 +116,7 @@
 void unlink_file(int fd)
 {
 	char *filename = state_array[fd].name;
-	
+
 	printf("Deleting %s, fd = %d, ino = %u\n", filename, fd,
 	       get_inode_num(fd));
 
@@ -130,10 +130,10 @@
 void close_file(int fd)
 {
 	char *filename = state_array[fd].name;
-	
+
 	printf("Closing %s, fd = %d, ino = %u\n", filename, fd,
 	       get_inode_num(fd));
-	
+
 	close(fd);
 	state_array[fd].state = STATE_CLEAR;
 }
@@ -146,7 +146,7 @@
 	memset(data_buffer, 0, sizeof(data_buffer));
 	sprintf(data_buffer, "This is a test file created by the "
 		"random_exerciser program\n");
-	
+
 	for (i=0; i < 100000; i++) {
 		fd = get_random_fd();
 		switch (state_array[fd].state) {
diff --git a/tests/progs/test_icount.c b/tests/progs/test_icount.c
index 026779f..aa9b932 100644
--- a/tests/progs/test_icount.c
+++ b/tests/progs/test_icount.c
@@ -1,6 +1,6 @@
 /*
  * test_icount.c
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -51,7 +51,7 @@
 		       const char *str, ext2_ino_t *ino)
 {
 	char *tmp;
-	
+
 	*ino = strtoul(str, &tmp, 0);
 	if (*tmp) {
 		com_err(request, 0, "Bad %s - %s", desc, str);
@@ -105,7 +105,7 @@
 	errcode_t	retval;
 	ext2_ino_t	ino;
 	__u16		count;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -128,7 +128,7 @@
 	errcode_t	retval;
 	ext2_ino_t	ino;
 	__u16		count;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -152,7 +152,7 @@
 	errcode_t	retval;
 	ext2_ino_t	ino;
 	__u16		count;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -176,7 +176,7 @@
 	errcode_t	retval;
 	ext2_ino_t	ino;
 	ext2_ino_t	count;
-	
+
 	if (argc < 3) {
 		printf(usage, argv[0]);
 		return;
@@ -261,6 +261,8 @@
 			exit(1);
 		}
 	}
+	fflush(stdout);
+	fflush(stderr);
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	while (!feof(f)) {
@@ -294,13 +296,12 @@
 {
 	int		retval;
 	int		sci_idx;
-	const char	*usage = "Usage: test_icount [-R request] [-f cmd_file]";
 	int		c;
 	char		*request = 0;
 	int		exit_status = 0;
 	char		*cmd_file = 0;
 	struct ext2_super_block param;
-	
+
 	initialize_ext2_error_table();
 
 	/*
@@ -325,7 +326,8 @@
 			cmd_file = optarg;
 			break;
 		default:
-			com_err(argv[0], 0, usage);
+			com_err(argv[0], 0, "Usage: test_icount "
+				"[-R request] [-f cmd_file]");
 			exit(1);
 		}
 	}
diff --git a/tests/progs/test_rel.c b/tests/progs/test_rel.c
index 351c662..e6997b6 100644
--- a/tests/progs/test_rel.c
+++ b/tests/progs/test_rel.c
@@ -1,6 +1,6 @@
 /*
  * test_rel.c
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
@@ -39,7 +39,7 @@
 		       const char *str, ext2_ino_t *ino)
 {
 	char *tmp;
-	
+
 	*ino = strtoul(str, &tmp, 0);
 	if (*tmp) {
 		com_err(request, 0, "Bad %s - %s", desc, str);
@@ -55,7 +55,7 @@
 		       const char *str, blk_t *blk)
 {
 	char *tmp;
-	
+
 	*blk = strtoul(str, &tmp, 0);
 	if (*tmp) {
 		com_err(request, 0, "Bad %s - %s", desc, str);
@@ -106,7 +106,7 @@
 	struct ext2_inode_reference ref;
 	errcode_t	retval;
 	int		first = 1;
-	
+
 	printf("Old= %lu, New= %lu, Original=%lu, Max_refs=%u\n", old,
 	       ent->new, ent->orig, ent->max_refs);
 	if (!do_refs)
@@ -145,7 +145,7 @@
 	const char *usage = "Usage: %s name max_blocks\n";
 	errcode_t	retval;
 	blk_t		max_blk;
-	
+
 	if (argc < 3) {
 		printf(usage, argv[0]);
 		return;
@@ -175,7 +175,7 @@
 	errcode_t retval;
 	struct ext2_block_relocate_entry ent;
 	blk_t	old, new, offset=0, owner=0;
-	
+
 	if (check_brel(argv[0]))
 		return;
 
@@ -294,7 +294,7 @@
 		}
 		if (blk == 0)
 			break;
-		
+
 		display_brel_entry(blk, &ent);
 	}
 	return;
@@ -352,7 +352,7 @@
 	const char	*usage = "Usage: %s name max_inode\n";
 	errcode_t	retval;
 	ext2_ino_t	max_ino;
-	
+
 	if (argc < 3) {
 		printf(usage, argv[0]);
 		return;
@@ -386,7 +386,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 4) {
 		printf(usage, argv[0]);
 		return;
@@ -422,7 +422,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -448,7 +448,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -471,7 +471,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	retval = ext2fs_irel_start_iter(irel);
 	if (retval) {
 		com_err(argv[0], retval, "while calling ext2fs_irel_start_iter");
@@ -525,7 +525,7 @@
 		}
 		if (ino == 0)
 			break;
-		
+
 		display_irel_entry(ino, &ent, 1);
 	}
 	return;
@@ -538,11 +538,11 @@
 	blk_t		block, offset;
 	ext2_ino_t	ino;
 	struct ext2_inode_reference ref;
-	
+
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 4) {
 		printf(usage, argv[0]);
 		return;
@@ -576,7 +576,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -599,7 +599,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	retval = ext2fs_irel_next_ref(irel, &ref);
 	if (retval) {
 		com_err(argv[0], retval, "while calling ext2fs_irel_next_ref");
@@ -617,7 +617,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 3) {
 		printf(usage, argv[0]);
 		return;
@@ -643,7 +643,7 @@
 
 	if (check_irel(argv[0]))
 		return;
-	
+
 	if (argc < 2) {
 		printf(usage, argv[0]);
 		return;
@@ -677,6 +677,8 @@
 			exit(1);
 		}
 	}
+	fflush(stdout);
+	fflush(stderr);
 	setbuf(stdout, NULL);
 	setbuf(stderr, NULL);
 	while (!feof(f)) {
@@ -715,7 +717,7 @@
 	char		*request = 0;
 	int		exit_status = 0;
 	char		*cmd_file = 0;
-	
+
 	initialize_ext2_error_table();
 
 	while ((c = getopt (argc, argv, "wR:f:")) != EOF) {
diff --git a/tests/progs/test_rel.h b/tests/progs/test_rel.h
index be864c9..47c4d09 100644
--- a/tests/progs/test_rel.h
+++ b/tests/progs/test_rel.h
@@ -1,6 +1,6 @@
 /*
  * test_rel.h
- * 
+ *
  * Copyright (C) 1997 Theodore Ts'o.
  *
  * %Begin-Header%
diff --git a/tests/r_inline_xattr/expect b/tests/r_inline_xattr/expect
index f72ce87..8e59de3 100644
--- a/tests/r_inline_xattr/expect
+++ b/tests/r_inline_xattr/expect
@@ -1,6 +1,6 @@
 resize2fs test
 debugfs -R ''stat file'' ./test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''
-Inode: 1550   Type: regular    Mode:  0644   Flags: 0x0   Generation: 3498507810
+Inode: 1550   Type: regular    Mode:  0644   Flags: 0x0
 Extended attributes stored in inode body: 
   name = "propervalue" (11)
 Exit status is 0
@@ -10,7 +10,7 @@
 
 Exit status is 0
 debugfs -R ''stat file'' ./test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''
-Inode: 12   Type: regular    Mode:  0644   Flags: 0x0   Generation: 3498507810
+Inode: 12   Type: regular    Mode:  0644   Flags: 0x0
 Extended attributes stored in inode body: 
   name = "propervalue" (11)
 Exit status is 0
diff --git a/tests/r_move_itable/expect b/tests/r_move_itable/expect
index e514553..0d08b16 100644
--- a/tests/r_move_itable/expect
+++ b/tests/r_move_itable/expect
@@ -25,7 +25,7 @@
 Filesystem OS type:       Linux
 Inode count:              1248
 Block count:              9985
-Reserved block count:     399
+Reserved block count:     497
 Free blocks:              8704
 Free inodes:              1237
 First block:              1
@@ -41,8 +41,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-256)
@@ -326,7 +326,7 @@
 Filesystem OS type:       Linux
 Inode count:              2496
 Block count:              19969
-Reserved block count:     599
+Reserved block count:     993
 Free blocks:              18325
 Free inodes:              2485
 First block:              1
@@ -342,8 +342,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-256)
@@ -863,7 +863,7 @@
 Filesystem OS type:       Linux
 Inode count:              3744
 Block count:              29953
-Reserved block count:     599
+Reserved block count:     1489
 Free blocks:              27946
 Free inodes:              3733
 First block:              1
@@ -879,8 +879,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-256)
@@ -1636,7 +1636,7 @@
 Filesystem OS type:       Linux
 Inode count:              5024
 Block count:              40000
-Reserved block count:     400
+Reserved block count:     1988
 Free blocks:              37624
 Free inodes:              5013
 First block:              1
@@ -1652,8 +1652,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-256)
diff --git a/tests/r_move_itable/name b/tests/r_move_itable/name
index 02a1882..58c2d6d 100644
--- a/tests/r_move_itable/name
+++ b/tests/r_move_itable/name
@@ -1 +1 @@
-filesystem resize which requires moving the inode table 
+filesystem resize which requires moving the inode table
diff --git a/tests/r_resize_inode/expect b/tests/r_resize_inode/expect
index 129cdc4..f4bee0f 100644
--- a/tests/r_resize_inode/expect
+++ b/tests/r_resize_inode/expect
@@ -23,7 +23,7 @@
 Filesystem OS type:       Linux
 Inode count:              16384
 Block count:              65536
-Reserved block count:     2621
+Reserved block count:     3276
 Free blocks:              61023
 Free inodes:              16373
 First block:              1
@@ -39,8 +39,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-1024)
@@ -471,7 +471,7 @@
 Filesystem OS type:       Linux
 Inode count:              4096
 Block count:              16384
-Reserved block count:     655
+Reserved block count:     819
 Free blocks:              14277
 Free inodes:              4085
 First block:              1
@@ -487,8 +487,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-1024)
@@ -628,7 +628,7 @@
 Filesystem OS type:       Linux
 Inode count:              41472
 Block count:              165536
-Reserved block count:     4966
+Reserved block count:     8274
 Free blocks:              157175
 Free inodes:              41461
 First block:              1
@@ -644,8 +644,8 @@
 Reserved blocks uid:      0
 Reserved blocks gid:      0
 First inode:              11
-Inode size:		  128
-Default directory hash:   tea
+Inode size:	          128
+Default directory hash:   half_md4
 
 
 Group 0: (Blocks 1-1024)
diff --git a/tests/r_resize_inode/script b/tests/r_resize_inode/script
index 5820fbe..aced9c4 100644
--- a/tests/r_resize_inode/script
+++ b/tests/r_resize_inode/script
@@ -37,6 +37,8 @@
 
 echo "--------------------------------" >> $OUT
 
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
 echo mke2fs -q -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 65536 >> $OUT
 $MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 65536 2>&1 \
 	| sed -e '1d' | grep -v "automatically checked" | 
diff --git a/tests/test_config b/tests/test_config
index f5ae0fe..45130ba 100644
--- a/tests/test_config
+++ b/tests/test_config
@@ -13,6 +13,7 @@
 TEST_BITS="../debugfs/debugfs"
 RESIZE2FS_EXE="../resize/resize2fs"
 RESIZE2FS="$USE_VALGRIND $RESIZE2FS_EXE"
+E2UNDO_EXE="../misc/e2undo"
 TEST_REL=../tests/progs/test_rel
 TEST_ICOUNT=../tests/progs/test_icount
 LD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss
@@ -20,12 +21,12 @@
 TMPFILE=./test.img
 export LD_LIBRARY_PATH
 export DYLD_LIBRARY_PATH
-TZ=GMT
+TZ=GMT0
 export TZ
 LC_ALL=C
 export LC_ALL
 E2FSCK_CONFIG=/dev/null
 export E2FSCK_CONFIG
-MKE2FS_CONFIG=$SRCDIR/../misc/mke2fs.conf
+MKE2FS_CONFIG=./mke2fs.conf
 export MKE2FS_CONFIG
 
diff --git a/tests/test_script.in b/tests/test_script.in
index be0e912..aac28fb 100644
--- a/tests/test_script.in
+++ b/tests/test_script.in
@@ -8,8 +8,13 @@
 
 case "$1" in 
     --valgrind)
-    	export USE_VALGRIND="valgrind -q --weird-hacks=lax-ioctls"
+    	export USE_VALGRIND="valgrind -q --sim-hints=lax-ioctls"
 	shift;
+	;;
+    --valgrind-leakcheck)
+    	export USE_VALGRIND="valgrind --sim-hints=lax-ioctls --leak-check=full --show-reachable=yes --log-file=/tmp/valgrind-%p.log"
+	shift;
+	;;
 esac
 
 if test "$1"x = x ; then
diff --git a/tests/u_mke2fs/script b/tests/u_mke2fs/script
new file mode 100644
index 0000000..8d51159
--- /dev/null
+++ b/tests/u_mke2fs/script
@@ -0,0 +1,36 @@
+printf "e2undo with mke2fs: "
+if test -x $E2UNDO_EXE; then
+
+E2FSPROGS_UNDO_DIR=./
+export E2FSPROGS_UNDO_DIR
+TDB_FILE=./mke2fs-test.img.e2undo
+OUT=$test_name.log
+rm -f $TDB_FILE >/dev/null 2>&1
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
+echo mke2fs -q -F -o Linux -b 1024 test.img  > $OUT
+$MKE2FS -F -o Linux -I 128 -b 1024 $TMPFILE  >> $OUT 2>&1
+md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum before mke2fs $md5 >> $OUT
+
+echo using mke2fs to test e2undo >> $OUT
+$MKE2FS -q -F -o Linux -I 256 -O uninit_bg -E lazy_itable_init=1 -b 1024 $TMPFILE  >> $OUT 2>&1
+new_md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum after mke2fs $new_md5 >> $OUT
+
+$E2UNDO_EXE  $TDB_FILE $TMPFILE  >> $OUT 2>&1
+new_md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum after e2undo $new_md5 >> $OUT
+
+if [ $md5 = $new_md5 ]; then
+	echo "ok"
+	touch $test_name.ok
+	rm -f $test_name.failed
+else
+	rm -f $test_name.ok
+	ln -f $test_name.log $test_name.failed
+	echo "failed"
+fi
+rm -f $TDB_FILE $TMPFILE
+fi
diff --git a/tests/u_tune2fs/script b/tests/u_tune2fs/script
new file mode 100644
index 0000000..5382cad
--- /dev/null
+++ b/tests/u_tune2fs/script
@@ -0,0 +1,36 @@
+printf "e2undo with tune2fs: "
+if test -x $E2UNDO_EXE; then
+
+E2FSPROGS_UNDO_DIR=./
+export E2FSPROGS_UNDO_DIR
+TDB_FILE=./tune2fs-test.img.e2undo
+OUT=$test_name.log
+rm -f $TDB_FILE >/dev/null 2>&1
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
+echo mke2fs -q -F -o Linux -b 1024 $TMPFILE  > $OUT
+$MKE2FS -q -F -o Linux -I 128 -b 1024 $TMPFILE  >> $OUT 2>&1
+md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum before tune2fs $md5 >> $OUT
+
+echo using tune2fs to test e2undo >> $OUT
+$TUNE2FS -I 256 $TMPFILE  >> $OUT 2>&1
+new_md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum after tune2fs $new_md5 >> $OUT
+
+$E2UNDO_EXE  $TDB_FILE $TMPFILE  >> $OUT 2>&1
+new_md5=`md5sum $TMPFILE | cut -d " " -f 1`
+echo md5sum after e2undo $new_md5 >> $OUT
+
+if [ $md5 = $new_md5 ]; then
+	echo "ok"
+	touch $test_name.ok
+	rm -f $test_name.failed
+else
+	rm -f $test_name.ok
+	ln -f $test_name.log $test_name.failed
+	echo "failed"
+fi
+rm -f $TDB_FILE $TMPFILE
+fi
diff --git a/util/Makefile.in b/util/Makefile.in
index 4c3d07c..4ad769f 100644
--- a/util/Makefile.in
+++ b/util/Makefile.in
@@ -14,25 +14,25 @@
 @MCONFIG@
 
 .c.o:
-	@echo "	CC $<"
-	@$(BUILD_CC) -c $(BUILD_CFLAGS) $< -o $@
+	$(E) "	CC $<"
+	$(Q) $(BUILD_CC) -c $(BUILD_CFLAGS) $< -o $@
 
 PROGS=		subst
 
 all:: $(PROGS) gen-tarball
 
 subst: subst.o
-	@echo "	LD $@"
-	@$(BUILD_CC) $(BUILD_LDFLAGS) -o subst subst.o
+	$(E) "	LD $@"
+	$(Q) $(BUILD_CC) $(BUILD_LDFLAGS) -o subst subst.o
 
 copy_sparse: copy_sparse.o
-	@echo "	LD $@"
-	@$(BUILD_CC) $(BUILD_LDFLAGS) -o copy_sparse copy_sparse.o
+	$(E) "	LD $@"
+	$(Q) $(BUILD_CC) $(BUILD_LDFLAGS) -o copy_sparse copy_sparse.o
 
 gen-tarball: $(srcdir)/gen-tarball.in $(top_builddir)/config.status
-	@echo "	CONFIG.STATUS $@"
-	@cd $(top_builddir); CONFIG_FILES=util/gen-tarball ./config.status
-	@chmod +x gen-tarball
+	$(E) "	CONFIG.STATUS $@"
+	$(Q) cd $(top_builddir); CONFIG_FILES=util/gen-tarball ./config.status
+	$(Q) chmod +x gen-tarball
 
 tarballs: gen-tarball
 	sh gen-tarball debian
diff --git a/util/all.exclude b/util/all.exclude
index 3e892f9..8247f75 100644
--- a/util/all.exclude
+++ b/util/all.exclude
@@ -5,6 +5,7 @@
 patches
 README.subset
 build
+build.static
 rpm.log
 TODO
 powerquest
diff --git a/util/copy_sparse.c b/util/copy_sparse.c
index aece6be..cbab273 100644
--- a/util/copy_sparse.c
+++ b/util/copy_sparse.c
@@ -1,7 +1,7 @@
 /*
  * copy_sparse.c -- copy a very large sparse files efficiently
  * 	(requires root privileges)
- * 
+ *
  * Copyright 2003, 2004 by Theodore Ts'o.
  *
  * %Begin-Header%
@@ -70,7 +70,7 @@
 	while (count > 0) {
 		got = read(fd, buf, count);
 		if (got == -1) {
-			if ((errno == EINTR) || (errno == EAGAIN)) 
+			if ((errno == EINTR) || (errno == EAGAIN))
 				continue;
 			return total ? total : -1;
 		}
@@ -97,7 +97,7 @@
 
 	if (verbose)
 		printf("Copying sparse file from %s to %s\n", src, dest);
-		
+
 	if (strcmp(src, "-")) {
 		if (stat64(src, &fileinfo) < 0) {
 			perror("stat");
@@ -125,13 +125,13 @@
 			printf("Blocksize of file %s is %ld\n", src, bs);
 		numblocks = (fileinfo.st_size + (bs-1)) / bs;
 		if (verbose)
-			printf("File size of %s is %lld (%ld blocks)\n", src, 
+			printf("File size of %s is %lld (%ld blocks)\n", src,
 			       (long long) fileinfo.st_size, numblocks);
 	} else {
 		fd = 0;
 		bs = 1024;
 	}
-		
+
 	ofd = open(dest, O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0777);
 	if (ofd < 0) {
 		perror(dest);
@@ -143,7 +143,7 @@
 		fprintf(stderr, "Couldn't allocate buffer");
 		exit(1);
 	}
-			
+
 	for (lb = 0; !fd || lb < numblocks; lb++) {
 		if (fd) {
 			block = get_bmap(fd, lb);
@@ -170,7 +170,7 @@
 			break;
 
 		if (got == bs) {
-			for (i=0; i < bs; i++) 
+			for (i=0; i < bs; i++)
 				if (buf[i])
 					break;
 			if (i == bs) {
diff --git a/util/gen-tarball.in b/util/gen-tarball.in
index 8dcaf04..b82f12c 100644
--- a/util/gen-tarball.in
+++ b/util/gen-tarball.in
@@ -8,13 +8,20 @@
 base_ver=`echo @E2FSPROGS_VERSION@ | sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'`
 base_e2fsprogs=`basename $top_dir`
 exclude=/tmp/exclude
+GZIP=gzip
 
-deb_pkgver=`echo @E2FSPROGS_PKGVER@ | sed -e 's/_/-/g'`
-echo Debian package $deb_pkgver
+#
+# This hack is needed because texi2dvi blows up horribly if there are 
+# any '~' chracters in the directory pathname.  So we kludge around it by
+# using a non-standard directory name for WIP releases.  dpkg-source
+# complains, but life goes on.
+#
+deb_pkgver=`echo @E2FSPROGS_PKGVER@ | sed -e 's/~/-/g'`
     
 case $1 in
     debian|ubuntu)
 	SRCROOT="e2fsprogs-$deb_pkgver"
+	rename_tarball="e2fsprogs_@E2FSPROGS_PKGVER@.orig.tar.gz"
 	list=all
 	;;
     subset)
@@ -36,10 +43,14 @@
 		-print) | sed -e "s/^$base_e2fsprogs/$SRCROOT/" > $exclude
 sed -e "s;^;$SRCROOT/;" < $srcdir/$list.exclude >> $exclude
 
-(cd $top_srcdir/.. ; rm -f $SRCROOT ; ln -sf e2fsprogs $SRCROOT)
+(cd $top_srcdir/.. ; rm -f $SRCROOT ; ln -sf $base_e2fsprogs $SRCROOT)
 
 (cd $top_srcdir/.. ; tar -c -h -v -f - -X $exclude $SRCROOT) \
-	 | gzip -9 > $SRCROOT.tar.gz
+	 | $GZIP -9 -c > $SRCROOT.tar.gz
+$GZIP -l $SRCROOT.tar.gz
 
 (cd $top_srcdir/.. ; rm -f $SRCROOT)
 mv $top_srcdir/e2fsprogs.spec ../e2fsprogs.spec 
+if test -n "$rename_tarball"; then
+    mv $SRCROOT.tar.gz $rename_tarball
+fi
diff --git a/util/subset.exclude b/util/subset.exclude
index 1213927..b8c839d 100644
--- a/util/subset.exclude
+++ b/util/subset.exclude
@@ -4,6 +4,7 @@
 .pc
 patches
 build
+build.static
 rpm.log
 TODO
 powerquest
diff --git a/util/subst.c b/util/subst.c
index fadf328..b55f54b 100644
--- a/util/subst.c
+++ b/util/subst.c
@@ -2,7 +2,7 @@
  * subst.c --- substitution program
  *
  * Subst is used as a quicky program to do @ substitutions
- * 
+ *
  */
 
 #include <stdio.h>
@@ -36,7 +36,7 @@
 {
 	struct subst_entry	*ent = 0;
 	int	retval;
-	
+
 	retval = ENOMEM;
 	ent = (struct subst_entry *) malloc(sizeof(struct subst_entry));
 	if (!ent)
@@ -54,10 +54,8 @@
 	return 0;
 fail:
 	if (ent) {
-		if (ent->name)
-			free(ent->name);
-		if (ent->value)
-			free(ent->value);
+		free(ent->name);
+		free(ent->value);
 		free(ent);
 	}
 	return retval;
@@ -91,7 +89,7 @@
 		return NULL;
 	memcpy(start, begin, len);
 	start[len] = 0;
-	
+
 	/*
 	 * The substitution variable must all be in the of [0-9A-Za-z_].
 	 * If it isn't, this must be an invalid symbol name.
@@ -154,7 +152,7 @@
 		}
 		ent = fetch_subst_entry(replace_name);
 		if (!ent) {
-			fprintf(stderr, "Unfound expansion: '%s'\n", 
+			fprintf(stderr, "Unfound expansion: '%s'\n",
 				replace_name);
 			ptr = end_ptr + 1;
 			continue;
@@ -167,7 +165,7 @@
 		replace_string(ptr, end_ptr, ent->value);
 		if ((ent->value[0] == '@') &&
 		    (strlen(replace_name) == strlen(ent->value)-2) &&
-		    !strncmp(replace_name, ent->value+1, 
+		    !strncmp(replace_name, ent->value+1,
 			     strlen(ent->value)-2))
 			/* avoid an infinite loop */
 			ptr += strlen(ent->value);
@@ -193,7 +191,7 @@
 		if (!replace_name) {
 			ptr = name_ptr;
 			continue;
-		}			
+		}
 		ent = fetch_subst_entry(replace_name);
 		if (!ent) {
 			ptr = end_ptr + 1;
@@ -313,7 +311,7 @@
 	int	adjust_timestamp = 0;
 	struct stat stbuf;
 	struct utimbuf ut;
-	
+
 	while ((c = getopt (argc, argv, "f:tv")) != EOF) {
 		switch (c) {
 		case 'f':
@@ -332,7 +330,7 @@
 			verbose++;
 			break;
 		default:
-			fprintf(stderr, "%s: [-f config-file] [file]\n", 
+			fprintf(stderr, "%s: [-f config-file] [file]\n",
 				argv[0]);
 			break;
 		}
@@ -346,7 +344,7 @@
 		optind++;
 	} else
 		in = stdin;
-	
+
 	if (optind < argc) {
 		outfn = argv[optind];
 		newfn = (char *) malloc(strlen(outfn)+20);
@@ -365,7 +363,7 @@
 		out = stdout;
 		outfn = 0;
 	}
-			
+
 	while (!feof(in)) {
 		if (fgets(line, sizeof(line), in) == NULL)
 			break;
diff --git a/version.h b/version.h
index ea18f42..d1e3bae 100644
--- a/version.h
+++ b/version.h
@@ -1,11 +1,11 @@
 /*
  * version.h --- controls the version number printed by the e2fs
  * programs.
- * 
+ *
  * Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- * 2004, 2005, 2006, 2007 by Theodore Ts'o.  This file may be
+ * 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o.  This file may be
  * redistributed under the GNU Public License.
  */
 
-#define E2FSPROGS_VERSION "1.40.8"
-#define E2FSPROGS_DATE "13-Mar-2008"
+#define E2FSPROGS_VERSION "1.41.11"
+#define E2FSPROGS_DATE "14-Mar-2010"