aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/md.c15
-rw-r--r--drivers/md/md.h1
2 files changed, 14 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index d5385188c445..9160463b5f68 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1753,6 +1753,18 @@ static struct super_type super_types[] = {
1753 }, 1753 },
1754}; 1754};
1755 1755
1756static void sync_super(mddev_t *mddev, mdk_rdev_t *rdev)
1757{
1758 if (mddev->sync_super) {
1759 mddev->sync_super(mddev, rdev);
1760 return;
1761 }
1762
1763 BUG_ON(mddev->major_version >= ARRAY_SIZE(super_types));
1764
1765 super_types[mddev->major_version].sync_super(mddev, rdev);
1766}
1767
1756static int match_mddev_units(mddev_t *mddev1, mddev_t *mddev2) 1768static int match_mddev_units(mddev_t *mddev1, mddev_t *mddev2)
1757{ 1769{
1758 mdk_rdev_t *rdev, *rdev2; 1770 mdk_rdev_t *rdev, *rdev2;
@@ -2171,8 +2183,7 @@ static void sync_sbs(mddev_t * mddev, int nospares)
2171 /* Don't update this superblock */ 2183 /* Don't update this superblock */
2172 rdev->sb_loaded = 2; 2184 rdev->sb_loaded = 2;
2173 } else { 2185 } else {
2174 super_types[mddev->major_version]. 2186 sync_super(mddev, rdev);
2175 sync_super(mddev, rdev);
2176 rdev->sb_loaded = 1; 2187 rdev->sb_loaded = 1;
2177 } 2188 }
2178 } 2189 }
diff --git a/drivers/md/md.h b/drivers/md/md.h
index 0b1fd3f1d85b..5e35535ab7c3 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -330,6 +330,7 @@ struct mddev_s
330 atomic_t flush_pending; 330 atomic_t flush_pending;
331 struct work_struct flush_work; 331 struct work_struct flush_work;
332 struct work_struct event_work; /* used by dm to report failure event */ 332 struct work_struct event_work; /* used by dm to report failure event */
333 void (*sync_super)(mddev_t *mddev, mdk_rdev_t *rdev);
333}; 334};
334 335
335 336