]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/jbd2/journal.c
Merge branch 'linux-2.6' into for-linus
[mv-sheeva.git] / fs / jbd2 / journal.c
index 3fbbba20a516a5f086cff602d60a3ba97eb09ac8..c60f378b0f7670dec45afd81cd576cb030a0a324 100644 (file)
@@ -271,7 +271,7 @@ static void journal_kill_thread(journal_t *journal)
 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;
@@ -555,7 +555,7 @@ int jbd2_log_wait_commit(journal_t *journal, tid_t tid)
  * 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;
 
@@ -579,10 +579,10 @@ int jbd2_journal_next_log_block(journal_t *journal, unsigned long *retp)
  * 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);
@@ -618,7 +618,7 @@ int jbd2_journal_bmap(journal_t *journal, unsigned long 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);
@@ -706,7 +706,7 @@ fail:
  */
 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;
@@ -725,6 +725,7 @@ journal_t * jbd2_journal_init_dev(struct block_device *bdev,
                        __FUNCTION__);
                kfree(journal);
                journal = NULL;
+               goto out;
        }
        journal->j_dev = bdev;
        journal->j_fs_dev = fs_dev;
@@ -735,7 +736,7 @@ journal_t * jbd2_journal_init_dev(struct block_device *bdev,
        J_ASSERT(bh != NULL);
        journal->j_sb_buffer = bh;
        journal->j_superblock = (journal_superblock_t *)bh->b_data;
-
+out:
        return journal;
 }
 
@@ -753,7 +754,7 @@ journal_t * jbd2_journal_init_inode (struct inode *inode)
        journal_t *journal = journal_init_common();
        int err;
        int n;
-       unsigned long blocknr;
+       unsigned long long blocknr;
 
        if (!journal)
                return NULL;
@@ -819,7 +820,7 @@ static void journal_fail_superblock (journal_t *journal)
 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);
@@ -853,7 +854,7 @@ static int journal_reset(journal_t *journal)
  **/
 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;
@@ -1609,6 +1610,17 @@ int jbd2_journal_blocks_per_page(struct inode *inode)
        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.
@@ -1631,7 +1643,7 @@ void * __jbd2_kmalloc (const char *where, size_t size, gfp_t flags, int retry)
 
 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)
@@ -1702,7 +1714,7 @@ static int journal_init_jbd2_journal_head_cache(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 */
@@ -1999,7 +2011,7 @@ kmem_cache_t *jbd2_handle_cache;
 
 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 */