dm bufio: introduce a global queue
authorMikulas Patocka <mpatocka@redhat.com>
Thu, 12 Sep 2019 08:44:46 +0000 (10:44 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 13 Sep 2019 14:43:27 +0000 (10:43 -0400)
Rename param_spinlock to global_spinlock and introduce a global queue of
all used buffers.  The queue will be used in the following commits.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-bufio.c

index 58df20fd5465ee304f7df0aa48ca6cf0609d17b7..2451a4d68aed2caaf592c8b67f45875c4f77be57 100644 (file)
@@ -132,6 +132,7 @@ enum data_mode {
 struct dm_buffer {
        struct rb_node node;
        struct list_head lru_list;
+       struct list_head global_list;
        sector_t block;
        void *data;
        unsigned char data_mode;                /* DATA_MODE_* */
@@ -192,7 +193,9 @@ static unsigned long dm_bufio_cache_size;
  */
 static unsigned long dm_bufio_cache_size_latch;
 
-static DEFINE_SPINLOCK(param_spinlock);
+static DEFINE_SPINLOCK(global_spinlock);
+
+static LIST_HEAD(global_queue);
 
 /*
  * Buffers are freed after this timeout
@@ -301,7 +304,7 @@ static void adjust_total_allocated(struct dm_buffer *b, bool unlink)
        if (unlink)
                diff = -diff;
 
-       spin_lock(&param_spinlock);
+       spin_lock(&global_spinlock);
 
        *class_ptr[data_mode] += diff;
 
@@ -310,7 +313,13 @@ static void adjust_total_allocated(struct dm_buffer *b, bool unlink)
        if (dm_bufio_current_allocated > dm_bufio_peak_allocated)
                dm_bufio_peak_allocated = dm_bufio_current_allocated;
 
-       spin_unlock(&param_spinlock);
+       if (!unlink) {
+               list_add(&b->global_list, &global_queue);
+       } else {
+               list_del(&b->global_list);
+       }
+
+       spin_unlock(&global_spinlock);
 }
 
 /*