Add a list to the struct dm_dev structure to store the associated
targets.

Signed-off-by: Yang Yang <[email protected]>
---
 drivers/md/dm-table.c         | 16 ++++++++++++++++
 include/linux/device-mapper.h |  1 +
 2 files changed, 17 insertions(+)

diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index bd68af10afed..4817ddb660c4 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -2134,6 +2134,13 @@ void dm_table_postsuspend_targets(struct dm_table *t)
        suspend_targets(t, POSTSUSPEND);
 }
 
+static int dm_link_dev_to_target(struct dm_target *ti, struct dm_dev *dev,
+               sector_t start, sector_t len, void *data)
+{
+       dev->ti = ti;
+       return 0;
+}
+
 int dm_table_resume_targets(struct dm_table *t)
 {
        unsigned int i;
@@ -2162,6 +2169,15 @@ int dm_table_resume_targets(struct dm_table *t)
                        ti->type->resume(ti);
        }
 
+       if (t->flush_pass_around) {
+               for (i = 0; i < t->num_targets; i++) {
+                       struct dm_target *ti = dm_table_get_target(t, i);
+
+                       if (ti->type->iterate_devices)
+                               ti->type->iterate_devices(ti, 
dm_link_dev_to_target, NULL);
+               }
+       }
+
        return 0;
 }
 
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 0893ff8c01b6..2696d1a8b542 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -169,6 +169,7 @@ struct dm_dev {
        struct dax_device *dax_dev;
        blk_mode_t mode;
        char name[16];
+       struct dm_target *ti
 };
 
 /*
-- 
2.34.1


Reply via email to