From 27dc24defdadbbb63d4c1ed8b6c06839f77388ef Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 2 Dec 2013 22:26:58 -0500 Subject: [PATCH] e2fsck: fix j_maxlen if the file system is exactly 1 << 32 blocks If the external journal device has exactly 1 << 32 blocks, journal->j_maxlen would get set to zero, which would cause e2fsck to declare the journal to be invalid. Signed-off-by: "Theodore Ts'o" --- e2fsck/journal.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/e2fsck/journal.c b/e2fsck/journal.c index ff11f22d2..bd2c9a192 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -241,7 +241,6 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) unsigned long long start = 0; int ext_journal = 0; int tried_backup_jnl = 0; - blk64_t maxlen; clear_problem_context(&pctx); @@ -392,6 +391,8 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) io_channel_set_blksize(ctx->journal_io, ctx->fs->blocksize); if (ext_journal) { + blk64_t maxlen; + if (ctx->fs->blocksize == 1024) start = 1; bh = getblk(dev_journal, start, ctx->fs->blocksize); @@ -426,9 +427,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) } maxlen = ext2fs_blocks_count(&jsuper); - if (maxlen > 1ULL << 32) - maxlen = (1ULL << 32) - 1; - journal->j_maxlen = maxlen; + journal->j_maxlen = (maxlen < 1ULL << 32) ? maxlen : (1ULL << 32) - 1; start++; } -- 2.47.2