Commit b7bbf8fa authored by Harvey Harrison's avatar Harvey Harrison Committed by Linus Torvalds

fs: ldm.[ch] use get_unaligned_* helpers

Replace the private BE16/BE32/BE64 macros with direct calls to
get_unaligned_be16/32/64.
Signed-off-by: default avatarHarvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3f307891
...@@ -133,17 +133,17 @@ static bool ldm_parse_privhead(const u8 *data, struct privhead *ph) ...@@ -133,17 +133,17 @@ static bool ldm_parse_privhead(const u8 *data, struct privhead *ph)
bool is_vista = false; bool is_vista = false;
BUG_ON(!data || !ph); BUG_ON(!data || !ph);
if (MAGIC_PRIVHEAD != BE64(data)) { if (MAGIC_PRIVHEAD != get_unaligned_be64(data)) {
ldm_error("Cannot find PRIVHEAD structure. LDM database is" ldm_error("Cannot find PRIVHEAD structure. LDM database is"
" corrupt. Aborting."); " corrupt. Aborting.");
return false; return false;
} }
ph->ver_major = BE16(data + 0x000C); ph->ver_major = get_unaligned_be16(data + 0x000C);
ph->ver_minor = BE16(data + 0x000E); ph->ver_minor = get_unaligned_be16(data + 0x000E);
ph->logical_disk_start = BE64(data + 0x011B); ph->logical_disk_start = get_unaligned_be64(data + 0x011B);
ph->logical_disk_size = BE64(data + 0x0123); ph->logical_disk_size = get_unaligned_be64(data + 0x0123);
ph->config_start = BE64(data + 0x012B); ph->config_start = get_unaligned_be64(data + 0x012B);
ph->config_size = BE64(data + 0x0133); ph->config_size = get_unaligned_be64(data + 0x0133);
/* Version 2.11 is Win2k/XP and version 2.12 is Vista. */ /* Version 2.11 is Win2k/XP and version 2.12 is Vista. */
if (ph->ver_major == 2 && ph->ver_minor == 12) if (ph->ver_major == 2 && ph->ver_minor == 12)
is_vista = true; is_vista = true;
...@@ -191,14 +191,14 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc) ...@@ -191,14 +191,14 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc)
{ {
BUG_ON (!data || !toc); BUG_ON (!data || !toc);
if (MAGIC_TOCBLOCK != BE64 (data)) { if (MAGIC_TOCBLOCK != get_unaligned_be64(data)) {
ldm_crit ("Cannot find TOCBLOCK, database may be corrupt."); ldm_crit ("Cannot find TOCBLOCK, database may be corrupt.");
return false; return false;
} }
strncpy (toc->bitmap1_name, data + 0x24, sizeof (toc->bitmap1_name)); strncpy (toc->bitmap1_name, data + 0x24, sizeof (toc->bitmap1_name));
toc->bitmap1_name[sizeof (toc->bitmap1_name) - 1] = 0; toc->bitmap1_name[sizeof (toc->bitmap1_name) - 1] = 0;
toc->bitmap1_start = BE64 (data + 0x2E); toc->bitmap1_start = get_unaligned_be64(data + 0x2E);
toc->bitmap1_size = BE64 (data + 0x36); toc->bitmap1_size = get_unaligned_be64(data + 0x36);
if (strncmp (toc->bitmap1_name, TOC_BITMAP1, if (strncmp (toc->bitmap1_name, TOC_BITMAP1,
sizeof (toc->bitmap1_name)) != 0) { sizeof (toc->bitmap1_name)) != 0) {
...@@ -208,8 +208,8 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc) ...@@ -208,8 +208,8 @@ static bool ldm_parse_tocblock (const u8 *data, struct tocblock *toc)
} }
strncpy (toc->bitmap2_name, data + 0x46, sizeof (toc->bitmap2_name)); strncpy (toc->bitmap2_name, data + 0x46, sizeof (toc->bitmap2_name));
toc->bitmap2_name[sizeof (toc->bitmap2_name) - 1] = 0; toc->bitmap2_name[sizeof (toc->bitmap2_name) - 1] = 0;
toc->bitmap2_start = BE64 (data + 0x50); toc->bitmap2_start = get_unaligned_be64(data + 0x50);
toc->bitmap2_size = BE64 (data + 0x58); toc->bitmap2_size = get_unaligned_be64(data + 0x58);
if (strncmp (toc->bitmap2_name, TOC_BITMAP2, if (strncmp (toc->bitmap2_name, TOC_BITMAP2,
sizeof (toc->bitmap2_name)) != 0) { sizeof (toc->bitmap2_name)) != 0) {
ldm_crit ("TOCBLOCK's second bitmap is '%s', should be '%s'.", ldm_crit ("TOCBLOCK's second bitmap is '%s', should be '%s'.",
...@@ -237,22 +237,22 @@ static bool ldm_parse_vmdb (const u8 *data, struct vmdb *vm) ...@@ -237,22 +237,22 @@ static bool ldm_parse_vmdb (const u8 *data, struct vmdb *vm)
{ {
BUG_ON (!data || !vm); BUG_ON (!data || !vm);
if (MAGIC_VMDB != BE32 (data)) { if (MAGIC_VMDB != get_unaligned_be32(data)) {
ldm_crit ("Cannot find the VMDB, database may be corrupt."); ldm_crit ("Cannot find the VMDB, database may be corrupt.");
return false; return false;
} }
vm->ver_major = BE16 (data + 0x12); vm->ver_major = get_unaligned_be16(data + 0x12);
vm->ver_minor = BE16 (data + 0x14); vm->ver_minor = get_unaligned_be16(data + 0x14);
if ((vm->ver_major != 4) || (vm->ver_minor != 10)) { if ((vm->ver_major != 4) || (vm->ver_minor != 10)) {
ldm_error ("Expected VMDB version %d.%d, got %d.%d. " ldm_error ("Expected VMDB version %d.%d, got %d.%d. "
"Aborting.", 4, 10, vm->ver_major, vm->ver_minor); "Aborting.", 4, 10, vm->ver_major, vm->ver_minor);
return false; return false;
} }
vm->vblk_size = BE32 (data + 0x08); vm->vblk_size = get_unaligned_be32(data + 0x08);
vm->vblk_offset = BE32 (data + 0x0C); vm->vblk_offset = get_unaligned_be32(data + 0x0C);
vm->last_vblk_seq = BE32 (data + 0x04); vm->last_vblk_seq = get_unaligned_be32(data + 0x04);
ldm_debug ("Parsed VMDB successfully."); ldm_debug ("Parsed VMDB successfully.");
return true; return true;
...@@ -507,7 +507,7 @@ static bool ldm_validate_vmdb (struct block_device *bdev, unsigned long base, ...@@ -507,7 +507,7 @@ static bool ldm_validate_vmdb (struct block_device *bdev, unsigned long base,
goto out; /* Already logged */ goto out; /* Already logged */
/* Are there uncommitted transactions? */ /* Are there uncommitted transactions? */
if (BE16(data + 0x10) != 0x01) { if (get_unaligned_be16(data + 0x10) != 0x01) {
ldm_crit ("Database is not in a consistent state. Aborting."); ldm_crit ("Database is not in a consistent state. Aborting.");
goto out; goto out;
} }
...@@ -802,7 +802,7 @@ static bool ldm_parse_cmp3 (const u8 *buffer, int buflen, struct vblk *vb) ...@@ -802,7 +802,7 @@ static bool ldm_parse_cmp3 (const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
len += VBLK_SIZE_CMP3; len += VBLK_SIZE_CMP3;
if (len != BE32 (buffer + 0x14)) if (len != get_unaligned_be32(buffer + 0x14))
return false; return false;
comp = &vb->vblk.comp; comp = &vb->vblk.comp;
...@@ -851,7 +851,7 @@ static int ldm_parse_dgr3 (const u8 *buffer, int buflen, struct vblk *vb) ...@@ -851,7 +851,7 @@ static int ldm_parse_dgr3 (const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
len += VBLK_SIZE_DGR3; len += VBLK_SIZE_DGR3;
if (len != BE32 (buffer + 0x14)) if (len != get_unaligned_be32(buffer + 0x14))
return false; return false;
dgrp = &vb->vblk.dgrp; dgrp = &vb->vblk.dgrp;
...@@ -895,7 +895,7 @@ static bool ldm_parse_dgr4 (const u8 *buffer, int buflen, struct vblk *vb) ...@@ -895,7 +895,7 @@ static bool ldm_parse_dgr4 (const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
len += VBLK_SIZE_DGR4; len += VBLK_SIZE_DGR4;
if (len != BE32 (buffer + 0x14)) if (len != get_unaligned_be32(buffer + 0x14))
return false; return false;
dgrp = &vb->vblk.dgrp; dgrp = &vb->vblk.dgrp;
...@@ -931,7 +931,7 @@ static bool ldm_parse_dsk3 (const u8 *buffer, int buflen, struct vblk *vb) ...@@ -931,7 +931,7 @@ static bool ldm_parse_dsk3 (const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
len += VBLK_SIZE_DSK3; len += VBLK_SIZE_DSK3;
if (len != BE32 (buffer + 0x14)) if (len != get_unaligned_be32(buffer + 0x14))
return false; return false;
disk = &vb->vblk.disk; disk = &vb->vblk.disk;
...@@ -968,7 +968,7 @@ static bool ldm_parse_dsk4 (const u8 *buffer, int buflen, struct vblk *vb) ...@@ -968,7 +968,7 @@ static bool ldm_parse_dsk4 (const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
len += VBLK_SIZE_DSK4; len += VBLK_SIZE_DSK4;
if (len != BE32 (buffer + 0x14)) if (len != get_unaligned_be32(buffer + 0x14))
return false; return false;
disk = &vb->vblk.disk; disk = &vb->vblk.disk;
...@@ -1034,14 +1034,14 @@ static bool ldm_parse_prt3(const u8 *buffer, int buflen, struct vblk *vb) ...@@ -1034,14 +1034,14 @@ static bool ldm_parse_prt3(const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
} }
len += VBLK_SIZE_PRT3; len += VBLK_SIZE_PRT3;
if (len > BE32(buffer + 0x14)) { if (len > get_unaligned_be32(buffer + 0x14)) {
ldm_error("len %d > BE32(buffer + 0x14) %d", len, ldm_error("len %d > BE32(buffer + 0x14) %d", len,
BE32(buffer + 0x14)); get_unaligned_be32(buffer + 0x14));
return false; return false;
} }
part = &vb->vblk.part; part = &vb->vblk.part;
part->start = BE64(buffer + 0x24 + r_name); part->start = get_unaligned_be64(buffer + 0x24 + r_name);
part->volume_offset = BE64(buffer + 0x2C + r_name); part->volume_offset = get_unaligned_be64(buffer + 0x2C + r_name);
part->size = ldm_get_vnum(buffer + 0x34 + r_name); part->size = ldm_get_vnum(buffer + 0x34 + r_name);
part->parent_id = ldm_get_vnum(buffer + 0x34 + r_size); part->parent_id = ldm_get_vnum(buffer + 0x34 + r_size);
part->disk_id = ldm_get_vnum(buffer + 0x34 + r_parent); part->disk_id = ldm_get_vnum(buffer + 0x34 + r_parent);
...@@ -1139,9 +1139,9 @@ static bool ldm_parse_vol5(const u8 *buffer, int buflen, struct vblk *vb) ...@@ -1139,9 +1139,9 @@ static bool ldm_parse_vol5(const u8 *buffer, int buflen, struct vblk *vb)
return false; return false;
} }
len += VBLK_SIZE_VOL5; len += VBLK_SIZE_VOL5;
if (len > BE32(buffer + 0x14)) { if (len > get_unaligned_be32(buffer + 0x14)) {
ldm_error("len %d > BE32(buffer + 0x14) %d", len, ldm_error("len %d > BE32(buffer + 0x14) %d", len,
BE32(buffer + 0x14)); get_unaligned_be32(buffer + 0x14));
return false; return false;
} }
volu = &vb->vblk.volu; volu = &vb->vblk.volu;
...@@ -1294,9 +1294,9 @@ static bool ldm_frag_add (const u8 *data, int size, struct list_head *frags) ...@@ -1294,9 +1294,9 @@ static bool ldm_frag_add (const u8 *data, int size, struct list_head *frags)
BUG_ON (!data || !frags); BUG_ON (!data || !frags);
group = BE32 (data + 0x08); group = get_unaligned_be32(data + 0x08);
rec = BE16 (data + 0x0C); rec = get_unaligned_be16(data + 0x0C);
num = BE16 (data + 0x0E); num = get_unaligned_be16(data + 0x0E);
if ((num < 1) || (num > 4)) { if ((num < 1) || (num > 4)) {
ldm_error ("A VBLK claims to have %d parts.", num); ldm_error ("A VBLK claims to have %d parts.", num);
return false; return false;
...@@ -1425,12 +1425,12 @@ static bool ldm_get_vblks (struct block_device *bdev, unsigned long base, ...@@ -1425,12 +1425,12 @@ static bool ldm_get_vblks (struct block_device *bdev, unsigned long base,
} }
for (v = 0; v < perbuf; v++, data+=size) { /* For each vblk */ for (v = 0; v < perbuf; v++, data+=size) { /* For each vblk */
if (MAGIC_VBLK != BE32 (data)) { if (MAGIC_VBLK != get_unaligned_be32(data)) {
ldm_error ("Expected to find a VBLK."); ldm_error ("Expected to find a VBLK.");
goto out; goto out;
} }
recs = BE16 (data + 0x0E); /* Number of records */ recs = get_unaligned_be16(data + 0x0E); /* Number of records */
if (recs == 1) { if (recs == 1) {
if (!ldm_ldmdb_add (data, size, ldb)) if (!ldm_ldmdb_add (data, size, ldb))
goto out; /* Already logged */ goto out; /* Already logged */
......
...@@ -98,11 +98,6 @@ struct parsed_partitions; ...@@ -98,11 +98,6 @@ struct parsed_partitions;
#define TOC_BITMAP1 "config" /* Names of the two defined */ #define TOC_BITMAP1 "config" /* Names of the two defined */
#define TOC_BITMAP2 "log" /* bitmaps in the TOCBLOCK. */ #define TOC_BITMAP2 "log" /* bitmaps in the TOCBLOCK. */
/* Most numbers we deal with are big-endian and won't be aligned. */
#define BE16(x) ((u16)be16_to_cpu(get_unaligned((__be16*)(x))))
#define BE32(x) ((u32)be32_to_cpu(get_unaligned((__be32*)(x))))
#define BE64(x) ((u64)be64_to_cpu(get_unaligned((__be64*)(x))))
/* Borrowed from msdos.c */ /* Borrowed from msdos.c */
#define SYS_IND(p) (get_unaligned(&(p)->sys_ind)) #define SYS_IND(p) (get_unaligned(&(p)->sys_ind))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment