Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c443acab2eebf12dce7e78fe29e76786f55ad1be
Commit:     c443acab2eebf12dce7e78fe29e76786f55ad1be
Parent:     a2b51812a4dc5db09ab4d4638d4d8ed456e2457e
Author:     Jeremy Kerr <[EMAIL PROTECTED]>
AuthorDate: Fri Nov 16 13:32:23 2007 +1100
Committer:  Paul Mackerras <[EMAIL PROTECTED]>
CommitDate: Tue Nov 20 16:10:20 2007 +1100

    [POWERPC] spufs: Fix context destroy vs /spu readdir race
    
    We can currently cause an oops by repeatedly creating and destroying
    contexts, while doing getdents() calls on the "/spu" directory.
    
    This is due to the context's top-level dentry remaining hashed while
    the context is being destroyed.
    
    Fix this by unhashing the context's dentry with the
    dentry->d_inode->i_mutex held. This way, we'll hit the check for
    d_unhashed in dentry_readdir, and won't be included in the
    list of subdirs for /spu.
    
    test: spufs-testsuite:tests/01-spu_create/07-destroy-vs-readdir-race
    
    Signed-off-by: Jeremy Kerr <[EMAIL PROTECTED]>
    Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/cell/spufs/inode.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/inode.c 
b/arch/powerpc/platforms/cell/spufs/inode.c
index 0966d09..c0e968a 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -171,6 +171,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry 
*dir)
 {
        /* remove all entries */
        spufs_prune_dir(dir);
+       d_drop(dir);
 
        return simple_rmdir(parent, dir);
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to