From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 2/3] hfsplus: lift the 2TB size limit Date: Tue, 15 Feb 2011 14:14:51 +0100 Message-ID: <20110215131451.GC6720@lst.de> References: <20110215131433.GA6720@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii To: linux-fsdevel@vger.kernel.org Return-path: Received: from verein.lst.de ([213.95.11.210]:59059 "EHLO verein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751197Ab1BONOw (ORCPT ); Tue, 15 Feb 2011 08:14:52 -0500 Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id p1FDEpE5006760 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 15 Feb 2011 14:14:51 +0100 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-7.2) id p1FDEp4s006759 for linux-fsdevel@vger.kernel.org; Tue, 15 Feb 2011 14:14:51 +0100 Content-Disposition: inline In-Reply-To: <20110215131433.GA6720@lst.de> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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 Index: linux-2.6/fs/hfsplus/super.c =================================================================== --- linux-2.6.orig/fs/hfsplus/super.c 2011-02-15 13:45:06.292423835 +0100 +++ linux-2.6/fs/hfsplus/super.c 2011-02-15 13:54:53.598943828 +0100 @@ -393,6 +393,13 @@ static int hfsplus_fill_super(struct sup if (!sbi->rsrc_clump_blocks) sbi->rsrc_clump_blocks = 1; + err = generic_check_addressable(sbi->alloc_blksz_shift, + sbi->total_blocks); + if (err) { + printk(KERN_ERR "hfs: filesystem size too large.\n"); + goto out_free_vhdr; + } + /* Set up operations so we can load metadata */ sb->s_op = &hfsplus_sops; sb->s_maxbytes = MAX_LFS_FILESIZE; @@ -417,6 +424,8 @@ static int hfsplus_fill_super(struct sup sb->s_flags |= MS_RDONLY; } + err = -EINVAL; + /* Load metadata objects (B*Trees) */ sbi->ext_tree = hfs_btree_open(sb, HFSPLUS_EXT_CNID); if (!sbi->ext_tree) { Index: linux-2.6/fs/hfsplus/wrapper.c =================================================================== --- linux-2.6.orig/fs/hfsplus/wrapper.c 2011-02-15 13:44:44.208420508 +0100 +++ linux-2.6/fs/hfsplus/wrapper.c 2011-02-15 13:45:03.883421555 +0100 @@ -138,10 +138,6 @@ int hfsplus_read_wrapper(struct super_bl if (hfsplus_get_last_session(sb, &part_start, &part_size)) goto out; - if ((u64)part_start + part_size > 0x100000000ULL) { - pr_err("hfs: volumes larger than 2TB are not supported yet\n"); - goto out; - } error = -ENOMEM; sbi->s_vhdr = kmalloc(HFSPLUS_SECTOR_SIZE, GFP_KERNEL);