Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7e57e7c authored by Theodore Ts'o's avatar Theodore Ts'o
Browse files

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: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent e4684b3f
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -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;
	}
+0 −6
Original line number Diff line number Diff line
@@ -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))

+14 −2
Original line number Diff line number Diff line
@@ -767,7 +767,13 @@ static int ext4_alloc_branch(handle_t *handle, struct inode *inode,
	/* 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);
	}