summaryrefslogtreecommitdiff
path: root/super1.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-09-16 20:58:31 +1000
committerNeilBrown <neilb@suse.de>2010-09-16 20:58:31 +1000
commita2ce5a1af19e5dcfd59cad117c0e9fccabce7322 (patch)
treefaa4a0219b970a6584cb0961f7632d2bf1fcba32 /super1.c
parent8efb9d16ac4026ca237a2d887240543b1763b634 (diff)
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 <nazard.michi@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super1.c')
-rw-r--r--super1.c6
1 files 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;
}
}