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