I am sponsoring this fast-track request for Vasumathi Sundaram. The timer is set to 01/02/2009 in light of the coming holidays. Please speak up if you need more time than that. In an offline discussion, the project team went to lengths to find any sendfilev users, and determine whether the proposed change in semantics would affect any application. There are just a few known users of sendfilev, and none of them do file-to-file transfers, so no problems are known or expected. It's an incompatible change to a Committed interface and we wish to assert Patch/Micro release binding, but the project team contends (and I agree) that (a) the original interface as specified has unresolvable defects that could lead to serious system stability problems, (b) we can't just remove the sendfilev interface because there are consumers, and (c) it appears unlikely that anyone ever used the functionality affected by this change as described. 1. Problem sendfilev(3EXT) and sendfile(2) support transferring data from a regular file to another regular file, in addition to being able to transfer to a socket. The current man page states that the semantics of this function is analogous to writev(2), except that sendfilev can read from data buffers or file descriptors. Supporting this semantic, however, leads to unavoidable deadlock and performance issues. 2. Solution sendfilev is modified so that the output behavior is not the same as writev() and when multiple threads attempt to write to the same output file at the same time. Instead, the result of the combined operations is undefined. The applications that use sendfilev() will have to use their own synchronization mechanism to ensure a consistent output. 3. Man page update The following change will be made to the man page of sendfilev(3EXT). --- sendfilev.old Thu Dec 18 15:41:16 2008 +++ sendfilev.new Thu Dec 18 15:45:40 2008 @@ -44,12 +44,6 @@ open for writing. - This function is analogous to the writev() system call. See - writev(2). Instead of sending out chunks of data, however, - the sendfilev() function can read input data from data - buffers or file descriptors. + This function is analogous to the writev(2) system call, but can + read from both buffers and file descriptors. Unlike writev(), + in the case of multiple writers to a file the effect of + sendfilev is not necessarily atomic; the writes may be + interleaved. Application-specific synchronization methods + must be employed if this causes problems. The following is the sendfilevec structure: typedef struct sendfilevec {