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: Jonathan Brassow <jbrassow@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
1ed7242e59
commit
076f968b37
|
@ -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,7 +2183,6 @@ 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
|
||||||
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue