From: Gao Xiang <xiang@kernel.org>
To: Jingbo Xu <jefflexu@linux.alibaba.com>
Cc: hsiangkao@linux.alibaba.com, linux-erofs@lists.ozlabs.org
Subject: Re: [PATCH v7 0/3] erofs-utils: introduce xattr name bloom filter
Date: Wed, 30 Aug 2023 02:07:35 +0800 [thread overview]
Message-ID: <ZO4z5/l3bVC6aE+8@debian> (raw)
In-Reply-To: <20230829145504.93567-1-jefflexu@linux.alibaba.com>
On Tue, Aug 29, 2023 at 10:55:01PM +0800, Jingbo Xu wrote:
> changes since v6:
> - patch 1: polish license disclaimer; tweak included headers (Gao Xiang)
> - patch 2: drop unused `EROFS_XATTR_NAME_LEN_MAX`; polish commit message
> (Gao Xiang)
> - patch 3: add warning when failed to calculate hashbit; tweak code of
> assigning `header->h_name_filter` (Gao Xiang)
>
Applied with several update by hand, also I tend to append the following
patch:
From 3142cab6c82a779096abbd24d8bd1b9b555997ac Mon Sep 17 00:00:00 2001
From: Gao Xiang <hsiangkao@linux.alibaba.com>
Date: Wed, 30 Aug 2023 01:54:46 +0800
Subject: [PATCH] erofs-utils: mkfs: enable xattr name filter feature by
default
Turn it on by default since it's a compatible feature. Instead,
it can be disabled explicitly with "-E^xattr-name-filter".
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
---
include/erofs/xattr.h | 2 +-
lib/inode.c | 4 ++--
lib/xattr.c | 6 +++++-
mkfs/main.c | 13 +++++++++++--
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/include/erofs/xattr.h b/include/erofs/xattr.h
index 748442a..cf02257 100644
--- a/include/erofs/xattr.h
+++ b/include/erofs/xattr.h
@@ -76,7 +76,7 @@ static inline unsigned int xattrblock_offset(struct erofs_inode *vi,
int erofs_scan_file_xattrs(struct erofs_inode *inode);
int erofs_prepare_xattr_ibody(struct erofs_inode *inode);
-char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int size);
+char *erofs_export_xattr_ibody(struct erofs_inode *inode);
int erofs_build_shared_xattrs_from_path(struct erofs_sb_info *sbi, const char *path);
int erofs_xattr_insert_name_prefix(const char *prefix);
diff --git a/lib/inode.c b/lib/inode.c
index d54f84f..85eacab 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -574,8 +574,8 @@ static bool erofs_bh_flush_write_inode(struct erofs_buffer_head *bh)
off += inode->inode_isize;
if (inode->xattr_isize) {
- char *xattrs = erofs_export_xattr_ibody(&inode->i_xattrs,
- inode->xattr_isize);
+ char *xattrs = erofs_export_xattr_ibody(inode);
+
if (IS_ERR(xattrs))
return false;
diff --git a/lib/xattr.c b/lib/xattr.c
index 65dd9a0..0cab29f 100644
--- a/lib/xattr.c
+++ b/lib/xattr.c
@@ -843,8 +843,10 @@ static u32 erofs_xattr_filter_map(struct list_head *ixattrs)
return EROFS_XATTR_FILTER_DEFAULT & ~name_filter;
}
-char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int size)
+char *erofs_export_xattr_ibody(struct erofs_inode *inode)
{
+ struct list_head *ixattrs = &inode->i_xattrs;
+ unsigned int size = inode->xattr_isize;
struct inode_xattr_node *node, *n;
struct erofs_xattr_ibody_header *header;
LIST_HEAD(ilst);
@@ -860,6 +862,8 @@ char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int size)
if (cfg.c_xattr_name_filter) {
header->h_name_filter =
cpu_to_le32(erofs_xattr_filter_map(ixattrs));
+ if (header->h_name_filter)
+ erofs_sb_set_xattr_filter(inode->sbi);
}
p = sizeof(struct erofs_xattr_ibody_header);
diff --git a/mkfs/main.c b/mkfs/main.c
index fad80b1..1d136a9 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -145,6 +145,7 @@ static int parse_extended_opts(const char *opts)
value = NULL;
for (token = opts; *token != '\0'; token = next) {
+ bool clear = false;
const char *p = strchr(token, ',');
next = NULL;
@@ -168,6 +169,14 @@ static int parse_extended_opts(const char *opts)
vallen = 0;
}
+ if (token[0] == '^') {
+ if (keylen < 2)
+ return -EINVAL;
+ ++token;
+ --keylen;
+ clear = true;
+ }
+
if (MATCH_EXTENTED_OPT("legacy-compress", token, keylen)) {
if (vallen)
return -EINVAL;
@@ -249,8 +258,7 @@ handle_fragment:
if (MATCH_EXTENTED_OPT("xattr-name-filter", token, keylen)) {
if (vallen)
return -EINVAL;
- cfg.c_xattr_name_filter = true;
- erofs_sb_set_xattr_filter(&sbi);
+ cfg.c_xattr_name_filter = !clear;
}
}
return 0;
@@ -695,6 +703,7 @@ static void erofs_mkfs_default_options(void)
{
cfg.c_showprogress = true;
cfg.c_legacy_compress = false;
+ cfg.c_xattr_name_filter = true;
sbi.blkszbits = ilog2(EROFS_MAX_BLOCK_SIZE);
sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING;
sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM |
--
2.30.2
prev parent reply other threads:[~2023-08-29 18:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-29 14:55 [PATCH v7 0/3] erofs-utils: introduce xattr name bloom filter Jingbo Xu
2023-08-29 14:55 ` [PATCH v7 1/3] erofs-utils: add xxh32 library Jingbo Xu
2023-08-29 14:55 ` [PATCH v7 2/3] erofs-utils: update on-disk format for xattr name filter Jingbo Xu
2023-08-29 14:55 ` [PATCH v7 3/3] erofs-utils: mkfs: enable " Jingbo Xu
2023-08-29 18:07 ` Gao Xiang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZO4z5/l3bVC6aE+8@debian \
--to=xiang@kernel.org \
--cc=hsiangkao@linux.alibaba.com \
--cc=jefflexu@linux.alibaba.com \
--cc=linux-erofs@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox