dm snapshot: introduce account_start_copy() and account_end_copy()
authorMikulas Patocka <mpatocka@redhat.com>
Wed, 2 Oct 2019 10:14:17 +0000 (06:14 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Nov 2019 11:18:00 +0000 (12:18 +0100)
[ Upstream commit a2f83e8b0c82c9500421a26c49eb198b25fcdea3 ]

This simple refactoring moves code for modifying the semaphore cow_count
into separate functions to prepare for changes that will extend these
methods to provide for a more sophisticated mechanism for COW
throttling.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Reviewed-by: Nikos Tsironis <ntsironis@arrikto.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/md/dm-snap.c

index e5b0e13f5c92d733ff6e7b3f0db470e6a2bcfc30..ef51ab8a5dcb29c84ec484c030349f3b9aa1a681 100644 (file)
@@ -1399,6 +1399,16 @@ static void snapshot_dtr(struct dm_target *ti)
        kfree(s);
 }
 
+static void account_start_copy(struct dm_snapshot *s)
+{
+       down(&s->cow_count);
+}
+
+static void account_end_copy(struct dm_snapshot *s)
+{
+       up(&s->cow_count);
+}
+
 /*
  * Flush a list of buffers.
  */
@@ -1581,7 +1591,7 @@ static void copy_callback(int read_err, unsigned long write_err, void *context)
                }
                list_add(&pe->out_of_order_entry, lh);
        }
-       up(&s->cow_count);
+       account_end_copy(s);
 }
 
 /*
@@ -1605,7 +1615,7 @@ static void start_copy(struct dm_snap_pending_exception *pe)
        dest.count = src.count;
 
        /* Hand over to kcopyd */
-       down(&s->cow_count);
+       account_start_copy(s);
        dm_kcopyd_copy(s->kcopyd_client, &src, 1, &dest, 0, copy_callback, pe);
 }
 
@@ -1625,7 +1635,7 @@ static void start_full_bio(struct dm_snap_pending_exception *pe,
        pe->full_bio = bio;
        pe->full_bio_end_io = bio->bi_end_io;
 
-       down(&s->cow_count);
+       account_start_copy(s);
        callback_data = dm_kcopyd_prepare_callback(s->kcopyd_client,
                                                   copy_callback, pe);