]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/inode.c
Merge branch 'lazytime' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[karo-tx-linux.git] / fs / inode.c
index 740cba79c2b928b44f9e0d0a77ff78f475f3fe49..f00b16f4550781f3e658ebf2f9d8d00e3fd36f64 100644 (file)
@@ -171,20 +171,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode)
        atomic_set(&mapping->i_mmap_writable, 0);
        mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE);
        mapping->private_data = NULL;
-       mapping->backing_dev_info = &default_backing_dev_info;
        mapping->writeback_index = 0;
-
-       /*
-        * If the block_device provides a backing_dev_info for client
-        * inodes then use that.  Otherwise the inode share the bdev's
-        * backing_dev_info.
-        */
-       if (sb->s_bdev) {
-               struct backing_dev_info *bdi;
-
-               bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info;
-               mapping->backing_dev_info = bdi;
-       }
        inode->i_private = NULL;
        inode->i_mapping = mapping;
        INIT_HLIST_HEAD(&inode->i_dentry);      /* buggered by rcu freeing */
@@ -195,7 +182,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode)
 #ifdef CONFIG_FSNOTIFY
        inode->i_fsnotify_mask = 0;
 #endif
-
+       inode->i_flctx = NULL;
        this_cpu_inc(nr_inodes);
 
        return 0;
@@ -238,6 +225,7 @@ void __destroy_inode(struct inode *inode)
        BUG_ON(inode_has_buffers(inode));
        security_inode_free(inode);
        fsnotify_inode_delete(inode);
+       locks_free_lock_context(inode->i_flctx);
        if (!inode->i_nlink) {
                WARN_ON(atomic_long_read(&inode->i_sb->s_remove_count) == 0);
                atomic_long_dec(&inode->i_sb->s_remove_count);
@@ -356,7 +344,6 @@ void address_space_init_once(struct address_space *mapping)
        INIT_LIST_HEAD(&mapping->private_list);
        spin_lock_init(&mapping->private_lock);
        mapping->i_mmap = RB_ROOT;
-       INIT_LIST_HEAD(&mapping->i_mmap_nonlinear);
 }
 EXPORT_SYMBOL(address_space_init_once);
 
@@ -687,8 +674,8 @@ int invalidate_inodes(struct super_block *sb, bool kill_dirty)
  * LRU does not have strict ordering. Hence we don't want to reclaim inodes
  * with this flag set because they are the inodes that are out of order.
  */
-static enum lru_status
-inode_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
+static enum lru_status inode_lru_isolate(struct list_head *item,
+               struct list_lru_one *lru, spinlock_t *lru_lock, void *arg)
 {
        struct list_head *freeable = arg;
        struct inode    *inode = container_of(item, struct inode, i_lru);
@@ -706,7 +693,7 @@ inode_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
         */
        if (atomic_read(&inode->i_count) ||
            (inode->i_state & ~I_REFERENCED)) {
-               list_del_init(&inode->i_lru);
+               list_lru_isolate(lru, &inode->i_lru);
                spin_unlock(&inode->i_lock);
                this_cpu_dec(nr_unused);
                return LRU_REMOVED;
@@ -740,7 +727,7 @@ inode_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
 
        WARN_ON(inode->i_state & I_NEW);
        inode->i_state |= I_FREEING;
-       list_move(&inode->i_lru, freeable);
+       list_lru_isolate_move(lru, &inode->i_lru, freeable);
        spin_unlock(&inode->i_lock);
 
        this_cpu_dec(nr_unused);
@@ -753,14 +740,13 @@ inode_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
  * to trim from the LRU. Inodes to be freed are moved to a temporary list and
  * then are freed outside inode_lock by dispose_list().
  */
-long prune_icache_sb(struct super_block *sb, unsigned long nr_to_scan,
-                    int nid)
+long prune_icache_sb(struct super_block *sb, struct shrink_control *sc)
 {
        LIST_HEAD(freeable);
        long freed;
 
-       freed = list_lru_walk_node(&sb->s_inode_lru, nid, inode_lru_isolate,
-                                      &freeable, &nr_to_scan);
+       freed = list_lru_shrink_walk(&sb->s_inode_lru, sc,
+                                    inode_lru_isolate, &freeable);
        dispose_list(&freeable);
        return freed;
 }