From 0fe6e3ae7b1aeea9c9fb74f8df4de3ec691c81e8 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Tue, 28 Jan 2014 12:16:35 -0500 Subject: [PATCH] libext2fs: add new function ext2fs_add_journal_inode2() This new function has an parameter which allows the caller to specify the location of the journal. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/ext2fs.h | 2 ++ lib/ext2fs/mkjournal.c | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index 47340dd..3e633e2 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -1370,6 +1370,8 @@ extern errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev); extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags); +extern errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks, + blk64_t goal, int flags); extern int ext2fs_default_journal_size(__u64 num_blocks); /* openfs.c */ diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c index 8c97e7a..884d9c0 100644 --- a/lib/ext2fs/mkjournal.c +++ b/lib/ext2fs/mkjournal.c @@ -329,7 +329,7 @@ static blk64_t get_midpoint_journal_block(ext2_filsys fs) * This function creates a journal using direct I/O routines. */ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino, - blk_t num_blocks, int flags) + blk_t num_blocks, blk64_t goal, int flags) { char *buf; errcode_t retval; @@ -358,7 +358,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino, es.err = 0; es.flags = flags; es.zero_count = 0; - es.goal = get_midpoint_journal_block(fs); + es.goal = (goal != ~0ULL) ? goal : get_midpoint_journal_block(fs); if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) { inode.i_flags |= EXT4_EXTENTS_FL; @@ -496,7 +496,8 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev) * POSIX routines if the filesystem is mounted, or using direct I/O * functions if it is not. */ -errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags) +errcode_t ext2fs_add_journal_inode2(ext2_filsys fs, blk_t num_blocks, + blk64_t goal, int flags) { errcode_t retval; ext2_ino_t journal_ino; @@ -587,7 +588,7 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags) } journal_ino = EXT2_JOURNAL_INO; if ((retval = write_journal_inode(fs, journal_ino, - num_blocks, flags))) + num_blocks, goal, flags))) return retval; } @@ -605,6 +606,12 @@ errout: return retval; } +errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags) +{ + return ext2fs_add_journal_inode2(fs, num_blocks, ~0ULL, flags); +} + + #ifdef DEBUG main(int argc, char **argv) { -- 1.8.3.1