aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-table.c
diff options
context:
space:
mode:
authorMike Anderson <andmike@us.ibm.com>2006-03-27 04:17:54 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-27 11:44:59 -0500
commit1134e5ae79bab61c05657ca35a6297cf87202e35 (patch)
tree16d5e9c722fbe17dc343c65b85628c8e6ee36199 /drivers/md/dm-table.c
parent9ade92a9a5b0a3a10efa6551b8c67a9277bf0438 (diff)
[PATCH] dm table: store md
Store an up-pointer to the owning struct mapped_device in every table when it is created. Access it with: struct mapped_device *dm_table_get_md(struct dm_table *t) Tables linked to md must be destroyed before the md itself. Signed-off-by: Mike Anderson <andmike@us.ibm.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/dm-table.c')
-rw-r--r--drivers/md/dm-table.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 9558a4acec12..84f4594afd3c 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -22,6 +22,7 @@
22#define CHILDREN_PER_NODE (KEYS_PER_NODE + 1) 22#define CHILDREN_PER_NODE (KEYS_PER_NODE + 1)
23 23
24struct dm_table { 24struct dm_table {
25 struct mapped_device *md;
25 atomic_t holders; 26 atomic_t holders;
26 27
27 /* btree table */ 28 /* btree table */
@@ -206,7 +207,8 @@ static int alloc_targets(struct dm_table *t, unsigned int num)
206 return 0; 207 return 0;
207} 208}
208 209
209int dm_table_create(struct dm_table **result, int mode, unsigned num_targets) 210int dm_table_create(struct dm_table **result, int mode,
211 unsigned num_targets, struct mapped_device *md)
210{ 212{
211 struct dm_table *t = kmalloc(sizeof(*t), GFP_KERNEL); 213 struct dm_table *t = kmalloc(sizeof(*t), GFP_KERNEL);
212 214
@@ -229,6 +231,7 @@ int dm_table_create(struct dm_table **result, int mode, unsigned num_targets)
229 } 231 }
230 232
231 t->mode = mode; 233 t->mode = mode;
234 t->md = md;
232 *result = t; 235 *result = t;
233 return 0; 236 return 0;
234} 237}
@@ -952,12 +955,20 @@ int dm_table_flush_all(struct dm_table *t)
952 return ret; 955 return ret;
953} 956}
954 957
958struct mapped_device *dm_table_get_md(struct dm_table *t)
959{
960 dm_get(t->md);
961
962 return t->md;
963}
964
955EXPORT_SYMBOL(dm_vcalloc); 965EXPORT_SYMBOL(dm_vcalloc);
956EXPORT_SYMBOL(dm_get_device); 966EXPORT_SYMBOL(dm_get_device);
957EXPORT_SYMBOL(dm_put_device); 967EXPORT_SYMBOL(dm_put_device);
958EXPORT_SYMBOL(dm_table_event); 968EXPORT_SYMBOL(dm_table_event);
959EXPORT_SYMBOL(dm_table_get_size); 969EXPORT_SYMBOL(dm_table_get_size);
960EXPORT_SYMBOL(dm_table_get_mode); 970EXPORT_SYMBOL(dm_table_get_mode);
971EXPORT_SYMBOL(dm_table_get_md);
961EXPORT_SYMBOL(dm_table_put); 972EXPORT_SYMBOL(dm_table_put);
962EXPORT_SYMBOL(dm_table_get); 973EXPORT_SYMBOL(dm_table_get);
963EXPORT_SYMBOL(dm_table_unplug_all); 974EXPORT_SYMBOL(dm_table_unplug_all);