• Paolo Valente's avatar
    block, bfq: correctly charge and reset entity service in all cases · d4d73f1f
    Paolo Valente authored
    [ Upstream commit cbeb869a ]
    BFQ schedules entities (which represent either per-process queues or
    groups of queues) as a function of their timestamps. In particular, as
    a function of their (virtual) finish times. The finish time of an
    entity is computed as a function of the budget assigned to the entity,
    assuming, tentatively, that the entity, once in service, will receive
    an amount of service equal to its budget. Then, when the entity is
    expired because it finishes to be served, this finish time is updated
    as a function of the actual service received by the entity. This
    allows the entity to be correctly charged with only the service
    received, and then to be correctly re-scheduled.
    Yet an entity may receive service also while not being the entity in
    service (in the scheduling environment of its parent entity), for
    several reasons. If the entity remains with no backlog while receiving
    this 'unofficial' service, then it is expired. Also on such an
    expiration, the finish time of the entity should be updated to account
    for only the service actually received by the entity. Unfortunately,
    such an update is not performed for an entity expiring without being
    the entity in service.
    In a similar vein, the service counter of the entity in service is
    reset when the entity is expired, to be ready to be used for next
    service cycle. This reset too should be performed also in case an
    entity is expired because it remains empty after receiving service
    while not being the entity in service. But in this case the reset is
    not performed.
    This commit performs the above update of the finish time and reset of
    the service received, also for an entity expiring while not being the
    entity in service.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>