lkml.org 
[lkml]   [2016]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 4/4] vfs: Use dlock list for superblock's inode list
    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;

    > - spin_unlock(&blockdev_superblock->s_inode_list_lock);
    > + spin_unlock(iter.lock);

    ... and this might be worth dlist_{un,re}lock(&iter);

    \
     
     \ /
      Last update: 2016-07-19 08:01    [W:4.101 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site