• Joe Thornber's avatar
    dm cache policy mq: fix promotions to occur as expected · af95e7a6
    Joe Thornber authored
    Micro benchmarks that repeatedly issued IO to a single block were
    failing to cause a promotion from the origin device to the cache.  Fix
    this by not updating the stats during map() if -EWOULDBLOCK will be
    returned.
    
    The mq policy will only update stats, consider migration, etc, once per
    tick period (a unit of time established between dm-cache core and the
    policies).
    
    When the IO thread calls the policy's map method, if it would like to
    migrate the associated block it returns -EWOULDBLOCK, the IO then gets
    handed over to a worker thread which handles the migration.  The worker
    thread calls map again, to check the migration is still needed (avoids a
    race among other things).  *BUT*, before this fix, if we were still in
    the same tick period the stats were already updated by the previous map
    call -- so the migration would no longer be requested.
    Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    af95e7a6
dm-cache-policy-mq.c 29.5 KB