[Devel] Re: [RFC][PATCH 4/4] checkpoint/restart: simplify cr_scan_fds()

Serge E. Hallyn serue at us.ibm.com
Tue Dec 2 20:21:39 PST 2008


Quoting Dave Hansen (dave at linux.vnet.ibm.com):
> 
> I think having all the allocations in one place, plus the
> reduction in the number of lines speaks for itself.  In
> any case, this is last in the series and can be dropped if
> you don't like it.
> 
> ---
> 
>  linux-2.6.git-dave/checkpoint/ckpt_file.c |   13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff -puN checkpoint/ckpt_file.c~fix-cr_scan_fds-realloc checkpoint/ckpt_file.c
> --- linux-2.6.git/checkpoint/ckpt_file.c~fix-cr_scan_fds-realloc	2008-12-02 10:26:53.000000000 -0800
> +++ linux-2.6.git-dave/checkpoint/ckpt_file.c	2008-12-02 10:26:53.000000000 -0800
> @@ -38,6 +38,7 @@ int cr_scan_fds(struct files_struct *fil
>  	int i, n = 0;

Heh, well I think you'll need to initialize n after the retry: label.

Otherwise, I can see the appeal of this...

>  	int tot = CR_DEFAULT_FDTABLE;
> 
> +retry:
>  	fds = kmalloc(tot * sizeof(*fds), GFP_KERNEL);
>  	if (!fds)
>  		return -ENOMEM;
> @@ -55,18 +56,12 @@ int cr_scan_fds(struct files_struct *fil
>  		if (!fcheck_files(files, i))
>  			continue;
>  		if (n == tot) {
> -			/*
> -			 * fcheck_files() is safe with drop/re-acquire
> -			 * of the lock, because it tests:  fd < max_fds
> -			 */
> +			/* we undershot the size of fds[] */
>  			spin_unlock(&files->file_lock);
>  			rcu_read_unlock();
>  			tot *= 2;	/* won't overflow: kmalloc will fail */
> -			fds = krealloc(fds, tot * sizeof(*fds), GFP_KERNEL);
> -			if (!fds)
> -				return -ENOMEM;
> -			rcu_read_lock();
> -			spin_lock(&files->file_lock);
> +			kfree(fds);
> +			goto retry;
>  		}
>  		fds[n++] = i;
>  	}
> _
> _______________________________________________
> Containers mailing list
> Containers at lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list