From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753682AbcAHMYk (ORCPT ); Fri, 8 Jan 2016 07:24:40 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:48062 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751920AbcAHMYj (ORCPT ); Fri, 8 Jan 2016 07:24:39 -0500 X-AuditID: cbfee61b-f793c6d00000236c-fc-568faa85a957 From: Chao Yu To: Jaegeuk Kim Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] f2fs: skip releasing nodes in chindless extent tree Date: Fri, 08 Jan 2016 20:24:00 +0800 Message-id: <005b01d14a0f$8a600b10$9f202130$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-index: AdFKD1Y5SKdJ3vzbSyGxxwEi1TqrFw== Content-language: zh-cn X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNLMWRmVeSWpSXmKPExsVy+t9jAd3WVf1hBud+G1g8WT+L2eLSIneL y7vmsDkwe2xa1cnmsXvBZyaPz5vkApijuGxSUnMyy1KL9O0SuDKeX+9gL5jHU/GyeQtzA+Nf zi5GDg4JAROJB9c9uhg5gUwxiQv31rN1MXJxCAksZZTY23GGFcJ5xShxp/0IM0gVm4CKxPKO /0wgtgiQfWjRZXYQm1nAQ6Kx4zsriC0MZH/d8RmsnkVAVeLE1a8sIDavgKXEyTlN7BC2oMSP yfdYIHq1JNbvPM4EYctLbF7zlhniIgWJHWdfM0Ls0pNY9mQ9K0SNuMTGI7dYJjAKzEIyahaS UbOQjJqFpGUBI8sqRonUguSC4qT0XKO81HK94sTc4tK8dL3k/NxNjOAgfia9g/HwLvdDjAIc jEo8vBw7+sKEWBPLiitzDzFKcDArifCuWdofJsSbklhZlVqUH19UmpNafIhRmoNFSZx336XI MCGB9MSS1OzU1ILUIpgsEwenVAOjzhmdC8+ePTt6+W7Ibv5D8zlXJjKWrJOcenhVYkHzRIlr c3LqHv78JzRBdk5qxJ3JoicLl3AofZuV9nx+x+sJtszrL76ZdyIubaW2zNzwl88UoyU2zHvA 0ypuuE7s2OtLMp/Sd+3w47A+0e5sxPg8Tn/G5LP3bKR8Etm4bKbI5BfuufC91z/miBJLcUai oRZzUXEiAB5tmzFeAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If there are no nodes in extent tree, let's skip releasing step to avoid any overhead of grabbing/releasing extent tree lock. Signed-off-by: Chao Yu --- fs/f2fs/extent_cache.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c index 9febbc6..ccd5c63 100644 --- a/fs/f2fs/extent_cache.c +++ b/fs/f2fs/extent_cache.c @@ -570,9 +570,11 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink) /* 1. remove unreferenced extent tree */ list_for_each_entry_safe(et, next, &sbi->zombie_list, list) { - write_lock(&et->lock); - node_cnt += __free_extent_tree(sbi, et, true); - write_unlock(&et->lock); + if (atomic_read(&et->node_cnt)) { + write_lock(&et->lock); + node_cnt += __free_extent_tree(sbi, et, true); + write_unlock(&et->lock); + } list_del_init(&et->list); radix_tree_delete(&sbi->extent_tree_root, et->ino); @@ -618,6 +620,9 @@ free_node: for (i = 0; i < found; i++) { struct extent_tree *et = treevec[i]; + if (!atomic_read(&et->node_cnt)) + continue; + if (write_trylock(&et->lock)) { node_cnt += __free_extent_tree(sbi, et, false); write_unlock(&et->lock); @@ -641,7 +646,7 @@ unsigned int f2fs_destroy_extent_node(struct inode *inode) struct extent_tree *et = F2FS_I(inode)->extent_tree; unsigned int node_cnt = 0; - if (!et) + if (!et || !atomic_read(&et->node_cnt)) return 0; write_lock(&et->lock); -- 2.6.3