Skip to content

Sync redfs rhel9 4 427.42.1 branch to redfs-ubuntu-noble-6.8.0-58.60#97

Merged
bsbernd merged 2 commits intoredfs-rhel9_4-427.42.1from
sync-redfs-rhel9_4-427.42.1
Feb 14, 2026
Merged

Sync redfs rhel9 4 427.42.1 branch to redfs-ubuntu-noble-6.8.0-58.60#97
bsbernd merged 2 commits intoredfs-rhel9_4-427.42.1from
sync-redfs-rhel9_4-427.42.1

Conversation

@bsbernd
Copy link
Collaborator

@bsbernd bsbernd commented Feb 14, 2026

Remaining differences:

Missing from sync-redfs-rhel9_4-427.42.1
  * 1607a036 (Horst Birthelmer) fuse: simplify compound commands
    f18c61e7 (Horst Birthelmer) fuse: avoid tmp copying of data for writeback pages
    ade0d22c (Matthew Wilcox (Oracle)) fuse: Remove fuse_writepage
    461c4ed7 (Horst Birthelmer) Revert "fuse: avoid tmp copying of data for writeback pages"
    5e590a65 (Jingbo Xu) fuse: make foffset alignment opt-in for optimum backend performance
    114c4df0 (Horst Birthelmer) fuse: avoid tmp copying of data for writeback pages

Missing from redfs-ubuntu-noble-6.8.0-58.60
  * 57a83cdf (Horst Birthelmer) fuse: simplify compound commands
    a216e7b7 (Feng Shuo) Fix the compiling error on aarch64
    851c7dba (Bernd Schubert) fuse: Fix fuse_xattr_handlers type mispatch

Reason:

  • 57a83cdf has an invalid cherry-pick id, which is why 1607a036 and 57a83cdf are not detected as the same commit
  • el9_4 branch does not have tmp page removal - too complex for that old and almost deprecated version
  • 5e590a6 does not apply cleanly either - too much effort to back port it.

lostjeffle and others added 2 commits February 14, 2026 15:18
This fixes xfstests generic/451 (for both O_DIRECT and FOPEN_DIRECT_IO
direct write).

Commit b359af8 ("fuse: Invalidate the page cache after
FOPEN_DIRECT_IO write") tries to fix the similar issue for
FOPEN_DIRECT_IO write, which can be reproduced by xfstests generic/209.
It only fixes the issue for synchronous direct write, while omitting
the case for asynchronous direct write (exactly targeted by
generic/451).

While for O_DIRECT direct write, it's somewhat more complicated.  For
synchronous direct write, generic_file_direct_write() will invalidate
the page cache after the write, and thus it can pass generic/209.  While
for asynchronous direct write, the invalidation in
generic_file_direct_write() is bypassed since the invalidation shall be
done when the asynchronous IO completes.  This is omitted in FUSE and
generic/451 fails whereby.

Fix this by conveying the invalidation for both synchronous and
asynchronous write.

- with FOPEN_DIRECT_IO
  - sync write,  invalidate in fuse_send_write()
  - async write, invalidate in fuse_aio_complete() with FUSE_ASYNC_DIO,
		 fuse_send_write() otherwise
- without FOPEN_DIRECT_IO
  - sync write,  invalidate in generic_file_direct_write()
  - async write, invalidate in fuse_aio_complete() with FUSE_ASYNC_DIO,
		 generic_file_direct_write() otherwise

Reviewed-by: Bernd Schubert <bschubert@ddn.com>
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
(cherry picked from commit f6de786)
Mapping might point to a totally different core due to
random assignment. For performance using the current
core might be beneficial

Example (with core binding)

unpatched WRITE: bw=841MiB/s
patched   WRITE: bw=1363MiB/s

With
fio --name=test --ioengine=psync --direct=1 \
    --rw=write --bs=1M --iodepth=1 --numjobs=1 \
    --filename_format=/redfs/testfile.\$jobnum --size=100G \
    --thread --create_on_open=1 --runtime=30s --cpus_allowed=1

In order to get the good number `--cpus_allowed=1` is needed.
This could be improved by a future change that avoids
cpu migration in fuse_request_end() on wake_up() call.

(cherry picked from commit 32e0073)
@bsbernd bsbernd merged commit 07d1978 into redfs-rhel9_4-427.42.1 Feb 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments