Factor out code to clear a bogus inode and update e2fsck's internal
data structures accordingly into a common routine,
e2fsck_clear_inode(). This saves about 200 bytes in the compiled x86
e2fsck executable, and makes the code more maintainable in the
long-term.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Responsibility for byte swapping the extents information rests with
the low-level extent code, which translates the on-disk extents
information to the abstract extent format. The on-disk format will
eventually get more complicated, in order to add support for 64-bit
block numbers, bit-compressed extents, etc. So to avoid needing to
expose all of that complexity in swapfs.c, the in-memory contents of
i_blocks will not be byte-swapped and will be identical to the on-disk
format.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This change allows debugfs to be reused as the base for e2fsprogs
internal test programs, by linking debugfs object files with
additional object file(s) that define additional commands. The test
program's object file(s) should define their own comand table, and
define the symbol extra_cmds to be a pointer to the ss_request_table.
In addition, the symbol debug_prog_name can be used to override the
name of the program printed in the version banner and in the ss
prompt.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Fix strtoblk() to allow a block number 0, and
common_block_args_process() so it prints an error message if a block
number that can't be parsed by strtoul().
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
The major changes were:
* Fix realloc() leak on failure case from Jim Meyering
* Fixed various problems in transaction lock code
* Made transaction_brlock() static
* Added more fine-grained locking features
Moved from svn revision #22080 to #23590
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Adapted from the SuSE patch, but fixes a number of very serious
problems with the patch in SLES:
1) This changeset uses -M instead of -m; most lowercase options are
reserved for use by the filesystem-specific fsck programs. All new
fsck options must be upper case.
2) This changeset will skip the root filesystem in "fsck -AM", which
the SLES patch will not do.
3) Loading /proc/mounts into the fs_info can cause -t opts matching to
malfuction. So this changeset uses a simplified version of the
ismounted.c function from the ext2fs library.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
DJGPP lacks sys/select.h and sys/un.h; add header checks to be more
portable.
Signed-off-by: Christophe Grenier <grenier@cgsecurity.org>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Some systems don't have the 'dc' command installed, and this causes
configure to print a warning message unnecessarily for a standard
(non-WIP and non-pre) release of e2fsprogs.
It's easy enough to avoid this problem, so let's do it.
Addresses-Sourceforge-Bug: #1893024
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
The pid file was getting created before the fork(), so it had the
incorrect pid number. No one noticed for a while, since "uuidd -k"
will kill the daemon and it has enough automatic convenience functions
that it's usually not necessary to refer to the pid file except as a
convenient place for uuidd to lock against multiple instances of the
daemon starting up.
Addresses-Sourceforge-Bug: #1893244
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cygwin doesn't support lockf(), so move to fcntl() locking as more
portable. Also fix a bug which could cause get_lock() to loop forever
if the attempt to lock the file fails for some reason.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This flag allows the caller to promise that it will not try to modify
the block numbers returned by the iterator.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Since the test_script driver uses [A-Za-z], we need to set the locale
so we don't get bitten on locals where the sort order might be
different.
Addresses-Sourceforge-Bug: #1890526
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Address the theoretical problem of two threads trying to format a
different unknown error code by using TLS.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This isn't necessary since we don't install the init.d script (and
it's not the recommended way to start uuidd anyway).
Addresses-Sourceforge-Bug: #1885085
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
USB devices can return ENOMEDIUM, and when the filesystem cached
information wasn't flushed, it resulted in the wrong location of a
filesystem to be returned to the caller. The only justification for
using cached information when the open fails is in the case of a
permission denied error.
Addresses-Debian-Bug: #463787
Add logic that on Linux systems will check for the presence of the
ext4dev filesystem; if it isn't present, fall back to ext4 for
filesystems that are marked as being "OK for use on test filesystem
code". If they are OK for use for in-development filesystem code, it
should also be fine to use stable filesystem code if there is no test
filesystem code (ext4dev) available.
The reverse is not true, of course. We don't ever want to mount a
production filesystem using test filesystem code unless the user gives
us explicit permission via "tune2fs -E test_fs".
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Since recent kernels have a tendency to set this feature willy-nilly,
let's just enable by default. It's only very old kernels that don't
support it any more.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This makes it easier to upgrade to ext4 in the future, and it speeds
up extended attributes handling --- important on SELinux systems!
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Also removed the --enable-dynamic-static configure option.
Unfortunately the usefulness of building e2fsck statically is gone on
all modern distributions, since everything else on the system is built
dynamically these days. In fact on some distributions it is almost
impossible to build programs statically any more.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Previously we used a hard-coded test where for the Alpha and the IA64,
we used lseek instead of llseek(). Generalize this to whenver
sizeof(long) is the same as sizeof(long long).
It turns out this fixes a FTBFS problem on the x86_64 for Debian,
since dietlibc doesn't provide llseek() on that architecture.
Addresses-Debian-Bug: #459614
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Recent e2fsprogs (1.40.3 and higher) fsck compares primary superblock to
backups, and if things differ, it forces a full check. However, the
kernel has a penchant for updating flags the first time a feature is
used - attributes, large files, etc.
This is a bad idea, and we should break the kernel of this habit,
especially for the ext4 feature flags. But for now, let's make e2fsck
avoid forcing a full check and backup except when absolutely
necessary.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
The test_fs flag is an "ok to be used with test kernel code" flag. It
makes it easier for us to determine whether a filesystem should be
mounted using ext4 or not.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Apparently Mac OS 10.5 defines fstat64(), but not ftruncate64(),
causing resize2fs to fail to build. So check explicitly for
ftruncate64(), and fall back to ftruncate() if necessary.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
If we can't use ftruncate64(), and have to use ftruncate() instead,
make sure that we don't accidentally truncate the size when we chop it
down to an off_t before calling ftruncate(), lest we severely damage a
filesystem image file.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>