From a2ce5a1af19e5dcfd59cad117c0e9fccabce7322 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 16 Sep 2010 20:58:31 +1000 Subject: [PATCH] Fix byte-order conversion in update_super1("assemble") This code is wrong is several ways, and failed on big-endian machines. Put in correct endian coversions: 'want' is cpu-order, dev_roles[] is little-endian, 16 bit. Reported-by: Doug Nazar Signed-off-by: NeilBrown --- super1.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/super1.c b/super1.c index 01473d14..0eb03230 100644 --- a/super1.c +++ b/super1.c @@ -673,11 +673,11 @@ static int update_super1(struct supertype *st, struct mdinfo *info, int d = info->disk.number; int want; if (info->disk.state == 6) - want = __cpu_to_le32(info->disk.raid_disk); + want = info->disk.raid_disk; else want = 0xFFFF; - if (sb->dev_roles[d] != want) { - sb->dev_roles[d] = want; + if (sb->dev_roles[d] != __cpu_to_le16(want)) { + sb->dev_roles[d] = __cpu_to_le16(want); rv = 1; } } -- 2.47.2