diff options
Diffstat (limited to 'fs/udf/lowlevel.c')
| -rw-r--r-- | fs/udf/lowlevel.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/udf/lowlevel.c b/fs/udf/lowlevel.c index 46d697172197..c87ed942d076 100644 --- a/fs/udf/lowlevel.c +++ b/fs/udf/lowlevel.c @@ -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;  |