diff options
| author | Christoph Hellwig <hch@tuxera.com> | 2011-02-16 03:34:26 -0500 |
|---|---|---|
| committer | Christoph Hellwig <hch@lst.de> | 2011-06-30 07:40:59 -0400 |
| commit | c6d5f5fa658f2569a7baaff5acda261a1316cee9 (patch) | |
| tree | 1e7e03558a9229e8fc3aaec450ffa8049a08c96b | |
| parent | 4ba2d5fdcfd19de0dedf394ddc48db2f219fa89a (diff) | |
hfsplus: lift the 2TB size limit
Replace the hardcoded 2TB limit with a dynamic limit based on the block
size now that we have fixed the few overflows preventing operation
with large volumes.
Signed-off-by: Christoph Hellwig <hch@tuxera.com>
| -rw-r--r-- | fs/hfsplus/super.c | 9 | ||||
| -rw-r--r-- | fs/hfsplus/wrapper.c | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index 84a47b709f51..acaef57e3606 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c | |||
| @@ -393,6 +393,13 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent) | |||
| 393 | if (!sbi->rsrc_clump_blocks) | 393 | if (!sbi->rsrc_clump_blocks) |
| 394 | sbi->rsrc_clump_blocks = 1; | 394 | sbi->rsrc_clump_blocks = 1; |
| 395 | 395 | ||
| 396 | err = generic_check_addressable(sbi->alloc_blksz_shift, | ||
| 397 | sbi->total_blocks); | ||
| 398 | if (err) { | ||
| 399 | printk(KERN_ERR "hfs: filesystem size too large.\n"); | ||
| 400 | goto out_free_vhdr; | ||
| 401 | } | ||
| 402 | |||
| 396 | /* Set up operations so we can load metadata */ | 403 | /* Set up operations so we can load metadata */ |
| 397 | sb->s_op = &hfsplus_sops; | 404 | sb->s_op = &hfsplus_sops; |
| 398 | sb->s_maxbytes = MAX_LFS_FILESIZE; | 405 | sb->s_maxbytes = MAX_LFS_FILESIZE; |
| @@ -417,6 +424,8 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent) | |||
| 417 | sb->s_flags |= MS_RDONLY; | 424 | sb->s_flags |= MS_RDONLY; |
| 418 | } | 425 | } |
| 419 | 426 | ||
| 427 | err = -EINVAL; | ||
| 428 | |||
| 420 | /* Load metadata objects (B*Trees) */ | 429 | /* Load metadata objects (B*Trees) */ |
| 421 | sbi->ext_tree = hfs_btree_open(sb, HFSPLUS_EXT_CNID); | 430 | sbi->ext_tree = hfs_btree_open(sb, HFSPLUS_EXT_CNID); |
| 422 | if (!sbi->ext_tree) { | 431 | if (!sbi->ext_tree) { |
diff --git a/fs/hfsplus/wrapper.c b/fs/hfsplus/wrapper.c index 4b86468125c1..2f933e83f5c5 100644 --- a/fs/hfsplus/wrapper.c +++ b/fs/hfsplus/wrapper.c | |||
| @@ -141,10 +141,6 @@ int hfsplus_read_wrapper(struct super_block *sb) | |||
| 141 | 141 | ||
| 142 | if (hfsplus_get_last_session(sb, &part_start, &part_size)) | 142 | if (hfsplus_get_last_session(sb, &part_start, &part_size)) |
| 143 | goto out; | 143 | goto out; |
| 144 | if ((u64)part_start + part_size > 0x100000000ULL) { | ||
| 145 | pr_err("hfs: volumes larger than 2TB are not supported yet\n"); | ||
| 146 | goto out; | ||
| 147 | } | ||
| 148 | 144 | ||
| 149 | error = -ENOMEM; | 145 | error = -ENOMEM; |
| 150 | sbi->s_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL); | 146 | sbi->s_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL); |
