Skip to content

Commit

Permalink
jbd2: factor out common descriptor block initialization
Browse files Browse the repository at this point in the history
Descriptor block header is initialized in several places. Factor out the
common code into jbd2_journal_get_descriptor_buffer().

Signed-off-by: Jan Kara <[email protected]>
Signed-off-by: Theodore Ts'o <[email protected]>
  • Loading branch information
jankara authored and tytso committed Feb 23, 2016
1 parent 9bcf976 commit 32ab671
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 19 deletions.
16 changes: 5 additions & 11 deletions fs/jbd2/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
9 changes: 8 additions & 1 deletion fs/jbd2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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");
Expand Down
8 changes: 2 additions & 6 deletions fs/jbd2/revoke.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion include/linux/jbd2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 32ab671

Please sign in to comment.