int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
struct journal_head *jh_in,
struct journal_head **jh_out,
- unsigned long blocknr)
+ unsigned long long blocknr)
{
int need_copy_out = 0;
int done_copy_out = 0;
* Log buffer allocation routines:
*/
-int jbd2_journal_next_log_block(journal_t *journal, unsigned long *retp)
+int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp)
{
unsigned long blocknr;
* ready.
*/
int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
- unsigned long *retp)
+ unsigned long long *retp)
{
int err = 0;
- unsigned long ret;
+ unsigned long long ret;
if (journal->j_inode) {
ret = bmap(journal->j_inode, blocknr);
struct journal_head *jbd2_journal_get_descriptor_buffer(journal_t *journal)
{
struct buffer_head *bh;
- unsigned long blocknr;
+ unsigned long long blocknr;
int err;
err = jbd2_journal_next_log_block(journal, &blocknr);
*/
journal_t * jbd2_journal_init_dev(struct block_device *bdev,
struct block_device *fs_dev,
- int start, int len, int blocksize)
+ unsigned long long start, int len, int blocksize)
{
journal_t *journal = journal_init_common();
struct buffer_head *bh;
__FUNCTION__);
kfree(journal);
journal = NULL;
+ goto out;
}
journal->j_dev = bdev;
journal->j_fs_dev = fs_dev;
J_ASSERT(bh != NULL);
journal->j_sb_buffer = bh;
journal->j_superblock = (journal_superblock_t *)bh->b_data;
-
+out:
return journal;
}
journal_t *journal = journal_init_common();
int err;
int n;
- unsigned long blocknr;
+ unsigned long long blocknr;
if (!journal)
return NULL;
static int journal_reset(journal_t *journal)
{
journal_superblock_t *sb = journal->j_superblock;
- unsigned long first, last;
+ unsigned long long first, last;
first = be32_to_cpu(sb->s_first);
last = be32_to_cpu(sb->s_maxlen);
**/
int jbd2_journal_create(journal_t *journal)
{
- unsigned long blocknr;
+ unsigned long long blocknr;
struct buffer_head *bh;
journal_superblock_t *sb;
int i, err;
return 1 << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
}
+/*
+ * helper functions to deal with 32 or 64bit block numbers.
+ */
+size_t journal_tag_bytes(journal_t *journal)
+{
+ if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
+ return JBD_TAG_SIZE64;
+ else
+ return JBD_TAG_SIZE32;
+}
+
/*
* Simple support for retrying memory allocations. Introduced to help to
* debug different VM deadlock avoidance strategies.
static kmem_cache_t *jbd_slab[JBD_MAX_SLABS];
static const char *jbd_slab_names[JBD_MAX_SLABS] = {
- "jbd_1k", "jbd_2k", "jbd_4k", NULL, "jbd_8k"
+ "jbd2_1k", "jbd2_2k", "jbd2_4k", NULL, "jbd2_8k"
};
static void jbd2_journal_destroy_jbd_slabs(void)
int retval;
J_ASSERT(jbd2_journal_head_cache == 0);
- jbd2_journal_head_cache = kmem_cache_create("journal_head",
+ jbd2_journal_head_cache = kmem_cache_create("jbd2_journal_head",
sizeof(struct journal_head),
0, /* offset */
0, /* flags */
static int __init journal_init_handle_cache(void)
{
- jbd2_handle_cache = kmem_cache_create("journal_handle",
+ jbd2_handle_cache = kmem_cache_create("jbd2_journal_handle",
sizeof(handle_t),
0, /* offset */
0, /* flags */