From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1AC9C07E95 for ; Tue, 20 Jul 2021 01:04:01 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ABB41610D2 for ; Tue, 20 Jul 2021 01:04:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ABB41610D2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1m5eAy-00010w-6t; Tue, 20 Jul 2021 01:04:00 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m5eAw-00010g-FN for linux-f2fs-devel@lists.sourceforge.net; Tue, 20 Jul 2021 01:03:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=6tEyrdEH+pfsiArjSMxf1OGG+7Pt2ct8m9gjU9+CYt4=; b=OQL+Dc3h7FftlskkE6O9ser7wj YV3Ty0cpUATsV2FpLGdFpYJhfWucfbNqGvd2pkj1UTsz8Y125+uBc4Ouqetz2DGQaIy9RK+WvJNBt DOanxTKkKTnp6a1Eu+zngF9q6M3TEAlpg4XQfahauCsjKFfkRmQ6YZ1IUbnjOWyqfDm0=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=6tEyrdEH+pfsiArjSMxf1OGG+7Pt2ct8m9gjU9+CYt4=; b=Z 6Yny6mAtMHPWCiOXICctkYGrw4C6mGQUxrGSd8mr5lbUVbxSwjWbZmc8NDSojHZq4Vfm8eLmsaKz7 4+By1mMbXiKLANd19uU2EWZdr/Hwr4PSjscIXCffdmMl1O6VZs0zXfUYpuG9ZEZmsqFHSmu1gIdj3 zhkaSVeZHtWigcYE=; Received: from mail.kernel.org ([198.145.29.99]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1m5eAp-00E7dt-PC for linux-f2fs-devel@lists.sourceforge.net; Tue, 20 Jul 2021 01:03:58 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id CAD4A6108B; Tue, 20 Jul 2021 01:03:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626743019; bh=pW7dgvX8qNpOLEnDjntqz8ri5q5ehXQ54m1Yym7YAoU=; h=From:To:Cc:Subject:Date:From; b=HMZkCFsbIHvDiufTmXl4sfDXppA63ordedFTPOo5V9twOlfKNpYi4iOrKZpeyvSVM k5HESN425dyjLwuC43TMlu7h9Dq9Tr7LtTSPCuBAyBriSghPiDFDLiRgBUHjq30gWD IiRpEuJMq3OISvet0p2Bd0bBK1v2/p4LaQ+DtG63f5N5vxDjHDkh/FYxp6KREYgpJh lEEV4VfeSQev5m5dydFuLeYooMMmcTWIlScvYJR9tiWobKh1EfJLeoUNoUXDbJiZqS Jpq+Bx1pweKPbfruWdg0txB/X8j2338n8L7Uz+tv7OiM1IBzc+9jfqaJujCEb45o1c mQNlrNTCQ815A== From: Chao Yu To: jaegeuk@kernel.org Date: Tue, 20 Jul 2021 09:03:29 +0800 Message-Id: <20210720010329.3975-1-chao@kernel.org> X-Mailer: git-send-email 2.22.1 MIME-Version: 1.0 X-Headers-End: 1m5eAp-00E7dt-PC Subject: [f2fs-dev] [PATCH v3] f2fs: fix to force keeping write barrier for strict fsync mode X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chao Yu , linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net [1] https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg15126.html As [1] reported, if lower device doesn't support write barrier, in below case: - write page #0; persist - overwrite page #0 - fsync - write data page #0 OPU into device's cache - write inode page into device's cache - issue flush If SPO is triggered during flush command, inode page can be persisted before data page #0, so that after recovery, inode page can be recovered with new physical block address of data page #0, however there may contains dummy data in new physical block address. Then what user will see is: after overwrite & fsync + SPO, old data in file was corrupted, if any user do care about such case, we can suggest user to use STRICT fsync mode, in this mode, we will force to use atomic write sematics to keep write order in between data/node and last node, so that it avoids potential data corruption during fsync(). Signed-off-by: Chao Yu --- fs/f2fs/file.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 6afd4562335f..00b45876eaa1 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -301,6 +301,18 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end, f2fs_exist_written_data(sbi, ino, UPDATE_INO)) goto flush_out; goto out; + } else { + /* + * for OPU case, during fsync(), node can be persisted before + * data when lower device doesn't support write barrier, result + * in data corruption after SPO. + * So for strict fsync mode, force to use atomic write sematics + * to keep write order in between data/node and last node to + * avoid potential data corruption. + */ + if (F2FS_OPTION(sbi).fsync_mode == + FSYNC_MODE_STRICT && !atomic) + atomic = true; } go_write: /* -- 2.22.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel