lkml.org 
[lkml]   [2010]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/4] fs: Lock the inode LRU list separately
    > @@ -30,10 +30,13 @@
    > *
    > * inode->i_lock protects:
    > * i_state
    > + * inode_lru_lock protects:
    > + * inode_lru, i_lru
    > *
    > * Lock ordering:
    > * inode_lock
    > * inode->i_lock
    > + * inode_lru_lock
    > */

    Always writing the inode fields as inode->i_foo might be better.

    > @@ -537,15 +545,10 @@ void evict_inodes(struct super_block *sb)
    > }
    >
    > inode->i_state |= I_FREEING;
    > - if (!(inode->i_state & (I_DIRTY | I_SYNC)))
    > - percpu_counter_dec(&nr_inodes_unused);
    > + inode_lru_list_del(inode);
    > spin_unlock(&inode->i_lock);
    >
    > - /*
    > - * Move the inode off the IO lists and LRU once I_FREEING is
    > - * set so that it won't get moved back on there if it is dirty.
    > - */
    > - list_move(&inode->i_lru, &dispose);
    > + list_add(&inode->i_lru, &dispose);
    > }
    > spin_unlock(&inode_lock);
    >
    > @@ -582,15 +585,10 @@ int invalidate_inodes(struct super_block *sb)
    > }
    >
    > inode->i_state |= I_FREEING;
    > - if (!(inode->i_state & (I_DIRTY | I_SYNC)))
    > - percpu_counter_dec(&nr_inodes_unused);
    > + inode_lru_list_del(inode);
    > spin_unlock(&inode->i_lock);

    with this scheme we now decrement nr_inodes_unused twice - once in
    invalidate_inodes/evict_inodes and once in dispose_one_inode. I think
    you just want to use an opencoded list_move under the lru lock to
    move the inode to the temporary list for now, similar to what
    prune_icache does.



    \
     
     \ /
      Last update: 2010-10-27 11:07    [W:0.020 / U:123.684 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site