Re: [PATCH] xfs: Remove i_rwsem lock in buffered read
From: Jinliang Zheng
Date: Fri Jun 20 2025 - 10:03:37 EST
On Fri, 27 Dec 2024 08:50:46 +1100, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
> On Thu, Dec 26, 2024 at 02:16:02PM +0800, Chi Zhiling wrote:
> > From: Chi Zhiling <chizhiling@xxxxxxxxxx>
> >
> > Using an rwsem to protect file data ensures that we can always obtain a
> > completed modification. But due to the lock, we need to wait for the
> > write process to release the rwsem before we can read it, even if we are
> > reading a different region of the file. This could take a lot of time
> > when many processes need to write and read this file.
> >
> > On the other hand, The ext4 filesystem and others do not hold the lock
> > during buffered reading, which make the ext4 have better performance in
> > that case. Therefore, I think it will be fine if we remove the lock in
> > xfs, as most applications can handle this situation.
>
> Nope.
>
> This means that XFS loses high level serialisation of incoming IO
> against operations like truncate, fallocate, pnfs operations, etc.
>
> We've been through this multiple times before; the solution lies in
> doing the work to make buffered writes use shared locking, not
> removing shared locking from buffered reads.
Hi, Dave
I have a question that I haven't figured out: If shared locking are used
in buffer writes, how can the read/write atomicity mentioned by [0] provided
by xfs be guaranteed?
" "I/O is intended to be atomic to ordinary files and pipes and FIFOs.
" Atomic means that all the bytes from a single operation that started
" out together end up together, without interleaving from other I/O
" operations."
"
" i.e. that independent read()s should see a write() as a single
" atomic change. hence if you do a read() concurrently with a write(),
" the read should either run to completion before the write, or the
" write run to completion before the read().
"
" XFS is the only linux filesystem that provides this behaviour.
[0] https://lore.kernel.org/linux-xfs/20190325001044.GA23020@dastard/
thanks,
Jinliang Zheng :)
>
> A couple of old discussions from the list:
>
> https://lore.kernel.org/linux-xfs/CAOQ4uxi0pGczXBX7GRAFs88Uw0n1ERJZno3JSeZR71S1dXg+2w@xxxxxxxxxxxxxx/
> https://lore.kernel.org/linux-xfs/20190404165737.30889-1-amir73il@xxxxxxxxx/
>
> There are likely others - you can search for them yourself to get
> more background information.
>
> Fundamentally, though, removing locking from the read side is not
> the answer to this buffered write IO exclusion problem....
>
> -Dave.
> --
> Dave Chinner
> david@xxxxxxxxxxxxx