dm cache: age and write back cache entries even without active IO
The policy tick() method is normally called from interrupt context. Both the mq and smq policies do some bottom half work for the tick method in their map functions. However if no IO is going through the cache, then that bottom half work doesn't occur. With these policies this means recently hit entries do not age and do not get written back as early as we'd like. Fix this by introducing a new 'can_block' parameter to the tick() method. When this is set the bottom half work occurs immediately. 'can_block' is set when the tick method is called every second by the core target (not in interrupt context). Signed-off-by: Joe Thornber <ejt@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:

committed by
Mike Snitzer

parent
b61d950962
commit
fba10109a4
@@ -83,10 +83,10 @@ static inline dm_cblock_t policy_residency(struct dm_cache_policy *p)
|
||||
return p->residency(p);
|
||||
}
|
||||
|
||||
static inline void policy_tick(struct dm_cache_policy *p)
|
||||
static inline void policy_tick(struct dm_cache_policy *p, bool can_block)
|
||||
{
|
||||
if (p->tick)
|
||||
return p->tick(p);
|
||||
return p->tick(p, can_block);
|
||||
}
|
||||
|
||||
static inline int policy_emit_config_values(struct dm_cache_policy *p, char *result,
|
||||
|
Reference in New Issue
Block a user