From patchwork Mon Jan 9 03:44:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13092916 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id E2A8DC5479D for ; Mon, 9 Jan 2023 03:45:27 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pEj6E-0006hH-Ol; Mon, 09 Jan 2023 03:45:26 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pEj6D-0006gv-1X for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:25 +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=pYIsgz6M0IEbdXuv1QgRwh57qWZajCSyHE1sCPMFfs8=; b=dODclNPd+8iFolmFQf0t5QpQqH mT7pq4BegcGNdya4GS2GY9LPcC1Q55kAVdFXB4kY3u/P944Dd8r4xyfS6NpwpN6tufAtV0ac9dO+T 0aOC1E7PB/7crcMPYj72FVwXUs8ElCV6hLC2RQl6H9OFuu1ssayW2H097BHL3FgNjOlM=; 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=pYIsgz6M0IEbdXuv1QgRwh57qWZajCSyHE1sCPMFfs8=; b=j LShrMZUzIQCXGVssXmXUocjxBF61JaocsWPntPl2lWqE/U+1zcWvbTMrHQ4tLXfqEwtPXufKzl8bi drJqLwhIUAsun8WMm6+is8e+OLdXaj0wIkX5Jg++YXXWTlTN1Wl4USLClp/C1YBWuA5HHiuImgHbH OSc+wqLt07HS9T1c=; Received: from ams.source.kernel.org ([145.40.68.75]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1pEj68-0003WL-2I for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:24 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id C5A93B80B9C for ; Mon, 9 Jan 2023 03:45:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 60CC0C433EF; Mon, 9 Jan 2023 03:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673235912; bh=o0QGez8JNtfwfRegKYb2IXEmNk+VVLuwDSFz2DvJBSY=; h=From:To:Cc:Subject:Date:From; b=Dy6vAaYUAxbL0xhJdA/zEa4jCKnVodSGMc2y9Q4A0ow9KBjQxCrDnqHLIbsIXZa2f TywH6ZfEZpyz2yPG5trS6msnAOgiPWvdRGF689/7tOTnVZXt+c73hS2ZSJj40cON5b 1DB/RBLilUSOMCk0SYq0HJOc45t9r67XXCiwulrNyVs9gY399xQy2a3Nge7XowtrWL I0KOZxviWblfWtzlRft6Zq4ovvUOxvHeIzgJNnw/xj7DXwTuPrF63qVZoUSU5kXlng viw1wNIdvG/P2pRZZ8AYfVRjnb3iad7ZJoK333Ln8ZzSQn+PauwxNNeaiohdMwcIn4 OLozjyTItmxKw== From: Chao Yu To: jaegeuk@kernel.org Date: Mon, 9 Jan 2023 11:44:49 +0800 Message-Id: <20230109034453.490176-1-chao@kernel.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Headers-End: 1pEj68-0003WL-2I Subject: [f2fs-dev] [PATCH 1/5] f2fs: introduce trace_f2fs_replace_atomic_write_block 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: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Commit 3db1de0e582c ("f2fs: change the current atomic write way") removed old tracepoints, but it missed to add new one, this patch fixes to introduce trace_f2fs_replace_atomic_write_block to trace atomic_write commit flow. Fixes: 3db1de0e582c ("f2fs: change the current atomic write way") Signed-off-by: Chao Yu --- fs/f2fs/segment.c | 3 +++ include/trace/events/f2fs.h | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 8b773f3eef3b..c6f6d0618164 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -255,6 +255,9 @@ static int __replace_atomic_write_block(struct inode *inode, pgoff_t index, } f2fs_put_dnode(&dn); + + trace_f2fs_replace_atomic_write_block(inode, F2FS_I(inode)->cow_inode, + index, *old_addr, new_addr, recover); return 0; } diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h index 3852085198fb..fe6bcf5f917d 100644 --- a/include/trace/events/f2fs.h +++ b/include/trace/events/f2fs.h @@ -1290,6 +1290,43 @@ DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite, TP_ARGS(page, type) ); +TRACE_EVENT(f2fs_replace_atomic_write_block, + + TP_PROTO(struct inode *inode, struct inode *cow_inode, pgoff_t index, + block_t old_addr, block_t new_addr, bool recovery), + + TP_ARGS(inode, cow_inode, index, old_addr, new_addr, recovery), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(ino_t, ino) + __field(ino_t, cow_ino) + __field(pgoff_t, index) + __field(block_t, old_addr) + __field(block_t, new_addr) + __field(bool, recovery) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->ino = inode->i_ino; + __entry->cow_ino = cow_inode->i_ino; + __entry->index = index; + __entry->old_addr = old_addr; + __entry->new_addr = new_addr; + __entry->recovery = recovery; + ), + + TP_printk("dev = (%d,%d), ino = %lu, cow_ino = %lu, index = %lu, " + "old_addr = 0x%llx, new_addr = 0x%llx, recovery = %d", + show_dev_ino(__entry), + __entry->cow_ino, + (unsigned long)__entry->index, + (unsigned long long)__entry->old_addr, + (unsigned long long)__entry->new_addr, + __entry->recovery) +); + TRACE_EVENT(f2fs_filemap_fault, TP_PROTO(struct inode *inode, pgoff_t index, unsigned long ret), From patchwork Mon Jan 9 03:44:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13092917 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id EE7F7C67871 for ; Mon, 9 Jan 2023 03:45:27 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pEj6C-0006Gx-Jd; Mon, 09 Jan 2023 03:45:24 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pEj6B-0006Gi-FQ for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:23 +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:References: In-Reply-To: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:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=euvkepgFT3TX951BGNdItfqdJ54GGwjTkv52+qkVxEQ=; b=igrlS7IXT9UZoplz0wmp0qFytc KCpK/oJglsNE6XJkCqP+0EaIU2kegC/z9WdH1+ZwodqBbE8VaJKPT//Y9YeOrqU8w+nks6LXr+XAW cR5Y+wiVJT5a4lbKNXqx3H+7Oq5Hk39x4u13Xx5HNh6BuACmJREQbkarqwin7klt0JLg=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: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:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=euvkepgFT3TX951BGNdItfqdJ54GGwjTkv52+qkVxEQ=; b=gSSHTfCXcDpDDQsg2ivTnuJDov LOuSUrwEE4mH2FkKYX3GOb8NvG55uQirK8arTzgEqA/JnRLtDXdF2gGx6M5fu7pvTAMPcHiywem33 zuXFiqYzRS4KBRPKk1Qe0LlM3i2evQo4ayPpy5TdsaD5R8lmnTl6FrSSqO0LjH/DUoQA=; Received: from ams.source.kernel.org ([145.40.68.75]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1pEj69-00AtiJ-Jt for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:23 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5ACFEB80C7B for ; Mon, 9 Jan 2023 03:45:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EEBC1C433F2; Mon, 9 Jan 2023 03:45:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673235914; bh=z+rEkFMv+wRfNSPG7VtFK07vpI0/Mb7wF/w9G4C5Uac=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HtGz6EvXa+PBbLwGnayMZXLkItsmkkRMAzq4RG4PAi2baRQI+1yaWsh/aM3xDxP2v 3Vjdh6bHI6i/e4n+cSTmMDxh1IPlD7HACU6HAUuQgLw6uXVeZk1UTEHfGHCg4xyF+V suZvvZrCquqM7Fe88ORTzPJQEgckViUKuctoe0+hrsgRFsS1ME4falCNouyTrbyXvj kXliOVbAeEV9pt7voeRaoA4ACYnq8fpfm05Ao6f/Vc9vmBTJlZI6AczeccBXXOIjrz H6bFMyumDZIkYiUL5B9lQFVw7LjzK2c+syKYUp8wN5e2CnZn8nnQFRR95pU2mWGLdc uPACqtsXlbEnA== From: Chao Yu To: jaegeuk@kernel.org Date: Mon, 9 Jan 2023 11:44:50 +0800 Message-Id: <20230109034453.490176-2-chao@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109034453.490176-1-chao@kernel.org> References: <20230109034453.490176-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1pEj69-00AtiJ-Jt Subject: [f2fs-dev] [PATCH 2/5] f2fs: clear atomic_write_task in f2fs_abort_atomic_write() 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: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Otherwise, last .atomic_write_task will be remained in structure f2fs_inode_info, resulting in aborting atomic_write accidentally in race case. Meanwhile, clear original_i_size as well. Fixes: 7a10f0177e11 ("f2fs: don't give partially written atomic data from process crash") Signed-off-by: Chao Yu --- fs/f2fs/segment.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index c6f6d0618164..5f7e42b355eb 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -201,9 +201,12 @@ void f2fs_abort_atomic_write(struct inode *inode, bool clean) clear_inode_flag(inode, FI_ATOMIC_FILE); stat_dec_atomic_inode(inode); + F2FS_I(inode)->atomic_write_task = NULL; + if (clean) { truncate_inode_pages_final(inode->i_mapping); f2fs_i_size_write(inode, fi->original_i_size); + fi->original_i_size = 0; } } From patchwork Mon Jan 9 03:44:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13092914 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id D9C4EC61DB3 for ; Mon, 9 Jan 2023 03:45:27 +0000 (UTC) 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.95) (envelope-from ) id 1pEj6C-0004gF-QC; Mon, 09 Jan 2023 03:45:24 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pEj6B-0004g9-UT for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:23 +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:References: In-Reply-To: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:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=rHRshsuBf+8lCGtLmK89FWYAz7KW/e2jrXHpUqGarjU=; b=B3nSe4jc/yu2LGd8FUaimUpNC+ opaEorW1TaqHhdfFBBydfsPLIH7kiMktOHPPlekn2wFoCGk9cEnyEJ0RKCClTwKPLerllsGw00uEs 7XXbbLBvT39MElAh5/6+2Ancz+tTEn/c8GCUdh8vM8Gq9SPSHksZYO4AgJfmj4b3j1CI=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: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:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=rHRshsuBf+8lCGtLmK89FWYAz7KW/e2jrXHpUqGarjU=; b=cxS6GCP1M4IqlopHFQ5bYPx3xI 7tPbwe3MWfv0wLwiudwAY3ungDA9VQfbyltgjn0l8/cKbPlz/cX5sDZqnFYfvQug/aLSKhLvUYXKt yithKz9uSF2Yz96vZdELkSKKjKddJXm+N5vzTjHkU6NHublr/qj72A+ETeJtOiy3qr8s=; Received: from ams.source.kernel.org ([145.40.68.75]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1pEj6B-0003WY-88 for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:23 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 0042BB80CA0 for ; Mon, 9 Jan 2023 03:45:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8769EC433F0; Mon, 9 Jan 2023 03:45:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673235915; bh=hVQIDpSVJOnPY2pK3qWpbcFhTb9CAdeMNX3yCL8XtEw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tjJos42kd7YwDy512Qj+aLjV4Lf4PU/FjJhfrLf/9lBdLNo8IV4QeYNs4yxC6TXdn LCk6WkCi4srQ/ohEXXB8RUPAPD0oDBPiVtQ3hYVh2j/BBoJKKfDi21Oj+gXI6tucyN azQGIomcooCa+UMy1wTUrISbPzyjY0/Gzd9by6iz/3VuArvhLCEPhcWo42enhqRVgn PzMSaOd0YiKYCJZcjlPDvLNP1CXttCtFTqpJ2HAuenfd/0op4YNFEwfJ1bNqShu9bK XeqL4Sg0O3/3/bRFqJxuO4HDsFrBxKiZJnxOCpQg9MDiKYP1c0KYGQ4Tk4QmLyJOME SbusW1M3r6woQ== From: Chao Yu To: jaegeuk@kernel.org Date: Mon, 9 Jan 2023 11:44:51 +0800 Message-Id: <20230109034453.490176-3-chao@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109034453.490176-1-chao@kernel.org> References: <20230109034453.490176-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1pEj6B-0003WY-88 Subject: [f2fs-dev] [PATCH 3/5] f2fs: fix to abort atomic write only during do_exist() 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: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Commit 7a10f0177e11 ("f2fs: don't give partially written atomic data from process crash") attempted to drop atomic write data after process crash, however, f2fs_abort_atomic_write() may be called from noncrash case, fix it by adding missed PF_EXITING check condition f2fs_file_flush(). - application crashs - do_exit - exit_signals -- sets PF_EXITING - exit_files - put_files_struct - close_files - filp_close - flush (f2fs_file_flush) - check atomic_write_task && PF_EXITING - f2fs_abort_atomic_write Fixes: 7a10f0177e11 ("f2fs: don't give partially written atomic data from process crash") Signed-off-by: Chao Yu --- fs/f2fs/file.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 434c0d89c145..7b62c533f6d3 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -1876,7 +1876,8 @@ static int f2fs_file_flush(struct file *file, fl_owner_t id) * until all the writers close its file. Since this should be done * before dropping file lock, it needs to do in ->flush. */ - if (F2FS_I(inode)->atomic_write_task == current) + if (F2FS_I(inode)->atomic_write_task == current && + (current->flags & PF_EXITING)) f2fs_abort_atomic_write(inode, true); return 0; } From patchwork Mon Jan 9 03:44:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13092915 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id CE6A6C54EBD for ; Mon, 9 Jan 2023 03:45:27 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pEj6F-0006HL-3D; Mon, 09 Jan 2023 03:45:27 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pEj6D-0006H7-6e for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:25 +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:References: In-Reply-To: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:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=BdLqJeLtzpNkFpkUgEU+4QDrBz/bontDoMJt5v1nsWQ=; b=jtMfEKmyETlRU9pGXG6ksnHNmf L5Uo5CRO28Ed6DNl1luZlBDS3wTvCHLSFis5MNHMw6AVFuNJBs1HOqUf8HVMStghMK+yuBhkM5O1m 8FB+a6Fplz00Joy4ueSszg1Wmnw6Apvm9Jttn1yf/duYj1foiuCoAesugnY731IZRQt0=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: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:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=BdLqJeLtzpNkFpkUgEU+4QDrBz/bontDoMJt5v1nsWQ=; b=HqEoll8ek2w4rL8IE9K3PRgqCr CSkGJYLPufKuiMnk3NBGcNbmsDyb7oLbKYTUV7wKP+7HJXmjl/DxC8aihj3M+DLM064ljnLoUMKjX DdGF/wLnmhzp048/wOpAEbCndxyP1uzaqtIKZceXmzBuAa38wZCik7JRNcvdcKkNLP00=; Received: from dfw.source.kernel.org ([139.178.84.217]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1pEj6B-0003Wa-E9 for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:25 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 05EA860EE9; Mon, 9 Jan 2023 03:45:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1F702C433F2; Mon, 9 Jan 2023 03:45:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673235917; bh=p3rbTOR1QFjXLaPSnR9uaBLuFIGzPk439CwPaP0U//8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=usr0EL8S2TWfVQj+6ygM2g8ntOS+6+nOYBoOMFpmSClbP1nd1kNQp7S0NZOFyUCNs k2HR7uMtEeEmp/KhHGsdYqzmficO41WyG+xvUemkT6xd84HnuKBzV/4Xfi2dJT0z4i dMa7uGrneuB8tYADOtTa07DJDdXbNYBoDFtdTdL0CBA2yvp5YnleqCg3GSwv2DmxyQ QkkSp9uRuKu7VHPhSnMJtuQx5DD8x37MVu9xe2Hndbhn6e+gIVTpFzufWGr3LOuvGC Qr1b7CW/u8GPRXJRMSIgx2+ptZfrdPBBj4WN0rLjQuXO3O1tdu/ZqfSJVkY7yVvQnS e1Av9wykN6wnw== From: Chao Yu To: jaegeuk@kernel.org Date: Mon, 9 Jan 2023 11:44:52 +0800 Message-Id: <20230109034453.490176-4-chao@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109034453.490176-1-chao@kernel.org> References: <20230109034453.490176-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1pEj6B-0003Wa-E9 Subject: [f2fs-dev] [PATCH 4/5] f2fs: fix to avoid race condition of f2fs_abort_atomic_write() 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: syzbot+9b7be0f1263ed2dbfbba@syzkaller.appspotmail.com, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Syzbot reports a kernel panic as below: kernel BUG at fs/inode.c:1763! RIP: 0010:iput+0x68/0x80 fs/inode.c:1763 Call Trace: f2fs_abort_atomic_write+0xea/0x4f0 fs/f2fs/segment.c:196 f2fs_ioc_commit_atomic_write+0x19f/0x260 fs/f2fs/file.c:2157 __f2fs_ioctl+0x26f0/0xaaf0 fs/f2fs/file.c:4154 f2fs_ioctl+0x18e/0x220 fs/f2fs/file.c:4242 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:870 [inline] __se_sys_ioctl fs/ioctl.c:856 [inline] __x64_sys_ioctl+0x197/0x210 fs/ioctl.c:856 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd The root cause is there may be race case in between f2fs_abort_atomic_write() called from f2fs_file_flush() and f2fs_ioc_commit_atomic_write(). Thread A Thread B - close - close_fd - filp_close - f2fs_file_flush - f2fs_ioctl - f2fs_ioc_commit_atomic_write - f2fs_abort_atomic_write - iput(cow_inode) - f2fs_evict_inode - clear_inode - inode->i_state = I_FREEING | I_CLEAR; - f2fs_abort_atomic_write - iput(cow_inode) - BUG_ON(inode->i_state & I_CLEAR) - cow_inode = NULL - cow_inode = NULL So let's cover f2fs_abort_atomic_write() with f2fs_inode_info.i_atomic_sem lock to avoid this race condition. Reported-by: syzbot+9b7be0f1263ed2dbfbba@syzkaller.appspotmail.com Fixes: 3db1de0e582c ("f2fs: change the current atomic write way") Signed-off-by: Chao Yu --- fs/f2fs/f2fs.h | 1 + fs/f2fs/segment.c | 6 +++++- fs/f2fs/super.c | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 70ed01aca6f6..fa41c0dad308 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -854,6 +854,7 @@ struct f2fs_inode_info { struct extent_tree *extent_tree[NR_EXTENT_CACHES]; /* cached extent_tree entry */ struct inode *cow_inode; /* copy-on-write inode for atomic write */ + struct f2fs_rwsem i_atomic_sem; /* protect atomic write context */ /* avoid racing between foreground op and gc */ struct f2fs_rwsem i_gc_rwsem[2]; diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 5f7e42b355eb..245d7adef6c6 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -189,8 +189,10 @@ void f2fs_abort_atomic_write(struct inode *inode, bool clean) { struct f2fs_inode_info *fi = F2FS_I(inode); + f2fs_down_write(&fi->i_atomic_sem); + if (!f2fs_is_atomic_file(inode)) - return; + goto out_unlock; clear_inode_flag(fi->cow_inode, FI_COW_FILE); iput(fi->cow_inode); @@ -208,6 +210,8 @@ void f2fs_abort_atomic_write(struct inode *inode, bool clean) f2fs_i_size_write(inode, fi->original_i_size); fi->original_i_size = 0; } +out_unlock: + f2fs_up_write(&fi->i_atomic_sem); } static int __replace_atomic_write_block(struct inode *inode, pgoff_t index, diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index 0e8b3e27fa14..3edc8630eb4b 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -1411,6 +1411,7 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb) init_f2fs_rwsem(&fi->i_gc_rwsem[READ]); init_f2fs_rwsem(&fi->i_gc_rwsem[WRITE]); init_f2fs_rwsem(&fi->i_xattr_sem); + init_f2fs_rwsem(&fi->i_atomic_sem); /* Will be used by directory only */ fi->i_dir_level = F2FS_SB(sb)->dir_level; From patchwork Mon Jan 9 03:44:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13092918 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 95E6CC677F1 for ; Mon, 9 Jan 2023 03:45:29 +0000 (UTC) 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.95) (envelope-from ) id 1pEj6H-0004gb-4r; Mon, 09 Jan 2023 03:45:29 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pEj6F-0004gO-Ci for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:27 +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:References: In-Reply-To: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:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ddB79ksns4t2a1Y6SpOqk674sSKsAYNx9zfbCxBSxo4=; b=PutR15L3lcJP0CzVHl0n3/TiwL 9O5R/K6iuqRYlzOqxZYRocfZic36Wws5CXvyJ/BEtWeXRochE5aTmq5q2jJ2Hv6aEmxKNF/4smXUE pqGS7v3OQFrRfI1dBpUWUPlFmKJr9ORknw6m6k+QTmQQFp/4YlOxOm5Zf+D47qTd2uHs=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: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:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=ddB79ksns4t2a1Y6SpOqk674sSKsAYNx9zfbCxBSxo4=; b=UzBSgXbm4mnMT9GnZVZpKJn0SV Kp9er99l1lMYiyhkPvsWH2D8GicYa24VMVmE/hd7rN8Diq15it16gMlgx6700K/LpEIhUYUThjWUL pgEVpPTJdm2Kkeg/9HQ7TIG0pixAXjLpHRSMr8Xn5x18epnjJCLAeQMOmX6+XnPH7za4=; Received: from ams.source.kernel.org ([145.40.68.75]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1pEj6E-00AtiT-JQ for linux-f2fs-devel@lists.sourceforge.net; Mon, 09 Jan 2023 03:45:27 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 54A4FB80C9F for ; Mon, 9 Jan 2023 03:45:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D7FC3C433D2; Mon, 9 Jan 2023 03:45:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673235919; bh=hKDOr8JIcD75xkm83bOzZlDNnSHJYgKqfFQhYck7fao=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fnz5Izj6HLtcxq0IIK6AI95gkyGbaKgKRuG+asb279Pl0s1mm1k0R+E41pV8g8Zew 4jNTdjkDcybVvv8+/nEOzETVYM7RTOFSYd65UoKD8a7On4TvdZSP2JVXI6TviD4OrE U7iySzqLi/1nzSJkYhKTYg80ZDPvm7Z42YvVBWht0Wg+lheknO4vMaCbuf91Y5FlX3 qwp10urnh9YwPbTsLjAYdLObjGSlGqOEl7aNM+4Cx7q3ZIlzMArRNsG6k0DOvAoW1V vwN0Q6yXUSW4drJRhnKnkcWpVaVajeZg82U0UAGynd+/QVfuz8PlL0eCX5d4wxyU3M /KHS/LAe3//cA== From: Chao Yu To: jaegeuk@kernel.org Date: Mon, 9 Jan 2023 11:44:53 +0800 Message-Id: <20230109034453.490176-5-chao@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109034453.490176-1-chao@kernel.org> References: <20230109034453.490176-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1pEj6E-00AtiT-JQ Subject: [f2fs-dev] [PATCH 5/5] f2fs: fix to avoid race condition of atomic write 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: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Thread A Kworker - application crashs - do_exit - close_files - filp_close - flush (f2fs_file_flush) - writepages - f2fs_write_cache_pages - f2fs_write_single_data_page - f2fs_do_write_data_page - check f2fs_is_atomic_file - f2fs_abort_atomic_write - check f2fs_is_atomic_file - iput(cow_inode) - cow_inode = NULL - set_new_dnode(cow_inode) Fix this issue by covering f2fs_do_write_data_page() with i_atomic_sem. Fixes: 3db1de0e582c ("f2fs: change the current atomic write way") Signed-off-by: Chao Yu --- fs/f2fs/data.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index c940da1c540f..1645b8a1b904 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -2637,13 +2637,24 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) struct dnode_of_data dn; struct node_info ni; bool ipu_force = false; + bool atomic_locked = false; int err = 0; /* Use COW inode to make dnode_of_data for atomic write */ - if (f2fs_is_atomic_file(inode)) + if (f2fs_is_atomic_file(inode)) { + f2fs_down_write(&F2FS_I(inode)->i_atomic_sem); + atomic_locked = true; + + if (!f2fs_is_atomic_file(inode)) { + /* atomic write is aborted */ + err = -ENOENT; + goto out_err; + } + set_new_dnode(&dn, F2FS_I(inode)->cow_inode, NULL, NULL, 0); - else + } else { set_new_dnode(&dn, inode, NULL, NULL, 0); + } if (need_inplace_update(fio) && f2fs_lookup_read_extent_cache_block(inode, page->index, @@ -2652,7 +2663,8 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) DATA_GENERIC_ENHANCE)) { f2fs_handle_error(fio->sbi, ERROR_INVALID_BLKADDR); - return -EFSCORRUPTED; + err = -EFSCORRUPTED; + goto out_err; } ipu_force = true; @@ -2661,8 +2673,10 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) } /* Deadlock due to between page->lock and f2fs_lock_op */ - if (fio->need_lock == LOCK_REQ && !f2fs_trylock_op(fio->sbi)) - return -EAGAIN; + if (fio->need_lock == LOCK_REQ && !f2fs_trylock_op(fio->sbi)) { + err = -EAGAIN; + goto out_err; + } err = f2fs_get_dnode_of_data(&dn, page->index, LOOKUP_NODE); if (err) @@ -2710,6 +2724,9 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) set_inode_flag(inode, FI_UPDATE_WRITE); } trace_f2fs_do_write_data_page(fio->page, IPU); + + if (atomic_locked) + f2fs_up_write(&F2FS_I(inode)->i_atomic_sem); return err; } @@ -2747,6 +2764,9 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) out: if (fio->need_lock == LOCK_REQ) f2fs_unlock_op(fio->sbi); +out_err: + if (atomic_locked) + f2fs_up_write(&F2FS_I(inode)->i_atomic_sem); return err; }