X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=cmd_fsck.c;h=262ac1bcde02012c64a30fa2798b2ab130dceb9d;hb=ba4c17c12ba5a66f24b4beee0f5791eee46333b0;hp=81e589b465a7c4d157e772f1f60d9ba3a5e46b8c;hpb=4524069e52a9aafaa5823eee4fe58ef382786983;p=bcachefs-tools-debian diff --git a/cmd_fsck.c b/cmd_fsck.c index 81e589b..262ac1b 100644 --- a/cmd_fsck.c +++ b/cmd_fsck.c @@ -35,7 +35,7 @@ static void setnonblocking(int fd) static int do_splice(int rfd, int wfd) { - char buf[4096]; + char buf[4096], *b = buf; int r = read(rfd, buf, sizeof(buf)); if (r < 0 && errno == EAGAIN) @@ -44,8 +44,13 @@ static int do_splice(int rfd, int wfd) return r; if (!r) return 1; - if (write(wfd, buf, r) != r) - die("write error"); + do { + ssize_t w = write(wfd, b, r); + if (w < 0) + die("%s: write error: %m", __func__); + r -= w; + b += w; + } while (r); return 0; }