diff options
author | Jingbo Xu <jefflexu@linux.alibaba.com> | 2023-07-22 11:45:38 +0200 |
---|---|---|
committer | Gao Xiang <hsiangkao@linux.alibaba.com> | 2023-08-11 06:11:44 +0200 |
commit | fd73a4395d477ae134f319f7368a9f8a6264fd8b (patch) | |
tree | 1cac2d7b88971fa8513ac6454cbe0bc6770d5df7 /fs/erofs/super.c | |
parent | erofs: update on-disk format for xattr name filter (diff) | |
download | linux-fd73a4395d477ae134f319f7368a9f8a6264fd8b.tar.xz linux-fd73a4395d477ae134f319f7368a9f8a6264fd8b.zip |
erofs: boost negative xattr lookup with bloom filter
Optimise the negative xattr lookup with bloom filter.
The bit value for the bloom filter map has a reverse semantics for
compatibility. That is, the bit value of 0 indicates existence, while
the bit value of 1 indicates the absence of corresponding xattr.
The initial version is _only_ enabled when xattr_filter_reserved is
zero. The filter map internals may change in the future, in which case
the reserved flag will be set non-zero and we don't need bothering the
compatible bits again at that time. For now disable the optimization if
this reserved flag is non-zero.
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20230722094538.11754-3-jefflexu@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Diffstat (limited to 'fs/erofs/super.c')
-rw-r--r-- | fs/erofs/super.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/erofs/super.c b/fs/erofs/super.c index 3275505059cc..3d04cc33a6b8 100644 --- a/fs/erofs/super.c +++ b/fs/erofs/super.c @@ -391,6 +391,7 @@ static int erofs_read_superblock(struct super_block *sb) sbi->xattr_blkaddr = le32_to_cpu(dsb->xattr_blkaddr); sbi->xattr_prefix_start = le32_to_cpu(dsb->xattr_prefix_start); sbi->xattr_prefix_count = dsb->xattr_prefix_count; + sbi->xattr_filter_reserved = dsb->xattr_filter_reserved; #endif sbi->islotbits = ilog2(sizeof(struct erofs_inode_compact)); sbi->root_nid = le16_to_cpu(dsb->root_nid); |