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

Commit e81d4477 authored by gmail's avatar gmail Committed by Theodore Ts'o
Browse files

ext4: release bh in make_indexed_dir



The commit 6050d47a: "ext4: bail out from make_indexed_dir() on
first error" could end up leaking bh2 in the error path.

[ Also avoid renaming bh2 to bh, which just confuses things --tytso ]

Cc: stable@vger.kernel.org
Signed-off-by: default avataryangsheng <yngsion@gmail.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 16c54688
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -2044,33 +2044,31 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
	frame->entries = entries;
	frame->at = entries;
	frame->bh = bh;
	bh = bh2;

	retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
	if (retval)
		goto out_frames;	
	retval = ext4_handle_dirty_dirent_node(handle, dir, bh);
	retval = ext4_handle_dirty_dirent_node(handle, dir, bh2);
	if (retval)
		goto out_frames;	

	de = do_split(handle,dir, &bh, frame, &fname->hinfo);
	de = do_split(handle,dir, &bh2, frame, &fname->hinfo);
	if (IS_ERR(de)) {
		retval = PTR_ERR(de);
		goto out_frames;
	}
	dx_release(frames);

	retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh);
	brelse(bh);
	return retval;
	retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2);
out_frames:
	/*
	 * Even if the block split failed, we have to properly write
	 * out all the changes we did so far. Otherwise we can end up
	 * with corrupted filesystem.
	 */
	if (retval)
		ext4_mark_inode_dirty(handle, dir);
	dx_release(frames);
	brelse(bh2);
	return retval;
}