Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753622AbcCAVAh (ORCPT ); Tue, 1 Mar 2016 16:00:37 -0500 Received: from g2t4620.austin.hp.com ([15.73.212.81]:47294 "EHLO g2t4620.austin.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751822AbcCAVAd (ORCPT ); Tue, 1 Mar 2016 16:00:33 -0500 From: Waiman Long To: Alexander Viro , Jan Kara , Jeff Layton , "J. Bruce Fields" , Tejun Heo , Christoph Lameter Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Ingo Molnar , Peter Zijlstra , Andi Kleen , Dave Chinner , Boqun Feng , Scott J Norton , Douglas Hatch , Waiman Long Subject: [PATCH v5 0/5] vfs: Use per-cpu list for SB's s_inodes list Date: Tue, 1 Mar 2016 15:59:58 -0500 Message-Id: <1456866003-32441-1-git-send-email-Waiman.Long@hpe.com> X-Mailer: git-send-email 1.7.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3500 Lines: 85 v4->v5: - Fix the UP panic problem reported by 0day test by unifying the SMP and UP code. - Add patch 5 to add a new kernel config parameter to allow disabling per-cpu list for small systems that won't benefit much from this feature. v3->v4: - Fix some racing conditions in the code. - Add another patch from Jan to replace list_for_each_entry_safe() by list_for_each_entry(). - Add lockdep annotation. v2->v3: - Directly replace list_for_each_entry() and list_for_each_entry_safe() by pcpu_list_iterate() and pcpu_list_iterate_safe() respectively instead. Those 2 functions provide a stateful per-cpu list iteration interface. - Include Jan Kara's patch to clean up the fsnotify_unmount_inodes() function. v1->v2: - Use separate structures for list head and nodes & provide a cleaner interface. - Use existing list_for_each_entry() or list_for_each_entry_safe() macros for each of the sb's s_inodes iteration functions instead of using list_for_each_entry_safe() for all of them which may not be safe in some cases. - Use an iterator interface to access all the nodes of a group of per-cpu lists. This approach is cleaner than the previous double-for macro which is kind of hacky. However, it does require more lines of code changes. - Add a preparatory patch 2 to extract out the per-inode codes from the superblock s_inodes list iteration functions to minimize code changes needed in the patch 3. This patch is a replacement of my previous list batching patch - https://lwn.net/Articles/674105/. Compared with the previous patch, this one provides better performance and fairness. However, it also requires a bit more changes in the VFS layer. This patchset is a derivative of Andi Kleen's patch on "Initial per cpu list for the per sb inode list" https://git.kernel.org/cgit/linux/kernel/git/ak/linux-misc.git/commit/?h=hle315/combined&id=f1cf9e715a40f44086662ae3b29f123cf059cbf4 Patch 1 introduces the per-cpu list. Patch 2 cleans up the fsnotify_unmount_inodes() function by making the code simpler and more standard. Patch 3 replaces the use of list_for_each_entry_safe() in evict_inodes() and invalidate_inodes() by list_for_each_entry(). Patch 4 modifies the superblock and inode structures to use the per-cpu list. The corresponding functions that reference those structures are modified. Patch 5 adds a new kernel config paramter to allow kernel builders to disable the use of per-cpu list if they choose to do so. Jan Kara (2): fsnotify: Simplify inode iteration on umount vfs: Remove unnecessary list_for_each_entry_safe() variants Waiman Long (3): lib/percpu-list: Per-cpu list with associated per-cpu locks vfs: Use per-cpu list for superblock's inode list lib/percpu-list: Add a config parameter for disabling per-cpu list fs/block_dev.c | 13 +- fs/drop_caches.c | 10 +- fs/fs-writeback.c | 13 +- fs/inode.c | 40 +++---- fs/notify/inode_mark.c | 53 ++------ fs/quota/dquot.c | 16 +- fs/super.c | 7 +- include/linux/fs.h | 8 +- include/linux/percpu-list.h | 309 +++++++++++++++++++++++++++++++++++++++++++ lib/Kconfig | 14 ++ lib/Makefile | 2 +- lib/percpu-list.c | 122 +++++++++++++++++ 12 files changed, 509 insertions(+), 96 deletions(-) create mode 100644 include/linux/percpu-list.h create mode 100644 lib/percpu-list.c