diff options
author | NeilBrown <neilb@suse.de> | 2010-09-16 20:58:31 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-09-16 20:58:31 +1000 |
commit | a2ce5a1af19e5dcfd59cad117c0e9fccabce7322 (patch) | |
tree | faa4a0219b970a6584cb0961f7632d2bf1fcba32 /super1.c | |
parent | 8efb9d16ac4026ca237a2d887240543b1763b634 (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.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -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; } } |