Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp4597057pxu; Mon, 21 Dec 2020 17:25:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJwg3PVZWKlEjDNBfEWZpwoUe7Y/80p6+SslTHzvVzTyPrp+PCT1FsCHGl3FYJYlPmNlTxLW X-Received: by 2002:a17:906:6a45:: with SMTP id n5mr18150434ejs.514.1608600357382; Mon, 21 Dec 2020 17:25:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608600357; cv=none; d=google.com; s=arc-20160816; b=Y/FLQEhy3L1chZVGGywUeJx+M2kubjbtpNj/q9CWUijpJmmiZCfZmXdX7pklxmHgIq ILwjzxYa1OpPHxJTc1FjGnd5hQ1LuWW7K0U/jsrM9jgvZbGCAIF+T1rtuK6LAkpFNTrO hSyz12cfNEl4q5XE4UpppcdiBcykIQdWrE3dhJYQHzh2r4IyQE41UbYcqa8bQY0aYmEG 7/MDWrxDYapR9tfwSouc5YbH5KwqJdpmrA88tuA72eu1AFGXiLnEPvjraDz1T544Y6WF prOVkkBe5Fvrj/o70oaR7ortSLTiaWN65t4N58fnNRWi1oKIk3ZXxFQWTwKcAZfs55GF O72A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:references:in-reply-to :subject:cc:date:to:from; bh=EqzYXMmcy+lMLPT2meHJGm/0IwTI34jCsaTsfEthz7I=; b=YrQg1601s7AsMPeEz/j+RmN44H3+mPA6v131chAlkftIJ0WNciIkX0svhBzFoVY5VP 6PMQZMrB8JWnNW48pR9JuLqAYC5XJv87qwXPYXqlzN3sYa3LD7ZBU37hCJ66kkZ02F7F 1wQgVj9Yz1ft41de88XJhkcnQ1M9J55W5bJoxUuhi9zuai1XP1C+TEQHwUHKZjK5eG1u 4yS+xDTAkAM8eQzjs07K/FT2V1A84PvDtp6VP+ICqnOAxqOTT7xjOPKrQhSKUBobPLuR CxK5NWvybg5k43kxbKVDKlmz25sA7z9OaiemQpjh6R+a8f9Wt5mDt02bn/delmcRkAOI aUdA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b27si9310472eje.466.2020.12.21.17.25.35; Mon, 21 Dec 2020 17:25:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726263AbgLVBYB (ORCPT + 99 others); Mon, 21 Dec 2020 20:24:01 -0500 Received: from mx2.suse.de ([195.135.220.15]:42076 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725780AbgLVBYB (ORCPT ); Mon, 21 Dec 2020 20:24:01 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 3206AAC7B; Tue, 22 Dec 2020 01:23:19 +0000 (UTC) From: NeilBrown To: Vivek Goyal , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-unionfs@vger.kernel.org Date: Tue, 22 Dec 2020 12:23:11 +1100 Cc: jlayton@kernel.org, vgoyal@redhat.com, amir73il@gmail.com, sargun@sargun.me, miklos@szeredi.hu, willy@infradead.org, jack@suse.cz, neilb@suse.com, viro@zeniv.linux.org.uk, hch@lst.de Subject: Re: [PATCH 1/3] vfs: Do not ignore return code from s_op->sync_fs In-Reply-To: <20201221195055.35295-2-vgoyal@redhat.com> References: <20201221195055.35295-1-vgoyal@redhat.com> <20201221195055.35295-2-vgoyal@redhat.com> Message-ID: <878s9qmy68.fsf@notabene.neil.brown.name> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Mon, Dec 21 2020, Vivek Goyal wrote: > Current implementation of __sync_filesystem() ignores the > return code from ->sync_fs(). I am not sure why that's the case. > > Ignoring ->sync_fs() return code is problematic for overlayfs where > it can return error if sync_filesystem() on upper super block failed. > That error will simply be lost and sycnfs(overlay_fd), will get > success (despite the fact it failed). > > Al Viro noticed that there are other filesystems which can sometimes > return error in ->sync_fs() and these errors will be ignored too. > > fs/btrfs/super.c:2412: .sync_fs =3D btrfs_sync_fs, > fs/exfat/super.c:204: .sync_fs =3D exfat_sync_fs, > fs/ext4/super.c:1674: .sync_fs =3D ext4_sync_fs, > fs/f2fs/super.c:2480: .sync_fs =3D f2fs_sync_fs, > fs/gfs2/super.c:1600: .sync_fs =3D gfs2_sync_fs, > fs/hfsplus/super.c:368: .sync_fs =3D hfsplus_sync_fs, > fs/nilfs2/super.c:689: .sync_fs =3D nilfs_sync_fs, > fs/ocfs2/super.c:139: .sync_fs =3D ocfs2_sync_fs, > fs/overlayfs/super.c:399: .sync_fs =3D ovl_sync_fs, > fs/ubifs/super.c:2052: .sync_fs =3D ubifs_sync_fs, > > Hence, this patch tries to fix it and capture error returned > by ->sync_fs() and return to caller. I am specifically interested > in syncfs() path and return error to user. > > I am assuming that we want to continue to call __sync_blockdev() > despite the fact that there have been errors reported from > ->sync_fs(). So this patch continues to call __sync_blockdev() > even if ->sync_fs() returns an error. > > Al noticed that there are few other callsites where ->sync_fs() error > code is being ignored. > > sync_fs_one_sb(): For this it seems desirable to ignore the return code. > > dquot_disable(): Jan Kara mentioned that ignoring return code here is fine > because we don't want to fail dquot_disable() just beacuse > caches might be incoherent. > > dquot_quota_sync(): Jan thinks that it might make some sense to capture > return code here. But I am leaving it untouched for > now. When somebody needs it, they can easily fix it. > > Signed-off-by: Vivek Goyal > --- > fs/sync.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/fs/sync.c b/fs/sync.c > index 1373a610dc78..b5fb83a734cd 100644 > --- a/fs/sync.c > +++ b/fs/sync.c > @@ -30,14 +30,18 @@ > */ > static int __sync_filesystem(struct super_block *sb, int wait) > { > + int ret, ret2; > + > if (wait) > sync_inodes_sb(sb); > else > writeback_inodes_sb(sb, WB_REASON_SYNC); >=20=20 > if (sb->s_op->sync_fs) > - sb->s_op->sync_fs(sb, wait); > - return __sync_blockdev(sb->s_bdev, wait); > + ret =3D sb->s_op->sync_fs(sb, wait); > + ret2 =3D __sync_blockdev(sb->s_bdev, wait); > + > + return ret ? ret : ret2; I'm surprised that the compiler didn't complain that 'ret' might be used uninitialized. NeilBrown > } >=20=20 > /* > --=20 > 2.25.4 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJCBAEBCAAsFiEEG8Yp69OQ2HB7X0l6Oeye3VZigbkFAl/hSn8OHG5laWxiQHN1 c2UuZGUACgkQOeye3VZigbnsaA//YWWMsKDY6jkZLXCd9xREfvs97olNMgHgIUde 0YHq8em987RQMOrwYSbVo6vfZs+RkrfhxmubpHZ6fMBqrZCwiyLYAyJi3uRQrb6B 50L7MbaCZq0SGq/wvvFTEVdNILo5wNPfPc5Huo1mlrv//TCTmYo/rBhBKT10/08z TifQq6eJhgnJHrOlI/9mc8ku/ODlQoXDAwY4XcEyyTcZ+ntbG4F1oV7v5NqZ45r3 F4jIhUyNtfghAHwmmW+gnkKbVBKd2TiWoe1EaCpAXLtdJY6GLdbv02HDqbZfKcrw urhT1mj9YmIH3/y2TqFq6WSTfZYRu51Dn8oNoPKVcP+3SOq/t11FAjPRE4IfAKWQ bT9bEa142joXdTduNaWWmUos69Fk3JAv7UJfGhzS0pCOEIU4ai8TjeJ4R2njKeup pFngZPCwrAiZfaIwdH2rp9TJjr7gsvNkLmogYBT9ZzLMQmHuJdroYRMWyteLy2+/ Ocrn2agVkNXPcHvlqHQ6IkFfj+zMGHOAxNX78+8+cyVYjO66zKIlF051RLJ+g1wh FnCyTai44liIE9nAieSskeMVEFLtNYDfQxPuHb4QHfYtFY6PzEI8LeehspoXJxio +5BmBsDU+1DsGGicPZzPNrqg6JqX0Vw8ylHzWmBlXt26lZyNG9ts26UnAtEK/CoF joOeRJY= =+/BP -----END PGP SIGNATURE----- --=-=-=--