jbd2: factor out common descriptor block initialization
authorJan Kara <jack@suse.cz>
Tue, 23 Feb 2016 04:17:15 +0000 (23:17 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 23 Feb 2016 04:17:15 +0000 (23:17 -0500)
Descriptor block header is initialized in several places. Factor out the
common code into jbd2_journal_get_descriptor_buffer().

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/jbd2/commit.c
fs/jbd2/journal.c
fs/jbd2/revoke.c
include/linux/jbd2.h

index ae4402d..cf221f3 100644 (file)
@@ -131,14 +131,12 @@ static int journal_submit_commit_record(journal_t *journal,
        if (is_journal_aborted(journal))
                return 0;
 
-       bh = jbd2_journal_get_descriptor_buffer(journal);
+       bh = jbd2_journal_get_descriptor_buffer(commit_transaction,
+                                               JBD2_COMMIT_BLOCK);
        if (!bh)
                return 1;
 
        tmp = (struct commit_header *)bh->b_data;
-       tmp->h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
-       tmp->h_blocktype = cpu_to_be32(JBD2_COMMIT_BLOCK);
-       tmp->h_sequence = cpu_to_be32(commit_transaction->t_tid);
        tmp->h_commit_sec = cpu_to_be64(now.tv_sec);
        tmp->h_commit_nsec = cpu_to_be32(now.tv_nsec);
 
@@ -379,7 +377,6 @@ void jbd2_journal_commit_transaction(journal_t *journal)
        ktime_t start_time;
        u64 commit_time;
        char *tagp = NULL;
-       journal_header_t *header;
        journal_block_tag_t *tag = NULL;
        int space_left = 0;
        int first_tag = 0;
@@ -615,7 +612,9 @@ void jbd2_journal_commit_transaction(journal_t *journal)
 
                        jbd_debug(4, "JBD2: get descriptor\n");
 
-                       descriptor = jbd2_journal_get_descriptor_buffer(journal);
+                       descriptor = jbd2_journal_get_descriptor_buffer(
+                                                       commit_transaction,
+                                                       JBD2_DESCRIPTOR_BLOCK);
                        if (!descriptor) {
                                jbd2_journal_abort(journal, -EIO);
                                continue;
@@ -624,11 +623,6 @@ void jbd2_journal_commit_transaction(journal_t *journal)
                        jbd_debug(4, "JBD2: got buffer %llu (%p)\n",
                                (unsigned long long)descriptor->b_blocknr,
                                descriptor->b_data);
-                       header = (journal_header_t *)descriptor->b_data;
-                       header->h_magic     = cpu_to_be32(JBD2_MAGIC_NUMBER);
-                       header->h_blocktype = cpu_to_be32(JBD2_DESCRIPTOR_BLOCK);
-                       header->h_sequence  = cpu_to_be32(commit_transaction->t_tid);
-
                        tagp = &descriptor->b_data[sizeof(journal_header_t)];
                        space_left = descriptor->b_size -
                                                sizeof(journal_header_t);
index 81e6226..28d05bd 100644 (file)
@@ -805,10 +805,13 @@ int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
  * But we don't bother doing that, so there will be coherency problems with
  * mmaps of blockdevs which hold live JBD-controlled filesystems.
  */
-struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal)
+struct buffer_head *
+jbd2_journal_get_descriptor_buffer(transaction_t *transaction, int type)
 {
+       journal_t *journal = transaction->t_journal;
        struct buffer_head *bh;
        unsigned long long blocknr;
+       journal_header_t *header;
        int err;
 
        err = jbd2_journal_next_log_block(journal, &blocknr);
@@ -821,6 +824,10 @@ struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal)
                return NULL;
        lock_buffer(bh);
        memset(bh->b_data, 0, journal->j_blocksize);
+       header = (journal_header_t *)bh->b_data;
+       header->h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
+       header->h_blocktype = cpu_to_be32(type);
+       header->h_sequence = cpu_to_be32(transaction->t_tid);
        set_buffer_uptodate(bh);
        unlock_buffer(bh);
        BUFFER_TRACE(bh, "return this buffer");
index c839332..d1ebb1d 100644 (file)
@@ -570,7 +570,6 @@ static void write_one_revoke_record(transaction_t *transaction,
        int csum_size = 0;
        struct buffer_head *descriptor;
        int sz, offset;
-       journal_header_t *header;
 
        /* If we are already aborting, this all becomes a noop.  We
            still need to go round the loop in
@@ -600,13 +599,10 @@ static void write_one_revoke_record(transaction_t *transaction,
        }
 
        if (!descriptor) {
-               descriptor = jbd2_journal_get_descriptor_buffer(journal);
+               descriptor = jbd2_journal_get_descriptor_buffer(transaction,
+                                                       JBD2_REVOKE_BLOCK);
                if (!descriptor)
                        return;
-               header = (journal_header_t *)descriptor->b_data;
-               header->h_magic     = cpu_to_be32(JBD2_MAGIC_NUMBER);
-               header->h_blocktype = cpu_to_be32(JBD2_REVOKE_BLOCK);
-               header->h_sequence  = cpu_to_be32(transaction->t_tid);
 
                /* Record it so that we can wait for IO completion later */
                BUFFER_TRACE(descriptor, "file in log_bufs");
index 5716d95..3649cb8 100644 (file)
@@ -1137,7 +1137,7 @@ static inline void jbd2_unfile_log_bh(struct buffer_head *bh)
 }
 
 /* Log buffer allocation */
-struct buffer_head *jbd2_journal_get_descriptor_buffer(journal_t *journal);
+struct buffer_head *jbd2_journal_get_descriptor_buffer(transaction_t *, int);
 int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
 int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
                              unsigned long *block);