From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751655AbdKKI0J (ORCPT ); Sat, 11 Nov 2017 03:26:09 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:45903 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751324AbdKKI0H (ORCPT ); Sat, 11 Nov 2017 03:26:07 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20171111082605epoutp04006e82199a100456737146ff3951a4b3~1_pR-5wNB2709427094epoutp049 X-AuditID: b6c32a4a-149ff70000001145-81-5a06b41ccd80 From: "LiFan" To: "'Chao Yu'" , "'Chao Yu'" , "'Jaegeuk Kim'" Cc: , Subject: [f2fs-dev] [PATCH RESEND] f2fs: validate before set/clear free nat bitmap Date: Sat, 11 Nov 2017 16:25:21 +0800 Message-ID: <000401d35ac6$b6c36700$244a3500$@samsung.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Content-Language: zh-cn Thread-Index: AdNaxp0XDg+WEymhSP2DEbf8j1RBFQ== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBKsWRmVeSWpSXmKPExsWy7bCmhq7MFrYog52XZC1OTz3LZPFk/Sxm i0uL3C0u75rDZjH18VpWB1aPliNvWT02repk89i94DOTx+dNcgEsUVw2Kak5mWWpRfp2CVwZ MxdqFrzgrrhx+D9LA+Mzzi5GTg4JAROJo79+s3YxcnEICexmlHjd0sAOkhAS+MQosXtxPYT9 jVFi9mQzmIYb834xQsT3MkrcvugC0fyUUWJd+0WWLkYODjYBDYmpm2VATBGBbImDfXIg5cwC PhK/b91jBrGFBUIkZk09DbaKRUBVYt6rbWAjeQUsJQ6sXsQOYQtKnJz5hAWiV15i+9s5zBAn KEjsOPuaESIuLnGntZUVxBYR0JP4sWYLC8g5EgI72CT2rjvICtHgIjH/8AIWCFtY4tXxLewQ tpTEy/42KHsdo8TnMxYQzdsZJeZ9/MgEkbCW2LzmFzvIM8wCmhLrd+lDhG0lmm/DHMEn0fv7 CRNIiYQAr0RHmxBEiZrEy9WzoNZ6SLRNuQh1jqPE5EMfGScwKs5C8uYsJG/OQvLaLITFCxhZ VjFKphYU56anFpsWGOWllusVJ+YWl+al6yXn525iBKcXLa8djMvO+RxiFOBgVOLhNXBiixJi TSwrrsw9xCjBwawkwssWBhTiTUmsrEotyo8vKs1JLT7EKM3BoiTOe2xnaaSQQHpiSWp2ampB ahFMlomDU6qBcbJK84VPagvnFmd+q9qyq0emjPtPqe4HK8Z7XJklW+9qzIqsmv3I3N5rlk/v 3NLL96e4vb9kN40779mFBb1VLxWunj5tf1beVH7uh4cPZpp6FU9qdTe7ksd/N8C45BWHs+n3 QNEH6RMcVhpXRkr8381epSzn6We/SbXp+tdAhw9b51zOcV2UocRSnJFoqMVcVJwIAL9bIfIr AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrCLMWRmVeSWpSXmKPExsWy7bCSvK7MFrYog/3b2C1OTz3LZPFk/Sxm i0uL3C0u75rDZjH18VpWB1aPliNvWT02repk89i94DOTx+dNcgEsUVw2Kak5mWWpRfp2CVwZ MxdqFrzgrrhx+D9LA+Mzzi5GTg4JAROJG/N+MXYxcnEICexmlLh99zczREJGYsHhL+wQtrDE yn/P2SGKHjNK7Jn2Asjh4GAT0JCYulkGpEZEIFfi9KLHYPXMAn4Sux6uAJsjLBAksejBaSYQ m0VAVWLeq22MIDavgKXEgdWL2CFsQYmTM5+wgIxkFtCTaNvICDFGXmL72zlQ5yhI7Dj7Giou LnGntZUVYq2exI81W1gmMArOQjJpFsKkWUgmzULSvYCRZRWjZGpBcW56brFhgWFearlecWJu cWleul5yfu4mRnDYa2nuYLy8JP4QowAHoxIPb4cLW5QQa2JZcWXuIUYJDmYlEV62MKAQb0pi ZVVqUX58UWlOavEhRmkOFiVx3qd5xyKFBNITS1KzU1MLUotgskwcnFINjBPc+b6sf54suXNC 4+kjHT/6/x+6WLF5s6rh6SUMkzdoaPA1N7O9+cb5THqhTO7Lu1ZKf/7J7WE3/8IY8yTr0VGG j6d7dp3lnsJ7zeXdtd1mpQuq6/eXaT2/eLplDX+D6oRDuYvr536xi/R6k/clV7PI59eJ2//N fv5aeJW7Pzr+7Z+rNY/uXVulxFKckWioxVxUnAgA5VXL93cCAAA= X-CMS-MailID: 20171111082604epcas5p472a0e6a07db371cb050eb6a13d8f0676 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-MTR: 20171111082604epcas5p472a0e6a07db371cb050eb6a13d8f0676 CMS-TYPE: 105P X-CMS-RootMailID: 20171111082604epcas5p472a0e6a07db371cb050eb6a13d8f0676 X-RootMTR: 20171111082604epcas5p472a0e6a07db371cb050eb6a13d8f0676 References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In flush_nat_entries, all dirty nats will be flushed and if their new address isn't NULL_ADDR, their bitmaps will be updated, the free_nid_count of the bitmaps will be increased regardless of whether the nats have already been occupied before. This could lead to wrong free_nid_count. So this patch checks the status of the bits before actually set/clear them. Fixes: 586d1492f301 ("f2fs: skip scanning free nid bitmap of full NAT blocks") Signed-off-by: Fan li --- fs/f2fs/node.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index d234c6e..b965a53 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -1906,15 +1906,18 @@ static void update_free_nid_bitmap(struct f2fs_sb_info *sbi, nid_t nid, if (!test_bit_le(nat_ofs, nm_i->nat_block_bitmap)) return; - if (set) + if (set) { + if (test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) + return; __set_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); - else - __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); - - if (set) nm_i->free_nid_count[nat_ofs]++; - else if (!build) - nm_i->free_nid_count[nat_ofs]--; + } else { + if (!test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) + return; + __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); + if (!build) + nm_i->free_nid_count[nat_ofs]--; + } } static void scan_nat_page(struct f2fs_sb_info *sbi, -- 2.7.4