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>
This commit is contained in:
NeilBrown 2010-09-16 20:58:31 +10:00
parent 8efb9d16ac
commit a2ce5a1af1
1 changed files with 3 additions and 3 deletions

View File

@ -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;
}
}