super1: fix some casts of signed superblock fields.

These need to be cast to uint32_t before being cast to 'long', else
sign extension doesn't happen on 64bit hosts.

And bitmap_offset is le32, not le64 !!

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2013-05-28 16:43:03 +10:00
parent 5e1863d49d
commit d6e4b44fdb
1 changed files with 2 additions and 2 deletions

View File

@ -404,7 +404,7 @@ static void examine_super1(struct supertype *st, char *homehost)
if (sb->bblog_size && sb->bblog_offset) {
printf(" Bad Block Log : %d entries available at offset %ld sectors",
__le16_to_cpu(sb->bblog_size)*512/8,
(long)__le32_to_cpu(sb->bblog_offset));
(long)(int32_t)__le32_to_cpu(sb->bblog_offset));
if (sb->feature_map &
__cpu_to_le32(MD_FEATURE_BAD_BLOCKS))
printf(" - bad blocks present.");
@ -1182,7 +1182,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
*/
unsigned long long sb_offset = __le64_to_cpu(sb->super_offset);
unsigned long long data_offset = __le64_to_cpu(sb->data_offset);
long bitmap_offset = (long)__le64_to_cpu(sb->bitmap_offset);
long bitmap_offset = (long)(int32_t)__le32_to_cpu(sb->bitmap_offset);
long bm_sectors = 0;
long space;