Whamcloud - gitweb
libext2fs: add new function ext2fs_add_journal_inode2()
authorTheodore Ts'o <tytso@mit.edu>
Tue, 28 Jan 2014 17:16:35 +0000 (12:16 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 30 Jan 2014 18:58:17 +0000 (13:58 -0500)
This new function has an parameter which allows the caller to specify
the location of the journal.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/ext2fs.h
lib/ext2fs/mkjournal.c

index 47340dd..3e633e2 100644 (file)
@@ -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 */
index 8c97e7a..884d9c0 100644 (file)
@@ -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)
 {