Whamcloud - gitweb
journal: use consts instead of 1024 and add helper for journal with 1k blocksize
authorAzat Khuzhin <a3at.mail@gmail.com>
Mon, 28 Jul 2014 07:43:22 +0000 (11:43 +0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 29 Jul 2014 00:21:47 +0000 (20:21 -0400)
Use EXT2_MIN_BLOCK_SIZE, JFS_MIN_JOURNAL_BLOCKS, SUPERBLOCK_SIZE, and
SUPERBLOCK_OFFSET instead of hardcoded 1024 when it is okay, and also
add a helper ext2fs_journal_sb_start() that will return start of
journal sb with special case for fs with 1k block size.

Signed-off-by: Azat Khuzhin <a3at.mail@gmail.com>
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e2fsck/journal.c
lib/ext2fs/ext2fs.h
lib/ext2fs/mkjournal.c
misc/tune2fs.c

index 9be52cd..3b40e00 100644 (file)
@@ -393,8 +393,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
        if (ext_journal) {
                blk64_t maxlen;
 
-               if (ctx->fs->blocksize == 1024)
-                       start = 1;
+               start = ext2fs_journal_sb_start(ctx->fs->blocksize) - 1;
                bh = getblk(dev_journal, start, ctx->fs->blocksize);
                if (!bh) {
                        retval = EXT2_ET_NO_MEMORY;
@@ -405,7 +404,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                        brelse(bh);
                        goto errout;
                }
-               memcpy(&jsuper, start ? bh->b_data :  bh->b_data + 1024,
+               memcpy(&jsuper, start ? bh->b_data :  bh->b_data + SUPERBLOCK_OFFSET,
                       sizeof(jsuper));
                brelse(bh);
 #ifdef WORDS_BIGENDIAN
index 33b2519..ab57534 100644 (file)
@@ -1377,6 +1377,7 @@ extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks,
 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);
+extern int ext2fs_journal_sb_start(int blocksize);
 
 /* openfs.c */
 extern errcode_t ext2fs_open(const char *name, int flags, int superblock,
index e8316a7..96b6d36 100644 (file)
@@ -49,7 +49,7 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
        errcode_t               retval;
        journal_superblock_t    *jsb;
 
-       if (num_blocks < 1024)
+       if (num_blocks < JFS_MIN_JOURNAL_BLOCKS)
                return EXT2_ET_JOURNAL_TOO_SMALL;
 
        if ((retval = ext2fs_get_mem(fs->blocksize, &jsb)))
@@ -75,10 +75,7 @@ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
        if (fs->super->s_feature_incompat &
            EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
                jsb->s_nr_users = 0;
-               if (fs->blocksize == 1024)
-                       jsb->s_first = htonl(3);
-               else
-                       jsb->s_first = htonl(2);
+               jsb->s_first = htonl(ext2fs_journal_sb_start(fs->blocksize) + 1);
        }
 
        *ret_jsb = (char *) jsb;
@@ -428,6 +425,13 @@ int ext2fs_default_journal_size(__u64 num_blocks)
        return 32768;
 }
 
+int ext2fs_journal_sb_start(int blocksize)
+{
+       if (blocksize == EXT2_MIN_BLOCK_SIZE)
+               return 2;
+       return 1;
+}
+
 /*
  * This function adds a journal device to a filesystem
  */
@@ -435,7 +439,7 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
 {
        struct stat     st;
        errcode_t       retval;
-       char            buf[1024];
+       char            buf[SUPERBLOCK_SIZE];
        journal_superblock_t    *jsb;
        int             start;
        __u32           i, nr_users;
@@ -448,10 +452,9 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
                return EXT2_ET_JOURNAL_NOT_BLOCK; /* Must be a block device */
 
        /* Get the journal superblock */
-       start = 1;
-       if (journal_dev->blocksize == 1024)
-               start++;
-       if ((retval = io_channel_read_blk64(journal_dev->io, start, -1024,
+       start = ext2fs_journal_sb_start(journal_dev->blocksize);
+       if ((retval = io_channel_read_blk64(journal_dev->io, start,
+                                           -SUPERBLOCK_SIZE,
                                            buf)))
                return retval;
 
@@ -477,7 +480,8 @@ errcode_t ext2fs_add_journal_device(ext2_filsys fs, ext2_filsys journal_dev)
        }
 
        /* Writeback the journal superblock */
-       if ((retval = io_channel_write_blk64(journal_dev->io, start, -1024, buf)))
+       if ((retval = io_channel_write_blk64(journal_dev->io, start,
+                                           -SUPERBLOCK_SIZE, buf)))
                return retval;
 
        fs->super->s_journal_inum = 0;
@@ -630,7 +634,7 @@ main(int argc, char **argv)
                exit(1);
        }
 
-       retval = ext2fs_add_journal_inode(fs, 1024, 0);
+       retval = ext2fs_add_journal_inode(fs, JFS_MIN_JOURNAL_BLOCKS, 0);
        if (retval) {
                com_err(argv[0], retval, "while adding journal to %s",
                        device_name);
index ad0b05f..ff50f37 100644 (file)
@@ -182,7 +182,7 @@ static int remove_journal_device(ext2_filsys fs)
 {
        char            *journal_path;
        ext2_filsys     jfs;
-       char            buf[1024];
+       char            buf[SUPERBLOCK_SIZE];
        journal_superblock_t    *jsb;
        int             i, nr_users;
        errcode_t       retval;
@@ -225,7 +225,7 @@ static int remove_journal_device(ext2_filsys fs)
        }
 
        /* Get the journal superblock */
-       if ((retval = io_channel_read_blk64(jfs->io, 1, -1024, buf))) {
+       if ((retval = io_channel_read_blk64(jfs->io, 1, -SUPERBLOCK_SIZE, buf))) {
                com_err(program_name, retval, "%s",
                        _("while reading journal superblock"));
                goto no_valid_journal;
@@ -256,7 +256,7 @@ static int remove_journal_device(ext2_filsys fs)
        jsb->s_nr_users = htonl(nr_users);
 
        /* Write back the journal superblock */
-       if ((retval = io_channel_write_blk64(jfs->io, 1, -1024, buf))) {
+       if ((retval = io_channel_write_blk64(jfs->io, 1, -SUPERBLOCK_SIZE, buf))) {
                com_err(program_name, retval,
                        "while writing journal superblock.");
                goto no_valid_journal;