All of lore.kernel.org
 help / color / mirror / Atom feed
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


      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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.