Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp793686ybv; Thu, 20 Feb 2020 07:24:56 -0800 (PST) X-Google-Smtp-Source: APXvYqxZb7spbSS+fJGxgBzIvTLOvMaoh7rDLZhAucQ/nEkYLpC0UfSywD8RyMBgKWF1NmOdm9ar X-Received: by 2002:a9d:7a96:: with SMTP id l22mr23889425otn.217.1582212296825; Thu, 20 Feb 2020 07:24:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582212296; cv=none; d=google.com; s=arc-20160816; b=USUttoQ7Jpaotbcrop95k/rSXPaKaBLvXu/KRwNsrTw4UDYQcbcqaP0Hzi1REMS5/O uIqRiq8IN8J66EltE8MBkV+DFBX5WK5b9SytPvXtoPg5HeE5rgYo1lLtjsbRA4qvCcTH Pk9swNyIIH99kM39utul0iMNZgSjRvAKaJbhSbjhBleGv/MIffs/mZdkm/y0X8UuHR3M 059q257OwYsFCJF4mJ7mqJKEG9w/03PoGqtY36DwWhHdftjRpM8Jsqm7IbH51qgsWfH+ 71u7gpEqYlsYPbIR8Uft1K/8Nk+k4L/qVHJBXsX/Tvy1oZKKsXN30z8hmXtt6xlMqn6E uUNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date; bh=MspGjQlPJ7x1t/bznX1TESnfCzjp8/2p46yKZHDtK+I=; b=W8wRWn8JrC+FeyNOPoHBNGnyUYhbWrRCupojJeFQAiapCI6wHGDl+PKnxZI3kpfQCO 789lXjVmdAwlQx7+4MqAp566PesCFY/Wt+YLMoBLdYfsZKNZjpAvNvdLzhJnknvkjCNB VJBf70WfxRpyB1dsoSqfyEssrx1hY3mqNiNzUOxaZeJFCLqAbPC0bEEfVmtN3QHBLWNd 7TV5u+mW8odLaPHmq+huABn9a7DBB+/rm9DH8yoloCsspspB6AxRYYS3g6ZgpkFyu2yM vYY4k8YSlfBujuXjP9XPQB69/Ekan4WXM6e1UC8TGvGBTJrS9uD0SOjr/WRiQp30g+gm y9aA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h21si1760485otr.235.2020.02.20.07.24.45; Thu, 20 Feb 2020 07:24:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728377AbgBTPYl (ORCPT + 99 others); Thu, 20 Feb 2020 10:24:41 -0500 Received: from mx2.suse.de ([195.135.220.15]:50744 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728367AbgBTPYk (ORCPT ); Thu, 20 Feb 2020 10:24:40 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 23A62AD86; Thu, 20 Feb 2020 15:24:39 +0000 (UTC) Date: Thu, 20 Feb 2020 09:24:35 -0600 From: Goldwyn Rodrigues To: linux-ext4@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, hch@infradead.org, darrick.wong@oracle.com Subject: [PATCH v2] iomap: return partial I/O count on error in iomap_dio_bio_actor Message-ID: <20200220152435.ynuea43uvm4ewg2w@fiona> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: NeoMutt/20180716 Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org In case of a block device error, written parameter in iomap_end() is zero as opposed to the amount of submitted I/O. Filesystems such as btrfs need to account for the I/O in ordered extents, even if it resulted in an error. Having (incomplete) submitted bytes in written gives the filesystem the amount of data which has been submitted before the error occurred, and the filesystem code can choose how to use it. The final returned error for iomap_dio_rw() is set by iomap_dio_complete(). Partial writes in direct I/O are considered an error. So, ->iomap_end() using written == 0 as error must be changed to written < length. In this case, ext4 is the only user. Signed-off-by: Goldwyn Rodrigues --- fs/ext4/inode.c | 2 +- fs/iomap/direct-io.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index e60aca791d3f..e50e7414351a 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3475,7 +3475,7 @@ static int ext4_iomap_end(struct inode *inode, loff_t offset, loff_t length, * the I/O. Any blocks that may have been allocated in preparation for * the direct I/O will be reused during buffered I/O. */ - if (flags & (IOMAP_WRITE | IOMAP_DIRECT) && written == 0) + if (flags & (IOMAP_WRITE | IOMAP_DIRECT) && written < length) return -ENOTBLK; return 0; diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 41c1e7c20a1f..01865db1bd09 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -264,7 +264,7 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, size_t n; if (dio->error) { iov_iter_revert(dio->submit.iter, copied); - copied = ret = 0; + ret = 0; goto out; } -- 2.25.0 -- Goldwyn