[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