• Dave Chinner's avatar
    xfs: fix extent format buffer allocation size · e828776a
    Dave Chinner authored
    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: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarAlex Elder <aelder@sgi.com>
    e828776a
xfs_inode_item.c 30.1 KB