• B
    xfs: support min/max agbno args in block allocator · bfe46d4e
    Brian Foster 提交于
    The block allocator supports various arguments to tweak block allocation
    behavior and set allocation requirements. The sparse inode chunk feature
    introduces a new requirement not supported by the current arguments.
    Sparse inode allocations must convert or merge into an inode record that
    describes a fixed length chunk (64 inodes x inodesize). Full inode chunk
    allocations by definition always result in valid inode records. Sparse
    chunk allocations are smaller and the associated records can refer to
    blocks not owned by the inode chunk. This model can result in invalid
    inode records in certain cases.
    
    For example, if a sparse allocation occurs near the start of an AG, the
    aligned inode record for that chunk might refer to agbno 0. If an
    allocation occurs towards the end of the AG and the AG size is not
    aligned, the inode record could refer to blocks beyond the end of the
    AG. While neither of these scenarios directly result in corruption, they
    both insert invalid inode records and at minimum cause repair to
    complain, are unlikely to merge into full chunks over time and set land
    mines for other areas of code.
    
    To guarantee sparse inode chunk allocation creates valid inode records,
    support the ability to specify an agbno range limit for
    XFS_ALLOCTYPE_NEAR_BNO block allocations. The min/max agbno's are
    specified in the allocation arguments and limit the block allocation
    algorithms to that range. The starting 'agbno' hint is clamped to the
    range if the specified agbno is out of range. If no sufficient extent is
    available within the range, the allocation fails. For backwards
    compatibility, the min/max fields can be initialized to 0 to disable
    range limiting (e.g., equivalent to min=0,max=agsize).
    Signed-off-by: NBrian Foster <bfoster@redhat.com>
    Reviewed-by: NDave Chinner <dchinner@redhat.com>
    Signed-off-by: NDave Chinner <david@fromorbit.com>
    bfe46d4e
xfs_alloc.c 73.2 KB