All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namjae Jeon <linkinjeon@kernel.org>
To: sj1557.seo@samsung.com, yuezhang.mo@sony.com, brauner@kernel.org,
	djwong@kernel.org, hch@lst.de
Cc: linux-fsdevel@vger.kernel.org, anmuxixixi@gmail.com,
	dxdt@dev.snart.me, chizhiling@kylinos.cn, chizhiling@163.com,
	linux-kernel@vger.kernel.org, charsyam@gmail.com,
	Namjae Jeon <linkinjeon@kernel.org>
Subject: [PATCH v4 00/11] exfat: convert to iomap
Date: Mon, 18 May 2026 20:46:54 +0900	[thread overview]
Message-ID: <20260518114705.9601-1-linkinjeon@kernel.org> (raw)

This patch series converts the exfat filesystem to the iomap framework for
buffered I/O, direct I/O, and llseek (SEEK_HOLE/SEEK_DATA) support.

iozone benchmark results (4KB cluster size, -s1g -r64k, 1GB file, 64KB record size)

                       1 thread                  4 threads
                     Write      Read           Write      Read
                     (MB/s)    (MB/s)         (MB/s)    (MB/s)
-----------------------------------------------------------------
exfat + iomap patch   332.7     418.1           78.6      82.4
Current exfat         278.4     415.1           42.1      38.0
-----------------------------------------------------------------
Improvement           +19.5%    +0.7%          +86.7%   +117.4%


Available in the Git repository at:
===================================
git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat.git iomap-work

v4:
  - Declare initialized variables before uninitialized ones in
    __iomap_write_begin.
  - Clean up the logic for handling ei->valid_size in the non-alloc
    iomap read path.
  - Rename exfat_cluster_to_phys to exfat_cluster_to_phys_bytes.
  - Use end variable in exfat_fallback_buffered_write.

v3:
  - Remove extra >> 9 when adding to inode->i_blocks.
  - Simplify exfat_file_open() by removing unnecessary err variable.
  - Separate exfat_truncate() error return conversion from iomap changes.
  - Fix xfstests failures with 512B cluster size.
  - Make exfat_truncate() return error code.
  - Use inode lock to protect valid_size in exfat_extend_valid_size().
  - Unify num_clusters calculation regardless of may_alloc.
  - Use min_t() to clamp iomap->length.
  - Return early in exfat_write_iomap_end() if no data written.
  - Remove s_lock in exfat_write_iomap_end().
  - Split DIO fallback buffered write into helper function.
  - Remove unnecessary goto in exfat_dio_write_iter().

v2:
  - Replace macros with static inline functions.
  - Remove noop_direct_IO.
  - Consolidate read and write iomap_begin into __exfat_iomap_begin()
  - Zero out stale data in straddle block beyond valid_size.
  - Introduce IOMAP_F_ZERO_TAIL flag to remove exfat_iomap_put_folio().
  - Select FS_IOMAP in Kconfig.
  - Remove unnecessary alignment check in exfat_file_read_iter().
  - Just use generic_file_llseek directly.
  - Move exfat_extend_valid_size to exfat_file_write_iter().
  - Use pagecache_isize_extended() to remove iomap_zero_range in
    exfat_setattr().
  - fix mmap write data corruption with byte-by-byte fallocate.
  - Remove exfat_mkwrite_iomap_begin().

Namjae Jeon (11):
  iomap: introduce IOMAP_F_ZERO_TAIL flag
  exfat: replace unsafe macros with static inline functions
  exfat: add balloc parameter to exfat_map_cluster() for iomap support
  exfat: add exfat_file_open()
  exfat: add support for multi-cluster allocation
  exfat: add data_start_bytes and exfat_cluster_to_phys_bytes() helper
  exfat: fix implicit declaration of brelse()
  exfat: add iomap buffered I/O support
  exfat: add iomap direct I/O support
  exfat: add support for SEEK_HOLE and SEEK_DATA in llseek
  exfat: make exfat_truncate() return error code

 fs/exfat/Kconfig       |   2 +-
 fs/exfat/Makefile      |   2 +-
 fs/exfat/balloc.c      |   2 +-
 fs/exfat/dir.c         |  50 +++---
 fs/exfat/exfat_fs.h    | 140 ++++++++++++-----
 fs/exfat/fatent.c      |  30 ++--
 fs/exfat/file.c        | 263 +++++++++++++++++++++++--------
 fs/exfat/inode.c       | 342 ++++++-----------------------------------
 fs/exfat/iomap.c       | 263 +++++++++++++++++++++++++++++++
 fs/exfat/iomap.h       |  15 ++
 fs/exfat/namei.c       |  28 ++--
 fs/exfat/super.c       |   5 +-
 fs/iomap/buffered-io.c |   4 +
 include/linux/iomap.h  |   4 +
 14 files changed, 703 insertions(+), 447 deletions(-)
 create mode 100644 fs/exfat/iomap.c
 create mode 100644 fs/exfat/iomap.h

-- 
2.25.1


             reply	other threads:[~2026-05-18 11:48 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-18 11:46 Namjae Jeon [this message]
2026-05-18 11:46 ` [PATCH v4 01/11] iomap: introduce IOMAP_F_ZERO_TAIL flag Namjae Jeon
2026-05-18 16:03   ` Darrick J. Wong
2026-05-19  3:32     ` Namjae Jeon
2026-05-22 12:53   ` Christian Brauner
2026-05-22 15:02     ` Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 02/11] exfat: replace unsafe macros with static inline functions Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 03/11] exfat: add balloc parameter to exfat_map_cluster() for iomap support Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 04/11] exfat: add exfat_file_open() Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 05/11] exfat: add support for multi-cluster allocation Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 06/11] exfat: add data_start_bytes and exfat_cluster_to_phys_bytes() helper Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 07/11] exfat: fix implicit declaration of brelse() Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 08/11] exfat: add iomap buffered I/O support Namjae Jeon
2026-05-19  5:21   ` Yuezhang.Mo
2026-05-18 11:47 ` [PATCH v4 09/11] exfat: add iomap direct " Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 10/11] exfat: add support for SEEK_HOLE and SEEK_DATA in llseek Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 11/11] exfat: make exfat_truncate() return error code Namjae Jeon
2026-05-19  3:40 ` [PATCH v4 00/11] exfat: convert to iomap Darrick J. Wong
2026-05-19  4:05   ` Namjae Jeon
2026-05-19  7:04 ` Christoph Hellwig
2026-05-19  7:45   ` Namjae Jeon
2026-05-22 12:53 ` (subset) " Christian Brauner

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=20260518114705.9601-1-linkinjeon@kernel.org \
    --to=linkinjeon@kernel.org \
    --cc=anmuxixixi@gmail.com \
    --cc=brauner@kernel.org \
    --cc=charsyam@gmail.com \
    --cc=chizhiling@163.com \
    --cc=chizhiling@kylinos.cn \
    --cc=djwong@kernel.org \
    --cc=dxdt@dev.snart.me \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sj1557.seo@samsung.com \
    --cc=yuezhang.mo@sony.com \
    /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.