BACKPORT: f2fs: support to disable linear lookup fallback
After commit 91b587ba79e1 ("f2fs: Introduce linear search for
dentries"), f2fs forced to use linear lookup whenever a hash-based
lookup fails on casefolded directory, it may affect performance
for scenarios: a) create a new file w/ filename it doesn't exist
in directory, b) lookup a file which may be removed.
This patch supports to disable linear lookup fallback, so, once there
is a solution for commit 5c26d2f1d3 ("unicode: Don't special case
ignorable code points") to fix red heart unicode issue, then we can
set an encodeing flag to disable the fallback for performance recovery.
The way is kept in line w/ ext4, refer to commit 9e28059d5664 ("ext4:
introduce linear search for dentries").
Cc: Daniel Lee <chullee@google.com>
Cc: Gabriel Krisman Bertazi <krisman@suse.de>
Change-Id: I8f93a8432a16cb9f25309e3afc021f50edc95c2d
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
(cherry picked from commit aa00c6d5d05a80ef5946984025c25ab231b722f9)
This commit is contained in:
@@ -366,7 +366,8 @@ start_find_entry:
|
||||
|
||||
out:
|
||||
#if IS_ENABLED(CONFIG_UNICODE)
|
||||
if (IS_CASEFOLDED(dir) && !de && use_hash) {
|
||||
if (!sb_no_casefold_compat_fallback(dir->i_sb) &&
|
||||
IS_CASEFOLDED(dir) && !de && use_hash) {
|
||||
use_hash = false;
|
||||
goto start_find_entry;
|
||||
}
|
||||
|
||||
@@ -1200,11 +1200,19 @@ extern int send_sigurg(struct file *file);
|
||||
#define SB_NOUSER BIT(31)
|
||||
|
||||
/* These flags relate to encoding and casefolding */
|
||||
#define SB_ENC_STRICT_MODE_FL (1 << 0)
|
||||
#define SB_ENC_STRICT_MODE_FL (1 << 0)
|
||||
#define SB_ENC_NO_COMPAT_FALLBACK_FL (1 << 1)
|
||||
|
||||
#define sb_has_strict_encoding(sb) \
|
||||
(sb->s_encoding_flags & SB_ENC_STRICT_MODE_FL)
|
||||
|
||||
#if IS_ENABLED(CONFIG_UNICODE)
|
||||
#define sb_no_casefold_compat_fallback(sb) \
|
||||
(sb->s_encoding_flags & SB_ENC_NO_COMPAT_FALLBACK_FL)
|
||||
#else
|
||||
#define sb_no_casefold_compat_fallback(sb) (1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Umount options
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user