X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fdcache.c;h=93df95475e43e7a326bd4d995d8dbf052f6a67d1;hb=85612401b97f42ca3addf3d5786cc6de4fcb8fda;hp=46265f58b5b8e1b6e068159086d3b380401f7fd9;hpb=722632af3c2b4828e79f143e356489c6761035ec;p=pandora-kernel.git diff --git a/fs/dcache.c b/fs/dcache.c index 46265f58b5b8..93df95475e43 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -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))