ext4: return 32/64-bit dir name hash according to usage type
Traditionally ext2/3/4 has returned a 32-bit hash value from llseek() to appease NFSv2, which can only handle a 32-bit cookie for seekdir() and telldir(). However, this causes problems if there are 32-bit hash collisions, since the NFSv2 server can get stuck resending the same entries from the directory repeatedly. Allow ext4 to return a full 64-bit hash (both major and minor) for telldir to decrease the chance of hash collisions. This still needs integration on the NFS side. Patch-updated-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de> (blame me if something is not correct) Signed-off-by: Fan Yong <yong.fan@whamcloud.com> Signed-off-by: Andreas Dilger <adilger@whamcloud.com> Signed-off-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
@@ -1612,7 +1612,11 @@ struct dx_hash_info
|
||||
u32 *seed;
|
||||
};
|
||||
|
||||
#define EXT4_HTREE_EOF 0x7fffffff
|
||||
|
||||
/* 32 and 64 bit signed EOF for dx directories */
|
||||
#define EXT4_HTREE_EOF_32BIT ((1UL << (32 - 1)) - 1)
|
||||
#define EXT4_HTREE_EOF_64BIT ((1ULL << (64 - 1)) - 1)
|
||||
|
||||
|
||||
/*
|
||||
* Control parameters used by ext4_htree_next_block
|
||||
|
Reference in New Issue
Block a user