netlink: make sure nladdr has correct size in netlink_connect()
[pandora-kernel.git] / fs / dcache.c
index 46265f5..93df954 100644 (file)
@@ -836,6 +836,7 @@ void shrink_dcache_sb(struct super_block *sb)
                list_splice_init(&sb->s_dentry_lru, &tmp);
                spin_unlock(&dcache_lru_lock);
                shrink_dentry_list(&tmp);
+               cond_resched();
                spin_lock(&dcache_lru_lock);
        }
        spin_unlock(&dcache_lru_lock);
@@ -1261,7 +1262,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
        struct dentry *dentry = __d_alloc(parent->d_sb, name);
        if (!dentry)
                return NULL;
-
+       dentry->d_flags |= DCACHE_RCUACCESS;
        spin_lock(&parent->d_lock);
        /*
         * don't need child lock because it is not subject
@@ -2011,7 +2012,6 @@ static void __d_rehash(struct dentry * entry, struct hlist_bl_head *b)
 {
        BUG_ON(!d_unhashed(entry));
        hlist_bl_lock(b);
-       entry->d_flags |= DCACHE_RCUACCESS;
        hlist_bl_add_head_rcu(&entry->d_hash, b);
        hlist_bl_unlock(b);
 }
@@ -2195,6 +2195,7 @@ static void __d_move(struct dentry * dentry, struct dentry * target)
 
        /* ... and switch the parents */
        if (IS_ROOT(dentry)) {
+               dentry->d_flags |= DCACHE_RCUACCESS;
                dentry->d_parent = target->d_parent;
                target->d_parent = target;
                INIT_LIST_HEAD(&target->d_child);
@@ -2311,6 +2312,7 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon)
        switch_names(dentry, anon);
        swap(dentry->d_name.hash, anon->d_name.hash);
 
+       dentry->d_flags |= DCACHE_RCUACCESS;
        dentry->d_parent = (aparent == anon) ? dentry : aparent;
        list_del(&dentry->d_child);
        if (!IS_ROOT(dentry))