Prev: net/neighbour.h: fix typo
Next: [PATCH] ipc/sem.c: Bugfix for semop() not reporting successful operation
From: John Stultz on 30 Jun 2010 15:20 Patch against currrent 2.6.33-rt tree. This patch is an alternative fix to the select_parent panic that was suggested by Nick Piggin. It resolves the issue by making sure d_parent is set to null so that the dentry ascending code in select_parent will restart if the child or next dentry was dkilled while the locks were released. Credit and thanks to Nick for finding the solution. Signed-off-by: John Stultz <johnstul(a)us.ibm.com> CC: Thomas Gleixner <tglx(a)linutronix.de> CC: Nick Piggin <npiggin(a)suse.de> CC: Peter Zijlstra <peterz(a)infradead.org> CC: John Kacur <jkacur(a)redhat.com> --- fs/dcache.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index da90157..c9d21ae 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -225,13 +225,15 @@ static struct dentry *d_kill(struct dentry *dentry) { struct dentry *parent; - list_del(&dentry->d_u.d_child); - if (dentry->d_parent && dentry != dentry->d_parent) - spin_unlock(&dentry->d_parent->d_lock); if (IS_ROOT(dentry)) parent = NULL; else parent = dentry->d_parent; + + dentry->d_parent = NULL; + list_del(&dentry->d_u.d_child); + if (parent) + spin_unlock(&parent->d_lock); /*drops the locks, at that point nobody can reach this dentry */ dentry_iput(dentry); d_free(dentry); -- 1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |