diff options
| -rw-r--r-- | drivers/md/dm-cache-policy-smq.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/md/dm-cache-policy-smq.c b/drivers/md/dm-cache-policy-smq.c index d13d9edf8dfe..72479bd61e11 100644 --- a/drivers/md/dm-cache-policy-smq.c +++ b/drivers/md/dm-cache-policy-smq.c | |||
| @@ -1120,28 +1120,30 @@ static bool clean_target_met(struct smq_policy *mq, bool idle) | |||
| 1120 | * Cache entries may not be populated. So we cannot rely on the | 1120 | * Cache entries may not be populated. So we cannot rely on the |
| 1121 | * size of the clean queue. | 1121 | * size of the clean queue. |
| 1122 | */ | 1122 | */ |
| 1123 | unsigned nr_clean = from_cblock(mq->cache_size) - q_size(&mq->dirty); | 1123 | unsigned nr_clean; |
| 1124 | 1124 | ||
| 1125 | if (idle) | 1125 | if (idle) { |
| 1126 | /* | 1126 | /* |
| 1127 | * We'd like to clean everything. | 1127 | * We'd like to clean everything. |
| 1128 | */ | 1128 | */ |
| 1129 | return q_size(&mq->dirty) == 0u; | 1129 | return q_size(&mq->dirty) == 0u; |
| 1130 | else | 1130 | } |
| 1131 | return (nr_clean + btracker_nr_writebacks_queued(mq->bg_work)) >= | 1131 | |
| 1132 | percent_to_target(mq, CLEAN_TARGET); | 1132 | nr_clean = from_cblock(mq->cache_size) - q_size(&mq->dirty); |
| 1133 | return (nr_clean + btracker_nr_writebacks_queued(mq->bg_work)) >= | ||
| 1134 | percent_to_target(mq, CLEAN_TARGET); | ||
| 1133 | } | 1135 | } |
| 1134 | 1136 | ||
| 1135 | static bool free_target_met(struct smq_policy *mq, bool idle) | 1137 | static bool free_target_met(struct smq_policy *mq, bool idle) |
| 1136 | { | 1138 | { |
| 1137 | unsigned nr_free = from_cblock(mq->cache_size) - | 1139 | unsigned nr_free; |
| 1138 | mq->cache_alloc.nr_allocated; | ||
| 1139 | 1140 | ||
| 1140 | if (idle) | 1141 | if (!idle) |
| 1141 | return (nr_free + btracker_nr_demotions_queued(mq->bg_work)) >= | ||
| 1142 | percent_to_target(mq, FREE_TARGET); | ||
| 1143 | else | ||
| 1144 | return true; | 1142 | return true; |
| 1143 | |||
| 1144 | nr_free = from_cblock(mq->cache_size) - mq->cache_alloc.nr_allocated; | ||
| 1145 | return (nr_free + btracker_nr_demotions_queued(mq->bg_work)) >= | ||
| 1146 | percent_to_target(mq, FREE_TARGET); | ||
| 1145 | } | 1147 | } |
| 1146 | 1148 | ||
| 1147 | /*----------------------------------------------------------------*/ | 1149 | /*----------------------------------------------------------------*/ |
