|
@@ -1796,9 +1796,17 @@ static void __evict_old_buffers(struct dm_bufio_client *c, unsigned long age_hz)
|
|
|
struct dm_buffer *b, *tmp;
|
|
|
unsigned retain_target = get_retain_buffers(c);
|
|
|
unsigned count;
|
|
|
+ LIST_HEAD(write_list);
|
|
|
|
|
|
dm_bufio_lock(c);
|
|
|
|
|
|
+ __check_watermark(c, &write_list);
|
|
|
+ if (unlikely(!list_empty(&write_list))) {
|
|
|
+ dm_bufio_unlock(c);
|
|
|
+ __flush_write_list(&write_list);
|
|
|
+ dm_bufio_lock(c);
|
|
|
+ }
|
|
|
+
|
|
|
count = c->n_buffers[LIST_CLEAN] + c->n_buffers[LIST_DIRTY];
|
|
|
list_for_each_entry_safe_reverse(b, tmp, &c->lru[LIST_CLEAN], lru_list) {
|
|
|
if (count <= retain_target)
|
|
@@ -1823,6 +1831,8 @@ static void cleanup_old_buffers(void)
|
|
|
|
|
|
mutex_lock(&dm_bufio_clients_lock);
|
|
|
|
|
|
+ __cache_size_refresh();
|
|
|
+
|
|
|
list_for_each_entry(c, &dm_bufio_all_clients, client_list)
|
|
|
__evict_old_buffers(c, max_age_hz);
|
|
|
|