[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] Fix domain restore for files on root-squash NFS.



On 02/24/2010 06:20 AM, Laine Stump wrote:
...since I see nothing in POSIX that guarantees that pipe() will preserve
your initialized values across failure.  I think it's better to
explicitly
set things to -1 on the failure path, rather than initializing that way.

Interesting point. If we can't rely on that, then __virExec() should be
changed too.

Since libvirtd is Linux-only, we can luckily rely on that at least for now:

int do_pipe_flags(int *fd, int flags)
{
        struct file *fw, *fr;
        int error;
        int fdw, fdr;

        if (flags & ~(O_CLOEXEC | O_NONBLOCK))
                return -EINVAL;

        fw = create_write_pipe(flags);
        if (IS_ERR(fw))
                return PTR_ERR(fw);
        fr = create_read_pipe(fw, flags);
        error = PTR_ERR(fr);
        if (IS_ERR(fr))
                goto err_write_pipe;

        error = get_unused_fd_flags(flags);
        if (error < 0)
                goto err_read_pipe;
        fdr = error;

        error = get_unused_fd_flags(flags);
        if (error < 0)
                goto err_fdr;
        fdw = error;

        audit_fd_pair(fdr, fdw);
        fd_install(fdr, fr);
        fd_install(fdw, fw);
        fd[0] = fdr;
        fd[1] = fdw;

        return 0;

 err_fdr:
        put_unused_fd(fdr);
 err_read_pipe:
        path_put(&fr->f_path);
        put_filp(fr);
 err_write_pipe:
        free_write_pipe(fw);
        return error;
}

which makes it quite low priority.

Paolo


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]