Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24 /fs/jbd2/journal.c

Filename:/fs/jbd2/journal.c
Lines Added:15
Lines Deleted:113
Also changed in: (Previous) 2.6.24-rc8  2.6.24-rc7  2.6.24-rc6  2.6.24-rc5  2.6.24-rc4  2.6.24-rc3 
(Following) 2.6.24-git6  2.6.24-git7  2.6.24-git8  2.6.24-git9  2.6.24-git10  2.6.24-git11 

Location
[  2.6.24
  [  fs
    [  jbd2
       o  journal.c

Patch

diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index f37324a..6ddc553 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -84,7 +84,6 @@ EXPORT_SYMBOL(jbd2_journal_force_commit);
 
 static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
 static void __journal_abort_soft (journal_t *journal, int errno);
-static int jbd2_journal_create_jbd_slab(size_t slab_size);
 
 /*
  * Helper function used to manage commit timeouts
@@ -335,10 +334,10 @@ repeat:
       char *tmp;
 
       jbd_unlock_bh_state(bh_in);
-      tmp = jbd2_slab_alloc(bh_in->b_size, GFP_NOFS);
+      tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
       jbd_lock_bh_state(bh_in);
       if (jh_in->b_frozen_data) {
-         jbd2_slab_free(tmp, bh_in->b_size);
+         jbd2_free(tmp, bh_in->b_size);
          goto repeat;
       }
 
@@ -655,10 +654,9 @@ static journal_t * journal_init_common (void)
    journal_t *journal;
    int err;
 
-   journal = jbd_kmalloc(sizeof(*journal), GFP_KERNEL);
+   journal = kzalloc(sizeof(*journal), GFP_KERNEL|__GFP_NOFAIL);
    if (!journal)
       goto fail;
-   memset(journal, 0, sizeof(*journal));
 
    init_waitqueue_head(&journal->j_wait_transaction_locked);
    init_waitqueue_head(&journal->j_wait_logspace);
@@ -672,7 +670,7 @@ static journal_t * journal_init_common (void)
    spin_lock_init(&journal->j_list_lock);
    spin_lock_init(&journal->j_state_lock);
 
-   journal->j_commit_interval = (HZ * JBD_DEFAULT_MAX_COMMIT_AGE);
+   journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE);
 
    /* The journal is marked for error until we succeed with recovery! */
    journal->j_flags = JBD2_ABORT;
@@ -1096,13 +1094,6 @@ int jbd2_journal_load(journal_t *journal)
       }
    }
 
-   /*
-    * Create a slab for this blocksize
-    */
-   err = jbd2_journal_create_jbd_slab(be32_to_cpu(sb->s_blocksize));
-   if (err)
-      return err;
-
    /* Let the recovery code check whether it needs to recover any
     * data from the journal. */
    if (jbd2_journal_recover(journal))
@@ -1621,89 +1612,9 @@ int jbd2_journal_blocks_per_page(struct inode *inode)
 size_t journal_tag_bytes(journal_t *journal)
 {
    if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
-      return JBD_TAG_SIZE64;
+      return JBD2_TAG_SIZE64;
    else
-      return JBD_TAG_SIZE32;
-}
-
-/*
- * Simple support for retrying memory allocations.  Introduced to help to
- * debug different VM deadlock avoidance strategies.
- */
-void * __jbd2_kmalloc (const char *where, size_t size, gfp_t flags, int retry)
-{
-   return kmalloc(size, flags | (retry ? __GFP_NOFAIL : 0));
-}
-
-/*
- * jbd slab management: create 1k, 2k, 4k, 8k slabs as needed
- * and allocate frozen and commit buffers from these slabs.
- *
- * Reason for doing this is to avoid, SLAB_DEBUG - since it could
- * cause bh to cross page boundary.
- */
-
-#define JBD_MAX_SLABS 5
-#define JBD_SLAB_INDEX(size)  (size >> 11)
-
-static struct kmem_cache *jbd_slab[JBD_MAX_SLABS];
-static const char *jbd_slab_names[JBD_MAX_SLABS] = {
-   "jbd2_1k", "jbd2_2k", "jbd2_4k", NULL, "jbd2_8k"
-};
-
-static void jbd2_journal_destroy_jbd_slabs(void)
-{
-   int i;
-
-   for (i = 0; i < JBD_MAX_SLABS; i++) {
-      if (jbd_slab[i])
-         kmem_cache_destroy(jbd_slab[i]);
-      jbd_slab[i] = NULL;
-   }
-}
-
-static int jbd2_journal_create_jbd_slab(size_t slab_size)
-{
-   int i = JBD_SLAB_INDEX(slab_size);
-
-   BUG_ON(i >= JBD_MAX_SLABS);
-
-   /*
-    * Check if we already have a slab created for this size
-    */
-   if (jbd_slab[i])
-      return 0;
-
-   /*
-    * Create a slab and force alignment to be same as slabsize -
-    * this will make sure that allocations won't cross the page
-    * boundary.
-    */
-   jbd_slab[i] = kmem_cache_create(jbd_slab_names[i],
-            slab_size, slab_size, 0, NULL);
-   if (!jbd_slab[i]) {
-      printk(KERN_EMERG "JBD: no memory for jbd_slab cache\n");
-      return -ENOMEM;
-   }
-   return 0;
-}
-
-void * jbd2_slab_alloc(size_t size, gfp_t flags)
-{
-   int idx;
-
-   idx = JBD_SLAB_INDEX(size);
-   BUG_ON(jbd_slab[idx] == NULL);
-   return kmem_cache_alloc(jbd_slab[idx], flags | __GFP_NOFAIL);
-}
-
-void jbd2_slab_free(void *ptr,  size_t size)
-{
-   int idx;
-
-   idx = JBD_SLAB_INDEX(size);
-   BUG_ON(jbd_slab[idx] == NULL);
-   kmem_cache_free(jbd_slab[idx], ptr);
+      return JBD2_TAG_SIZE32;
 }
 
 /*
@@ -1770,7 +1681,7 @@ static void journal_free_journal_head(struct journal_head *jh)
 {
 #ifdef CONFIG_JBD2_DEBUG
    atomic_dec(&nr_journal_heads);
-   memset(jh, JBD_POISON_FREE, sizeof(*jh));
+   memset(jh, JBD2_POISON_FREE, sizeof(*jh));
 #endif
    kmem_cache_free(jbd2_journal_head_cache, jh);
 }
@@ -1893,13 +1804,13 @@ static void __journal_remove_journal_head(struct buffer_head *bh)
             printk(KERN_WARNING "%s: freeing "
                   "b_frozen_data\n",
                   __FUNCTION__);
-            jbd2_slab_free(jh->b_frozen_data, bh->b_size);
+            jbd2_free(jh->b_frozen_data, bh->b_size);
          }
          if (jh->b_committed_data) {
             printk(KERN_WARNING "%s: freeing "
                   "b_committed_data\n",
                   __FUNCTION__);
-            jbd2_slab_free(jh->b_committed_data, bh->b_size);
+            jbd2_free(jh->b_committed_data, bh->b_size);
          }
          bh->b_private = NULL;
          jh->b_bh = NULL;   /* debug, really */
@@ -1953,16 +1864,14 @@ void jbd2_journal_put_journal_head(struct journal_head *jh)
 /*
  * debugfs tunables
  */
-#if defined(CONFIG_JBD2_DEBUG)
-u8 jbd2_journal_enable_debug;
+#ifdef CONFIG_JBD2_DEBUG
+u8 jbd2_journal_enable_debug __read_mostly;
 EXPORT_SYMBOL(jbd2_journal_enable_debug);
-#endif
-
-#if defined(CONFIG_JBD2_DEBUG) && defined(CONFIG_DEBUG_FS)
 
 #define JBD2_DEBUG_NAME "jbd2-debug"
 
-struct dentry *jbd2_debugfs_dir, *jbd2_debug;
+static struct dentry *jbd2_debugfs_dir;
+static struct dentry *jbd2_debug;
 
 static void __init jbd2_create_debugfs_entry(void)
 {
@@ -1975,24 +1884,18 @@ static void __init jbd2_create_debugfs_entry(void)
 
 static void __exit jbd2_remove_debugfs_entry(void)
 {
-   if (jbd2_debug)
-      debugfs_remove(jbd2_debug);
-   if (jbd2_debugfs_dir)
-      debugfs_remove(jbd2_debugfs_dir);
+   debugfs_remove(jbd2_debug);
+   debugfs_remove(jbd2_debugfs_dir);
 }
 
 #else
 
 static void __init jbd2_create_debugfs_entry(void)
 {
-   do {
-   } while (0);
 }
 
 static void __exit jbd2_remove_debugfs_entry(void)
 {
-   do {
-   } while (0);
 }
 
 #endif
@@ -2040,7 +1943,6 @@ static void jbd2_journal_destroy_caches(void)
    jbd2_journal_destroy_revoke_caches();
    jbd2_journal_destroy_jbd2_journal_head_cache();
    jbd2_journal_destroy_handle_cache();
-   jbd2_journal_destroy_jbd_slabs();
 }
 
 static int __init journal_init(void)


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.