ext4: fold ext4_journal_forget() into ext4_forget()
authorTheodore Ts'o <tytso@mit.edu>
Mon, 23 Nov 2009 02:00:13 +0000 (21:00 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 23 Nov 2009 02:00:13 +0000 (21:00 -0500)
Convert the last two callers of ext4_journal_forget() to use
ext4_forget() instead, and then fold ext4_journal_forget() into
ext4_forget().  This reduces are code complexity and shortens our call
stack.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/ext4_jbd2.c
fs/ext4/ext4_jbd2.h
fs/ext4/inode.c

index 92c88a8..b57e5c7 100644 (file)
@@ -34,22 +34,6 @@ int __ext4_journal_get_write_access(const char *where, handle_t *handle,
        return err;
 }
 
-int __ext4_journal_forget(const char *where, handle_t *handle,
-                               struct buffer_head *bh)
-{
-       int err = 0;
-
-       if (ext4_handle_valid(handle)) {
-               err = jbd2_journal_forget(handle, bh);
-               if (err)
-                       ext4_journal_abort_handle(where, __func__, bh,
-                                                 handle, err);
-       }
-       else
-               bforget(bh);
-       return err;
-}
-
 /*
  * The ext4 forget function must perform a revoke if we are freeing data
  * which has been journaled.  Metadata (eg. indirect blocks) must be
@@ -93,7 +77,11 @@ int __ext4_forget(const char *where, handle_t *handle, int is_metadata,
            (!is_metadata && !ext4_should_journal_data(inode))) {
                if (bh) {
                        BUFFER_TRACE(bh, "call jbd2_journal_forget");
-                       return __ext4_journal_forget(where, handle, bh);
+                       err = jbd2_journal_forget(handle, bh);
+                       if (err)
+                               ext4_journal_abort_handle(where, __func__, bh,
+                                                         handle, err);
+                       return err;
                }
                return 0;
        }
index f9fb4bb..84bc98a 100644 (file)
@@ -127,10 +127,6 @@ int __ext4_journal_get_undo_access(const char *where, handle_t *handle,
 int __ext4_journal_get_write_access(const char *where, handle_t *handle,
                                struct buffer_head *bh);
 
-/* When called with an invalid handle, this will still do a put on the BH */
-int __ext4_journal_forget(const char *where, handle_t *handle,
-                               struct buffer_head *bh);
-
 int __ext4_forget(const char *where, handle_t *handle, int is_metadata,
                  struct inode *inode, struct buffer_head *bh,
                  ext4_fsblk_t blocknr);
@@ -150,8 +146,6 @@ int __ext4_handle_dirty_metadata(const char *where, handle_t *handle,
                      (block_nr))
 #define ext4_journal_get_create_access(handle, bh) \
        __ext4_journal_get_create_access(__func__, (handle), (bh))
-#define ext4_journal_forget(handle, bh) \
-       __ext4_journal_forget(__func__, (handle), (bh))
 #define ext4_handle_dirty_metadata(handle, inode, bh) \
        __ext4_handle_dirty_metadata(__func__, (handle), (inode), (bh))
 
index fa37f95..72c6943 100644 (file)
@@ -767,7 +767,13 @@ failed:
        /* Allocation failed, free what we already allocated */
        for (i = 1; i <= n ; i++) {
                BUFFER_TRACE(branch[i].bh, "call jbd2_journal_forget");
-               ext4_journal_forget(handle, branch[i].bh);
+               /* 
+                * Note: is_metadata is 0 because branch[i].bh is
+                * newly allocated, so there is no need to revoke the
+                * block.  If we do, it's harmless, but not necessary.
+                */
+               ext4_forget(handle, 0, inode, branch[i].bh,
+                           branch[i].bh->b_blocknr);
        }
        for (i = 0; i < indirect_blks; i++)
                ext4_free_blocks(handle, inode, new_blocks[i], 1, 0);
@@ -852,7 +858,13 @@ static int ext4_splice_branch(handle_t *handle, struct inode *inode,
 err_out:
        for (i = 1; i <= num; i++) {
                BUFFER_TRACE(where[i].bh, "call jbd2_journal_forget");
-               ext4_journal_forget(handle, where[i].bh);
+               /* 
+                * Note: is_metadata is 0 because branch[i].bh is
+                * newly allocated, so there is no need to revoke the
+                * block.  If we do, it's harmless, but not necessary.
+                */
+               ext4_forget(handle, 0, inode, where[i].bh,
+                           where[i].bh->b_blocknr);
                ext4_free_blocks(handle, inode,
                                        le32_to_cpu(where[i-1].key), 1, 0);
        }