diff options
author | Zach Brown <zab@redhat.com> | 2013-02-19 19:55:13 -0500 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-02-20 13:00:01 -0500 |
commit | cdb4c5748cb3ac533889a6b0b95aa10651e68785 (patch) | |
tree | 1c1ca874a564e824fd4b824c29a04ed7ec4936a6 /fs/btrfs | |
parent | a8bfd4abea3da0e28f215e2a2b8c2f1ca27ebe80 (diff) |
btrfs: define BTRFS_MAGIC as a u64 value
super.magic is an le64 but it's treated as an unterminated string when
compared against BTRFS_MAGIC which is defined as a string. Instead
define BTRFS_MAGIC as a normal hex value and use endian helpers to
compare it to the super's magic.
I tested this by mounting an fs made before the change and made sure
that it didn't introduce sparse errors. This matches a similar cleanup
that is pending in btrfs-progs. David Sterba pointed out that we should
fix the kernel side as well :).
Signed-off-by: Zach Brown <zab@redhat.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/check-integrity.c | 3 | ||||
-rw-r--r-- | fs/btrfs/ctree.h | 2 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 6 | ||||
-rw-r--r-- | fs/btrfs/volumes.c | 3 |
4 files changed, 5 insertions, 9 deletions
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c index 11d47bfb62b4..18af6f48781a 100644 --- a/fs/btrfs/check-integrity.c +++ b/fs/btrfs/check-integrity.c | |||
@@ -813,8 +813,7 @@ static int btrfsic_process_superblock_dev_mirror( | |||
813 | (bh->b_data + (dev_bytenr & 4095)); | 813 | (bh->b_data + (dev_bytenr & 4095)); |
814 | 814 | ||
815 | if (btrfs_super_bytenr(super_tmp) != dev_bytenr || | 815 | if (btrfs_super_bytenr(super_tmp) != dev_bytenr || |
816 | strncmp((char *)(&(super_tmp->magic)), BTRFS_MAGIC, | 816 | super_tmp->magic != cpu_to_le64(BTRFS_MAGIC) || |
817 | sizeof(super_tmp->magic)) || | ||
818 | memcmp(device->uuid, super_tmp->dev_item.uuid, BTRFS_UUID_SIZE) || | 817 | memcmp(device->uuid, super_tmp->dev_item.uuid, BTRFS_UUID_SIZE) || |
819 | btrfs_super_nodesize(super_tmp) != state->metablock_size || | 818 | btrfs_super_nodesize(super_tmp) != state->metablock_size || |
820 | btrfs_super_leafsize(super_tmp) != state->metablock_size || | 819 | btrfs_super_leafsize(super_tmp) != state->metablock_size || |
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 961ff2986341..1679051f4d39 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -46,7 +46,7 @@ extern struct kmem_cache *btrfs_path_cachep; | |||
46 | extern struct kmem_cache *btrfs_free_space_cachep; | 46 | extern struct kmem_cache *btrfs_free_space_cachep; |
47 | struct btrfs_ordered_sum; | 47 | struct btrfs_ordered_sum; |
48 | 48 | ||
49 | #define BTRFS_MAGIC "_BHRfS_M" | 49 | #define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */ |
50 | 50 | ||
51 | #define BTRFS_MAX_MIRRORS 3 | 51 | #define BTRFS_MAX_MIRRORS 3 |
52 | 52 | ||
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index e511d9f78c19..39ff34a62a24 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2407,8 +2407,7 @@ int open_ctree(struct super_block *sb, | |||
2407 | sb->s_blocksize = sectorsize; | 2407 | sb->s_blocksize = sectorsize; |
2408 | sb->s_blocksize_bits = blksize_bits(sectorsize); | 2408 | sb->s_blocksize_bits = blksize_bits(sectorsize); |
2409 | 2409 | ||
2410 | if (strncmp((char *)(&disk_super->magic), BTRFS_MAGIC, | 2410 | if (disk_super->magic != cpu_to_le64(BTRFS_MAGIC)) { |
2411 | sizeof(disk_super->magic))) { | ||
2412 | printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id); | 2411 | printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id); |
2413 | goto fail_sb_buffer; | 2412 | goto fail_sb_buffer; |
2414 | } | 2413 | } |
@@ -2815,8 +2814,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev) | |||
2815 | 2814 | ||
2816 | super = (struct btrfs_super_block *)bh->b_data; | 2815 | super = (struct btrfs_super_block *)bh->b_data; |
2817 | if (btrfs_super_bytenr(super) != bytenr || | 2816 | if (btrfs_super_bytenr(super) != bytenr || |
2818 | strncmp((char *)(&super->magic), BTRFS_MAGIC, | 2817 | super->magic != cpu_to_le64(BTRFS_MAGIC)) { |
2819 | sizeof(super->magic))) { | ||
2820 | brelse(bh); | 2818 | brelse(bh); |
2821 | continue; | 2819 | continue; |
2822 | } | 2820 | } |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 567076542d1d..72b1cf1b2b5e 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
@@ -855,8 +855,7 @@ int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, | |||
855 | disk_super = p + (bytenr & ~PAGE_CACHE_MASK); | 855 | disk_super = p + (bytenr & ~PAGE_CACHE_MASK); |
856 | 856 | ||
857 | if (btrfs_super_bytenr(disk_super) != bytenr || | 857 | if (btrfs_super_bytenr(disk_super) != bytenr || |
858 | strncmp((char *)(&disk_super->magic), BTRFS_MAGIC, | 858 | disk_super->magic != cpu_to_le64(BTRFS_MAGIC)) |
859 | sizeof(disk_super->magic))) | ||
860 | goto error_unmap; | 859 | goto error_unmap; |
861 | 860 | ||
862 | devid = btrfs_stack_device_id(&disk_super->dev_item); | 861 | devid = btrfs_stack_device_id(&disk_super->dev_item); |