summary refs log tree commit diff
path: root/drivers/md/dm-bio-prison.h
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2013-03-01 22:45:50 +0000
committerAlasdair G Kergon <agk@redhat.com>2013-03-01 22:45:50 +0000
commit025b96853fe0bdc977d88b4242ca5e1f19d9bb66 (patch)
tree5bf111eac74bb2798495fd4975b0d8df72c8d351 /drivers/md/dm-bio-prison.h
parent6beca5eb6e801aea810da6cbc4990d96e6c1c0bc (diff)
downloadlinux-025b96853fe0bdc977d88b4242ca5e1f19d9bb66.tar.gz
dm thin: remove cells from stack
This patch takes advantage of the new bio-prison interface where the
memory is now passed in rather than using a mempool in bio-prison.
This allows the map function to avoid performing potentially-blocking
allocations that could lead to deadlocks: We want to avoid the cell
allocation that is done in bio_detain.

(The potential for mempool deadlocks still remains in other functions
that use bio_detain.)

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/md/dm-bio-prison.h')
-rw-r--r--drivers/md/dm-bio-prison.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/md/dm-bio-prison.h b/drivers/md/dm-bio-prison.h
index 11af2182101b..981a02d3a055 100644
--- a/drivers/md/dm-bio-prison.h
+++ b/drivers/md/dm-bio-prison.h
@@ -22,7 +22,6 @@
  * subsequently unlocked the bios become available.
  */
 struct dm_bio_prison;
-struct dm_bio_prison_cell;
 
 /* FIXME: this needs to be more abstract */
 struct dm_cell_key {
@@ -31,6 +30,17 @@ struct dm_cell_key {
 	dm_block_t block;
 };
 
+/*
+ * Treat this as opaque, only in header so callers can manage allocation
+ * themselves.
+ */
+struct dm_bio_prison_cell {
+	struct hlist_node list;
+	struct dm_cell_key key;
+	struct bio *holder;
+	struct bio_list bios;
+};
+
 struct dm_bio_prison *dm_bio_prison_create(unsigned nr_cells);
 void dm_bio_prison_destroy(struct dm_bio_prison *prison);