From: Su Yanjun <suyj.fnst@cn.fujitsu.com> To: Eryu Guan <guaneryu@gmail.com> Cc: fstests@vger.kernel.org Subject: Re: [PATCH] generic/465: fix a read bug when encounter EOF Date: Fri, 27 Sep 2019 09:46:59 +0800 [thread overview] Message-ID: <ecd1ae6e-295c-bc27-6c41-20c8a929f81c@cn.fujitsu.com> (raw) In-Reply-To: <20190925094720.GS2622@desktop> 在 2019/9/25 17:47, Eryu Guan 写道: > On Mon, Sep 16, 2019 at 01:24:26PM +0800, Su Yanjun wrote: >> In nfs test, if the writer has not written enough data for reader reading, >> then reader only get partial data and test fails. >> >> We can continue reading until read enough data. >> >> Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com> > Would you please provide more info on the actual failure you've seen? I > think the partial read issue should have been addressed by commit > 2428c08a6025 ("generic/465: just check the actual read data under dio > read/write") I rechecked my patch and my patch is not needed at all. It's only workaround of a kernel bug of nfs. In some cases nfs returns wrong data to userspace, but the return value is ok. I will send a kernel patch to nfs mailist. Thanks a lot. > > Thanks, > Eryu > >> --- >> src/aio-dio-regress/aio-dio-append-write-read-race.c | 17 +++++++++++++++-- >> 1 file changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/src/aio-dio-regress/aio-dio-append-write-read-race.c b/src/aio-dio-regress/aio-dio-append-write-read-race.c >> index 911f272..f28ef3c 100644 >> --- a/src/aio-dio-regress/aio-dio-append-write-read-race.c >> +++ b/src/aio-dio-regress/aio-dio-append-write-read-race.c >> @@ -44,14 +44,27 @@ static void usage(const char *prog) >> static void *reader(void *arg) >> { >> struct io_data *data = (struct io_data *)arg; >> + size_t blksize = data->blksize; >> + size_t offset = data->offset; >> + char *buf = data->buf; >> >> memset(data->buf, 'b', data->blksize); >> reader_ready = 1; >> do { >> - data->read_sz = pread(data->fd, data->buf, data->blksize, >> - data->offset); >> + data->read_sz = pread(data->fd, buf, blksize, >> + offset); >> if (data->read_sz < 0) >> perror("read file"); >> + >> + if (data->read_sz > 0) { >> + blksize -= data->read_sz; >> + offset += data->read_sz; >> + buf += data->read_sz; >> + data->read_sz = 0; >> + } >> + >> + if (blksize <= 0) >> + break; >> } while (data->read_sz <= 0); >> >> return NULL; >> -- >> 2.7.4 >> >> >> >
WARNING: multiple messages have this Message-ID (diff)
From: Su Yanjun <suyj.fnst@cn.fujitsu.com> To: Eryu Guan <guaneryu@gmail.com> Cc: <fstests@vger.kernel.org> Subject: Re: [PATCH] generic/465: fix a read bug when encounter EOF Date: Fri, 27 Sep 2019 09:46:59 +0800 [thread overview] Message-ID: <ecd1ae6e-295c-bc27-6c41-20c8a929f81c@cn.fujitsu.com> (raw) Message-ID: <20190927014659.VHl9T8QwVn6F3-V26BopSEovhRNfPmElg-766ZUC4y8@z> (raw) In-Reply-To: <20190925094720.GS2622@desktop> 在 2019/9/25 17:47, Eryu Guan 写道: > On Mon, Sep 16, 2019 at 01:24:26PM +0800, Su Yanjun wrote: >> In nfs test, if the writer has not written enough data for reader reading, >> then reader only get partial data and test fails. >> >> We can continue reading until read enough data. >> >> Signed-off-by: Su Yanjun <suyj.fnst@cn.fujitsu.com> > Would you please provide more info on the actual failure you've seen? I > think the partial read issue should have been addressed by commit > 2428c08a6025 ("generic/465: just check the actual read data under dio > read/write") I rechecked my patch and my patch is not needed at all. It's only workaround of a kernel bug of nfs. In some cases nfs returns wrong data to userspace, but the return value is ok. I will send a kernel patch to nfs mailist. Thanks a lot. > > Thanks, > Eryu > >> --- >> src/aio-dio-regress/aio-dio-append-write-read-race.c | 17 +++++++++++++++-- >> 1 file changed, 15 insertions(+), 2 deletions(-) >> >> diff --git a/src/aio-dio-regress/aio-dio-append-write-read-race.c b/src/aio-dio-regress/aio-dio-append-write-read-race.c >> index 911f272..f28ef3c 100644 >> --- a/src/aio-dio-regress/aio-dio-append-write-read-race.c >> +++ b/src/aio-dio-regress/aio-dio-append-write-read-race.c >> @@ -44,14 +44,27 @@ static void usage(const char *prog) >> static void *reader(void *arg) >> { >> struct io_data *data = (struct io_data *)arg; >> + size_t blksize = data->blksize; >> + size_t offset = data->offset; >> + char *buf = data->buf; >> >> memset(data->buf, 'b', data->blksize); >> reader_ready = 1; >> do { >> - data->read_sz = pread(data->fd, data->buf, data->blksize, >> - data->offset); >> + data->read_sz = pread(data->fd, buf, blksize, >> + offset); >> if (data->read_sz < 0) >> perror("read file"); >> + >> + if (data->read_sz > 0) { >> + blksize -= data->read_sz; >> + offset += data->read_sz; >> + buf += data->read_sz; >> + data->read_sz = 0; >> + } >> + >> + if (blksize <= 0) >> + break; >> } while (data->read_sz <= 0); >> >> return NULL; >> -- >> 2.7.4 >> >> >> >
next prev parent reply other threads:[~2019-09-27 1:47 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-09-16 5:24 [PATCH] generic/465: fix a read bug when encounter EOF Su Yanjun 2019-09-25 9:47 ` Eryu Guan 2019-09-27 1:46 ` Su Yanjun [this message] 2019-09-27 1:46 ` Su Yanjun
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=ecd1ae6e-295c-bc27-6c41-20c8a929f81c@cn.fujitsu.com \ --to=suyj.fnst@cn.fujitsu.com \ --cc=fstests@vger.kernel.org \ --cc=guaneryu@gmail.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).