All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/6] exfat: take s_lock in read mode for iomap mapping paths
@ 2026-08-21 10:05 Chi Zhiling
  2026-08-21 10:05 ` [RFC PATCH v1 1/6] exfat: remove dead hint_bmap updates in I/O and truncate paths Chi Zhiling
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Chi Zhiling @ 2026-08-21 10:05 UTC (permalink / raw)
  To: exfat, linux-kernel; +Cc: Namjae Jeon, Sungjong Seo, Yuezhang Mo, Chi Zhiling

From: Chi Zhiling <chizhiling@kylinos.cn>

The iomap mapping paths currently serialize all inode mappings on the
sbi->s_lock mutex. This series converts it to an rw_semaphore and takes
it in read mode on the mapping paths so that mappings of distinct inodes
proceed in parallel. The preceding patches make the paths safe to run
concurrently: bitmap_lock covers the allocation state, atomic bit ops
cover the volume dirty flag, and the FAT2 mirror copy is serialized
against writeback.

Same-inode access stays serialized by the exclusive inode_lock; writeback
does not hold it but is safe because truncate flushes and truncates the
page cache first and cannot run concurrently with writeback. The lock
ordering (inode_lock -> s_lock -> bitmap_lock) is unchanged, so no new
deadlock scenarios are introduced.

A per-inode read-write lock was also considered, but its implementation
turned out to be considerably more complex, so this series relaxes the
existing s_lock instead. Any suggestions on that approach are welcome.

The series passes the xfstests exfat suite. In Unixbench, the fstime-w
score improved from 3977196.8 to 4746349.6 (~+19%). Any comments and
suggestions are welcome.

Chi Zhiling (6):
  exfat: remove dead hint_bmap updates in I/O and truncate paths
  exfat: take bitmap_lock at the start of exfat_alloc_cluster()
  exfat: use atomic bit ops for volume dirty flag
  exfat: lock FAT2 buffer while copying mirrored FAT entries
  exfat: convert s_lock mutex to rw_semaphore using write lock
  exfat: take s_lock in read mode for iomap mapping paths

 fs/exfat/dir.c       | 14 +++++++-------
 fs/exfat/exfat_fs.h  |  5 ++---
 fs/exfat/exfat_raw.h |  4 ++--
 fs/exfat/fatent.c    | 20 +++++++++++++-------
 fs/exfat/file.c      |  8 ++------
 fs/exfat/inode.c     | 15 +++++----------
 fs/exfat/iomap.c     |  4 ++--
 fs/exfat/namei.c     | 26 +++++++++++++-------------
 fs/exfat/super.c     | 42 +++++++++++++++++++++---------------------
 9 files changed, 67 insertions(+), 71 deletions(-)

-- 
2.53.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-08-21 10:06 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21 10:05 [RFC PATCH 0/6] exfat: take s_lock in read mode for iomap mapping paths Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 1/6] exfat: remove dead hint_bmap updates in I/O and truncate paths Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 2/6] exfat: take bitmap_lock at the start of exfat_alloc_cluster() Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 3/6] exfat: use atomic bit ops for volume dirty flag Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 4/6] exfat: lock FAT2 buffer while copying mirrored FAT entries Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 5/6] exfat: convert s_lock mutex to rw_semaphore using write lock Chi Zhiling
2026-08-21 10:05 ` [RFC PATCH v1 6/6] exfat: take s_lock in read mode for iomap mapping paths Chi Zhiling

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.