* [patch 0/2] spufs: Minor cleanups
@ 2009-05-05 21:32 jblunck
2009-05-05 21:32 ` [patch 1/2] spufs: make dentry reference count and locking symmetric jblunck
2009-05-05 21:32 ` [patch 2/2] spufs: remove double check for non-negative dentry jblunck
0 siblings, 2 replies; 5+ messages in thread
From: jblunck @ 2009-05-05 21:32 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: Linux-Kernel Mailinglist
Arnd,
here are some minor cleanups that I think are worth doing. I had them in my
union mount queue because I had some changes to lookup_create() planned.
Cheers,
Jan
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 1/2] spufs: make dentry reference count and locking symmetric
2009-05-05 21:32 [patch 0/2] spufs: Minor cleanups jblunck
@ 2009-05-05 21:32 ` jblunck
2009-05-12 14:03 ` Arnd Bergmann
2009-05-05 21:32 ` [patch 2/2] spufs: remove double check for non-negative dentry jblunck
1 sibling, 1 reply; 5+ messages in thread
From: jblunck @ 2009-05-05 21:32 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: Linux-Kernel Mailinglist
[-- Attachment #1: spufs-make-dput-and-locking-symmetric.diff --]
[-- Type: text/plain, Size: 1753 bytes --]
This patch moves the dput() and the parent inode locking to the same function.
Signed-off-by: Jan Blunck <jblunck@suse.de>
---
arch/powerpc/platforms/cell/spufs/inode.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
Index: b/arch/powerpc/platforms/cell/spufs/inode.c
===================================================================
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -450,16 +450,16 @@ spufs_create_context(struct inode *inode
ret = -EPERM;
if ((flags & SPU_CREATE_NOSCHED) &&
!capable(CAP_SYS_NICE))
- goto out_unlock;
+ goto out;
ret = -EINVAL;
if ((flags & (SPU_CREATE_NOSCHED | SPU_CREATE_ISOLATE))
== SPU_CREATE_ISOLATE)
- goto out_unlock;
+ goto out;
ret = -ENODEV;
if ((flags & SPU_CREATE_ISOLATE) && !isolated_loader)
- goto out_unlock;
+ goto out;
gang = NULL;
neighbor = NULL;
@@ -468,7 +468,7 @@ spufs_create_context(struct inode *inode
gang = SPUFS_I(inode)->i_gang;
ret = -EINVAL;
if (!gang)
- goto out_unlock;
+ goto out;
mutex_lock(&gang->aff_mutex);
neighbor = spufs_assert_affinity(flags, gang, aff_filp);
if (IS_ERR(neighbor)) {
@@ -505,10 +505,7 @@ spufs_create_context(struct inode *inode
out_aff_unlock:
if (affinity)
mutex_unlock(&gang->aff_mutex);
-out_unlock:
- mutex_unlock(&inode->i_mutex);
out:
- dput(dentry);
return ret;
}
@@ -595,8 +592,6 @@ static int spufs_create_gang(struct inod
}
out:
- mutex_unlock(&inode->i_mutex);
- dput(dentry);
return ret;
}
@@ -645,7 +640,6 @@ long spufs_create(struct nameidata *nd,
filp);
if (ret >= 0)
fsnotify_mkdir(nd->path.dentry->d_inode, dentry);
- return ret;
out_dput:
dput(dentry);
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 2/2] spufs: remove double check for non-negative dentry
2009-05-05 21:32 [patch 0/2] spufs: Minor cleanups jblunck
2009-05-05 21:32 ` [patch 1/2] spufs: make dentry reference count and locking symmetric jblunck
@ 2009-05-05 21:32 ` jblunck
2009-05-12 14:15 ` Arnd Bergmann
1 sibling, 1 reply; 5+ messages in thread
From: jblunck @ 2009-05-05 21:32 UTC (permalink / raw)
To: Arnd Bergmann; +Cc: Linux-Kernel Mailinglist
[-- Attachment #1: spufs-remove-unnecessary-EEXIST-check.patch --]
[-- Type: text/plain, Size: 777 bytes --]
This patch removes an unnecessary double check if the dentry returned by
lookup_create() is actually non-negative. Since lookup_create() itself returns
an error in this case just remove the check.
Signed-off-by: Jan Blunck <jblunck@suse.de>
---
arch/powerpc/platforms/cell/spufs/inode.c | 4 ----
1 file changed, 4 deletions(-)
Index: b/arch/powerpc/platforms/cell/spufs/inode.c
===================================================================
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -625,10 +625,6 @@ long spufs_create(struct nameidata *nd,
if (IS_ERR(dentry))
goto out_dir;
- ret = -EEXIST;
- if (dentry->d_inode)
- goto out_dput;
-
mode &= ~current->fs->umask;
if (flags & SPU_CREATE_GANG)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 1/2] spufs: make dentry reference count and locking symmetric
2009-05-05 21:32 ` [patch 1/2] spufs: make dentry reference count and locking symmetric jblunck
@ 2009-05-12 14:03 ` Arnd Bergmann
0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2009-05-12 14:03 UTC (permalink / raw)
To: jblunck; +Cc: Linux-Kernel Mailinglist, Jeremy Kerr
On Tuesday 05 May 2009, jblunck@suse.de wrote:
> @@ -505,10 +505,7 @@ spufs_create_context(struct inode *inode
> out_aff_unlock:
> if (affinity)
> mutex_unlock(&gang->aff_mutex);
> -out_unlock:
> - mutex_unlock(&inode->i_mutex);
> out:
> - dput(dentry);
> return ret;
> }
>
There is a nasty deadlock problem with spu_forget(), which we
must call after unlocking i_mutex but before the final dput, IIRC.
The path down there is something like
spu_forget -> mmput -> exit_mmap -> remove_vma ->
fput -> dput -> dentry_iput -> iput -> iput_final ->
spufs_delete_inode -> destroy_spu_context.
Arnd <><
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2/2] spufs: remove double check for non-negative dentry
2009-05-05 21:32 ` [patch 2/2] spufs: remove double check for non-negative dentry jblunck
@ 2009-05-12 14:15 ` Arnd Bergmann
0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2009-05-12 14:15 UTC (permalink / raw)
To: jblunck; +Cc: Linux-Kernel Mailinglist, Jeremy Kerr
On Tuesday 05 May 2009, jblunck@suse.de wrote:
> This patch removes an unnecessary double check if the dentry returned by
> lookup_create() is actually non-negative. Since lookup_create() itself returns
> an error in this case just remove the check.
>
> Signed-off-by: Jan Blunck <jblunck@suse.de>
Looks good, I'll push this one on, unless Jeremy has objections.
Thanks,
Arnd <><
> --- a/arch/powerpc/platforms/cell/spufs/inode.c
> +++ b/arch/powerpc/platforms/cell/spufs/inode.c
> @@ -625,10 +625,6 @@ long spufs_create(struct nameidata *nd,
> if (IS_ERR(dentry))
> goto out_dir;
>
> - ret = -EEXIST;
> - if (dentry->d_inode)
> - goto out_dput;
> -
> mode &= ~current->fs->umask;
>
> if (flags & SPU_CREATE_GANG)
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-05-12 14:19 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-05 21:32 [patch 0/2] spufs: Minor cleanups jblunck
2009-05-05 21:32 ` [patch 1/2] spufs: make dentry reference count and locking symmetric jblunck
2009-05-12 14:03 ` Arnd Bergmann
2009-05-05 21:32 ` [patch 2/2] spufs: remove double check for non-negative dentry jblunck
2009-05-12 14:15 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox