提交 b7e57e7c 编写于 作者: T Theodore Ts'o

ext4: fold ext4_journal_forget() into ext4_forget()

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: N"Theodore Ts'o" <tytso@mit.edu>
上级 e4684b3f
...@@ -34,22 +34,6 @@ int __ext4_journal_get_write_access(const char *where, handle_t *handle, ...@@ -34,22 +34,6 @@ int __ext4_journal_get_write_access(const char *where, handle_t *handle,
return err; 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 * The ext4 forget function must perform a revoke if we are freeing data
* which has been journaled. Metadata (eg. indirect blocks) must be * 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, ...@@ -93,7 +77,11 @@ int __ext4_forget(const char *where, handle_t *handle, int is_metadata,
(!is_metadata && !ext4_should_journal_data(inode))) { (!is_metadata && !ext4_should_journal_data(inode))) {
if (bh) { if (bh) {
BUFFER_TRACE(bh, "call jbd2_journal_forget"); 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; return 0;
} }
......
...@@ -127,10 +127,6 @@ int __ext4_journal_get_undo_access(const char *where, handle_t *handle, ...@@ -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, int __ext4_journal_get_write_access(const char *where, handle_t *handle,
struct buffer_head *bh); 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, int __ext4_forget(const char *where, handle_t *handle, int is_metadata,
struct inode *inode, struct buffer_head *bh, struct inode *inode, struct buffer_head *bh,
ext4_fsblk_t blocknr); ext4_fsblk_t blocknr);
...@@ -150,8 +146,6 @@ int __ext4_handle_dirty_metadata(const char *where, handle_t *handle, ...@@ -150,8 +146,6 @@ int __ext4_handle_dirty_metadata(const char *where, handle_t *handle,
(block_nr)) (block_nr))
#define ext4_journal_get_create_access(handle, bh) \ #define ext4_journal_get_create_access(handle, bh) \
__ext4_journal_get_create_access(__func__, (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) \ #define ext4_handle_dirty_metadata(handle, inode, bh) \
__ext4_handle_dirty_metadata(__func__, (handle), (inode), (bh)) __ext4_handle_dirty_metadata(__func__, (handle), (inode), (bh))
......
...@@ -767,7 +767,13 @@ static int ext4_alloc_branch(handle_t *handle, struct inode *inode, ...@@ -767,7 +767,13 @@ static int ext4_alloc_branch(handle_t *handle, struct inode *inode,
/* Allocation failed, free what we already allocated */ /* Allocation failed, free what we already allocated */
for (i = 1; i <= n ; i++) { for (i = 1; i <= n ; i++) {
BUFFER_TRACE(branch[i].bh, "call jbd2_journal_forget"); 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++) for (i = 0; i < indirect_blks; i++)
ext4_free_blocks(handle, inode, new_blocks[i], 1, 0); 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, ...@@ -852,7 +858,13 @@ static int ext4_splice_branch(handle_t *handle, struct inode *inode,
err_out: err_out:
for (i = 1; i <= num; i++) { for (i = 1; i <= num; i++) {
BUFFER_TRACE(where[i].bh, "call jbd2_journal_forget"); 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, ext4_free_blocks(handle, inode,
le32_to_cpu(where[i-1].key), 1, 0); le32_to_cpu(where[i-1].key), 1, 0);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册