ext4: trim allocation requests to group size
authorJan Kara <jack@suse.cz>
Fri, 27 Jan 2017 19:34:30 +0000 (14:34 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 27 Jan 2017 19:34:30 +0000 (14:34 -0500)
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>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
fs/ext4/mballoc.c

index ec2f64b0e6962ec04b5b8bf0c8d464b700b9c341..f513f273ff89edef5484440ec74033a5c6c6ecc1 100644 (file)
@@ -3133,6 +3133,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 */