Merge tag 'dm-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper...
[sfrench/cifs-2.6.git] / drivers / md / dm-bufio.c
index ab472c557d18c060d8230bbfcadbd747b36f0fd0..825ca1f87639aae4bf1c0f60567bc163c75b338b 100644 (file)
@@ -465,6 +465,7 @@ static void __relink_lru(struct dm_buffer *b, int dirty)
        c->n_buffers[dirty]++;
        b->list_mode = dirty;
        list_move(&b->lru_list, &c->lru[dirty]);
+       b->last_accessed = jiffies;
 }
 
 /*----------------------------------------------------------------
@@ -720,7 +721,6 @@ static void __wait_for_free_buffer(struct dm_bufio_client *c)
 
        io_schedule();
 
-       set_task_state(current, TASK_RUNNING);
        remove_wait_queue(&c->free_buffer_wait, &wait);
 
        dm_bufio_lock(c);
@@ -1472,9 +1472,9 @@ static long __scan(struct dm_bufio_client *c, unsigned long nr_to_scan,
                list_for_each_entry_safe_reverse(b, tmp, &c->lru[l], lru_list) {
                        freed += __cleanup_old_buffer(b, gfp_mask, 0);
                        if (!--nr_to_scan)
-                               break;
+                               return freed;
+                       dm_bufio_cond_resched();
                }
-               dm_bufio_cond_resched();
        }
        return freed;
 }