From b23520d0501095dee715d0829c365933c216e612 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 22 Jun 2001 21:52:14 -0400 Subject: [PATCH] mkjournal.c (ext2fs_add_journal_inode): Move close of file descriptor so that adding a journal to a mounted filesystem doesn't die. (Fixes a bug accidentally introduced in e2fsprogs 1.21.) --- lib/ext2fs/ChangeLog | 5 +++++ lib/ext2fs/mkjournal.c | 15 +++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog index 959a4bed..98e6b90a 100644 --- a/lib/ext2fs/ChangeLog +++ b/lib/ext2fs/ChangeLog @@ -1,5 +1,10 @@ 2001-06-22 Theodore Tso + * mkjournal.c (ext2fs_add_journal_inode): Move close of file + descriptor so that adding a journal to a mounted + filesystem doesn't die. (Fixes a bug accidentally + introduced in e2fsprogs 1.21.) + * mkjournal.c (ext2fs_add_journal_inode): Only use fchflags if HAVE_CHFLAGS and UF_NODUMP are defined, since the Hurd has fchflags without defining UF_NODUMP. (Addresses Debian diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c index adf6ea58..8c722e68 100644 --- a/lib/ext2fs/mkjournal.c +++ b/lib/ext2fs/mkjournal.c @@ -321,14 +321,13 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags) /* Create the journal file */ if ((fd = open(jfile, O_CREAT|O_WRONLY, 0600)) < 0) return errno; - close(fd); if ((retval = write_journal_file(fs, jfile, size, flags))) - return retval; - + goto errout; + /* Get inode number of the journal file */ if (fstat(fd, &st) < 0) - return errno; + goto errout; #if defined(HAVE_CHFLAGS) && defined(UF_NODUMP) retval = fchflags (fd, UF_NODUMP|UF_IMMUTABLE); @@ -339,8 +338,9 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags) #endif #endif if (retval) - return retval; - + goto errout; + + close(fd); journal_ino = st.st_ino; } else { journal_ino = EXT2_JOURNAL_INO; @@ -357,6 +357,9 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags) ext2fs_mark_super_dirty(fs); return 0; +errout: + close(fd); + return retval; } #ifdef DEBUG