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

Paolo Bonzini pbonzini at redhat.com
Wed Feb 24 10:55:46 UTC 2010


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




More information about the libvir-list mailing list