]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fix sign extension of bitmap_offset in super1.c
authorJes Sorensen <Jes.Sorensen@redhat.com>
Thu, 26 Apr 2012 15:12:56 +0000 (17:12 +0200)
committerNeilBrown <neilb@suse.de>
Sun, 29 Apr 2012 23:56:22 +0000 (09:56 +1000)
fbdef49811c9e2b54e2064d9af68cfffa77c6e77 incorrectly tried to fix sign
extension of the bitmap offset. However mdinfo->bitmap_offset is a u32
and needs to be converted to a 32 bit signed integer before the sign
extension.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super1.c

index 36369d88f7bfb83fb83d17bd9bff70202d7e03e0..be77c330cc789034e97c60a45ea8d25f026ae685 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -620,7 +620,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info, char *map)
        info->data_offset = __le64_to_cpu(sb->data_offset);
        info->component_size = __le64_to_cpu(sb->size);
        if (sb->feature_map & __le32_to_cpu(MD_FEATURE_BITMAP_OFFSET))
-               info->bitmap_offset = (long)__le32_to_cpu(sb->bitmap_offset);
+               info->bitmap_offset = (int32_t)__le32_to_cpu(sb->bitmap_offset);
 
        info->disk.major = 0;
        info->disk.minor = 0;
@@ -1651,7 +1651,7 @@ add_internal_bitmap1(struct supertype *st,
                offset = -room;
        }
 
-       sb->bitmap_offset = (long)__cpu_to_le32(offset);
+       sb->bitmap_offset = (int32_t)__cpu_to_le32(offset);
 
        sb->feature_map = __cpu_to_le32(__le32_to_cpu(sb->feature_map)
                                        | MD_FEATURE_BITMAP_OFFSET);