* [PATCH] xfs: Call kiocb_modified() for buffered write
@ 2022-11-16 14:42 Xiao Yang
2022-11-16 19:00 ` Stefan Roesch
0 siblings, 1 reply; 5+ messages in thread
From: Xiao Yang @ 2022-11-16 14:42 UTC (permalink / raw)
To: shr, djwong; +Cc: linux-xfs, ruansy.fnst, Xiao Yang
kiocb_modified() should be used for sync/async buffered write
because it will return -EAGAIN when IOCB_NOWAIT is set. Unfortunately,
kiocb_modified() is used by the common xfs_file_write_checks()
which is called by all types of write(i.e. buffered/direct/dax write).
This issue makes generic/471 with xfs always get the following error:
--------------------------------------------------------
QA output created by 471
pwrite: Resource temporarily unavailable
wrote 8388608/8388608 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
pwrite: Resource temporarily unavailable
...
--------------------------------------------------------
Fixes: 1aa91d9c9933 ("xfs: Add async buffered write support")
Signed-off-by: Xiao Yang <yangx.jy@fujitsu.com>
---
fs/xfs/xfs_file.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index e462d39c840e..561fab3a49c7 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -417,6 +417,9 @@ xfs_file_write_checks(
spin_unlock(&ip->i_flags_lock);
out:
+ if (IS_DAX(inode) || (iocb->ki_flags & IOCB_DIRECT))
+ return file_modified(file);
+
return kiocb_modified(iocb);
}
--
2.21.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] xfs: Call kiocb_modified() for buffered write 2022-11-16 14:42 [PATCH] xfs: Call kiocb_modified() for buffered write Xiao Yang @ 2022-11-16 19:00 ` Stefan Roesch 2022-11-17 2:28 ` Yang, Xiao/杨 晓 0 siblings, 1 reply; 5+ messages in thread From: Stefan Roesch @ 2022-11-16 19:00 UTC (permalink / raw) To: Xiao Yang, shr, djwong; +Cc: linux-xfs, ruansy.fnst On 11/16/22 6:42 AM, Xiao Yang wrote: > kiocb_modified() should be used for sync/async buffered write > because it will return -EAGAIN when IOCB_NOWAIT is set. Unfortunately, > kiocb_modified() is used by the common xfs_file_write_checks() > which is called by all types of write(i.e. buffered/direct/dax write). > This issue makes generic/471 with xfs always get the following error: > -------------------------------------------------------- > QA output created by 471 > pwrite: Resource temporarily unavailable > wrote 8388608/8388608 bytes at offset 0 > XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > pwrite: Resource temporarily unavailable > ... > -------------------------------------------------------- > There have been earlier discussions about this. Snippet from the earlier discussion: "generic/471 complains because it expects any write done with RWF_NOWAIT to succeed as long as the blocks for the write are already instantiated. This isn't necessarily a correct assumption, as there are other conditions that can cause an RWF_NOWAIT write to fail with -EAGAIN even if the range is already there." So the test itself probably needs fixing. > Fixes: 1aa91d9c9933 ("xfs: Add async buffered write support") > Signed-off-by: Xiao Yang <yangx.jy@fujitsu.com> > --- > fs/xfs/xfs_file.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index e462d39c840e..561fab3a49c7 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -417,6 +417,9 @@ xfs_file_write_checks( > spin_unlock(&ip->i_flags_lock); > > out: > + if (IS_DAX(inode) || (iocb->ki_flags & IOCB_DIRECT)) > + return file_modified(file); > + > return kiocb_modified(iocb); > } > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xfs: Call kiocb_modified() for buffered write 2022-11-16 19:00 ` Stefan Roesch @ 2022-11-17 2:28 ` Yang, Xiao/杨 晓 2023-01-13 4:55 ` yangx.jy 0 siblings, 1 reply; 5+ messages in thread From: Yang, Xiao/杨 晓 @ 2022-11-17 2:28 UTC (permalink / raw) To: Stefan Roesch, shr, djwong; +Cc: linux-xfs, ruansy.fnst On 2022/11/17 3:00, Stefan Roesch write: > > On 11/16/22 6:42 AM, Xiao Yang wrote: >> kiocb_modified() should be used for sync/async buffered write >> because it will return -EAGAIN when IOCB_NOWAIT is set. Unfortunately, >> kiocb_modified() is used by the common xfs_file_write_checks() >> which is called by all types of write(i.e. buffered/direct/dax write). >> This issue makes generic/471 with xfs always get the following error: >> -------------------------------------------------------- >> QA output created by 471 >> pwrite: Resource temporarily unavailable >> wrote 8388608/8388608 bytes at offset 0 >> XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) >> pwrite: Resource temporarily unavailable >> ... >> -------------------------------------------------------- >> > There have been earlier discussions about this. Snippet from the > earlier discussion: > > "generic/471 complains because it expects any write done with RWF_NOWAIT > to succeed as long as the blocks for the write are already instantiated. > This isn't necessarily a correct assumption, as there are other conditions > that can cause an RWF_NOWAIT write to fail with -EAGAIN even if the range > is already there." Hi Stefan, Thanks for your reply. Could you give me the URL about the earlier discussions? kiocb_modified() makes all types of write always get -EAGAIN when RWF_NOWAIT is set. I don't think this patch[1] is correct because it changed the original logic. The original logic only makes buffered write get -EOPNOTSUPP when RWF_NOWAIT is set. --------------------------------------------- static int file_modified_flags(struct file *file, int flags) { ... if (flags & IOCB_NOWAIT) return -EAGAIN; ... } int kiocb_modified(struct kiocb *iocb) { return file_modified_flags(iocb->ki_filp, iocb->ki_flags); } --------------------------------------------- PS: kiocb_modified() is used by the common xfs_file_write_checks() which is called by all types of write(i.e. buffered/direct/dax write). > > So the test itself probably needs fixing. In my opinion, both kernel and the test probably need to be fixed. [1] 1aa91d9c9933 ("xfs: Add async buffered write support") Best Regards, Xiao Yang ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH] xfs: Call kiocb_modified() for buffered write 2022-11-17 2:28 ` Yang, Xiao/杨 晓 @ 2023-01-13 4:55 ` yangx.jy 2023-01-13 18:02 ` Stefan Roesch 0 siblings, 1 reply; 5+ messages in thread From: yangx.jy @ 2023-01-13 4:55 UTC (permalink / raw) To: yangx.jy@fujitsu.com, Stefan Roesch, shr@fb.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, ruansy.fnst@fujitsu.com Hi Kindly ping. ^_^ Best Regards, Xiao Yang -----Original Message----- From: Yang, Xiao/杨 晓 <yangx.jy@fujitsu.com> Sent: 2022年11月17日 10:28 To: Stefan Roesch <shr@meta.com>; shr@fb.com; djwong@kernel.org Cc: linux-xfs@vger.kernel.org; Ruan, Shiyang/阮 世阳 <ruansy.fnst@fujitsu.com> Subject: Re: [PATCH] xfs: Call kiocb_modified() for buffered write On 2022/11/17 3:00, Stefan Roesch write: > > On 11/16/22 6:42 AM, Xiao Yang wrote: >> kiocb_modified() should be used for sync/async buffered write because >> it will return -EAGAIN when IOCB_NOWAIT is set. Unfortunately, >> kiocb_modified() is used by the common xfs_file_write_checks() which >> is called by all types of write(i.e. buffered/direct/dax write). >> This issue makes generic/471 with xfs always get the following error: >> -------------------------------------------------------- >> QA output created by 471 >> pwrite: Resource temporarily unavailable wrote 8388608/8388608 bytes >> at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX >> ops/sec) >> pwrite: Resource temporarily unavailable ... >> -------------------------------------------------------- >> > There have been earlier discussions about this. Snippet from the > earlier discussion: > > "generic/471 complains because it expects any write done with > RWF_NOWAIT to succeed as long as the blocks for the write are already instantiated. > This isn't necessarily a correct assumption, as there are other > conditions that can cause an RWF_NOWAIT write to fail with -EAGAIN > even if the range is already there." Hi Stefan, Thanks for your reply. Could you give me the URL about the earlier discussions? kiocb_modified() makes all types of write always get -EAGAIN when RWF_NOWAIT is set. I don't think this patch[1] is correct because it changed the original logic. The original logic only makes buffered write get -EOPNOTSUPP when RWF_NOWAIT is set. --------------------------------------------- static int file_modified_flags(struct file *file, int flags) { ... if (flags & IOCB_NOWAIT) return -EAGAIN; ... } int kiocb_modified(struct kiocb *iocb) { return file_modified_flags(iocb->ki_filp, iocb->ki_flags); } --------------------------------------------- PS: kiocb_modified() is used by the common xfs_file_write_checks() which is called by all types of write(i.e. buffered/direct/dax write). > > So the test itself probably needs fixing. In my opinion, both kernel and the test probably need to be fixed. [1] 1aa91d9c9933 ("xfs: Add async buffered write support") Best Regards, Xiao Yang ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xfs: Call kiocb_modified() for buffered write 2023-01-13 4:55 ` yangx.jy @ 2023-01-13 18:02 ` Stefan Roesch 0 siblings, 0 replies; 5+ messages in thread From: Stefan Roesch @ 2023-01-13 18:02 UTC (permalink / raw) To: yangx.jy@fujitsu.com, shr@fb.com, djwong@kernel.org Cc: linux-xfs@vger.kernel.org, ruansy.fnst@fujitsu.com This has been discussed in https://lore.kernel.org/linux-xfs/b2865bd6-2346-8f4d-168b-17f06bbedbed@kernel.dk/ Here is Jens comment: From: Jens Axboe <axboe@kernel.dk> To: "Darrick J. Wong" <djwong@kernel.org>, fstests <fstests@vger.kernel.org> Cc: io-uring@vger.kernel.org, kernel-team@fb.com, linux-mm@kvack.org, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, david@fromorbit.com, jack@suse.cz, hch@infradead.org, willy@infradead.org, Stefan Roesch <shr@fb.com> Subject: Re: generic/471 regression with async buffered writes? Date: Thu, 18 Aug 2022 11:00:38 -0600 [thread overview] Message-ID: <b2865bd6-2346-8f4d-168b-17f06bbedbed@kernel.dk> (raw) In-Reply-To: <Yv5quvRMZXlDXED/@magnolia> On 8/18/22 10:37 AM, Darrick J. Wong wrote: > Hi everyone, > > I noticed the following fstest failure on XFS on 6.0-rc1 that wasn't > there in 5.19: > > --- generic/471.out > +++ generic/471.out.bad > @@ -2,12 +2,10 @@ > pwrite: Resource temporarily unavailable > wrote 8388608/8388608 bytes at offset 0 > XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > -RWF_NOWAIT time is within limits. > +pwrite: Resource temporarily unavailable > +(standard_in) 1: syntax error > +RWF_NOWAIT took seconds > 00000000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................ > * > -00200000: bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb ................ > -* > -00300000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................ > -* > read 8388608/8388608 bytes at offset 0 > XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > > Is this related to the async buffered write changes, or should I keep > looking? AFAICT nobody else has mentioned problems with 471... The test is just broken. It made some odd assumptions on what RWF_NOWAIT means with buffered writes. There's been a discussion on it previously, I'll see if I can find the links. IIRC, the tldr is that the test doesn't really tie RWF_NOWAIT to whether we'll block or not. -- Jens Axboe On 1/12/23 8:55 PM, yangx.jy@fujitsu.com wrote: > !-------------------------------------------------------------------| > This Message Is From an External Sender > > |-------------------------------------------------------------------! > > Hi > > Kindly ping. ^_^ > > Best Regards, > Xiao Yang > > -----Original Message----- > From: Yang, Xiao/杨 晓 <yangx.jy@fujitsu.com> > Sent: 2022年11月17日 10:28 > To: Stefan Roesch <shr@meta.com>; shr@fb.com; djwong@kernel.org > Cc: linux-xfs@vger.kernel.org; Ruan, Shiyang/阮 世阳 <ruansy.fnst@fujitsu.com> > Subject: Re: [PATCH] xfs: Call kiocb_modified() for buffered write > > On 2022/11/17 3:00, Stefan Roesch write: >> >> On 11/16/22 6:42 AM, Xiao Yang wrote: >>> kiocb_modified() should be used for sync/async buffered write because >>> it will return -EAGAIN when IOCB_NOWAIT is set. Unfortunately, >>> kiocb_modified() is used by the common xfs_file_write_checks() which >>> is called by all types of write(i.e. buffered/direct/dax write). >>> This issue makes generic/471 with xfs always get the following error: >>> -------------------------------------------------------- >>> QA output created by 471 >>> pwrite: Resource temporarily unavailable wrote 8388608/8388608 bytes >>> at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX >>> ops/sec) >>> pwrite: Resource temporarily unavailable ... >>> -------------------------------------------------------- >>> >> There have been earlier discussions about this. Snippet from the >> earlier discussion: >> >> "generic/471 complains because it expects any write done with >> RWF_NOWAIT to succeed as long as the blocks for the write are already instantiated. >> This isn't necessarily a correct assumption, as there are other >> conditions that can cause an RWF_NOWAIT write to fail with -EAGAIN >> even if the range is already there." > > Hi Stefan, > > Thanks for your reply. > Could you give me the URL about the earlier discussions? > > kiocb_modified() makes all types of write always get -EAGAIN when RWF_NOWAIT is set. I don't think this patch[1] is correct because it changed the original logic. The original logic only makes buffered write get -EOPNOTSUPP when RWF_NOWAIT is set. > --------------------------------------------- > static int file_modified_flags(struct file *file, int flags) { ... > if (flags & IOCB_NOWAIT) > return -EAGAIN; > ... > } > int kiocb_modified(struct kiocb *iocb) > { > return file_modified_flags(iocb->ki_filp, iocb->ki_flags); } > --------------------------------------------- > PS: kiocb_modified() is used by the common xfs_file_write_checks() which is called by all types of write(i.e. buffered/direct/dax write). > >> >> So the test itself probably needs fixing. > > In my opinion, both kernel and the test probably need to be fixed. > > [1] 1aa91d9c9933 ("xfs: Add async buffered write support") > > Best Regards, > Xiao Yang ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-13 18:09 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-11-16 14:42 [PATCH] xfs: Call kiocb_modified() for buffered write Xiao Yang 2022-11-16 19:00 ` Stefan Roesch 2022-11-17 2:28 ` Yang, Xiao/杨 晓 2023-01-13 4:55 ` yangx.jy 2023-01-13 18:02 ` Stefan Roesch
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox