On 03/05/2012 04:59 PM, Ted Ts'o wrote:
On Mon, Jan 09, 2012 at 02:21:48PM +0100, Bernd Schubert wrote:
diff --git a/fs/ext4/hash.c b/fs/ext4/hash.c
index ac8f168..fa8e491 100644
--- a/fs/ext4/hash.c
+++ b/fs/ext4/hash.c
@@ -200,8 +200,8 @@ int ext4fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
return -1;
}
hash = hash& ~1;
- if (hash == (EXT4_HTREE_EOF<< 1))
- hash = (EXT4_HTREE_EOF-1)<< 1;
+ if (hash == (EXT4_HTREE_EOF_32BIT<< 1))
+ hash = (EXT4_HTREE_EOF_32BIT - 1)<< 1;
hinfo->hash = hash;
hinfo->minor_hash = minor_hash;
return 0;
Is there a reason why we don't need to avoid the collsion with the
64-bit EOF value as well? i.e., I think we also need to add:
if (hash == (EXT4_HTREE_EOF_64BIT<< 1))
hash = (EXT4_HTREE_EOF_64BIT - 1)<< 1;
- Ted
Thanks for looking into it, really appreciated!
Yeah, you are right, we also should check for 64-bit EOF. But wouldn't
be something like this be better?
/* check for hash collision */
if(is_32bit_api() ) {
if (hash == (EXT4_HTREE_EOF_32BIT<< 1))
hash = (EXT4_HTREE_EOF_32BIT - 1)<< 1;
} else {
if (hash == (EXT4_HTREE_EOF_64BIT<< 1))
hash = (EXT4_HTREE_EOF_64BIT - 1)<< 1;
}
Or am I over engineering?
Thanks,
Bernd
--
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