|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] tools/libxc: Implement writev_exact() in the same style as write_exact()
Andrew Cooper writes ("Re: [Xen-devel] [PATCH v2] tools/libxc: Implement
writev_exact() in the same style as write_exact()"):
> Final paragraph in the DESCRIPTION
>
> "The data transfers performed by readv() and writev() are atomic: the
> data written by writev() is written as a single block that is not
> intermingled with output from writes in other processes"
>
> By my reading, it cannot guarantee atomicity if it would split an iov[]
> element.
Firstly, we should be using the spec, not manpages:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/writev.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html
etc.
There are various guarantees that write and writev provide, including
the special rule for pipes (from write.html):
Write requests to a pipe or FIFO shall be handled in the same way as
a regular file with the following exceptions:
[ complicated rules involving PIPE_BUF ]
and the general rule about system call atomicity:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_07
All of the following functions shall be atomic with respect to each
other in the effects specified in POSIX.1-2008 when they operate on
regular files or symbolic links:
[...] write() writev() [...]
However neither of these are the guarantee that you are assuming.
In particular, there is nothing saying that _if_ writev performs a
partial write, it won't stop inside an iov.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |