{"thread":{"id":"65463","subject":"2.54.0-rc1 NO_WRITEV=Nope does not work","startedAt":"2026-04-09T19:48:24Z","lastAt":"2026-04-10T04:57:58Z","messageCount":6,"participants":["rsbecker@nexbridge.com","Jeff King","Junio C Hamano","Patrick Steinhardt"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"541292","messageId":"028901dcc859$d2419470$76c4bd50$@nexbridge.com","threadId":"65463","inReplyTo":null,"subject":"2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2026-04-09T19:48:16Z","receivedAt":"2026-04-09T19:48:24Z","isPatch":false,"body":"With a completely clean build, we are getting writev() being used anyway on\nNonStop:\n\n/usr/coreutils/bin/make NO_TCLTK=NoThanks NO_WRITEV=Nope V=1\nprefix=/usr/local-ssl3.5 CFLAGS=-g -O2 -D_LARGEFILE64_SOURCE=1\n-D_FILE_OFFSET_BITS=64 -Winline -I/usr/local-ssl3.5/include\n-I/usr/coreutils/include -I/usr/tandem/xml/T0625L01_AAE/include\nLDFLAGS=-D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64\n/usr/coreutils/lib/libz.a -L/usr/local-ssl3.5/lib -L/usr/coreutils/lib\n-L/usr/tandem/xml/T0625L01_AAE/lib SHELL=/usr/coreutils/bin/bash\nGIT_VERSION=2.54.0.rc1\n\nDown to the first instance:\n\nCloning into bare repository 'clone.git'...\nremote: Enumerating objects: 629, done.\nfatal: writev error: Invalid function argument\nfetch-pack: unexpected disconnect while reading sideband packet\nfatal: early EOF\nfatal: fetch-pack: invalid index-pack output\nnot ok 25 - clone from bitmapped repository\n#\n#                       rm -fr clone.git &&\n#                       git clone --no-local --bare . clone.git &&\n#                       git rev-parse HEAD >expect &&\n#                       git --git-dir=clone.git rev-parse HEAD >actual &&\n#                       test_cmp expect actual\n#\n\nDid I mess this up?\n\n--\nBrief whoami: NonStop&UNIX developer since approximately\nUNIX(421664400)\nNonStop(211288444200000000)\n-- In real life, I talk too much.\n\n\n"},{"id":"541307","messageId":"20260409211049.GA3119065@coredump.intra.peff.net","threadId":"65463","inReplyTo":"028901dcc859$d2419470$76c4bd50$@nexbridge.com","subject":"Re: 2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2026-04-09T21:10:49Z","receivedAt":"2026-04-09T21:10:51Z","isPatch":false,"body":"On Thu, Apr 09, 2026 at 03:48:16PM -0400, rsbecker@nexbridge.com wrote:\n\n> With a completely clean build, we are getting writev() being used anyway on\n> NonStop:\n> \n> /usr/coreutils/bin/make NO_TCLTK=NoThanks NO_WRITEV=Nope V=1\n> prefix=/usr/local-ssl3.5 CFLAGS=-g -O2 -D_LARGEFILE64_SOURCE=1\n> -D_FILE_OFFSET_BITS=64 -Winline -I/usr/local-ssl3.5/include\n> -I/usr/coreutils/include -I/usr/tandem/xml/T0625L01_AAE/include\n> LDFLAGS=-D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64\n> /usr/coreutils/lib/libz.a -L/usr/local-ssl3.5/lib -L/usr/coreutils/lib\n> -L/usr/tandem/xml/T0625L01_AAE/lib SHELL=/usr/coreutils/bin/bash\n> GIT_VERSION=2.54.0.rc1\n\nHmm, the plot thickens. I think our fallback wrapper is being overly\npicky. It does:\n\n           for (int i = 0; i < iovcnt; i++) {\n                  if (iov[i].iov_len > maximum_signed_value_of_type(ssize_t) ||\n                      iov[i].iov_len + sum > maximum_signed_value_of_type(ssize_t)) {\n                          errno = EINVAL;\n                          return -1;\n                  }\n  \n                  sum += iov[i].iov_len;\n          }\n\nso you are probably hitting that EINVAL! Which is trying to emulate how\na system writev() would work, but the fundamental problem is that it\n_doesn't_ work on your system, because ssize_t is too small for how\nwe're using writev(), which assumes we can pass in 64k at a time.\n\nIt is tempting to just delete the EINVAL check shown above, but then the\nrest of the fallback function needs to be more clever, and return a\npartial write before incrementing total_written over the ssize_t limit\n(otherwise we have no way to report to the caller how much was actually\nwritten).\n\nYuck. I think for 2.54 we either have to truly implement MAX_IO_SIZE\nsupport, or we have to revert the use of writev() in send_sideband()\nuntil we do.\n\n-Peff\n"},{"id":"541311","messageId":"xmqqmrzbreav.fsf_-_@gitster.g","threadId":"65463","inReplyTo":"20260409211049.GA3119065@coredump.intra.peff.net","subject":"Re* 2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-04-09T21:53:28Z","receivedAt":"2026-04-09T21:53:31Z","isPatch":false,"body":"Jeff King <peff@peff.net> writes:\n\n> so you are probably hitting that EINVAL! Which is trying to emulate how\n> a system writev() would work, but the fundamental problem is that it\n> _doesn't_ work on your system, because ssize_t is too small for how\n> we're using writev(), which assumes we can pass in 64k at a time.\n\nSigh.\n\n> It is tempting to just delete the EINVAL check shown above, but then the\n> rest of the fallback function needs to be more clever, and return a\n> partial write before incrementing total_written over the ssize_t limit\n> (otherwise we have no way to report to the caller how much was actually\n> written).\n>\n> Yuck. I think for 2.54 we either have to truly implement MAX_IO_SIZE\n> support, or we have to revert the use of writev() in send_sideband()\n> until we do.\n\nSigh again.\n\n$ git log -Swritev --oneline 8023abc632^..\n89152af176 cmake: use writev(3p) wrapper as needed\n26986f4cba sideband: use writev(3p) to send pktlines\n1970fcef93 wrapper: introduce writev(3p) wrappers\n3b9b2c2a29 compat/posix: introduce writev(3p) wrapper\n\nReverting them gave us the following patch relative to the tip of\n'master'.\n\n----- >8 -----\nSubject: writev: retract the topic until we have a better emulation\n\nThe emulation layer we added for writev(3p) tries to be too faithful\nto the spec that on systems with SSIZE_MAX set to lower than 64kB to\nfit a single sideband packet would fail just like the real system\nwritev(), which makes our use of writev() for sideband messages\nunworkable.\n\nLet's revert them and reboot the effort after the release.\n\nHelped-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Makefile                            |  4 ----\n compat/posix.h                      | 14 ------------\n compat/writev.c                     | 44 -------------------------------------\n config.mak.uname                    |  2 --\n contrib/buildsystems/CMakeLists.txt |  6 +----\n meson.build                         |  1 -\n sideband.c                          | 14 +++---------\n wrapper.c                           | 41 ----------------------------------\n wrapper.h                           |  9 --------\n write-or-die.c                      |  8 -------\n write-or-die.h                      |  1 -\n 11 files changed, 4 insertions(+), 140 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 5d22394c2e..cedc234173 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -2029,10 +2029,6 @@ ifdef NO_PREAD\n \tCOMPAT_CFLAGS += -DNO_PREAD\n \tCOMPAT_OBJS += compat/pread.o\n endif\n-ifdef NO_WRITEV\n-\tCOMPAT_CFLAGS += -DNO_WRITEV\n-\tCOMPAT_OBJS += compat/writev.o\n-endif\n ifdef NO_FAST_WORKING_DIRECTORY\n \tBASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY\n endif\ndiff --git a/compat/posix.h b/compat/posix.h\nindex 94699a03fa..faaae1b655 100644\n--- a/compat/posix.h\n+++ b/compat/posix.h\n@@ -137,9 +137,6 @@\n #include <sys/socket.h>\n #include <sys/ioctl.h>\n #include <sys/statvfs.h>\n-#ifndef NO_WRITEV\n-#include <sys/uio.h>\n-#endif\n #include <termios.h>\n #ifndef NO_SYS_SELECT_H\n #include <sys/select.h>\n@@ -326,17 +323,6 @@ int git_lstat(const char *, struct stat *);\n ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);\n #endif\n \n-#ifdef NO_WRITEV\n-#define writev git_writev\n-#define iovec git_iovec\n-struct git_iovec {\n-\tvoid *iov_base;\n-\tsize_t iov_len;\n-};\n-\n-ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt);\n-#endif\n-\n #ifdef NO_SETENV\n #define setenv gitsetenv\n int gitsetenv(const char *, const char *, int);\ndiff --git a/compat/writev.c b/compat/writev.c\ndeleted file mode 100644\nindex 3a94870a2f..0000000000\n--- a/compat/writev.c\n+++ /dev/null\n@@ -1,44 +0,0 @@\n-#include \"../git-compat-util.h\"\n-#include \"../wrapper.h\"\n-\n-ssize_t git_writev(int fd, const struct iovec *iov, int iovcnt)\n-{\n-\tsize_t total_written = 0;\n-\tsize_t sum = 0;\n-\n-\t/*\n-\t * According to writev(3p), the syscall shall error with EINVAL in case\n-\t * the sum of `iov_len` overflows `ssize_t`.\n-\t */\n-\t for (int i = 0; i < iovcnt; i++) {\n-\t\tif (iov[i].iov_len > maximum_signed_value_of_type(ssize_t) ||\n-\t\t    iov[i].iov_len + sum > maximum_signed_value_of_type(ssize_t)) {\n-\t\t\terrno = EINVAL;\n-\t\t\treturn -1;\n-\t\t}\n-\n-\t\tsum += iov[i].iov_len;\n-\t}\n-\n-\tfor (int i = 0; i < iovcnt; i++) {\n-\t\tconst char *bytes = iov[i].iov_base;\n-\t\tsize_t iovec_written = 0;\n-\n-\t\twhile (iovec_written < iov[i].iov_len) {\n-\t\t\tssize_t bytes_written = xwrite(fd, bytes + iovec_written,\n-\t\t\t\t\t\t       iov[i].iov_len - iovec_written);\n-\t\t\tif (bytes_written < 0) {\n-\t\t\t\tif (total_written)\n-\t\t\t\t\tgoto out;\n-\t\t\t\treturn bytes_written;\n-\t\t\t}\n-\t\t\tif (!bytes_written)\n-\t\t\t\tgoto out;\n-\t\t\tiovec_written += bytes_written;\n-\t\t\ttotal_written += bytes_written;\n-\t\t}\n-\t}\n-\n-out:\n-\treturn (ssize_t) total_written;\n-}\ndiff --git a/config.mak.uname b/config.mak.uname\nindex ccb3f71881..5feb582558 100644\n--- a/config.mak.uname\n+++ b/config.mak.uname\n@@ -459,7 +459,6 @@ ifeq ($(uname_S),Windows)\n \tSANE_TOOL_PATH ?= $(msvc_bin_dir_msys)\n \tHAVE_ALLOCA_H = YesPlease\n \tNO_PREAD = YesPlease\n-\tNO_WRITEV = YesPlease\n \tNEEDS_CRYPTO_WITH_SSL = YesPlease\n \tNO_LIBGEN_H = YesPlease\n \tNO_POLL = YesPlease\n@@ -675,7 +674,6 @@ ifeq ($(uname_S),MINGW)\n \tpathsep = ;\n \tHAVE_ALLOCA_H = YesPlease\n \tNO_PREAD = YesPlease\n-\tNO_WRITEV = YesPlease\n \tNEEDS_CRYPTO_WITH_SSL = YesPlease\n \tNO_LIBGEN_H = YesPlease\n \tNO_POLL = YesPlease\ndiff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt\nindex d7a087e584..81b4306e72 100644\n--- a/contrib/buildsystems/CMakeLists.txt\n+++ b/contrib/buildsystems/CMakeLists.txt\n@@ -376,7 +376,7 @@ endif()\n #function checks\n set(function_checks\n \tstrcasestr memmem strlcpy strtoimax strtoumax strtoull\n-\tsetenv mkdtemp poll pread memmem writev)\n+\tsetenv mkdtemp poll pread memmem)\n \n #unsetenv,hstrerror are incompatible with windows build\n if(NOT WIN32)\n@@ -421,10 +421,6 @@ if(NOT HAVE_MEMMEM)\n \tlist(APPEND compat_SOURCES compat/memmem.c)\n endif()\n \n-if(NOT HAVE_WRITEV)\n-\tlist(APPEND compat_SOURCES compat/writev.c)\n-endif()\n-\n if(NOT WIN32)\n \tif(NOT HAVE_UNSETENV)\n \t\tlist(APPEND compat_SOURCES compat/unsetenv.c)\ndiff --git a/meson.build b/meson.build\nindex 8309942d18..11488623bf 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -1429,7 +1429,6 @@ checkfuncs = {\n   'initgroups' : [],\n   'strtoumax' : ['strtoumax.c', 'strtoimax.c'],\n   'pread' : ['pread.c'],\n-  'writev' : ['writev.c'],\n }\n \n if host_machine.system() == 'windows'\ndiff --git a/sideband.c b/sideband.c\nindex 1ed6614eaf..ea7c25211e 100644\n--- a/sideband.c\n+++ b/sideband.c\n@@ -264,7 +264,6 @@ void send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_ma\n \tconst char *p = data;\n \n \twhile (sz) {\n-\t\tstruct iovec iov[2];\n \t\tunsigned n;\n \t\tchar hdr[5];\n \n@@ -274,19 +273,12 @@ void send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_ma\n \t\tif (0 <= band) {\n \t\t\txsnprintf(hdr, sizeof(hdr), \"%04x\", n + 5);\n \t\t\thdr[4] = band;\n-\t\t\tiov[0].iov_base = hdr;\n-\t\t\tiov[0].iov_len = 5;\n+\t\t\twrite_or_die(fd, hdr, 5);\n \t\t} else {\n \t\t\txsnprintf(hdr, sizeof(hdr), \"%04x\", n + 4);\n-\t\t\tiov[0].iov_base = hdr;\n-\t\t\tiov[0].iov_len = 4;\n+\t\t\twrite_or_die(fd, hdr, 4);\n \t\t}\n-\n-\t\tiov[1].iov_base = (void *) p;\n-\t\tiov[1].iov_len = n;\n-\n-\t\twritev_or_die(fd, iov, ARRAY_SIZE(iov));\n-\n+\t\twrite_or_die(fd, p, n);\n \t\tp += n;\n \t\tsz -= n;\n \t}\ndiff --git a/wrapper.c b/wrapper.c\nindex be8fa575e6..16f5a63fbb 100644\n--- a/wrapper.c\n+++ b/wrapper.c\n@@ -323,47 +323,6 @@ ssize_t write_in_full(int fd, const void *buf, size_t count)\n \treturn total;\n }\n \n-ssize_t writev_in_full(int fd, struct iovec *iov, int iovcnt)\n-{\n-\tssize_t total_written = 0;\n-\n-\twhile (iovcnt) {\n-\t\tssize_t bytes_written = writev(fd, iov, iovcnt);\n-\t\tif (bytes_written < 0) {\n-\t\t\tif (errno == EINTR || errno == EAGAIN)\n-\t\t\t\tcontinue;\n-\t\t\treturn -1;\n-\t\t}\n-\t\tif (!bytes_written) {\n-\t\t\terrno = ENOSPC;\n-\t\t\treturn -1;\n-\t\t}\n-\n-\t\ttotal_written += bytes_written;\n-\n-\t\t/*\n-\t\t * We first need to discard any iovec entities that have been\n-\t\t * fully written.\n-\t\t */\n-\t\twhile (iovcnt && (size_t)bytes_written >= iov->iov_len) {\n-\t\t\tbytes_written -= iov->iov_len;\n-\t\t\tiov++;\n-\t\t\tiovcnt--;\n-\t\t}\n-\n-\t\t/*\n-\t\t * Finally, we need to adjust the last iovec in case we have\n-\t\t * performed a partial write.\n-\t\t */\n-\t\tif (iovcnt && bytes_written) {\n-\t\t\tiov->iov_base = (char *) iov->iov_base + bytes_written;\n-\t\t\tiov->iov_len -= bytes_written;\n-\t\t}\n-\t}\n-\n-\treturn total_written;\n-}\n-\n ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset)\n {\n \tchar *p = buf;\ndiff --git a/wrapper.h b/wrapper.h\nindex 27519b32d1..15ac3bab6e 100644\n--- a/wrapper.h\n+++ b/wrapper.h\n@@ -47,15 +47,6 @@ ssize_t read_in_full(int fd, void *buf, size_t count);\n ssize_t write_in_full(int fd, const void *buf, size_t count);\n ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset);\n \n-/*\n- * Try to write all iovecs. Returns -1 in case an error occurred with a proper\n- * errno set, the number of bytes written otherwise.\n- *\n- * Note that the iovec will be modified as a result of this call to adjust for\n- * partial writes!\n- */\n-ssize_t writev_in_full(int fd, struct iovec *iov, int iovcnt);\n-\n static inline ssize_t write_str_in_full(int fd, const char *str)\n {\n \treturn write_in_full(fd, str, strlen(str));\ndiff --git a/write-or-die.c b/write-or-die.c\nindex 5f522fb728..01a9a51fa2 100644\n--- a/write-or-die.c\n+++ b/write-or-die.c\n@@ -96,14 +96,6 @@ void write_or_die(int fd, const void *buf, size_t count)\n \t}\n }\n \n-void writev_or_die(int fd, struct iovec *iov, int iovlen)\n-{\n-\tif (writev_in_full(fd, iov, iovlen) < 0) {\n-\t\tcheck_pipe(errno);\n-\t\tdie_errno(\"writev error\");\n-\t}\n-}\n-\n void fwrite_or_die(FILE *f, const void *buf, size_t count)\n {\n \tif (fwrite(buf, 1, count, f) != count)\ndiff --git a/write-or-die.h b/write-or-die.h\nindex a045bdfaef..ff0408bd84 100644\n--- a/write-or-die.h\n+++ b/write-or-die.h\n@@ -7,7 +7,6 @@ void fprintf_or_die(FILE *, const char *fmt, ...);\n void fwrite_or_die(FILE *f, const void *buf, size_t count);\n void fflush_or_die(FILE *f);\n void write_or_die(int fd, const void *buf, size_t count);\n-void writev_or_die(int fd, struct iovec *iov, int iovlen);\n \n /*\n  * These values are used to help identify parts of a repository to fsync.\n"},{"id":"541312","messageId":"20260409222131.GA3130242@coredump.intra.peff.net","threadId":"65463","inReplyTo":"xmqqmrzbreav.fsf_-_@gitster.g","subject":"Re: Re* 2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2026-04-09T22:21:31Z","receivedAt":"2026-04-09T22:21:38Z","isPatch":false,"body":"On Thu, Apr 09, 2026 at 02:53:28PM -0700, Junio C Hamano wrote:\n\n> > Yuck. I think for 2.54 we either have to truly implement MAX_IO_SIZE\n> > support, or we have to revert the use of writev() in send_sideband()\n> > until we do.\n> \n> Sigh again.\n\nYeah, I feel the same way. :(\n\nI would be happy if somebody could prove me wrong, though.\n\n> $ git log -Swritev --oneline 8023abc632^..\n> 89152af176 cmake: use writev(3p) wrapper as needed\n> 26986f4cba sideband: use writev(3p) to send pktlines\n> 1970fcef93 wrapper: introduce writev(3p) wrappers\n> 3b9b2c2a29 compat/posix: introduce writev(3p) wrapper\n> \n> Reverting them gave us the following patch relative to the tip of\n> 'master'.\n\nIf we are planning to improve the topic post-release (and I think that\nis a good idea), then we can do a much smaller revert. If we just revert\n26986f4cba (sideband: use writev(3p) to send pktlines, 2026-03-13), then\nnobody calls writev (neither the real one nor our fallback). The\nwrappers are dead code until we bring it back, but it may make things\neasier for fixing post-2.54.\n\n-Peff\n"},{"id":"541313","messageId":"xmqqik9zrcj1.fsf@gitster.g","threadId":"65463","inReplyTo":"20260409222131.GA3130242@coredump.intra.peff.net","subject":"Re: Re* 2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-04-09T22:31:46Z","receivedAt":"2026-04-09T22:31:49Z","isPatch":false,"body":"Jeff King <peff@peff.net> writes:\n\n> On Thu, Apr 09, 2026 at 02:53:28PM -0700, Junio C Hamano wrote:\n>\n>> > Yuck. I think for 2.54 we either have to truly implement MAX_IO_SIZE\n>> > support, or we have to revert the use of writev() in send_sideband()\n>> > until we do.\n>> \n>> Sigh again.\n>\n> Yeah, I feel the same way. :(\n>\n> I would be happy if somebody could prove me wrong, though.\n>\n>> $ git log -Swritev --oneline 8023abc632^..\n>> 89152af176 cmake: use writev(3p) wrapper as needed\n>> 26986f4cba sideband: use writev(3p) to send pktlines\n>> 1970fcef93 wrapper: introduce writev(3p) wrappers\n>> 3b9b2c2a29 compat/posix: introduce writev(3p) wrapper\n>> \n>> Reverting them gave us the following patch relative to the tip of\n>> 'master'.\n>\n> If we are planning to improve the topic post-release (and I think that\n> is a good idea), then we can do a much smaller revert. If we just revert\n> 26986f4cba (sideband: use writev(3p) to send pktlines, 2026-03-13), then\n> nobody calls writev (neither the real one nor our fallback). The\n> wrappers are dead code until we bring it back, but it may make things\n> easier for fixing post-2.54.\n>\n> -Peff\n\nYes and no.  While excising know callers is certainly safer in the\ncode space, I do not want to hear about some compilers complaining\nabout dead code, etc.\n\nI am preparing another set of integration to be pushed out, queueing\nthe reverts in 'seen'.\n\n"},{"id":"541326","messageId":"adiDUFOl6OaoResZ@pks.im","threadId":"65463","inReplyTo":"xmqqik9zrcj1.fsf@gitster.g","subject":"Re: Re* 2.54.0-rc1 NO_WRITEV=Nope does not work","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-04-10T04:57:52Z","receivedAt":"2026-04-10T04:57:58Z","isPatch":false,"body":"On Thu, Apr 09, 2026 at 03:31:46PM -0700, Junio C Hamano wrote:\n> Jeff King <peff@peff.net> writes:\n> \n> > On Thu, Apr 09, 2026 at 02:53:28PM -0700, Junio C Hamano wrote:\n> >\n> >> > Yuck. I think for 2.54 we either have to truly implement MAX_IO_SIZE\n> >> > support, or we have to revert the use of writev() in send_sideband()\n> >> > until we do.\n> >> \n> >> Sigh again.\n> >\n> > Yeah, I feel the same way. :(\n> >\n> > I would be happy if somebody could prove me wrong, though.\n> >\n> >> $ git log -Swritev --oneline 8023abc632^..\n> >> 89152af176 cmake: use writev(3p) wrapper as needed\n> >> 26986f4cba sideband: use writev(3p) to send pktlines\n> >> 1970fcef93 wrapper: introduce writev(3p) wrappers\n> >> 3b9b2c2a29 compat/posix: introduce writev(3p) wrapper\n> >> \n> >> Reverting them gave us the following patch relative to the tip of\n> >> 'master'.\n> >\n> > If we are planning to improve the topic post-release (and I think that\n> > is a good idea), then we can do a much smaller revert. If we just revert\n> > 26986f4cba (sideband: use writev(3p) to send pktlines, 2026-03-13), then\n> > nobody calls writev (neither the real one nor our fallback). The\n> > wrappers are dead code until we bring it back, but it may make things\n> > easier for fixing post-2.54.\n> >\n> > -Peff\n> \n> Yes and no.  While excising know callers is certainly safer in the\n> code space, I do not want to hear about some compilers complaining\n> about dead code, etc.\n\nI guess they wouldn't as the function signature is part of a header.\n\n> I am preparing another set of integration to be pushed out, queueing\n> the reverts in 'seen'.\n\nBut anyway, I'm okay with this as the safest way forward. I'll then\nreintroduce early in the next release cycle and hopefully weed out the\nexisting issues.\n\nThanks, all!\n\nPatrick\n"}]}