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, Namjae Jeon <linkinjeon@kernel.org>
Subject: [PATCH v3 00/11] exfat: convert to iomap
Date: Wed, 13 May 2026 20:21:45 +0900	[thread overview]
Message-ID: <20260513112156.9122-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


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() 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        | 262 +++++++++++++++++++++++--------
 fs/exfat/inode.c       | 342 ++++++-----------------------------------
 fs/exfat/iomap.c       | 266 ++++++++++++++++++++++++++++++++
 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, 705 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-13 11:22 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-13 11:21 Namjae Jeon [this message]
2026-05-13 11:21 ` [PATCH v3 01/11] iomap: introduce IOMAP_F_ZERO_TAIL flag Namjae Jeon
2026-05-15  4:48   ` Christoph Hellwig
2026-05-15  5:52     ` Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 02/11] exfat: replace unsafe macros with static inline functions Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 03/11] exfat: add balloc parameter to exfat_map_cluster() for iomap support Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 04/11] exfat: add exfat_file_open() Namjae Jeon
2026-05-13 12:06   ` CharSyam
2026-05-13 14:11     ` Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 05/11] exfat: add support for multi-cluster allocation Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 06/11] exfat: add data_start_bytes and exfat_cluster_to_phys() helper Namjae Jeon
2026-05-13 15:17   ` CharSyam
2026-05-13 23:43     ` Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 07/11] exfat: fix implicit declaration of brelse() Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 08/11] exfat: add iomap buffered I/O support Namjae Jeon
2026-05-14  1:39   ` Chi Zhiling
2026-05-14  1:47     ` Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 09/11] exfat: add iomap direct " Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 10/11] exfat: add support for SEEK_HOLE and SEEK_DATA in llseek Namjae Jeon
2026-05-13 11:21 ` [PATCH v3 11/11] exfat: make exfat_truncate() return error code Namjae Jeon
2026-05-15  4:50 ` [PATCH v3 00/11] exfat: convert to iomap Christoph Hellwig
2026-05-15  5:57   ` Namjae Jeon

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=20260513112156.9122-1-linkinjeon@kernel.org \
    --to=linkinjeon@kernel.org \
    --cc=anmuxixixi@gmail.com \
    --cc=brauner@kernel.org \
    --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.