• Brian Foster's avatar
    xfs: make tr_growdata a permanent transaction · 945c941f
    Brian Foster authored
    The growdata transaction is used by growfs operations to increase
    the data size of the filesystem. Part of this sequence involves
    extending the size of the last preexisting AG in the fs, if
    necessary. This is implemented by freeing the newly available
    physical range to the AG.
    
    tr_growdata is not a permanent transaction, however, and block
    allocation transactions must be permanent to handle deferred frees
    of AGFL blocks. If the grow operation extends an existing AG that
    requires AGFL fixing, assert failures occur due to a populated dfops
    list on a non-permanent transaction and the AGFL free does not
    occur. This is reproduced (rarely) by xfs/104.
    
    Change tr_growdata to a permanent transaction with a default log
    count. This increases initial transaction reservation size, but
    growfs is an infrequent and non-performance critical operation and
    so should have minimal impact.
    Reported-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    [darrick: add a comment to the assert]
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    945c941f
xfs_trans_resv.c 28.7 KB