mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
dm: optimize use SRCU and RCU
This patch removes "io_lock" and "map_lock" in struct mapped_device and "holders" in struct dm_table and replaces these mechanisms with sleepable-rcu. Previously, the code would call "dm_get_live_table" and "dm_table_put" to get and release table. Now, the code is changed to call "dm_get_live_table" and "dm_put_live_table". dm_get_live_table locks sleepable-rcu and dm_put_live_table unlocks it. dm_get_live_table_fast/dm_put_live_table_fast can be used instead of dm_get_live_table/dm_put_live_table. These *_fast functions use non-sleepable RCU, so the caller must not block between them. If the code changes active or inactive dm table, it must call dm_sync_table before destroying the old table. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
2480945cd4
commit
83d5e5b0af
5 changed files with 180 additions and 147 deletions
|
@ -446,9 +446,9 @@ int __must_check dm_set_target_max_io_len(struct dm_target *ti, sector_t len);
|
|||
/*
|
||||
* Table reference counting.
|
||||
*/
|
||||
struct dm_table *dm_get_live_table(struct mapped_device *md);
|
||||
void dm_table_get(struct dm_table *t);
|
||||
void dm_table_put(struct dm_table *t);
|
||||
struct dm_table *dm_get_live_table(struct mapped_device *md, int *srcu_idx);
|
||||
void dm_put_live_table(struct mapped_device *md, int srcu_idx);
|
||||
void dm_sync_table(struct mapped_device *md);
|
||||
|
||||
/*
|
||||
* Queries
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue