• Josef Bacik's avatar
    btrfs: check for priority ticket granting before flushing · 9cd8dcdc
    Josef Bacik authored
    Since we're dropping locks before we enter the priority flushing loops
    we could have had our ticket granted before we got the space_info->lock.
    So add this check to avoid doing some extra flushing in the priority
    flushing cases.
    
    The case in priority_reclaim_metadata_space is an optimization.  Think
    we came in to reserve, we didn't have the space, we added our ticket to
    the list.  But at the same time somebody was waiting on the space_info
    lock to add space and do btrfs_try_granting_ticket(), so we drop the
    lock, get satisfied, come in to do our loop, and we have been
    satisfied.
    
    This is the priority reclaim path, so to_reclaim could be !0 still
    because we may have only satisfied the priority tickets and still left
    non priority tickets on the list.  We would then have to_reclaim but
    ->bytes == 0.
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    [ add note about the optimization ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    9cd8dcdc
space-info.c 52.4 KB