Theodore Ts'o [Mon, 29 May 2006 15:06:16 +0000 (11:06 -0400)]
Add missing backwards compatibility for ancient Linux systems
This fixes some (but not all) of the compatibility bugs which prevented
e2fsprogs from being compiled on a Linux 2.0.35 system. There are still
some unprotected use of long long's, and apparently some type problems
with the uuid library, but these can be fixed up later.
Theodore Ts'o [Mon, 29 May 2006 03:42:47 +0000 (23:42 -0400)]
Fix debugfs's dump_unsued commands on filesystems with a 64k blocksize
Use EXT2_MAX_BLOCK_SIZE instead of a hardcoded blocksize of 32768, since
this will fail on a filesystem with a 64k blocksize. (Addresses SourceForge
bug #1424311)
Theodore Ts'o [Sun, 14 May 2006 21:30:51 +0000 (17:30 -0400)]
Remove needless sanity check in tune2fs's -i option.
We were complaining with a confusing error message if the user tried to specify
a check interval larger than a 365 days. It's probably a bad idea if the user wants to
do this, but it's not worth it to complain.
Theodore Ts'o [Sun, 14 May 2006 21:16:29 +0000 (17:16 -0400)]
Fix memory leak in e2fsck's error paths
Add missing brelse() calls to avoid memory leaks in error paths. (Thanks
to Michael C. Thompson for pointing these out; they were originally
found using Coverity.)
Theodore Ts'o [Sun, 14 May 2006 19:33:57 +0000 (15:33 -0400)]
Add RAID stride support to resize2fs
Resize2fs will now automatically determine the RAID stride parameter that
had been used to create the filesystem, and use that for newly created
block groups. The RAID stride parameter may also be manually specified
on the command line using the new -S option to resize2fs.
Theodore Ts'o [Sat, 13 May 2006 13:25:47 +0000 (09:25 -0400)]
Fix read/write badblocks testing in mke2fs and e2fsck
The exlcusive device safety check that was added inadvertently broke
e2fsck -cc and mke2fs -cc since e2fsck and mke2fs hold the device
in exclusive access when badblocks is run. So we add a private option
to badblocks, -X, which is passed by e2fsck and mke2fs to badblocks
to indicate that it is OK to skip the EXT2_MF_BUSY checks.
Theodore Ts'o [Sat, 13 May 2006 13:05:01 +0000 (09:05 -0400)]
Fix problem with creating initrd's for 2.4 systems on Debian
Recent glibc's no longer accept LD_ASSUME_KERNEL=2.4; this must be LD_ASSUME_KERNEL=2.4.1. Also, only set LD_ASSUME_KERNEL if we
are not using a 2.4 kernel (and are presumably using something newer)
Theodore Ts'o [Sat, 13 May 2006 12:46:37 +0000 (08:46 -0400)]
Change mke2fs's layout of RAID-optimized filesystems to be more optimal
When allocating space for the RAID filesystems with the stride parameter,
place each portion of the group's inode table right up after the superblock
(if present) in order to minimize fragmentation of the freespace.
Theodore Ts'o [Tue, 9 May 2006 00:17:26 +0000 (20:17 -0400)]
Add support for EXT2_FEATURE_COMPAT_LAZY_BG
This feature is initially intended for testing purposes; it allows an
ext2/ext3 developer to create very large filesystems using sparse files
where most of the block groups are not initialized and so do not require
much disk space. Eventually it could be used as a way of speeding up
mke2fs and e2fsck for large filesystem, but that would be best done by
adding an RO_COMPAT extension to the filesystem to allow the inode table
to be lazily initialized on a per-block basis, instead of being entirely initialized
or entirely unused on a per-blockgroup basis.
Currently filefrag uses signed int for block numbers, thus it reporting
corrupted block number for a file on a more than 8TB ext3. The following
trivial patch replace the signed int type block number with "unsigned
long type.
Fix bug which could cause dumpe2fs to rarely fail to print a UUID
uuid.c (e2p_is_null_uuid): Fix really stupid bug which could cause dumpe2fs
to fail to display a the journal or hash seed UUID. (Thanks to Guillaume
Chambraud for pointing this out.)
This caused FTBFS bugs on AMD64 platforms, since it uses a different
64-bit type when compared with IA64, so we need to make our
autoconfiguration system more intelligent.
Fix ext2fs_add_journal_inode() when filesystem is opened in exclusive mode
If the filesystem is opened in exclusive mode, then device will be
busy by definition, so don't return -EBUSY. This caused mke2fs -j to
fail on the 1.39-WIP (29-Mar-2006) release. (Addresses Debian Bug:
#360652)
Let's call this an important wishlist bug (important for Debian Installer
anyway :-)
Please add the following line to the shlibs files for libblkid and libuuid
respectively:
udeb: libblkid 1 libblkid1-udeb
udeb: libuuid 1 libuuid1-udeb
This will allow dpkg/debhelper to properly set the dependencies for udebs
that depend on the e2fsprogs libs.
Please see #345472 and #345475 for further info on this.
This will also mean that, eventually, we will be able to drop the
"Provides: ..." for the library udebs, but we cannot do that until other
udebs that currently depend on them have been rebuilt.
I'll file a separate bug when that change can be made.
Theodore Ts'o [Mon, 27 Mar 2006 06:10:17 +0000 (01:10 -0500)]
Fix minor installation problems in the misc's Makefile
Make sure $(DESTDIR)/usr/share/man/man5 exists when installing the man
page. Make sure the compressed version of the man pages are deleted
when installing the man pages.
Theodore Ts'o [Sat, 25 Mar 2006 18:42:45 +0000 (13:42 -0500)]
Fix the i386 bitmap operations so they are 32-bit clean
The x86 assembly instructures for bit test-and-set, test-and-clear,
etc., interpret the bit number as a 32-bit signed number, which is
problematic in order to support filesystems > 8TB.
Added new inline functions (in C) to implement a
ext2fs_fast_set/clear_bit() that does not return the old value of the
bit, and use it for the fast block/bitmap functions.
Added a regression test suite to test the low-level bit operations
functions to make sure they work correctly.
Note that a bitmap can address 2**32 blocks requires 2**29 bytes, or
512 megabytes. E2fsck requires 3 (and possibly 4 block bitmaps),
which means that the block bitmaps can require 2GB all by themselves,
and this doesn't include the 4 or 5 inode bitmaps (which assuming an
8k inode ratio, will take 256 megabytes each). This means that it's
more likely that a filesystem check of a filesystem greater than 2**31
blocks will fail if the e2fsck is dynamically linked (since the shared
libraries can consume a substantial portion of the 3GB address space
available to x86 userspace applications). Even if e2fsck is
statically linked, for a badly damaged filesystem, which may require
additional block and/or inode bitmaps, I am not sure e2fsck will
succeed in all cases.
Theodore Ts'o [Sun, 19 Mar 2006 20:26:26 +0000 (15:26 -0500)]
Prevent error messages to stderr caused by libblkid calling libdevmapper
Make the libdevmapper fail quietly if blkid is called without root
privileges or the kernel does not include device mapper support.
(What is the device mapper _library_ doing writing to stderr, anyway?)
Theodore Ts'o [Sun, 19 Mar 2006 01:03:47 +0000 (20:03 -0500)]
Change resize2fs open modes for mounted and unmounted filesystems
If the filesystem is mounted, open it in read-only mode since the userspace
program should not try to modify it directly. If the filesystem is not mounted,
open it in exclusive mode to avoid potential problems (such as someone
trying to mount the filesystem while it is being resized).
Theodore Ts'o [Sun, 19 Mar 2006 01:01:09 +0000 (20:01 -0500)]
Change e2fsck to open non-mounted filesystems in exclusive mode
Thanks to Andreas Dilger for this idea. If the filesystem is not mounted,
e2fsck will open it in exclusive mode to prevent the a confused/careless
system administrator from mounting the filesystem while the filesystem
check is taking place, which could cause all sorts of problems.
Theodore Ts'o [Sat, 18 Mar 2006 23:57:44 +0000 (18:57 -0500)]
Add IO_FLAG_EXCLUSIVE flag to io_channel abstraction
Add a new io_channel open flag, IO_FLAG_EXCLUSIVE,which requests that
the device be opened in exclusive (O_EXCL) mode. Add support to the unix_io
implementation for this flag.
Theodore Ts'o [Mon, 13 Mar 2006 04:25:15 +0000 (23:25 -0500)]
Fix blkid's last verification logic to work when the system clock is insane
Users have reported problems on newly installed systems when the
Macintosh's system clock battery is dead and the hardware clock is
returning a date of 1904. Turns out there were some bugs in handling
dates before the Unix epoch.
Addresses Red Hat Bug: #182188
probe.c (blkid_verify): Fix the bid_time sanity checking logic,
so that if last verification time is more recent than the
current time, or the comparison between the last
verification time and the current time causes an overflow,
a device verification will take place.
devname.c (blkid_get_dev): Set the initial bid_time to be
INT_MIN, to guarantee that blkid_verify will always be run
even when the system clock is insane.
dev.c (blkid_debug_dump_dev), read.c (debug_dump_dev),
save.c (save_dev): Fix the printf format for dev->bid_time
to match the fact that it is an signed type.
Theodore Ts'o [Sat, 11 Mar 2006 02:39:40 +0000 (21:39 -0500)]
Fix the subdirs logic so it works with GNU make 3.80
The previous fix which fixed the problem with GNU make 3.81 building
all of the library object files caused GNU make 3.80 fail because the
subdirectories (such as elfshared) were not getting created. This fix
should allow the Makefiles to work with both GNU make 3.80 and GNU
make 3.81.
Theodore Ts'o [Wed, 8 Mar 2006 23:22:06 +0000 (18:22 -0500)]
Fix debugfs's icheck to correctly report the owner of an EA block
Hello Ted,
here is a minor fixup with debugfs "icheck" finding a block in an EA.
It was reporting the inode number as one too low because it was set
after the EA check is done.
From: Andreas Dilger <adilger@clusterfs.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Karel Zak [Wed, 8 Mar 2006 19:17:28 +0000 (14:17 -0500)]
Add device-mapper support to the blkid library
On systems where is multi-path storage device is problem with duplicated
filesystems. The solution is select "the best" device. This is possible
by device-mapper library.
Short quotation from RH bugzilla:
With my patch, all dm devices remains in libblkid cache.
Only the top level dm devices are given high priority
and more appropriate node names (i.e. /dev/mapper/*) are used.
For example, if we have linear mapped dm device "ov1" over
dm device "disk1p3" which is multipath mapped to /dev/sdd3 and /dev/sdh3:
# dmsetup.static ls --tree
ov1 (253:5) <-- /dev/mapper/ov1 or /dev/dm-5
`-disk1p3 (253:4) <-- /dev/mapper/disk1p3 or /dev/dm-4
`-disk1 (253:0)
|- (8:112) <-- /dev/sdh
`- (8:48) <-- /dev/sdd
Original version of blkid will show:
# ./orig/blkid -t LABEL=mpdisk1p3 -l
/dev/sdd3: LABEL="mpdisk1p3" ... TYPE="ext3"
With my patch, blkid will show:
# ./deptree/blkid -t LABEL=mpdisk1p3 -l
/dev/mapper/ov1: LABEL="mpdisk1p3" ... TYPE="ext3"
Theodore Ts'o [Sun, 29 Jan 2006 10:15:36 +0000 (05:15 -0500)]
Add a config option which controls whether fs checks are skipped when on battery
Whether fs checks are skipped when the system is running on battery can be
controlled by the new e2fsck.conf option defer_check_on_battery (this option
defaults to TRUE).
Theodore Ts'o [Sun, 29 Jan 2006 10:05:31 +0000 (05:05 -0500)]
Print an explanation when skipping a check due being on battery
On Sat, Jan 28, 2006 at 12:53:33PM -0600, Fredrick Knieper wrote:
> Package: e2fsprogs
> Version: 1.38+1.39-WIP-2005.12.31-1
>
> When running fsck at boot or when running e2fsck manually on a device,
> fsck will not check a filesystem based on the maximum mount count,
> unless a flag such as -f or -c is used to force the filesystem check.
What's happening is that when you run on battery, e2fsck will delay
running the filesystem check, on the assumption that it is better to
defer the check until some time in the future when your laptop is
running on AC mains again. This deferral is not infinite, however; if
the number of mounts exceeds twice the max mount counts, or if the
interval between checks exceeds twice the check interval, e2fsck will
force the check even though you are on battery.
I've changed the sources to print a message to make this more clear.
Theodore Ts'o [Thu, 5 Jan 2006 05:47:34 +0000 (00:47 -0500)]
Enhance profile library's parser to accept comments
This also changes syntax accepted by the profile parser. The value of
profile relations must not contain spaces unless it is quoted;
otherwise the parser will throw an error. Previously something like
this was allowed:
[liboptions]
test = foo bar
Now, the relation must be in double quotes in order to be valid, i.e.,
"foo bar".
Comments are allowed anywhere and can be started with either a ';' or
a '#' character. The only place where comments will not be intepreted
as beginning a comment is in a quoted string.
Theodore Ts'o [Sat, 31 Dec 2005 21:33:33 +0000 (16:33 -0500)]
Add e2fsck problem handling to be configurable
Add the ability for the e2fsck configuration file to override the
behaviour of e2fsck when a particular filesystem problem is
encountered. This allows reconnecting an inode to lost+found to not
stop the boot sequence, if a system administrator really badly wants
this behaviour for some specialized reason, for example.