summaryrefslogtreecommitdiff
path: root/debugfs
Commit message (Collapse)AuthorAgeFilesLines
* debugfs: fix set_inode_field block[IND|DIND|TIND]Theodore Ts'o2014-08-191-1/+4
| | | | | | | | | | After we determine that we can't parse the array value as an integer, we need to restore the square brackets to the field name, so that we can find a match with block[IND], block[DIND], and block[TIND] in the inode field table. Reported-by: Jun He <jhe@cs.wisc.edu> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: teach rdump to take multiple source argumentsAaron Crane2014-08-042-21/+25
| | | | | | | [ modified to update man page by tytso ] Signed-off-by: Aaron Crane <arc@aaroncrane.co.uk> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: refactor do_rdump()Aaron Crane2014-08-041-14/+17
| | | | | | | No behaviour changes. This will simplify the next commit. Signed-off-by: Aaron Crane <arc@aaroncrane.co.uk> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: fix double-close bug in "rdump" and "dump -p"Aaron Crane2014-08-041-3/+0
| | | | | | | | | | | | | | | | | | | | | Previously, both of these usages called dump_file() with a true value as the "preserve" argument, which caused it to in turn call fix_perms() to make the permissions on the locally-dumped file match those found on the ext2 filesystem. fix_perms() then attempted to close(2) the file descriptor (if any) before returning (though it didn't attempt to report on any errors found while doing so). However, in both of these situations, the local file being dumped had been opened by the caller of dump_file(), which also closes it (and reports on any errors detected when closing). This meant that both "rdump" and "dump -p" would then emit a spurious EBADF message when trying to re-close the local file descriptor. Deleting the spurious close(2) call in fix_perms() fixes the problem in both commands. Signed-off-by: Aaron Crane <arc@aaroncrane.co.uk> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: be more specific in error messagesAaron Crane2014-08-041-2/+2
| | | | | Signed-off-by: Aaron Crane <arc@aaroncrane.co.uk> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* misc: quiet signed/unsigned charactr compiler warningsAndreas Dilger2014-08-011-1/+1
| | | | | | | | | Quiet warnings about signed vs. unsigned character mismatch. Use __u8 for storing UUIDs instead of char to match the superblock s_uuid field. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* libext2fs: provide a function to set inode sizeDarrick J. Wong2014-07-261-1/+6
| | | | | | | | | | | | | | Provide an API to set i_size in an inode and take care of all required feature flag modifications. Refactor the code to use this new function. [ Moved the function to lib/ext2fs/blk_num.c, which is the rest of these sorts of functions live, and renamed it to be ext2fs_inode_size_set() instead of ext2fs_inode_set_size() to be consistent with the other functions in in blk_num.c -- tytso ] Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* build: fix unused/uninitialized variable warningsAndreas Dilger2014-07-251-3/+0
| | | | | | | | | | Fix a few warnings about unused and uninitialized variables. Also fix util/subst.c to include <sys/time.h> to avoid using undeclared functions gettimeofday() and futimes(). Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: allow bmap to allocate blocksDarrick J. Wong2014-07-221-2/+3
| | | | | | | | | | Allow set_inode_field's bmap command in debugfs to allocate blocks, which enables us to allocate blocks for indirect blocks and internal extent tree blocks. True, we could do this manually, but seems like unnecessary bookkeeping activity for humans. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: create inode_dump command to dump an inode in hexDarrick J. Wong2014-07-225-15/+61
| | | | | | | | | | | Create a command that will dump an entire inode's space in hex. [ Modified by tytso to add a description to the man page, and to add the more formal command name, inode_dump, in addition to short command name of "idump". ] Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* e2fsprogs: introduce ext2fs_close_free() helperLukas Czerner2014-07-051-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Currently there are many uses of ext2fs_close() which might be wrong. First of all ext2fs_close() does not set the ext2_filsys pointer to NULL so the caller is responsible for clearing it, however there are some cases there we do not do it. Second of all very small number of users of ext2fs_close() actually check the return value. If there is a problem in ext2fs_close() it will not even free the ext2_filsys structure, but majority of users expect it to do so. To fix both problems this commit introduces a new helper ext2fs_close_free() which will not only check for the return value and free the ext2_filsys structure if the call to ext2fs_close2() failed, but it will also set the ext2_filsys pointer to NULL. Replace every use of ext2fs_close() in e2fsprogs tools with ext2fs_close_free() - there is no real reason to keep using ext2fs_close(). Signed-off-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
* debugfs: add support setting the error_count and associated sb fieldsTheodore Ts'o2014-07-041-0/+11
| | | | Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: fix debugfs/quota.c compile warningsAndreas Dilger2014-05-221-11/+10
| | | | | | | Fix type mismatch and unused variable warnings. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: fix filehandle leak in copy_file()Andreas Dilger2014-05-221-13/+14
| | | | | | | | | | | Fix a file handle leak for the target file in copy_file() when error handlers return without closing the file. Instead, clean up at the end of the function to handle cleanup in normal and error cases. Minor other code style cleanups. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: fix string_to_time for MacOS strptime()Andreas Dilger2014-05-221-0/+14
| | | | | | | | | | | | | | The strptime() function does not update fields in struct tm that are not specified in the input format. The glibc implementation sets the tm_yday field (%j) when any of the year (%Y), month (%m), or day (%d) fields are changed, but the MacOS strptime() does not set tm_yday in this case. This caused string_to_time() to calculate the wrong Unix epoch on MacOS. If tm_yday is unset, compute it in string_to_time(). This also fixes test regression failures for FreeBSD. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs: add commands to query the quota informationTheodore Ts'o2014-05-136-50/+320
| | | | | | | | This allows us to verify quota information in an ext4 file systems with the quota feature. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Reviewed-by: Aditya Kali <adityakali@google.com>
* Add coverage testing using gcovTheodore Ts'o2014-02-231-1/+1
| | | | | | | | | | | | | To check the coverage of e2fsprogs's regression test, do the following: configure --enable-gcov make -j8 ; make -j8 check ; make coverage.txt The coverage information will be the coverage.txt and *.gcov files in the build directories. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* Add support for new compat feature "sparse_super2"Theodore Ts'o2014-01-301-0/+2
| | | | | | | | | | | | | | | | | | | | | | | In practice, it is **extremely** rare for users to try to use more than the first backup superblock located at the beginning of block group #1. (i.e., at block number 32768 for file systems with a 4k block size). This new compat feature restricts the backup superblock to block group #1 and the last block group in the file system. Aside from reducing the overhead of the file system by a small number of blocks, by eliminating the rest of the backup superblocks, it allows us to have a much more flexible metadata layout. For example, we can force all of the allocation bitmaps and inode table blocks to the beginning of the disk, which allows most of the disk to be exclusively used for contiguous data blocks. This simplifies taking advantage of certain HDD specific features, such as Shingled Magnetic Recording (aka Shingled Drives), and the TCG's OPAL Storage Specification where having a simple mapping between LBA block ranges and the data blocks used by the file system can make life much simpler. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix typo in commit 5a1d25a7bTheodore Ts'o2014-01-091-2/+2
| | | | | | The typo causes a compiler warning, but it's otherwise harmless. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* Fix up workarounds for dietlibc breakageTheodore Ts'o2014-01-091-10/+10
| | | | | | | | | | | | | The dietlibc doesn't support the TZ environment variable, which is required by the standard. Work around this so that we can run the regression test suite when building with dietlibc. (This is useful for finding problems.) With this change, the only thing which doesn't work as far as dietlibc is concerned is the posix_memalign test, and the MMP support tests (because posix_memalign isn't provided by dietlibc, sigh.) Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: remove dead codeTheodore Ts'o2014-01-081-2/+0
| | | | | | | Addresses-Coverity-Id: #1138573 Reviewed-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* configure: fix --with-diet-libcTheodore Ts'o2014-01-051-2/+2
| | | | | | | | | | | | | | | Newer versions of autoconf pull in AC_PROG_GCC as part of AC_CANONICAL_HOST. So we need check for WITH_DIET_LIBC earlier in configure.in. Also, e2fsprogs now needs functions which are found in diet libc's compat library. So add support for autoconf's LIBS function, and automatically set libs to include -lcompat. Finally, disable compiling e4defrag by deault if --with-diet-libc is specified because the program has too many glibc dependencies. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: clean up read_journal_block() to avoid Coverity complaintTheodore Ts'o2014-01-041-25/+23
| | | | | | | | | | | The read_journal_block() function was needlessly complicated, which made it harder to read/maintain, and it also tripped up Coverity. Cleaning it up also avoided some signed/unsigned casts, and allows us to avoid passing got back to the caller, since it wasn't needed. Addresses-Coverity-Bug: #709539 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: restore and tweak original error messagingEric Whitney2013-12-305-25/+31
| | | | | | | | | | | | | | | | | | In response to reviewer comments, commit fe56188b07 included changes that modified some of the code used to output error messages when checking user-supplied block numbers. These changes converted calls to parse_ulonglong() to calls to strtoblk(). Because strtoblk() calls parse_ulonglong(), and both output error messages, two redundant and relatively generic messages were output on each error. Fix this by removing the error message output from strtoblk(), and extending it to accept an optional error message argument that it supplies in lieu of a default to parse_ulonglong(). Also, revert to the more descriptive original error messages with mods per reviewer comments, and fix an error message in do_replace_node(). Signed-off-by: Eric Whitney <enwlinux@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: document the lsdel command in the man pageTheodore Ts'o2013-12-281-1/+12
| | | | | | Addresses-Debian-Bug: #731329 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix extent header in do_write for big-endian machinesTheodore Ts'o2013-12-241-1/+1
| | | | | | | | | Commit a17e9f30 set up the extent header for a new file. Unfortunately it didn't correctly handle byte swapping; fix this so the regression tests pass on PowerPC systems. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: Eric Sandeen <sandeen@redhat.com>
* Add ext4 man page and update and clean up the other man pagesTheodore Ts'o2013-12-241-1/+2
| | | | Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: silence build warning and remove incorrect error messageEric Whitney2013-12-241-3/+1
| | | | | | | | | | | | | | Commit fe56188b07 modified the code used to check the block number argument to the command line -s switch, adding a call to com_err(). This causes a compile time warning because the third argument to com_err() isn't a string. Also, when the block number argument is bad it outputs an incorrect error message - "Operation not permitted". Fix these minor problems by removing the call to com_err(). Other code provides enough error reporting information in this case. Signed-off-by: Eric Whitney <enwlinux@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs, e2fsck: fix s_desc_size handlingAndreas Dilger2013-12-241-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The s_desc_size in the superblock specifies the group descriptor size in bytes, but in various places the EXT4_FEATURE_INCOMPAT_64BIT flag implies that the descriptor size is EXT2_MIN_DESC_SIZE_64BIT (64 bytes) instead of checking the actual size. In other places, the s_desc_size field is used without checking for INCOMPAT_64BIT. In the case of ext2fs_group_desc() the s_desc_size was being ignored, and assumed to be sizeof(struct ext4_group_desc), which would result in garbage for any but the first group descriptor. Similarly, in ext2fs_group_desc_csum() and print_csum() they assumed that the maximum group descriptor size was sizeof(struct ext4_group_desc). Fix these functions to use the actual superblock s_desc_size if INCOMPAT_64BIT. Conversely, in ext2fs_swap_group_desc2() s_desc_size was used without checking for INCOMPAT_64BIT being set. The e2fsprogs behaviour is different than that of the kernel, which always checks INCOMPAT_64BIT, and only uses s_desc_size to determine the offset of group descriptors and what range of bytes to checksum. Allow specifying the s_desc_size field at mke2fs time with the "-E desc_size=NNN" option. Allow a power-of-two s_desc_size value up to s_blocksize if INCOMPAT_64BIT is specified. This is not expected to be used by regular users at this time, so it is not currently documented in the mke2fs usage or man page. Add m_desc_size_128, f_desc_size_128, and f_desc_bad test cases to verify mke2fs and e2fsck handling of larger group descriptor sizes. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* Clean up sparse warningsTheodore Ts'o2013-12-164-7/+10
| | | | | | | Mostly by adding static and removing excess extern qualifiers. Also convert a few remaining non-ANSI function declarations to ANSI. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: clean up debugfs man page and help textAndreas Dilger2013-12-153-206/+252
| | | | | | | | | | | | Clean up the formatting of the debugfs(8) man page: - add command aliases to the main descriptions - use bold for sub-commands and italics for their arguments - remove trailing spaces - add "dirty" sub-command - clarify "block_dump" and "zap_block" sub-commands Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: don't leak mmp_s memory (on error path)Darrick J. Wong2013-12-121-1/+1
| | | | | | | | ext2fs_free_mem() takes a pointer to a pointer, similar to ext2fs_get_mem(). Improve the documentation, and fix debugfs. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: don't leak fd when calling dump_fileDarrick J. Wong2013-12-121-2/+9
| | | | | | | | | The caller of dump_file provides a fd to write to, so the caller should also dispose of the fd. Also, the fd never gets closed if preserve=1. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: handle 64bit block numbersDarrick J. Wong2013-12-123-25/+32
| | | | | | | | | debugfs should use strtoull wrappers for reading block numbers from the command line. "unsigned long" isn't wide enough to handle block numbers on 32bit platforms. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix various minor bogosityDarrick J. Wong2013-12-121-7/+8
| | | | | | | | | | | | | | We should really use the ext2fs memory allocator functions in copy_file(), and we really should return a value if there's allocation problems. Also fix up a minor bogosity in an error message. Reviewed-by: Zheng Liu <wenqing.lz@taobao.com> Cc: Robert Yang <liezhi.yang@windriver.com> Cc: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix init_filesys help textDarrick J. Wong2013-12-121-1/+1
| | | | | | | | | | | The help text for debugfs' init_filesys command is incorrect; the second parameter is the size of the filesystem in blocks, not the size of an individual filesystem block. There is in fact no way to set that parameter. Reported-by: Zheng Liu <wenqing.lz@taobao.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: update usage message for open and filefragZheng Liu2013-12-082-2/+3
| | | | | | | | The ussage message for the open and filefrag commands were missing options; this commit fixes this. Signed-off-by: Zheng Liu <wenqing.lz@taobao.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix range mode of freeiLev Solomonov2013-12-041-1/+1
| | | | | | | | | | commit 2ae5d1fdb82b31bf270c4699c59a087c846db2f0 was supposed to teach 'seti' and 'freei' to act on a range of consecutive inodes. apparently only 'seti' has learned: 'freei' doesn't advance the ino, repeatedly acting on the same one instead. Signed-off-by: Lev Solomonov <solo@primarydata.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* mmp: fix 64-bit handling of s_mmp_blockAndreas Dilger2013-12-031-5/+0
| | | | | | | | | | | | | Fix the checking of s_mmp_block in e2fsck_pass1() and ext2fs_mmp_read() to handle the high 32 bits of s_blocks_count. Remove redundant check of s_mmp_block in do_dump_mmp() right before ext2fs_mmp_read() is called. Also fix s_blocks_count_hi in check_backup_super_block(), since it cannot use the ext2fs_blocks_count() helper easily. Signed-off-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs.c: do sparse copy when src is a sparse fileRobert Yang2013-10-131-4/+58
| | | | | | | | | | | | | | | | | Let debugfs do sparse copy when src is a sparse file, just like "cp --sparse=auto" * For the: #define IO_BUFSIZE 64*1024 this is a suggested value from gnu coreutils: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=src/ioblksize.h;h=1ae93255e7d0ccf0855208c7ae5888209997bf16;hb=HEAD * Use malloc() to allocate memory for the buffer since put 64K (or more) on the stack seems not a good idea. Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Acked-by: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* debugfs.c: the max length of debugfs argument is too shortRobert Yang2013-10-131-1/+5
| | | | | | | | | | | The max length of debugfs argument is 256 which is too short, the arguments are two paths, the PATH_MAX is 4096 according to /usr/include/linux/limits.h, so use BUFSIZ (which is 8192 on Linux systems), that's also what the ss library uses. Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Acked-by: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
* e2fsprogs: add (optional) sparse checking to the buildDarrick J. Wong2013-10-111-0/+1
| | | | | | | | | | Run sparse against source files when building e2fsprogs with 'make C=1'. If instead C=2, it configures basic ext2 types for bitwise checking with sparse, which can help find the (many many) spots where conversion errors are (possibly) happening. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* e2fsprogs: fix blk_t <- blk64_t assignment mismatchesDarrick J. Wong2013-10-072-10/+8
| | | | | | | | | Fix all the places where we should be using a blk64_t instead of a blk_t. These fixes are more severe because 64bit values could be truncated silently. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: properly set up extent header in do_writeEric Sandeen2013-07-281-1/+12
| | | | | | | | | | | | | | | | | do_write doesn't fully set up the first extent header on a new inode, so if we write a 0-length file, and don't write any data to the new file, we end up creating something that looks corrupt to kernelspace: EXT4-fs error (device loop0): ext4_ext_check_inode:464: inode #12: comm ls: bad header/extent: invalid magic - magic 0, entries 0, max 0(0), depth 0(0) Do something similar to ext4_ext_tree_init() here, and fill out the first extent header upon creation to avoid this. Reported-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Tested-by: Robert Yang <liezhi.yang@windriver.com>
* debugfs: fix command failures for extent_inode commands that take argumentsTheodore Ts'o2013-03-131-3/+3
| | | | | | | | The extent_inode commands split_node, replace_node, and insert_node take arguments which resulted in confusing error messages after succeeding. Fix this. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: add sanity check to make sure we never shift 64 bits rightTheodore Ts'o2013-01-281-1/+4
| | | | | | | | | | | In the tables which are used to parse the fields for the set_fields command, there should never be a entry which has a size set to 8 bytes, and two pointers defined. Not only would it result in undefined behavior in the compiled code, it doesn't make any sense and is definitely a bug. Reported-by: Xi Wang <xi.wang@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: fix mknod command so that it updates the block group statisticsTheodore Ts'o2013-01-161-2/+1
| | | | Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: add symlink commandDarren Hart2013-01-164-0/+50
| | | | | | | | | | | | | | Add support for symbolic links using a new symlink command. Modeled after the do_mkdir() command. Testing demonstrates both fastlinks and slowlinks work correctly. Very long target paths fail as the command parsing appears to truncate the input to somewhere around 256 bytes. Signed-off-by: Darren Hart <dvhart@infradead.org> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: "Darrick J. Wong" <darrick.wong@oracle.com> Cc: Andreas Dilger <adilger@dilger.ca>
* debugfs: fix gcc-wall complaintsTheodore Ts'o2013-01-145-32/+66
| | | | | | | | | | Fix the missing function prototypes from the recently added new debugfs commands, plus some signed vs unsigned comparison complaints. Also change the abbreviation of the block_dump command from "bp" to the more appropriate "bp". Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
* debugfs: document zap_block & block_dumpEric Sandeen2013-01-122-2/+14
| | | | | | | | What little docs there were had a cut & paste error. We can do better. :) Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>