diff mbox

ext4: Trim allocation requests to group size

Message ID 20170110093201.1403-1-jack@suse.cz
State Awaiting Upstream, archived
Headers show

Commit Message

Jan Kara Jan. 10, 2017, 9:32 a.m. UTC
If filesystem groups are artifically small (using parameter -g to
mkfs.ext4), ext4_mb_normalize_request() can result in a request that is
larger than a block group. Trim the request size to not confuse
allocation code.

Reported-by: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/ext4/mballoc.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Theodore Ts'o Feb. 1, 2017, 7:07 p.m. UTC | #1
On Tue, Jan 10, 2017 at 10:32:01AM +0100, Jan Kara wrote:
> If filesystem groups are artifically small (using parameter -g to
> mkfs.ext4), ext4_mb_normalize_request() can result in a request that is
> larger than a block group. Trim the request size to not confuse
> allocation code.
> 
> Reported-by: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> Signed-off-by: Jan Kara <jack@suse.cz>

Thanks, applied.

					- Ted
diff mbox

Patch

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 7ae43c59bc79..2e9fc7a61048 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -3123,6 +3123,13 @@  ext4_mb_normalize_request(struct ext4_allocation_context *ac,
 	if (ar->pright && start + size - 1 >= ar->lright)
 		size -= start + size - ar->lright;
 
+	/*
+	 * Trim allocation request for filesystems with artificially small
+	 * groups.
+	 */
+	if (size > EXT4_BLOCKS_PER_GROUP(ac->ac_sb))
+		size = EXT4_BLOCKS_PER_GROUP(ac->ac_sb);
+
 	end = start + size;
 
 	/* check we don't cross already preallocated blocks */