Re: [PATCH 9/9]ext4 super block changes for >32 bit blocks numbers

Mingming Cao <[email protected]> Thu, 10 Aug 2006 10:28:31 -0700
Newsgroups gmane.linux.file-systems,gmane.linux.kernel,gmane.comp.file-systems.ext2.devel
Message-ID <[email protected]>
Andrew Morton wrote:

> On Wed, 09 Aug 2006 18:22:25 -0700
> Mingming Cao <[email protected]> wrote:
> 
> 
>>In-kernel and on-disk super block changes to support >32 bit blocks numbers.
>>
>>+static inline u32 EXT4_RELATIVE_ENCODE(ext4_fsblk_t group_base,
>>+				       ext4_fsblk_t fs_block)
>>+{
>>+	s32 gdp_block;
>>+
>>+	if (fs_block < (1ULL<<32) && group_base < (1ULL<<32))
>>+		return fs_block;
>>+
>>+	gdp_block = (fs_block - group_base);
>>+	BUG_ON ((group_base + gdp_block) != fs_block);
>>+
>>+	return gdp_block;
>>+}
>>+
>>+static inline ext4_fsblk_t EXT4_RELATIVE_DECODE(ext4_fsblk_t group_base,
>>+						u32 gdp_block)
>>+{
>>+	if (group_base >= (1ULL<<32))
>>+		return group_base + (s32) gdp_block;
>>+
>>+	if ((s32) gdp_block >= 0 && gdp_block < group_base &&
>>+		  group_base + gdp_block >= (1ULL<<32))
>>+		return group_base + gdp_block;
>>+
>>+	return gdp_block;
>>+}
> 
> 
> These seem far too large and far too commonly called to be inlined.
> 
> 
>> 
>>+
>>+#define EXT4_BLOCKS_COUNT(s)	\
>>+	(ext4_fsblk_t)(((__u64)le32_to_cpu((s)->s_blocks_count_hi) << 32) |	\
>>+	 	(__u64)le32_to_cpu((s)->s_blocks_count))
>>+#define EXT4_BLOCKS_COUNT_SET(s,v)	do {				\
>>+	(s)->s_blocks_count = cpu_to_le32((v));				\
>>+	(s)->s_blocks_count_hi = cpu_to_le32(((__u64)(v)) >> 32);	\
>>+} while (0)
>>+
>>+#define EXT4_R_BLOCKS_COUNT(s)	\
>>+	(ext4_fsblk_t)(((__u64)le32_to_cpu((s)->s_r_blocks_count_hi) << 32) |	\
>>+		 (__u64)le32_to_cpu((s)->s_r_blocks_count))
>>+#define EXT4_R_BLOCKS_COUNT_SET(s,v)	do {				\
>>+	(s)->s_r_blocks_count = cpu_to_le32((v));			\
>>+	(s)->s_r_blocks_count_hi = cpu_to_le32(((__u64)(v)) >> 32);	\
>>+} while (0)
>>+
>>+#define EXT4_FREE_BLOCKS_COUNT(s)					\
>>+	(ext4_fsblk_t)(((__u64)le32_to_cpu((s)->s_free_blocks_count_hi) << 32) | \
>>+		 (__u64)le32_to_cpu((s)->s_free_blocks_count))
>>+#define EXT4_FREE_BLOCKS_COUNT_SET(s,v)	do {				\
>>+	(s)->s_free_blocks_count = cpu_to_le32((v));			\
>>+	(s)->s_free_blocks_count_hi = cpu_to_le32(((__u64)(v)) >> 32);	\
>>+} while (0)
> 
> 
> Can these not be implemented as C functions?
> 
Okay, I will work with Laurent/Alex to fix this.:)

Mingming

-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html