Reported-by: Calvin Owens Signed-off-by: "Theodore Ts'o" --- e2fsck/journal.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/e2fsck/journal.c b/e2fsck/journal.c index 767ea10..69771da 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -372,9 +372,19 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) #ifndef USE_INODE_IO if (ext_journal) #endif - retval = io_ptr->open(journal_name, - IO_FLAG_RW | IO_FLAG_EXCLUSIVE, + { + int flags = IO_FLAG_RW; + if (!(ctx->mount_flags & EXT2_MF_ISROOT && + ctx->mount_flags & EXT2_MF_READONLY)) + flags |= IO_FLAG_EXCLUSIVE; + if ((ctx->mount_flags & EXT2_MF_READONLY) && + (ctx->options & E2F_OPT_FORCE)) + flags &= ~IO_FLAG_EXCLUSIVE; + + + retval = io_ptr->open(journal_name, flags, &ctx->journal_io); + } if (retval) goto errout; -- 1.7.12.rc0.22.gcdd159b