Theodore Ts'o [Thu, 28 Aug 2008 17:24:12 +0000 (13:24 -0400)]
resize2fs: Allow (non-optimal) on-line resizing for flex_bg filesystems
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.
Long term, we will need to create a new ioctl which does much more of
the resizing work in the kernel.
We also fix a bug in the ext3/ext4 ioctl fallback code so we stop
trying the ext3 ioctl for every single block group when resizing an
ext4 filesystem.
Theodore Ts'o [Thu, 28 Aug 2008 14:20:43 +0000 (10:20 -0400)]
Further optimize journal placement for flex_bg filesystems
If the number of block groups is greater than half the flex_bg size,
the journal we be placed in the flex_bg super-group which is closest
to the mid-point of the filesystem, and in the first free block group
beyond where the metadata for the flex_bg is stored.
Theodore Ts'o [Thu, 28 Aug 2008 01:46:26 +0000 (21:46 -0400)]
Improve future compatibility for the 64-bit I/O channel functions
Provide a C language wrapper function for io_channel_read_blk64() and
io_channel_write_blk64() instead of using a C preprocessor macro, with
an fallback to the old 32-bit functions if an application-provided I/O
channel manager doesn't supply 64-bit method functions and the block
numbers can fit in 32-bit integer.
Theodore Ts'o [Wed, 27 Aug 2008 19:11:28 +0000 (15:11 -0400)]
Create the journal in the middle of the filesystem
This speeds up access to the journal by eliminating worst-case seeks
from one end of the disk to another, which can be quite common in very
fsync-intensive workloads if the file is located near the end of the
disk, and the journal is located the beginning of the disk.
In addition, this can help eliminate journal fragmentation when
flex_bg is enabled, since the first block group has a large amount of
metadata.
Theodore Ts'o [Wed, 27 Aug 2008 06:24:51 +0000 (02:24 -0400)]
libblkid: Give a priority bonus to "leaf" devicemapper devices
Give a boost to dm devices which are not used to build other dm
devices, since "leaf" devices are generally more likely to be
interesting as devices to mount.
Theodore Ts'o [Wed, 27 Aug 2008 04:00:44 +0000 (00:00 -0400)]
libblkid: Unexport the private symbol blkid_devdirs
blkid_devdirs was defined in blkidP.h and was never intended to be
used outside of the library. Since it no longer needs to be shared
across object files, rename it and turn it into a static variable.
Theodore Ts'o [Tue, 26 Aug 2008 12:13:56 +0000 (08:13 -0400)]
libblkid: Optimize devicemapper support
This commit works by removing all calls from libdevmapper altogether,
and using the standard support for "normal" non-dm devices.
It depends on dm devices being placed in /dev/mapper (but the previous
code had this dependency anyway), and /proc/partitions containing dm
devices.
We don't actually rip out the libdevmapper code in this commit, but
just disable it via #undef HAVE_DEVMAPPER, just so it's easier to
review and understand the fundamental code changes. A subsequent
commit will remove the libdevmapper code, as well as unexport
the blkid_devdirs string array.
Thanks to Karel Zak for inspiring me to look at the dm code in blkid,
so I could realize how much it deserved to ripped out by its roots. :-)
Theodore Ts'o [Tue, 26 Aug 2008 01:08:19 +0000 (21:08 -0400)]
Add support for with empty directory blocks in 64k blocksize filesystems
The rec_len field in the directory entry is 16 bits, so if the
filesystem is completely empty, rec_len of 0 is used to designate
65536, for the case where the directory entry takes the entire 64k
block.
Andreas Dilger [Sun, 24 Aug 2008 03:42:46 +0000 (21:42 -0600)]
add debugfs command to print known features
Print out the currently supported features of e2fsprogs/libext2fs
via a new "debugfs supported_features" command. This helps scripts
to know whether it is possible to try and enable specific features
in the filesystem.
Signed-off-by: Kalpak Shah <kalpak.shah@sun.com> Signed-off-by: Andreas Dilger <adilger@sun.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Andreas Dilger [Sun, 24 Aug 2008 03:17:17 +0000 (21:17 -0600)]
libext2fs: grow dblist more aggressively
Make the dblist grow more quickly when many directory blocks are added,
otherwise the array has to get copied too often, which is slow when it
is large.
Signed-off-by: Andreas Dilger <adilger@sun.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Theodore Ts'o [Sun, 24 Aug 2008 05:20:49 +0000 (01:20 -0400)]
debian: Add uuid-runtime.lintian-overrides
I want to make sure the uuidd daemon is shutdown before removing
the package. Since the uuidd daemon is provided by the uuid-runtime
package, and I *know* exactly where it is, and I ***don't*** want the
script to be confused by some other pathname being used by the local
administrator, I specify an explicit pathname. In addition, given the
explicit test to make sure /usr/sbin/uuidd exists, it seems non-sensical
to remove the prepended path.
Theodore Ts'o [Sun, 24 Aug 2008 05:18:55 +0000 (01:18 -0400)]
debian: add libuuid1.lintian-overrides
The libuuid1.postinst script doesn't really call adduser; it just
checks the adduser config file, if it exists. The lintain maintainers
agree this is a spurious warning, and it will be fixed eventually.
Theodore Ts'o [Sun, 24 Aug 2008 05:04:43 +0000 (01:04 -0400)]
Fix mke2fs man page to escape all minus signs
Option specifiers must be escaped so the are printed as minus signs
(U+002D) instead of hyphens (U+2010). Hence "mke2fs -t ext4" must be
expressed as "mke2fs \-t ext4" instead.
Theodore Ts'o [Sun, 24 Aug 2008 02:27:22 +0000 (22:27 -0400)]
libblkid: Strengthen the JFS probe routine
Check to make sure a JFS filesystem is really correct by checking the
relationship between the following fields in the JFS superblock:
s_bsize, s_l2bsize, s_pbsize, s_l2pbsize, and s_l2bfactor. Thanks to
Lesh Bogdanow for this suggestion.
Theodore Ts'o [Sun, 24 Aug 2008 02:11:01 +0000 (22:11 -0400)]
libblkid: Fix false detection of DFSee created filesystems.
OS/2 and DFSee creates a pseudo FAT-12/16 header in the first 512
bytes of a filesystem which looks enough like a FAT-12/16 to fool
blkid. Part of this is because we don't require ms_magic or vs_magic
to be the strings "FAT12 ", "FAT16 ", or "FAT32 ", since some FAT
filesystem formatters don't set ms_magic or vs_magic. To address
this, we explicitly test for "JFS " and "HPFS " in ms_magic,
and if they are found, we assume the filesystem is definitely not
a FAT filesystem.
Theodore Ts'o [Sat, 23 Aug 2008 01:57:29 +0000 (21:57 -0400)]
mke2fs: Issue a warning if the mke2fs.conf file wasn't updated
Many people are forgetting to update their mke2fs.conf file, and this
means that filesystems aren't getting created with the proper features
enabled. So detect this case and issue a warning.
Theodore Ts'o [Fri, 22 Aug 2008 16:26:07 +0000 (12:26 -0400)]
configure.in: Respect LDFLAGS environment variable if passed into configure
If the --with-ldopts option is not passed on the command line, respect
the LDFLAGS environment variable instead of forcing LDFLAGS to be
unset. "configure --help" documents LDFLAGS as part of the standard
configure script calling convention.
Theodore Ts'o [Fri, 22 Aug 2008 14:37:18 +0000 (10:37 -0400)]
libext2fs: Replace use of sprintf with strcpy/strcat to help SILO
Some bootloaders, like SILO, don't provide sprintf in their limited
bootloader environment. Since the uses in rw_bitmaps.c is only doing
sprintf("foo %s"), it's easy to replace that usage with strcpy/strcat.
Theodore Ts'o [Fri, 22 Aug 2008 07:07:53 +0000 (03:07 -0400)]
resize2fs: supply block allocator for extents function
In the rare case where new blocks are needed while mutating an extent
tree, supply a specialized block allocator so that extent_node_split()
allocates valid blocks for the interior nodes of the extent tree.
Theodore Ts'o [Fri, 22 Aug 2008 07:03:42 +0000 (03:03 -0400)]
resize2fs: Fix support for filesystems with the uninit_bg feature
If the filesystem has the uninit_bg feature, then parts of the block
and inode bitmap may not be initialized. Teach resize2fs how to deal
with these case appropriately. (Most of these fixes were fortunately
not necessary for the common case where the resize_inode is present to
reserve space, and where the filesystem is being expanded instead of
being shrunk.)
Theodore Ts'o [Fri, 22 Aug 2008 06:52:12 +0000 (02:52 -0400)]
libext2fs: Add support for uninit_bg feature to allocation functions
If the allocation functions need to allocate out of a block group
where the inode and/or block bitmaps have not yet been initialized,
initialize them so ext2fs_new_block() and ext2fs_new_inode() work
correctly.
Theodore Ts'o [Fri, 22 Aug 2008 06:32:28 +0000 (02:32 -0400)]
Fix ext2fs_extent_set_bmap() when setting a block before the first extent
When setting a logical block which is before the first extent in the
extent tree, make sure the new extent goes in front, at the very
beginning of the extent tree. This fixes a bug where previously the
new extent would be inserted out of order in this case.
Theodore Ts'o [Mon, 18 Aug 2008 03:20:16 +0000 (23:20 -0400)]
resize2fs: Fix double bumping of directory in-use counts
When moving directories into new block groups (which would only happen
when shrinking a filesystem), resize2fs would increase the directory
in-use count by 2 times the necessary value, due to a change in
ext2fs_inode_alloc_stats() made in e2fsprogs 1.26. This is largely
harmless, but it does result in a filesystem corruption for e2fsck to
fix.
Theodore Ts'o [Sun, 17 Aug 2008 13:41:38 +0000 (09:41 -0400)]
e2fsck: Fix max size calculation for extent files
A misunderstanding C's precedence rules and the meaning of
s_log_block_size meant that we were capping the maximum size of
extent-based files at 8GB instead of the 64TB that it should be for
filesystems with 4k block sizes.
Theodore Ts'o [Thu, 14 Aug 2008 18:30:05 +0000 (14:30 -0400)]
libext2fs: Initialize unset inode timestamps when writing a new inode
As Li Zefan <lizf@cn.fujitsu.com> reported, the creation timestamp was
not getting set on the lost+found inode. This patch makes sure all of
the timestamps are appropriately set.
Also add the missing argument of the -M option, replace the mistaken
[libdefaults] section header with [defaults], and slightly rephrase
two or three sentences.
Theodore Ts'o [Sun, 10 Aug 2008 02:37:58 +0000 (22:37 -0400)]
blkid: Fix probing logic so we find renamed devices
This fixes a bug where if there is an entry in the /etc/blkid.tab file
for a particular device (major, minor) number but the filename does
not exist, blkid wouldn't try to find the correct filename.
tune2fs: Improve the error messages for tune2fs -I
If the current inode size is less than or equal to the requested inode
size, either explain that shrinking the inode size is not supported,
or that the inode is already the requested size. Also, open the
filesystem provisionally first to do the inode size check and don't
setup up the undo log until we know that we're actually going to
perform the inode resizing operation.