[libvirt] [Qemu-devel] [PATCH v2 2/4] qapi: Add passfd QMP command

Corey Bryant coreyb at linux.vnet.ibm.com
Wed Jun 13 22:07:43 UTC 2012



On 06/13/2012 04:47 PM, Eric Blake wrote:
> On 06/13/2012 02:25 PM, Corey Bryant wrote:
>
>>> Also, getfd automatically closes a fd if an existing fdname is passed
>>> again.
>>> I don't think this is a good behavior, I think pass-fd should fail
>>> instead
>>> (note that we can't fix getfd though).
>>>
>>
>> I agree.  It makes sense to fail rather than blindly closing the
>> existing fd.  It can be closed explicitly with closefd if the user wants
>> it closed.
>
> Hmm - what happens if I do 'pass-fd name', learn that qemu is using fd
> 42, then do 'getfd name'?  I silently wipe out fd 42 and replace it with
> the new fd passed in by getfd.  Which means my use of /dev/fd/42 will
> now be broken.
>
> Obviously that means that 'getfd' should NOT be used by any application
> using 'pass-fd', and that libvirt should NOT be reusing names (I think
> the latter is already true).  But I agree that for back-compat we can't
> get rid of the current (evil) semantics of a duplicated 'getfd'.

Yes, users need to be careful and understand how the commands work.  I 
don't think it's a hard rule that 'getfd' can't be used by an 
application that uses 'pass-fd'.  If it were, we could put the fds on 
separate lists:

  struct Monitor {
      ...
      QLIST_HEAD(,mon_fd_t) fds;
+    QLIST_HEAD(,mon_fd_t) pass_fds;
  };

But I don't think this is necessary, so I'll plan on documenting them well.

>
> You may also want to mention that when using 'getfd' or 'pass-fd', there
> are some commands (like migrate) that use the fd:name protocol, and that
> a successful use of one of these commands implicitly closes the named
> fd; but that all new uses of /dev/fd/nnn leave the fd open and an
> explicit closefd must be used to avoid leaking indefinitely-opened fds
> in qemu.
>

Ok, I'll mention this too.  Thanks.

-- 
Regards,
Corey





More information about the libvir-list mailing list