mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									a8bfd4abea
								
							
						
					
					
						commit
						cdb4c5748c
					
				
					 4 changed files with 5 additions and 9 deletions
				
			
		|  | @ -813,8 +813,7 @@ static int btrfsic_process_superblock_dev_mirror( | |||
| 	    (bh->b_data + (dev_bytenr & 4095)); | ||||
| 
 | ||||
| 	if (btrfs_super_bytenr(super_tmp) != dev_bytenr || | ||||
| 	    strncmp((char *)(&(super_tmp->magic)), BTRFS_MAGIC, | ||||
| 		    sizeof(super_tmp->magic)) || | ||||
| 	    super_tmp->magic != cpu_to_le64(BTRFS_MAGIC) || | ||||
| 	    memcmp(device->uuid, super_tmp->dev_item.uuid, BTRFS_UUID_SIZE) || | ||||
| 	    btrfs_super_nodesize(super_tmp) != state->metablock_size || | ||||
| 	    btrfs_super_leafsize(super_tmp) != state->metablock_size || | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ extern struct kmem_cache *btrfs_path_cachep; | |||
| extern struct kmem_cache *btrfs_free_space_cachep; | ||||
| struct btrfs_ordered_sum; | ||||
| 
 | ||||
| #define BTRFS_MAGIC "_BHRfS_M" | ||||
| #define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */ | ||||
| 
 | ||||
| #define BTRFS_MAX_MIRRORS 3 | ||||
| 
 | ||||
|  |  | |||
|  | @ -2407,8 +2407,7 @@ int open_ctree(struct super_block *sb, | |||
| 	sb->s_blocksize = sectorsize; | ||||
| 	sb->s_blocksize_bits = blksize_bits(sectorsize); | ||||
| 
 | ||||
| 	if (strncmp((char *)(&disk_super->magic), BTRFS_MAGIC, | ||||
| 		    sizeof(disk_super->magic))) { | ||||
| 	if (disk_super->magic != cpu_to_le64(BTRFS_MAGIC)) { | ||||
| 		printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id); | ||||
| 		goto fail_sb_buffer; | ||||
| 	} | ||||
|  | @ -2815,8 +2814,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev) | |||
| 
 | ||||
| 		super = (struct btrfs_super_block *)bh->b_data; | ||||
| 		if (btrfs_super_bytenr(super) != bytenr || | ||||
| 		    strncmp((char *)(&super->magic), BTRFS_MAGIC, | ||||
| 			    sizeof(super->magic))) { | ||||
| 		    super->magic != cpu_to_le64(BTRFS_MAGIC)) { | ||||
| 			brelse(bh); | ||||
| 			continue; | ||||
| 		} | ||||
|  |  | |||
|  | @ -855,8 +855,7 @@ int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, | |||
| 	disk_super = p + (bytenr & ~PAGE_CACHE_MASK); | ||||
| 
 | ||||
| 	if (btrfs_super_bytenr(disk_super) != bytenr || | ||||
| 	    strncmp((char *)(&disk_super->magic), BTRFS_MAGIC, | ||||
| 		    sizeof(disk_super->magic))) | ||||
| 	    disk_super->magic != cpu_to_le64(BTRFS_MAGIC)) | ||||
| 		goto error_unmap; | ||||
| 
 | ||||
| 	devid = btrfs_stack_device_id(&disk_super->dev_item); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Zach Brown
						Zach Brown