Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp793032ybv; Thu, 20 Feb 2020 07:24:16 -0800 (PST) X-Google-Smtp-Source: APXvYqxmshkwDTWVXftnEHJf8K0CDoadKQIh+l4zTcFRBQ5PGkX75eCdrf9uobMGKD02JrOcYEHZ X-Received: by 2002:a05:6830:1d91:: with SMTP id y17mr22929996oti.276.1582212256763; Thu, 20 Feb 2020 07:24:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582212256; cv=none; d=google.com; s=arc-20160816; b=Q/76asEyq9b4mmVY4NmHP87hM5JnuGUK1uaybkR3SQYXrgd73DKet4k2zKw/SoaJPP bsnqi/YEzbz9gq3xMSgIpKvOy7YugZznYgnD2MUAeetuBtDa2dzDXgsXLcSxbgCszRGe MtkLmHPEgHDgraATu7qYGDjKvKKpfzCCiBHZdi1Vg+DWSz4Rv963cZJmBIr1QQRQLQ1j 14Ii+Fs/FHkgpEfoX9u6zZ1GJ6X6eYNF3uP9XhJxx/QYSOV8bynlHt33/VyWDTk1d5nr D9OuoU4jxK1aqntZzS2pd9tN26ROfr58e97ThiSq+qAy2n7jQFYFTLoSCZqyqYRGM6L5 Y+ew== 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=XntQLRD2OifpF1SUGaE53Z+a1xAGyfKsE2o1Fh1oLQ8=; b=1JNryKqCbe+iIqNc7V827A3uPq6frlUdoOWzymSHGF7qKyLrZN9h3C7bdg+7nW2bE3 8Qe65z1IHFzmw69HqjQfwEQIsJvRpFYvocEH5KYAC+5Tnoq/JuGOOruVlOhFRBWeKPOP WtR09+Q2TWyMAw8Yh3KT8GlcXcCd7tdTJc0iGEs0rl9Cb6rWp+ZUQ8ruiKNGe07y60Qx a0JM7PVD53VjlEB8/Fnx1zPfk/441yPna92jK7LbXYgjnx8u8B3U0NOKtba2B5TJJf3r MzLy6l+awrV+5BhRkR3wJNRE1Js0nRJ7aaazuDnu7VLqGanKVMIYdWAA1ptfKhgXp45z J5bA== 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 x26si1869847otk.325.2020.02.20.07.24.02; Thu, 20 Feb 2020 07:24:16 -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 S1728352AbgBTPYB (ORCPT + 99 others); Thu, 20 Feb 2020 10:24:01 -0500 Received: from mx2.suse.de ([195.135.220.15]:50504 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728338AbgBTPYB (ORCPT ); Thu, 20 Feb 2020 10:24:01 -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 344B8AE1C; Thu, 20 Feb 2020 15:23:59 +0000 (UTC) Date: Thu, 20 Feb 2020 09:23:55 -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: <20200220152355.5ticlkptc7kwrifz@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