Use writev in libfio_sec_osd

This commit is contained in:
Vitaliy Filippov
2020-03-02 21:17:21 +03:00
parent 79839ec31d
commit 7eac7b6d55
3 changed files with 46 additions and 7 deletions
+34
View File
@@ -50,3 +50,37 @@ int write_blocking(int fd, void *write_buf, size_t remaining)
}
return done;
}
int writev_blocking(int fd, iovec *iov, int iovcnt)
{
int v = 0;
int done = 0;
while (v < iovcnt)
{
ssize_t r = writev(fd, iov, iovcnt);
if (r < 0)
{
if (errno != EAGAIN && errno != EPIPE)
{
perror("writev");
exit(1);
}
continue;
}
while (v < iovcnt)
{
if (iov[v].iov_len > r)
{
iov[v].iov_len -= r;
iov[v].iov_base += r;
break;
}
else
{
v++;
}
}
done += r;
}
return done;
}