Skip to content

Commit

Permalink
ext4: Remove code to create the journal inode
Browse files Browse the repository at this point in the history
This code has been obsolete in quite some time, since the supported
method for adding a journal inode is to use tune2fs (or to creating
new filesystem with a journal via mke2fs or mkfs.ext4).

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
  • Loading branch information
Theodore Ts'o committed Jan 6, 2009
1 parent c39a7f8 commit c319106
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 141 deletions.
4 changes: 0 additions & 4 deletions Documentation/filesystems/ext4.txt
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,6 @@ journal_async_commit Commit block can be written to disk without waiting
journal=update Update the ext4 file system's journal to the current
format.

journal=inum When a journal already exists, this option is ignored.
Otherwise, it specifies the number of the inode which
will represent the ext4 file system's journal file.

journal_dev=devnum When the external journal device's major/minor numbers
have changed, this option allows the user to specify
the new journal location. The journal device is
Expand Down
68 changes: 4 additions & 64 deletions fs/ext4/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ struct proc_dir_entry *ext4_proc_root;

static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
unsigned long journal_devnum);
static int ext4_create_journal(struct super_block *, struct ext4_super_block *,
unsigned int);
static void ext4_commit_super(struct super_block *sb,
struct ext4_super_block *es, int sync);
static void ext4_mark_recovery_complete(struct super_block *sb,
Expand Down Expand Up @@ -1006,7 +1004,7 @@ enum {
Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
Opt_reservation, Opt_noreservation, Opt_noload, Opt_nobh, Opt_bh,
Opt_commit, Opt_min_batch_time, Opt_max_batch_time,
Opt_journal_update, Opt_journal_inum, Opt_journal_dev,
Opt_journal_update, Opt_journal_dev,
Opt_journal_checksum, Opt_journal_async_commit,
Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
Opt_data_err_abort, Opt_data_err_ignore,
Expand Down Expand Up @@ -1048,7 +1046,6 @@ static const match_table_t tokens = {
{Opt_min_batch_time, "min_batch_time=%u"},
{Opt_max_batch_time, "max_batch_time=%u"},
{Opt_journal_update, "journal=update"},
{Opt_journal_inum, "journal=%u"},
{Opt_journal_dev, "journal_dev=%u"},
{Opt_journal_checksum, "journal_checksum"},
{Opt_journal_async_commit, "journal_async_commit"},
Expand Down Expand Up @@ -1102,7 +1099,7 @@ static ext4_fsblk_t get_sb_block(void **data)
}

static int parse_options(char *options, struct super_block *sb,
unsigned int *inum, unsigned long *journal_devnum,
unsigned long *journal_devnum,
ext4_fsblk_t *n_blocks_count, int is_remount)
{
struct ext4_sb_info *sbi = EXT4_SB(sb);
Expand Down Expand Up @@ -1226,16 +1223,6 @@ static int parse_options(char *options, struct super_block *sb,
}
set_opt(sbi->s_mount_opt, UPDATE_JOURNAL);
break;
case Opt_journal_inum:
if (is_remount) {
printk(KERN_ERR "EXT4-fs: cannot specify "
"journal on remount\n");
return 0;
}
if (match_int(&args[0], &option))
return 0;
*inum = option;
break;
case Opt_journal_dev:
if (is_remount) {
printk(KERN_ERR "EXT4-fs: cannot specify "
Expand Down Expand Up @@ -2035,7 +2022,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
ext4_fsblk_t sb_block = get_sb_block(&data);
ext4_fsblk_t logical_sb_block;
unsigned long offset = 0;
unsigned int journal_inum = 0;
unsigned long journal_devnum = 0;
unsigned long def_mount_opts;
struct inode *root;
Expand Down Expand Up @@ -2155,8 +2141,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
set_opt(sbi->s_mount_opt, DELALLOC);


if (!parse_options((char *) data, sb, &journal_inum, &journal_devnum,
NULL, 0))
if (!parse_options((char *) data, sb, &journal_devnum, NULL, 0))
goto failed_mount;

sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
Expand Down Expand Up @@ -2460,9 +2445,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
goto failed_mount4;
}
}
} else if (journal_inum) {
if (ext4_create_journal(sb, es, journal_inum))
goto failed_mount3;
} else if (test_opt(sb, NOLOAD) && !(sb->s_flags & MS_RDONLY) &&
EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER)) {
printk(KERN_ERR "EXT4-fs: required journal recovery "
Expand Down Expand Up @@ -2926,48 +2908,6 @@ static int ext4_load_journal(struct super_block *sb,
return 0;
}

static int ext4_create_journal(struct super_block *sb,
struct ext4_super_block *es,
unsigned int journal_inum)
{
journal_t *journal;
int err;

if (sb->s_flags & MS_RDONLY) {
printk(KERN_ERR "EXT4-fs: readonly filesystem when trying to "
"create journal.\n");
return -EROFS;
}

journal = ext4_get_journal(sb, journal_inum);
if (!journal)
return -EINVAL;

printk(KERN_INFO "EXT4-fs: creating new journal on inode %u\n",
journal_inum);

err = jbd2_journal_create(journal);
if (err) {
printk(KERN_ERR "EXT4-fs: error creating journal.\n");
jbd2_journal_destroy(journal);
return -EIO;
}

EXT4_SB(sb)->s_journal = journal;

ext4_update_dynamic_rev(sb);
EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
EXT4_SET_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL);

es->s_journal_inum = cpu_to_le32(journal_inum);
sb->s_dirt = 1;

/* Make sure we flush the recovery flag to disk. */
ext4_commit_super(sb, es, 1);

return 0;
}

static void ext4_commit_super(struct super_block *sb,
struct ext4_super_block *es, int sync)
{
Expand Down Expand Up @@ -3209,7 +3149,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
/*
* Allow the "check" option to be passed as a remount option.
*/
if (!parse_options(data, sb, NULL, NULL, &n_blocks_count, 1)) {
if (!parse_options(data, sb, NULL, &n_blocks_count, 1)) {
err = -EINVAL;
goto restore_opts;
}
Expand Down
72 changes: 0 additions & 72 deletions fs/jbd2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ EXPORT_SYMBOL(jbd2_journal_update_format);
EXPORT_SYMBOL(jbd2_journal_check_used_features);
EXPORT_SYMBOL(jbd2_journal_check_available_features);
EXPORT_SYMBOL(jbd2_journal_set_features);
EXPORT_SYMBOL(jbd2_journal_create);
EXPORT_SYMBOL(jbd2_journal_load);
EXPORT_SYMBOL(jbd2_journal_destroy);
EXPORT_SYMBOL(jbd2_journal_abort);
Expand Down Expand Up @@ -1162,77 +1161,6 @@ static int journal_reset(journal_t *journal)
return jbd2_journal_start_thread(journal);
}

/**
* int jbd2_journal_create() - Initialise the new journal file
* @journal: Journal to create. This structure must have been initialised
*
* Given a journal_t structure which tells us which disk blocks we can
* use, create a new journal superblock and initialise all of the
* journal fields from scratch.
**/
int jbd2_journal_create(journal_t *journal)
{
unsigned long long blocknr;
struct buffer_head *bh;
journal_superblock_t *sb;
int i, err;

if (journal->j_maxlen < JBD2_MIN_JOURNAL_BLOCKS) {
printk (KERN_ERR "Journal length (%d blocks) too short.\n",
journal->j_maxlen);
journal_fail_superblock(journal);
return -EINVAL;
}

if (journal->j_inode == NULL) {
/*
* We don't know what block to start at!
*/
printk(KERN_EMERG
"%s: creation of journal on external device!\n",
__func__);
BUG();
}

/* Zero out the entire journal on disk. We cannot afford to
have any blocks on disk beginning with JBD2_MAGIC_NUMBER. */
jbd_debug(1, "JBD: Zeroing out journal blocks...\n");
for (i = 0; i < journal->j_maxlen; i++) {
err = jbd2_journal_bmap(journal, i, &blocknr);
if (err)
return err;
bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
lock_buffer(bh);
memset (bh->b_data, 0, journal->j_blocksize);
BUFFER_TRACE(bh, "marking dirty");
mark_buffer_dirty(bh);
BUFFER_TRACE(bh, "marking uptodate");
set_buffer_uptodate(bh);
unlock_buffer(bh);
__brelse(bh);
}

sync_blockdev(journal->j_dev);
jbd_debug(1, "JBD: journal cleared.\n");

/* OK, fill in the initial static fields in the new superblock */
sb = journal->j_superblock;

sb->s_header.h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
sb->s_header.h_blocktype = cpu_to_be32(JBD2_SUPERBLOCK_V2);

sb->s_blocksize = cpu_to_be32(journal->j_blocksize);
sb->s_maxlen = cpu_to_be32(journal->j_maxlen);
sb->s_first = cpu_to_be32(1);

journal->j_transaction_sequence = 1;

journal->j_flags &= ~JBD2_ABORT;
journal->j_format_version = 2;

return journal_reset(journal);
}

/**
* void jbd2_journal_update_superblock() - Update journal sb on disk.
* @journal: The journal to update.
Expand Down
1 change: 0 additions & 1 deletion include/linux/jbd2.h
Original file line number Diff line number Diff line change
Expand Up @@ -1104,7 +1104,6 @@ extern int jbd2_journal_set_features
(journal_t *, unsigned long, unsigned long, unsigned long);
extern void jbd2_journal_clear_features
(journal_t *, unsigned long, unsigned long, unsigned long);
extern int jbd2_journal_create (journal_t *);
extern int jbd2_journal_load (journal_t *journal);
extern int jbd2_journal_destroy (journal_t *);
extern int jbd2_journal_recover (journal_t *journal);
Expand Down

0 comments on commit c319106

Please sign in to comment.