• Dave Chinner's avatar
    xfs: reduce AGF hold times during fstrim operations · 89cfa899
    Dave Chinner authored
    fstrim will hold the AGF lock for as long as it takes to walk and
    discard all the free space in the AG that meets the userspace trim
    criteria. For AGs with lots of free space extents (e.g. millions)
    or the underlying device is really slow at processing discard
    requests (e.g. Ceph RBD), this means the AGF hold time is often
    measured in minutes to hours, not a few milliseconds as we normal
    see with non-discard based operations.
    
    This can result in the entire filesystem hanging whilst the
    long-running fstrim is in progress. We can have transactions get
    stuck waiting for the AGF lock (data or metadata extent allocation
    and freeing), and then more transactions get stuck waiting on the
    locks those transactions hold. We can get to the point where fstrim
    blocks an extent allocation or free operation long enough that it
    ends up pinning the tail of the log and the log then runs out of
    space. At this point, every modification in the filesystem gets
    blocked. This includes read operations, if atime updates need to be
    made.
    
    To fix this problem, we need to be able to discard free space
    extents safely without holding the AGF lock. Fortunately, we already
    do this with online discard via busy extents. We can mark free space
    extents as "busy being discarded" under the AGF lock and then unlock
    the AGF, knowing that nobody will be able to allocate that free
    space extent until we remove it from the busy tree.
    
    Modify xfs_trim_extents to use the same asynchronous discard
    mechanism backed by busy extents as is used with online discard.
    This results in the AGF only needing to be held for short periods of
    time and it is never held while we issue discards. Hence if discard
    submission gets throttled because it is slow and/or there are lots
    of them, we aren't preventing other operations from being performed
    on AGF while we wait for discards to complete...
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    89cfa899
xfs_extent_busy.h 2.39 KB