aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2018-02-24 14:56:06 -0500
committerTheodore Ts'o <tytso@mit.edu>2018-02-24 15:01:59 -0500
commitee8b61e9b0acf23759f83fb255f720cdfbd8f233 (patch)
tree9d3fd5e0fe138339f25e24a6ac1749b8f61def57
parentcb6d45fb1cd00199d0c7ca6ffe3eee8f7f74fa20 (diff)
downloade2fsprogs-ee8b61e9b0acf23759f83fb255f720cdfbd8f233.tar.gz
tune2fs: don't recover journal if device is busy.
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>
-rw-r--r--misc/tune2fs.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index 7bbd61088..a3374ab9d 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -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;