Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp345315yba; Mon, 20 May 2019 09:41:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqxraSc6fnsJpWADIYWmyZTAcXKtjMyiE66XIYzxXcMZqnH/IvpelIi8tRi6NZxk7pdEclgT X-Received: by 2002:a17:902:bc8a:: with SMTP id bb10mr19853172plb.310.1558370482902; Mon, 20 May 2019 09:41:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558370482; cv=none; d=google.com; s=arc-20160816; b=fO5e4TkctlymCI6xYLA9SYfyAo9alpxhGmVr80rSwmud0DPUZlM8cpFA6Cw15++v1Y UMEWAwfQ1foOCTHDLllZUKUUuvvkm5TLMiqBdphRn4kvwOLsye25VJTmXwqKVKm1DEuj bgxkWQlEZ0/po3LML9QK9bcszRXfyOEeyV5etJagUrvQALvfxWcGNDHRS1JvsKUW99wY zmD607Cx774k5cA+4gcAnvd7Ablupi+364cTq7vtEQumFA8yQmu27f9Zsfk2z6DsrpFL Muisr0UmLJvmOJkgUB4GTK0yDbifi6pAg2J77fvNmzrAocPj2Keq12PGiC39+FZGsNpZ 5tEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=yUg6xwsC4xjYzkFghkKBERp8fpsWPi3yYU1B8GsNp/E=; b=YOkGNKvzsKKqrzHIVYyMaZQaykRPgr70DbMv4OZ5rBCv4cD9Rx0HKi0nacVqt2HCAa KBuv5mub8lHzmyqa3h29VX384FeIHZW8SHA0h+NkygdDAbb7r3bbS33bSPoIFyi6/9fB ay94D3v60axkfVFId10GFG3oo4GZfgEnc8ojkrSMAMsc23cujc3Kl3TXahTQxJGhVIbb jRMg9hxh/DAplEFBBdCfmelyLd+YsOu0a0xNbz2p3L2fWmMnpe4Sy8KaEGPNgQGhXFeV iO3KPv8kWgekYYTWubhjt17PK/Q0EExZzeaKQ+Iz/w3O6lx3C9DYb4GjdSx2k2qm3TSV VJkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bG6mCGeH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 q23si18176789pgq.246.2019.05.20.09.41.07; Mon, 20 May 2019 09:41:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bG6mCGeH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389777AbfETMat (ORCPT + 99 others); Mon, 20 May 2019 08:30:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:47050 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390150AbfETMan (ORCPT ); Mon, 20 May 2019 08:30:43 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F17E520675; Mon, 20 May 2019 12:30:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558355442; bh=Y8pn0klUBCj5HAGh+Ju8aJxxSJY616eLJ6p9gRpf8b4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bG6mCGeHfajWWUnXuL6VTG0wlznq8/WMEt4uLk3gaJIhlR0VuzdlWeTxNoYtnEcnt bNPfHRLLvHJNqkwYIidG5QGJlxRRykYYbCj39yeEGNuPnF3KMVHfr+4c488+1NYf5d q7IewBH8P8ZcsJI0d6laScxvnOMk+BMQDUJulX/o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lukas Czerner , Theodore Tso , stable@kernel.org Subject: [PATCH 5.0 103/123] ext4: fix data corruption caused by overlapping unaligned and aligned IO Date: Mon, 20 May 2019 14:14:43 +0200 Message-Id: <20190520115251.893061163@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190520115245.439864225@linuxfoundation.org> References: <20190520115245.439864225@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lukas Czerner commit 57a0da28ced8707cb9f79f071a016b9d005caf5a upstream. Unaligned AIO must be serialized because the zeroing of partial blocks of unaligned AIO can result in data corruption in case it's overlapping another in flight IO. Currently we wait for all unwritten extents before we submit unaligned AIO which protects data in case of unaligned AIO is following overlapping IO. However if a unaligned AIO is followed by overlapping aligned AIO we can still end up corrupting data. To fix this, we must make sure that the unaligned AIO is the only IO in flight by waiting for unwritten extents conversion not just before the IO submission, but right after it as well. This problem can be reproduced by xfstest generic/538 Signed-off-by: Lukas Czerner Signed-off-by: Theodore Ts'o Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman --- fs/ext4/file.c | 7 +++++++ 1 file changed, 7 insertions(+) --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -264,6 +264,13 @@ ext4_file_write_iter(struct kiocb *iocb, } ret = __generic_file_write_iter(iocb, from); + /* + * Unaligned direct AIO must be the only IO in flight. Otherwise + * overlapping aligned IO after unaligned might result in data + * corruption. + */ + if (ret == -EIOCBQUEUED && unaligned_aio) + ext4_unwritten_wait(inode); inode_unlock(inode); if (ret > 0)