16T fixes for JBD
PATCH 1/1 16T fixes for JBD
These are a few places I've found in jbd that look like they may not be 16T-safe, or consistent with the use of unsigned longs for block containers.
(well, some of these have come from the ext4 work on jbd as well - although I think some of the ext4/jbd2 modifications may not be needed, see my earlier messages today).
I think there's one more possibility that the wrap() function may not be safe IF your last block in the journal butts right up against the 2^32 block boundary, but that seems like a VERY remote possibility, and I'm not worrying about it at this point.
Comments? I'll send this upstream if it looks good.
Thanks,
-Eric
Signed-off-by Eric Sandeen <[email protected]>
fs/jbd/journal.c +3 -3
@@ -271,7 +271,7 @@ static void journal_kill_thread(journal_int journal_write_metadata_buffer (transaction_t *transaction,struct journal_head *jh_in,struct journal_head **jh_out, -int blocknr) +unsigned long blocknr) {int need_copy_out =0 ;int done_copy_out =0 ;
@@ -696,7 +696,7 @@ fail:* @bdev: Block device on which to create the journal * @fs_dev: Device which hold journalled filesystem for this journal. * @start: Block nr Start of journal. -* @len: Lenght of the journal in blocks. +* @len: Length of the journal in blocks. * @blocksize: blocksize of journalling device * @returns: a newly created journal_t * *
@@ -820,7 +820,7 @@ static void journal_fail_superblock (joustatic int journal_reset (journal_t *journal) {journal_superblock_t *sb = journal->j_superblock; -unsigned int first, last; +unsigned long first, last; first =be32_to_cpu (sb->s_first); last =be32_to_cpu (sb->s_maxlen);
include/linux/jbd.h +2 -2
@@ -732,7 +732,7 @@ struct journal_s*/ struct block_device *j_dev;int j_blocksize; -unsigned int j_blk_offset; +unsigned long j_blk_offset;/* * Device which holds the client fs. For internal journal this will be
@@ -866,7 +866,7 @@ extern intjournal_write_metadata_buffer (transaction_t *transaction, struct journal_head *jh_in, struct journal_head **jh_out, - int blocknr); + unsigned long blocknr);/* Transaction locking */ extern void __wait_on_journal (journal_t *);