From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-co1nam03on0112.outbound.protection.outlook.com ([104.47.40.112]:27472 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751451AbcGSTHq (ORCPT ); Tue, 19 Jul 2016 15:07:46 -0400 Message-ID: <578E7A79.7080003@hpe.com> Date: Tue, 19 Jul 2016 15:07:37 -0400 From: Waiman Long MIME-Version: 1.0 To: Al Viro CC: Jan Kara , Jeff Layton , "J. Bruce Fields" , Tejun Heo , Christoph Lameter , , , Ingo Molnar , Peter Zijlstra , Andi Kleen , Dave Chinner , Boqun Feng , Scott J Norton , Douglas Hatch Subject: Re: [PATCH v3 4/4] vfs: Use dlock list for superblock's inode list References: <1468604383-40362-1-git-send-email-Waiman.Long@hpe.com> <1468604383-40362-5-git-send-email-Waiman.Long@hpe.com> <20160719052342.GF2356@ZenIV.linux.org.uk> In-Reply-To: <20160719052342.GF2356@ZenIV.linux.org.uk> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On 07/19/2016 01:23 AM, Al Viro wrote: > On Fri, Jul 15, 2016 at 01:39:43PM -0400, Waiman Long wrote: >> void iterate_bdevs(void (*func)(struct block_device *, void *), void *arg) >> { >> struct inode *inode, *old_inode = NULL; >> + DEFINE_DLOCK_LIST_ITER(iter); >> >> - spin_lock(&blockdev_superblock->s_inode_list_lock); >> - list_for_each_entry(inode,&blockdev_superblock->s_inodes, i_sb_list) { >> - struct address_space *mapping = inode->i_mapping; >> + while (dlock_list_next(&blockdev_superblock->s_inodes,&iter)) { >> + struct address_space *mapping; >> >> + inode = list_entry(iter.curr, struct inode, i_sb_list); >> + mapping = inode->i_mapping; > TBH, I would very much prefer something like > DEFINE_DLOCK_LIST_ITER(iter,&blockdev_superblock->s_inodes); > > dlist_for_each_entry(inode,&iter, i_sb_list) { > mapping = inode->i_mapping; > Sure. I will make the necessary changes to make it happen. Thanks for the suggestion. >> - spin_unlock(&blockdev_superblock->s_inode_list_lock); >> + spin_unlock(iter.lock); > ... and this might be worth dlist_{un,re}lock(&iter); Good point. Will change the code accordingly. Cheers, Longman