Oops - you're walking dentry_unused without holding dcache_lock ...
>-	next = dentry_unused.next;
>-	while (next != &dentry_unused) {
>-		tmp = next;
>-		next = tmp->next;
>-		dentry = list_entry(tmp, struct dentry, d_lru);
>-		if (dentry->d_sb != sb)
>-			continue;
>-		list_del(tmp);
>-		list_add(tmp, &dentry_unused);
>-	}
>-
>-	/*
>-	 * Pass two ... free the dentries for this superblock.
>-	 */
>-repeat:
>-	next = dentry_unused.next;
>-	while (next != &dentry_unused) {
>-		tmp = next;
>-		next = tmp->next;
>-		dentry = list_entry(tmp, struct dentry, d_lru);
>+	struct list_head *entry, *next;
>+	
>+	list_for_each_safe(entry, next, &dentry_unused) {
>+		struct dentry *dentry = list_entry(entry, struct dentry, d_lru);
> 		if (dentry->d_sb != sb)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/