提交 076f968b 编写于 作者: J Jonathan Brassow 提交者: NeilBrown

MD: add sync_super to mddev_t struct

Add the 'sync_super' function pointer to MD array structure (struct mddev_s)

If device-mapper (dm-raid.c) is to define its own on-disk superblock and be
able to load it, there must still be a way for MD to initiate superblock
updates.  The simplest way to make this happen is to provide a pointer in
the MD array structure that can be set by device-mapper (or other module)
with a function to do this.  If the function has been set, it will be used;
otherwise, the method with be looked up via 'super_types' as usual.
Signed-off-by: NJonathan Brassow <jbrassow@redhat.com>
Signed-off-by: NNeilBrown <neilb@suse.de>
上级 1ed7242e
...@@ -1753,6 +1753,18 @@ static struct super_type super_types[] = { ...@@ -1753,6 +1753,18 @@ static struct super_type super_types[] = {
}, },
}; };
static void sync_super(mddev_t *mddev, mdk_rdev_t *rdev)
{
if (mddev->sync_super) {
mddev->sync_super(mddev, rdev);
return;
}
BUG_ON(mddev->major_version >= ARRAY_SIZE(super_types));
super_types[mddev->major_version].sync_super(mddev, rdev);
}
static int match_mddev_units(mddev_t *mddev1, mddev_t *mddev2) static int match_mddev_units(mddev_t *mddev1, mddev_t *mddev2)
{ {
mdk_rdev_t *rdev, *rdev2; mdk_rdev_t *rdev, *rdev2;
...@@ -2171,8 +2183,7 @@ static void sync_sbs(mddev_t * mddev, int nospares) ...@@ -2171,8 +2183,7 @@ static void sync_sbs(mddev_t * mddev, int nospares)
/* Don't update this superblock */ /* Don't update this superblock */
rdev->sb_loaded = 2; rdev->sb_loaded = 2;
} else { } else {
super_types[mddev->major_version]. sync_super(mddev, rdev);
sync_super(mddev, rdev);
rdev->sb_loaded = 1; rdev->sb_loaded = 1;
} }
} }
......
...@@ -330,6 +330,7 @@ struct mddev_s ...@@ -330,6 +330,7 @@ struct mddev_s
atomic_t flush_pending; atomic_t flush_pending;
struct work_struct flush_work; struct work_struct flush_work;
struct work_struct event_work; /* used by dm to report failure event */ struct work_struct event_work; /* used by dm to report failure event */
void (*sync_super)(mddev_t *mddev, mdk_rdev_t *rdev);
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册