From: Luis Henriques <luis@igalia.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
Chen Linxuan <me@black-desk.cn>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
fuse-devel@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Matt Harvey <mharvey@jumptrading.com>,
kernel-dev@igalia.com
Subject: Re: [RFC PATCH v3 7/8] selftests/fuse: add fuse symlink caching test
Date: Mon, 07 Sep 2026 11:58:29 +0100 [thread overview]
Message-ID: <87cxupfhuy.fsf@wotan.olymp> (raw)
In-Reply-To: <CAOQ4uxhFCKOLexyiP6DQ=a9t+8dhGn=tJLGyHg0NHPz=mPDkhw@mail.gmail.com> (Amir Goldstein's message of "Sat, 5 Sep 2026 14:32:46 +0200")
On Sat, Sep 05 2026, Amir Goldstein wrote:
> On Fri, Sep 4, 2026 at 12:38 PM Luis Henriques <luis@igalia.com> wrote:
>>
>> This patch adds a simple test that allows to verify that, when resolving a
>> symlink, user-space is called only the first time when caching is enabled
>> or, if caching is disabled, every time the symlink resolution is requested.
>>
>> Signed-off-by: Luis Henriques <luis@igalia.com>
>> ---
>> .../selftests/filesystems/fuse/.gitignore | 1 +
>> .../selftests/filesystems/fuse/Makefile | 2 +
>> .../fuse/fuse_symlink_cache_test.c | 167 ++++++++++++++++++
>> 3 files changed, 170 insertions(+)
>> create mode 100644 tools/testing/selftests/filesystems/fuse/fuse_symlink_cache_test.c
>>
>> diff --git a/tools/testing/selftests/filesystems/fuse/.gitignore b/tools/testing/selftests/filesystems/fuse/.gitignore
>> index f7f3dd345a50..ebfe7133d811 100644
>> --- a/tools/testing/selftests/filesystems/fuse/.gitignore
>> +++ b/tools/testing/selftests/filesystems/fuse/.gitignore
>> @@ -3,3 +3,4 @@ fuse_mnt
>> fusectl_test
>> write_extend_eof_test
>> fuse_acl_cache_test
>> +fuse_symlink_cache_test
>> diff --git a/tools/testing/selftests/filesystems/fuse/Makefile b/tools/testing/selftests/filesystems/fuse/Makefile
>> index 7744f796eb06..3a5a557dde7a 100644
>> --- a/tools/testing/selftests/filesystems/fuse/Makefile
>> +++ b/tools/testing/selftests/filesystems/fuse/Makefile
>> @@ -5,6 +5,7 @@ CFLAGS += -Wall -O2 -g $(KHDR_INCLUDES)
>> TEST_GEN_PROGS := fusectl_test
>> TEST_GEN_PROGS += write_extend_eof_test
>> TEST_GEN_PROGS += fuse_acl_cache_test
>> +TEST_GEN_PROGS += fuse_symlink_cache_test
>> TEST_GEN_FILES := fuse_mnt
>>
>> include ../../lib.mk
>> @@ -28,5 +29,6 @@ $(OUTPUT)/fuse_mnt: CFLAGS += $(VAR_CFLAGS)
>> $(OUTPUT)/fuse_mnt: LDLIBS += $(VAR_LDLIBS)
>>
>> $(OUTPUT)/fuse_acl_cache_test: fuse_common.c fuse_acl_cache_test.c
>> +$(OUTPUT)/fuse_symlink_cache_test: fuse_common.c fuse_symlink_cache_test.c
>>
>> EXTRA_CLEAN := fuse_common.o
>> diff --git a/tools/testing/selftests/filesystems/fuse/fuse_symlink_cache_test.c b/tools/testing/selftests/filesystems/fuse/fuse_symlink_cache_test.c
>> new file mode 100644
>> index 000000000000..ca3c5cdaf578
>> --- /dev/null
>> +++ b/tools/testing/selftests/filesystems/fuse/fuse_symlink_cache_test.c
>> @@ -0,0 +1,167 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * Simple filesystem to test FUSE symlink cache
>> + *
>> + * This is a simple FUSE filesystem that contains two objects: a file named
>> + * 'file' and a symlink to that file named 'link'. If symlink caching is
>> + * disabled (i.e. FUSE_CAP_CACHE_SYMLINKS is reset during FUSE_INIT), whenever
>> + * the ->readlink() is executed to resolve 'link' a counter will be incremented.
>> + *
>> + * If symlink caching is enabled (i.e. FUSE_CAP_CACHE_SYMLINKS is set during
>> + * FUSE_INIT), resolving a symlink will only call into user-space the first
>> + * time.
>> + */
>> +
>> +#define FUSE_USE_VERSION 31
>> +
>> +#include <stdio.h>
>> +#include <limits.h>
>> +#include <fuse_lowlevel.h>
>> +
>> +#include "kselftest_harness.h"
>> +
>> +#include "fuse_common.h"
>> +
>> +#define FILENAME "file"
>> +#define FILE_INO 42
>> +
>> +#define LINKNAME "link"
>> +#define LINK_INO 43
>> +
>> +#define TIMEOUT 86400.0f
>> +
>> +struct test_state {
>> + pthread_mutex_t lock;
>> + bool cache;
>> + int readlink_counter;
>> +} test_state = {
>> + .lock = PTHREAD_MUTEX_INITIALIZER,
>> +};
>> +
>> +static void fs_init(void *userdata, struct fuse_conn_info *conn)
>> +{
>> + pthread_mutex_lock(&test_state.lock);
>> + if (test_state.cache)
>> + fuse_set_feature_flag(conn, FUSE_CAP_CACHE_SYMLINKS);
>> + else
>> + fuse_unset_feature_flag(conn, FUSE_CAP_CACHE_SYMLINKS);
>> + pthread_mutex_unlock(&test_state.lock);
>> +}
>> +
>> +static void fs_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
>> +{
>> + struct fuse_entry_param e = {};
>> +
>> + if (parent != FUSE_ROOT_ID ||
>> + (!strcmp(name, FILENAME) && !(strcmp(name, LINKNAME))))
>
> You probably meant strcmp() != 0 ...
> Did you miss this Sashiko comment?
Oops! I did fix one similar comment (probably in a different test) but
missed this one. I'll fix it for the next iteration. (And I'll still
need to have a look at sashiko again for any new comments for this
revision).
Cheers,
--
Luís
next prev parent reply other threads:[~2026-09-07 10:57 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 10:39 [RFC PATCH v3 0/8] fuse: caches documentation and testing Luis Henriques
2026-09-04 10:39 ` [RFC PATCH v3 1/8] Documentation: fuse: add document on caches being used by FUSE Luis Henriques
2026-09-05 21:04 ` Amir Goldstein
2026-09-07 10:38 ` Luis Henriques
2026-09-04 10:39 ` [RFC PATCH v3 2/8] selftests/fuse: convert fusectl test to fuse3 Luis Henriques
2026-09-04 10:39 ` [RFC PATCH v3 3/8] selftests/fuse: check that fusectlfs is mounted Luis Henriques
2026-09-05 13:59 ` Amir Goldstein
2026-09-04 10:39 ` [RFC PATCH v3 4/8] selftests/fuse: factor-out test fixture setup/teardown Luis Henriques
2026-09-05 12:45 ` Amir Goldstein
2026-09-07 10:44 ` Luis Henriques
2026-09-07 11:38 ` Amir Goldstein
2026-09-04 10:39 ` [RFC PATCH v3 5/8] selftests/fuse: use dynamically allocated memory to store ACLs Luis Henriques
2026-09-05 14:00 ` Amir Goldstein
2026-09-04 10:39 ` [RFC PATCH v3 6/8] selftests/fuse: add some extra ACL caching tests Luis Henriques
2026-09-05 12:38 ` Amir Goldstein
2026-09-07 10:48 ` Luis Henriques
2026-09-04 10:39 ` [RFC PATCH v3 7/8] selftests/fuse: add fuse symlink caching test Luis Henriques
2026-09-05 12:32 ` Amir Goldstein
2026-09-07 10:58 ` Luis Henriques [this message]
2026-09-04 10:39 ` [RFC PATCH v3 8/8] selftests/fuse: add fuse readdir " Luis Henriques
2026-09-05 14:11 ` Amir Goldstein
2026-09-07 10:55 ` Luis Henriques
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=87cxupfhuy.fsf@wotan.olymp \
--to=luis@igalia.com \
--cc=amir73il@gmail.com \
--cc=corbet@lwn.net \
--cc=fuse-devel@lists.linux.dev \
--cc=kernel-dev@igalia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=me@black-desk.cn \
--cc=mharvey@jumptrading.com \
--cc=miklos@szeredi.hu \
--cc=skhan@linuxfoundation.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.