[Devel] Re: [PATCH] Fix restored pipe usage counts
Oren Laadan
orenl at cs.columbia.edu
Wed Feb 2 06:56:06 PST 2011
Thanks, pushed to v23-rc1.
Oren
On 02/01/2011 01:47 PM, Dan Smith wrote:
> Oren's version of my patch leaks pipe objects due to the way the fget() and
> fput() operations are structured. The intent was to avoid getting and putting
> references more than necessary, but the result was a more confusing (IMHO)
> pattern that resulted in keeping an extra reference in some situations.
>
> This patch changes the pattern to something more easily understood and
> verified, and also allows several of my tests to pass again, as they did
> before the recent patch.
>
> Signed-off-by: Dan Smith <danms at us.ibm.com>
> ---
> fs/pipe.c | 12 ++++++------
> 1 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/fs/pipe.c b/fs/pipe.c
> index 908b8bc..f9ad0f2 100644
> --- a/fs/pipe.c
> +++ b/fs/pipe.c
> @@ -968,6 +968,7 @@ struct file *pipe_file_restore(struct ckpt_ctx *ctx, struct ckpt_hdr_file *ptr)
> if (!file) /* this should _never_ happen ! */
> return ERR_PTR(-EBADF);
> ret = restore_pipe(ctx, file);
> + fput(file);
> if (ret < 0)
> goto out;
>
> @@ -978,13 +979,12 @@ struct file *pipe_file_restore(struct ckpt_ctx *ctx, struct ckpt_hdr_file *ptr)
> * other side of the pipe to the hash, to be picked up
> * when that side is restored.
> */
> - if (which == 1) { /* the 'other' size */
> - fput(file);
> - file = fget(fds[0]);
> - if (!file) /* this should _never_ happen ! */
> - return ERR_PTR(-EBADF);
> - }
> + file = fget(fds[1-which]);
> + if (!file) /* this should _never_ happen ! */
> + return ERR_PTR(-EBADF);
> +
> ret = ckpt_obj_insert(ctx, file, h->pipe_objref, CKPT_OBJ_FILE);
> + fput(file);
> if (ret < 0)
> goto out;
>
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list