[Cbe-oss-dev] [PATCH] spufs: fix missing error handling in module_init()

Christoph Hellwig hch at lst.de
Thu Apr 5 18:41:29 EST 2007


On Wed, Mar 14, 2007 at 11:57:16AM +0900, Akinobu Mita wrote:
> spufs module_init forgot to call a few cleanup functions
> on error path. This patch also includes cosmetic changes in
> spu_sched_init() (identation fix and return error code).
> 
> Cc: Arnd Bergmann <arnd at arndb.de>
> Signed-off-by: Akinobu Mita <mita at fixstars.com>

This patch still doesn't seem to be in cvs, but I think we need it.

>  arch/powerpc/platforms/cell/spufs/inode.c |   16 ++++++++++------
>  arch/powerpc/platforms/cell/spufs/sched.c |    6 +++---
>  2 files changed, 13 insertions(+), 9 deletions(-)
> 
> Index: 2.6-git-ps3/arch/powerpc/platforms/cell/spufs/sched.c
> ===================================================================
> --- 2.6-git-ps3.orig/arch/powerpc/platforms/cell/spufs/sched.c
> +++ 2.6-git-ps3/arch/powerpc/platforms/cell/spufs/sched.c
> @@ -474,14 +474,14 @@ int __init spu_sched_init(void)
>  
>  	spu_sched_wq = create_singlethread_workqueue("spusched");
>  	if (!spu_sched_wq)
> -		return 1;
> +		return -ENOMEM;
>  
>  	spu_prio = kzalloc(sizeof(struct spu_prio_array), GFP_KERNEL);
>  	if (!spu_prio) {
>  		printk(KERN_WARNING "%s: Unable to allocate priority queue.\n",
>  		       __FUNCTION__);
> -		       destroy_workqueue(spu_sched_wq);
> -		return 1;
> +		destroy_workqueue(spu_sched_wq);
> +		return -ENOMEM;
>  	}
>  	for (i = 0; i < MAX_PRIO; i++) {
>  		INIT_LIST_HEAD(&spu_prio->runq[i]);
> Index: 2.6-git-ps3/arch/powerpc/platforms/cell/spufs/inode.c
> ===================================================================
> --- 2.6-git-ps3.orig/arch/powerpc/platforms/cell/spufs/inode.c
> +++ 2.6-git-ps3/arch/powerpc/platforms/cell/spufs/inode.c
> @@ -660,25 +660,29 @@ static int __init spufs_init(void)
>  
>  	if (!spufs_inode_cache)
>  		goto out;
> -	if (spu_sched_init() != 0) {
> -		kmem_cache_destroy(spufs_inode_cache);
> -		goto out;
> -	}
> -	ret = register_filesystem(&spufs_type);
> +	ret = spu_sched_init();
>  	if (ret)
>  		goto out_cache;
> +	ret = register_filesystem(&spufs_type);
> +	if (ret)
> +		goto out_sched;
>  	ret = register_spu_syscalls(&spufs_calls);
>  	if (ret)
>  		goto out_fs;
>  	ret = register_arch_coredump_calls(&spufs_coredump_calls);
>  	if (ret)
> -		goto out_fs;
> +		goto out_syscalls;
>  
>  	spufs_init_isolated_loader();
>  
>  	return 0;
> +
> +out_syscalls:
> +	unregister_spu_syscalls(&spufs_calls);
>  out_fs:
>  	unregister_filesystem(&spufs_type);
> +out_sched:
> +	spu_sched_exit();
>  out_cache:
>  	kmem_cache_destroy(spufs_inode_cache);
>  out:
> _______________________________________________
> cbe-oss-dev mailing list
> cbe-oss-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/cbe-oss-dev
---end quoted text---



More information about the cbe-oss-dev mailing list