jbd2: factor out common descriptor block initialization
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>
This commit is contained in:
parent
9bcf976cb8
commit
32ab671599
@ -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);
|
||||
|
@ -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");
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user