mirror of https://gitee.com/openkylin/linux.git
[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 <jk@ozlabs.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
a2b51812a4
commit
c443acab2e
|
@ -171,6 +171,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry *dir)
|
||||||
{
|
{
|
||||||
/* remove all entries */
|
/* remove all entries */
|
||||||
spufs_prune_dir(dir);
|
spufs_prune_dir(dir);
|
||||||
|
d_drop(dir);
|
||||||
|
|
||||||
return simple_rmdir(parent, dir);
|
return simple_rmdir(parent, dir);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue