From patchwork Mon Sep 16 05:24:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Su Yanjun X-Patchwork-Id: 11146359 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 087851745 for ; Mon, 16 Sep 2019 05:27:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D9A6720890 for ; Mon, 16 Sep 2019 05:27:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727071AbfIPF1K (ORCPT ); Mon, 16 Sep 2019 01:27:10 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:50342 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725775AbfIPF1K (ORCPT ); Mon, 16 Sep 2019 01:27:10 -0400 X-IronPort-AV: E=Sophos;i="5.64,510,1559491200"; d="scan'208";a="75507202" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 16 Sep 2019 13:27:09 +0800 Received: from G08CNEXCHPEKD03.g08.fujitsu.local (unknown [10.167.33.85]) by cn.fujitsu.com (Postfix) with ESMTP id 46AD74CE14EC; Mon, 16 Sep 2019 13:26:49 +0800 (CST) Received: from localhost.localdomain (10.167.226.33) by G08CNEXCHPEKD03.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 16 Sep 2019 13:27:10 +0800 From: Su Yanjun To: CC: , Subject: [PATCH] generic/465: fix a read bug when encounter EOF Date: Mon, 16 Sep 2019 13:24:26 +0800 Message-ID: <1568611466-100970-1-git-send-email-suyj.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [10.167.226.33] X-yoursite-MailScanner-ID: 46AD74CE14EC.AE74C X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: suyj.fnst@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 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 --- 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;