]> git.baikalelectronics.ru Git - kernel.git/commit
xfs: fix allocation length overflow in xfs_bmapi_write()
authorDave Chinner <dchinner@redhat.com>
Thu, 1 Dec 2011 11:24:20 +0000 (11:24 +0000)
committerBen Myers <bpm@sgi.com>
Fri, 2 Dec 2011 22:24:02 +0000 (16:24 -0600)
commit53cb0fabaa87450da698e9b786e17ca45759c380
tree6dba4c8cacee04e8b507f77fd547bab7a23063ac
parent3d0c2dc5a7fae26efb1e6fbba271e67cb3829eb8
xfs: fix allocation length overflow in xfs_bmapi_write()

When testing the new xfstests --large-fs option that does very large
file preallocations, this assert was tripped deep in
xfs_alloc_vextent():

XFS: Assertion failed: args->minlen <= args->maxlen, file: fs/xfs/xfs_alloc.c, line: 2239

The allocation was trying to allocate a zero length extent because
the lower 32 bits of the allocation length was zero. The remaining
length of the allocation to be done was an exact multiple of 2^32 -
the first case I saw was at 496TB remaining to be allocated.

This turns out to be an overflow when converting the allocation
length (a 64 bit quantity) into the extent length to allocate (a 32
bit quantity), and it requires the length to be allocated an exact
multiple of 2^32 blocks to trip the assert.

Fix it by limiting the extent lenth to allocate to MAXEXTLEN.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_bmap.c