aboutsummaryrefslogtreecommitdiffstats
path: root/tools/blktap2
diff options
context:
space:
mode:
authorDr. Greg Wettstein <greg@wind.enjellic.com>2013-03-28 07:50:34 +0000
committerIan Jackson <Ian.Jackson@eu.citrix.com>2013-03-28 14:35:23 +0000
commita5c800142cfc82159fcb85b47116cf296caebcc5 (patch)
tree3499fefbceb5f19c32e4d090d326e98000aaa129 /tools/blktap2
parent7242e0dc2c6c083ded570de159007d112ee34e88 (diff)
downloadxen-a5c800142cfc82159fcb85b47116cf296caebcc5.tar.gz
xen-a5c800142cfc82159fcb85b47116cf296caebcc5.tar.bz2
xen-a5c800142cfc82159fcb85b47116cf296caebcc5.zip
tools/blktap2: Handle read/write interrupts in blktap2 control plane.
The following patch: tools: Retry blktap2 tapdisk message on interrupt. Addressed a long standing regression with the blktap2 control plane. An interruption of the select system call would prematurely terminate the message sequence needed to properly shutdown a blktap2 tapdisk instance. Ian Jackson correctly noted that the read and write systems calls responsible for receiving and sending the control messages could also return EINTR resulting in similar effects. While this regression was not noted in field testing this patch adds support to re-start the calls to provide a technically complete implementation of control plane management in the presence of signals. Signed-off-by: Dr. Greg Wettstein <xen@wind.enjellic.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/blktap2')
-rw-r--r--tools/blktap2/control/tap-ctl-ipc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/blktap2/control/tap-ctl-ipc.c b/tools/blktap2/control/tap-ctl-ipc.c
index c8aad1ccda..c7e42d9cb9 100644
--- a/tools/blktap2/control/tap-ctl-ipc.c
+++ b/tools/blktap2/control/tap-ctl-ipc.c
@@ -71,8 +71,11 @@ tap_ctl_read_message(int fd, tapdisk_message_t *message, int timeout)
}
else if (FD_ISSET(fd, &readfds)) {
ret = read(fd, message + offset, len - offset);
- if (ret <= 0)
+ if (ret <= 0) {
+ if (errno == EINTR)
+ continue;
break;
+ }
offset += ret;
} else
break;
@@ -124,8 +127,11 @@ tap_ctl_write_message(int fd, tapdisk_message_t *message, int timeout)
}
else if (FD_ISSET(fd, &writefds)) {
ret = write(fd, message + offset, len - offset);
- if (ret <= 0)
+ if (ret <= 0) {
+ if (errno == EINTR)
+ continue;
break;
+ }
offset += ret;
} else
break;