xfs: fix extent format buffer allocation size
authorDave Chinner <dchinner@redhat.com>
Fri, 8 Apr 2011 02:45:07 +0000 (12:45 +1000)
committerDave Chinner <david@fromorbit.com>
Fri, 8 Apr 2011 02:45:07 +0000 (12:45 +1000)
commite828776a8abe6b9bae7ed9638710bff7642c568a
tree978a74827e670e2aab8dec943944e63ce43afc2d
parent89b3600ccfb01aed6873bc499442fc0bed00bbdd
xfs: fix extent format buffer allocation size

When formatting an inode item, we have to allocate a separate buffer
to hold extents when there are delayed allocation extents on the
inode and it is in extent format. The allocation size is derived
from the in-core data fork representation, which accounts for
delayed allocation extents, while the on-disk representation does
not contain any delalloc extents.

As a result of this mismatch, the allocated buffer can be far larger
than needed to hold the real extent list which, due to the fact the
inode is in extent format, is limited to the size of the literal
area of the inode. However, we can have thousands of delalloc
extents, resulting in an allocation size orders of magnitude larger
than is needed to hold all the real extents.

Fix this by limiting the size of the buffer being allocated to the
size of the literal area of the inodes in the filesystem (i.e. the
maximum size an inode fork can grow to).

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Alex Elder <aelder@sgi.com>
fs/xfs/xfs_inode_item.c