On Jul 10, 2009 08:32 -0700, Curt Wohlgemuth wrote: > I apologize if this is a dumb question, but I'm having trouble > understanding the huge_file superblock flag. > > I see how, if this flag is set, that the inode can have a size > 2**32 > bytes, using the i_size_lo/i_size_high fields. Actually, it is RO_COMPAT_LARGE_FILE that indicates support for size larger than 2^32 _bytes_. The RO_COMPAT_HUGE_FILE indicates support for blocks more than 2^32 512-byte _sectors_ (2TB). > But since an ext4_extent only uses 32-bits for for its ee_block field > to represent the logical block, how can an extent describe any block > range of a file past the 4GiB boundary? There are two different mechanisms used with HUGE_FILE. It allows storing a high word of data (2^48 sectors) and it ALSO changes the units to be in terms of filesystem blocksize instead of 512-byte sectors. While both of these mechanisms are not strictly necessary with the current extent format, which only handles 2^32 filesystem blocks, there were some good reasons to make both changes: - having the inode i_blocks field be in 512-byte sectors was confusing to many coders and wasted 3 bits (for 4kB blocks) of dynamic range. - if we ever implement a new extent format that handles more than 2^32 filesystem blocks, or use larger filesystem blocks we don't need to rework this code again. Cheers, Andreas -- Andreas Dilger Sr. Staff Engineer, Lustre Group Sun Microsystems of Canada, Inc. -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html