All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: linux-ext4 <linux-ext4@vger.kernel.org>
Cc: Mingming Cao <cmm@us.ibm.com>
Subject: max file size for ext3
Date: Wed, 10 Oct 2007 11:05:59 +0530	[thread overview]
Message-ID: <470C64BF.509@linux.vnet.ibm.com> (raw)

Hi,

I am looking at ext4_max_size and was confused how the
number upper_limit = 0x1ff7fffd000LL is arrived. 
The comment says the value is arrived looking at 4K.
So i tried the below program. 

main()
{
	unsigned long long upper_limit, meta_blocks;
	int bits = 12;

	/* total blocks in 512 bytes */
	upper_limit = (1LL << 32) - 1;
	/* total blocks in file system block size */
	upper_limit >>= (bits - 9);


	meta_blocks = 1;
	/* double indirect blocks */
	meta_blocks += 1 + 1LL << (bits-2);
	/* tripple indirect blocks */
	meta_blocks += 1 + 1LL << (bits-2) + 1LL << (2*(bits-2));

	upper_limit -= meta_blocks;
	upper_limit <<= bits;

	printf("%x\n", upper_limit);
}

Can somebody help me to find out what is missing in the above ?



I also think hardcoding 4k block size is not correct. I have the below
patch pending with large file size.

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 2083c19..9f39cfb 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1511,6 +1511,7 @@ static void ext4_orphan_cleanup (struct super_block * sb,
 static loff_t ext4_max_size(int bits, struct super_block *sb)
 {
 	loff_t res = EXT4_NDIR_BLOCKS;
+	loff_t total_meta_blocks;
 	/* This constant is calculated to be the largest file size for a
 	 * dense, 4k-blocksize file such that the total number of
 	 * sectors in the file, including data and all indirect blocks,
@@ -1518,11 +1519,34 @@ static loff_t ext4_max_size(int bits, struct super_block *sb)
 	loff_t upper_limit;
 
 	if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_LARGE_BLOCK)) {
-		/* FIXME!! */
-		upper_limit = (1LL << (bits + 32)) - 1;
+		/*
+		 * With __u32 i_blocks representing the total number of blocks
+		 * of the file in file system block size, the max file size
+		 * would be  2**(32) - 1 - blocks taken by the meta data
+		 * blocks multiplied by block size.
+		 */
+		/* total blocks in file system block size*/
+		upper_limit = (1LL << 32) - 1;
+
 	} else {
-		upper_limit = 0x1ff7fffd000LL;
+		/* total blocks in 512 bytes */
+		upper_limit = (1LL << 32) - 1;
+		/* total blocks in file system block size */
+		upper_limit >>= (bits - 9);
+
+		//upper_limit = 0x1ff7fffd000LL;
 	}
+
+	/* indirect blocks */
+	meta_blocks = 1;
+	/* double indirect blocks */
+	meta_blocks += 1 + 1LL << (bits-2);
+	/* tripple indirect blocks */
+	meta_blocks += 1 + 1LL << (bits-2) + 1LL << (2*(bits-2));
+
+	upper_limit -= meta_blocks;
+	upper_limit <<= bits;
+
 	res += 1LL << (bits-2);
 	res += 1LL << (2*(bits-2));
 	res += 1LL << (3*(bits-2));

             reply	other threads:[~2007-10-10  5:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-10  5:35 Aneesh Kumar K.V [this message]
2007-10-10  6:19 ` max file size for ext3 Aneesh Kumar K.V
2007-10-10 13:00 ` Eric Sandeen
2007-10-10 22:17 ` Jan Kara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=470C64BF.509@linux.vnet.ibm.com \
    --to=aneesh.kumar@linux.vnet.ibm.com \
    --cc=cmm@us.ibm.com \
    --cc=linux-ext4@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.