]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
tune2fs: don't recover journal if device is busy.
authorNeilBrown <neilb@suse.com>
Sat, 24 Feb 2018 19:56:06 +0000 (14:56 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 24 Feb 2018 20:01:59 +0000 (15:01 -0500)
tune2fs currently replays the journal if it needs
recovery and the filesystem isn't mounted.

The test for "is the filesystem mounted" isn't completely robust.
Lustre makes use of ext4 filesystems in a way that they are mounted
without being visible in /proc/mounts or similar.
This usage can easily be detected by attempting to open the device
with O_EXCL.  tune2fs already does this and the EXT2_MF_BUSY flag
is set if open(O_EXCL) fails.
Several uses other than lustre mounts could cause O_EXCL to fail,
but in any case it seems unwise to recover the journal when something
else is keeping the device busy.

So add an extra test to avoid journal recovery when the device
is busy.  This fixes some problems with lustre usage.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
misc/tune2fs.c

index 7bbd610886191fdc288d8ffce62ce011aa378284..a3374ab9d7b761bfea99f0dc6d557e48ae400880 100644 (file)
@@ -3226,7 +3226,7 @@ _("Warning: The journal is dirty. You may wish to replay the journal like:\n\n"
        }
 #else
        /* Recover the journal if possible. */
-       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
+       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & (EXT2_MF_BUSY | EXT2_MF_MOUNTED)) &&
            ext2fs_has_feature_journal_needs_recovery(fs->super)) {
                errcode_t err;