Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 076f968b authored by Jonathan Brassow's avatar Jonathan Brassow Committed by NeilBrown
Browse files

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: default avatarJonathan Brassow <jbrassow@redhat.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 1ed7242e
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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)
{
	mdk_rdev_t *rdev, *rdev2;
@@ -2171,7 +2183,6 @@ static void sync_sbs(mddev_t * mddev, int nospares)
			/* Don't update this superblock */
			rdev->sb_loaded = 2;
		} else {
			super_types[mddev->major_version].
			sync_super(mddev, rdev);
			rdev->sb_loaded = 1;
		}
+1 −0
Original line number Diff line number Diff line
@@ -330,6 +330,7 @@ struct mddev_s
	atomic_t flush_pending;
	struct work_struct flush_work;
	struct work_struct event_work;	/* used by dm to report failure event */
	void (*sync_super)(mddev_t *mddev, mdk_rdev_t *rdev);
};