tap: Use write_remainder() in tap_send_frames_passt()
When we determine we have sent a partial frame in tap_send_frames_passt(), we call tap_send_remainder() to send the remainder of it. The logic in that function is very similar to that in the more general write_remainder() except that it uses send() instead of write()/writev(). But we are dealing specifically with the qemu socket here, which is a connected stream socket. In that case write()s do the same thing as send() with the options we were using, so we can just reuse write_remainder(). Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
dda7945ca9
commit
9a3fb5eb68
1 changed files with 4 additions and 25 deletions
29
tap.c
29
tap.c
|
@ -349,30 +349,6 @@ static size_t tap_send_frames_pasta(const struct ctx *c,
|
|||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* tap_send_remainder() - Send remainder of a partially sent frame
|
||||
* @c: Execution context
|
||||
* @iov: Partially sent buffer
|
||||
* @offset: Number of bytes already sent from @iov
|
||||
*/
|
||||
static void tap_send_remainder(const struct ctx *c, const struct iovec *iov,
|
||||
size_t offset)
|
||||
{
|
||||
const char *base = (char *)iov->iov_base;
|
||||
size_t len = iov->iov_len;
|
||||
|
||||
while (offset < len) {
|
||||
ssize_t sent = send(c->fd_tap, base + offset, len - offset,
|
||||
MSG_NOSIGNAL);
|
||||
if (sent < 0) {
|
||||
err("tap: partial frame send (missing %zu bytes): %s",
|
||||
len - offset, strerror(errno));
|
||||
return;
|
||||
}
|
||||
offset += sent;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* tap_send_frames_passt() - Send multiple frames to the passt tap
|
||||
* @c: Execution context
|
||||
|
@ -403,7 +379,10 @@ static size_t tap_send_frames_passt(const struct ctx *c,
|
|||
|
||||
if (i < n && buf_offset) {
|
||||
/* A partial frame was sent */
|
||||
tap_send_remainder(c, &iov[i], buf_offset);
|
||||
if (write_remainder(c->fd_tap, &iov[i], 1, buf_offset) < 0) {
|
||||
err("tap: partial frame send: %s", strerror(errno));
|
||||
return i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue