mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	udf: Unify types in anchor block detection
When detecting last recorded block and from it derived anchor block position, we were mixing unsigned long, u32, and sector_t types. Since udf supports only 32-bit block numbers this is harmless but sometimes makes things awkward. Convert everything to udf_pblk_t and also handle the situation when block device size would not fit into udf_pblk_t. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
		
							parent
							
								
									1ea1cd11c7
								
							
						
					
					
						commit
						bd904f3c74
					
				
					 3 changed files with 8 additions and 5 deletions
				
			
		|  | @ -45,7 +45,7 @@ unsigned int udf_get_last_session(struct super_block *sb) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| unsigned long udf_get_last_block(struct super_block *sb) | ||||
| udf_pblk_t udf_get_last_block(struct super_block *sb) | ||||
| { | ||||
| 	struct cdrom_device_info *cdi = disk_to_cdi(sb->s_bdev->bd_disk); | ||||
| 	unsigned long lblock = 0; | ||||
|  | @ -54,8 +54,11 @@ unsigned long udf_get_last_block(struct super_block *sb) | |||
| 	 * The cdrom layer call failed or returned obviously bogus value? | ||||
| 	 * Try using the device size... | ||||
| 	 */ | ||||
| 	if (!cdi || cdrom_get_last_written(cdi, &lblock) || lblock == 0) | ||||
| 	if (!cdi || cdrom_get_last_written(cdi, &lblock) || lblock == 0) { | ||||
| 		if (sb_bdev_nr_blocks(sb) > ~(udf_pblk_t)0) | ||||
| 			return 0; | ||||
| 		lblock = sb_bdev_nr_blocks(sb); | ||||
| 	} | ||||
| 
 | ||||
| 	if (lblock) | ||||
| 		return lblock - 1; | ||||
|  |  | |||
|  | @ -1861,10 +1861,10 @@ static int udf_check_anchor_block(struct super_block *sb, sector_t block, | |||
|  * Returns < 0 on error, 0 on success. -EAGAIN is special - try next set | ||||
|  * of anchors. | ||||
|  */ | ||||
| static int udf_scan_anchors(struct super_block *sb, sector_t *lastblock, | ||||
| static int udf_scan_anchors(struct super_block *sb, udf_pblk_t *lastblock, | ||||
| 			    struct kernel_lb_addr *fileset) | ||||
| { | ||||
| 	sector_t last[6]; | ||||
| 	udf_pblk_t last[6]; | ||||
| 	int i; | ||||
| 	struct udf_sb_info *sbi = UDF_SB(sb); | ||||
| 	int last_count = 0; | ||||
|  |  | |||
|  | @ -196,7 +196,7 @@ extern void udf_new_tag(char *, uint16_t, uint16_t, uint16_t, uint32_t, int); | |||
| 
 | ||||
| /* lowlevel.c */ | ||||
| extern unsigned int udf_get_last_session(struct super_block *); | ||||
| extern unsigned long udf_get_last_block(struct super_block *); | ||||
| udf_pblk_t udf_get_last_block(struct super_block *); | ||||
| 
 | ||||
| /* partition.c */ | ||||
| extern uint32_t udf_get_pblock(struct super_block *, uint32_t, uint16_t, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jan Kara
						Jan Kara