dm snapshot: Make exception tables scalable
Use list_bl to implement the exception hash tables' buckets. This change permits concurrent access, to distinct buckets, by multiple threads. Also, implement helper functions to lock and unlock the exception tables based on the chunk number of the exception at hand. We retain the global locking, by means of down_write(), which is replaced by the next commit. Still, we must acquire the per-bucket spinlocks when accessing the hash tables, since list_bl does not allow modification on unlocked lists. Co-developed-by: Ilias Tsitsimpis <iliastsi@arrikto.com> Signed-off-by: Nikos Tsironis <ntsironis@arrikto.com> Acked-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
committed by
Mike Snitzer
parent
4ad8d880b6
commit
f79ae415b6
@@ -11,6 +11,7 @@
|
||||
#define _LINUX_DM_EXCEPTION_STORE
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/list_bl.h>
|
||||
#include <linux/device-mapper.h>
|
||||
|
||||
/*
|
||||
@@ -27,7 +28,7 @@ typedef sector_t chunk_t;
|
||||
* chunk within the device.
|
||||
*/
|
||||
struct dm_exception {
|
||||
struct list_head hash_list;
|
||||
struct hlist_bl_node hash_list;
|
||||
|
||||
chunk_t old_chunk;
|
||||
chunk_t new_chunk;
|
||||
|
||||
Reference in New Issue
Block a user