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:
parent
8efb9d16ac
commit
a2ce5a1af1
6
super1.c
6
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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue