On December 28, 2018 15:11, Junio C Hamano wrote: > randall.s.becker@xxxxxxxxxx writes: > > > From: "Randall S. Becker" <rsbecker@xxxxxxxxxxxxx> > > > > This fix was needed on HPE NonStop NSE and NSX where SSIZE_MAX is less > > than BUFFERSIZE resulting in EINVAL. The call to read in > > transport-helper.c was the only place outside of wrapper.c where it is used > instead of xread. > > > > Signed-off-by: Randall S. Becker <rsbecker@xxxxxxxxxxxxx> > > --- > > transport-helper.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/transport-helper.c b/transport-helper.c index > > bf225c698f..a290695a12 100644 > > --- a/transport-helper.c > > +++ b/transport-helper.c > > @@ -1225,7 +1225,7 @@ static int udt_do_read(struct > unidirectional_transfer *t) > > return 0; /* No space for more. */ > > > > transfer_debug("%s is readable", t->src_name); > > - bytes = read(t->src, t->buf + t->bufuse, BUFFERSIZE - t->bufuse); > > + bytes = xread(t->src, t->buf + t->bufuse, BUFFERSIZE - t->bufuse); > > if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN && > > errno != EINTR) { > > error_errno(_("read(%s) failed"), t->src_name); > > As Peff pointed out in the earlier round of the same patch, replacing read() > with xread() here will affect what errno's can be possible after the function > returns. The checks affected by this change must also be updated, either in > the same patch, or a follow-up patch in the same series. Otherwise we > _will_ forget to clean them up. If I read the xread code correctly, the change would be to leave EINTR and remove the other two conditions. Correct?