| From eb76faf53b1ff7a77ce3f78cc98ad392ac70c2a0 Mon Sep 17 00:00:00 2001 |
| From: Joe Thornber <ejt@redhat.com> |
| Date: Tue, 30 Sep 2014 09:32:46 +0100 |
| Subject: dm bufio: update last_accessed when relinking a buffer |
| |
| From: Joe Thornber <ejt@redhat.com> |
| |
| commit eb76faf53b1ff7a77ce3f78cc98ad392ac70c2a0 upstream. |
| |
| The 'last_accessed' member of the dm_buffer structure was only set when |
| the the buffer was created. This led to each buffer being discarded |
| after dm_bufio_max_age time even if it was used recently. In practice |
| this resulted in all thinp metadata being evicted soon after being read |
| -- this is particularly problematic for metadata intensive workloads |
| like multithreaded small random IO. |
| |
| 'last_accessed' is now updated each time the buffer is moved to the head |
| of the LRU list, so the buffer is now properly discarded if it was not |
| used in dm_bufio_max_age time. |
| |
| Signed-off-by: Joe Thornber <ejt@redhat.com> |
| Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> |
| Signed-off-by: Mike Snitzer <snitzer@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/dm-bufio.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/md/dm-bufio.c |
| +++ b/drivers/md/dm-bufio.c |
| @@ -465,6 +465,7 @@ static void __relink_lru(struct dm_buffe |
| c->n_buffers[dirty]++; |
| b->list_mode = dirty; |
| list_move(&b->lru_list, &c->lru[dirty]); |
| + b->last_accessed = jiffies; |
| } |
| |
| /*---------------------------------------------------------------- |