Do not redefine READ and WRITE, which are defined in linux/fs.h. Instead prefix them
with XEN to avoid namespace clash.

--- tools/blktap2/include/blktaplib.h.orig	2011-01-10 11:10:18.362560374 +0100
+++ tools/blktap2/include/blktaplib.h	2011-01-10 11:11:53.007679832 +0100
@@ -197,8 +197,8 @@ typedef struct msg_lock {
 	int       uuid_len;
 } msg_lock_t;
 
-#define READ 0
-#define WRITE 1
+#define XEN_READ 0
+#define XEN_WRITE 1
 
 /*Control Messages between manager and tapdev*/
 #define CTLMSG_PARAMS          1
--- tools/blktap/lib/blktaplib.h.orig	2011-01-10 11:12:38.633561491 +0100
+++ tools/blktap/lib/blktaplib.h	2011-01-10 11:12:47.110717080 +0100
@@ -195,8 +195,8 @@ typedef struct msg_pid {
 	pid_t     pid;
 } msg_pid_t;
 
-#define READ 0
-#define WRITE 1
+#define XEN_READ 0
+#define XEN_WRITE 1
 
 /*Control Messages between manager and tapdev*/
 #define CTLMSG_PARAMS      1
--- tools/blktap/drivers/blktapctrl.c.orig	2010-08-25 12:22:07.000000000 +0200
+++ tools/blktap/drivers/blktapctrl.c	2011-01-10 11:30:15.176697136 +0100
@@ -128,13 +128,13 @@ static int get_tapdisk_pid(blkif_t *blki
 {
 	int ret;
 
-	if ((ret = write_msg(blkif->fds[WRITE], CTLMSG_PID, blkif, NULL)) 
+	if ((ret = write_msg(blkif->fds[XEN_WRITE], CTLMSG_PID, blkif, NULL)) 
 	    <= 0) {
 		DPRINTF("Write_msg failed - CTLMSG_PID(%d)\n", ret);
 		return -EINVAL;
 	}
 
-	if ((ret = read_msg(blkif->fds[READ], CTLMSG_PID_RSP, blkif))
+	if ((ret = read_msg(blkif->fds[XEN_READ], CTLMSG_PID_RSP, blkif))
 	     <= 0) {
 		DPRINTF("Read_msg failure - CTLMSG_PID(%d)\n", ret);
 		return -EINVAL;
@@ -576,8 +576,8 @@ static int connect_qemu(blkif_t *blkif,
 		}
 
 		DPRINTF("Using tapdisk-ioemu connection\n");
-		blkif->fds[READ] = dom0_readfd;
-		blkif->fds[WRITE] = dom0_writefd;
+		blkif->fds[XEN_READ] = dom0_readfd;
+		blkif->fds[XEN_WRITE] = dom0_writefd;
 
 		if (refresh_pid) {
 			get_tapdisk_pid(blkif);
@@ -587,8 +587,8 @@ static int connect_qemu(blkif_t *blkif,
 	} else if (access(rdctldev, R_OK | W_OK) == 0) {
 		/* Use existing pipe to the device model */
 		DPRINTF("Using qemu-dm connection\n");
-		blkif->fds[READ] = open_ctrl_socket(wrctldev);
-		blkif->fds[WRITE] = open_ctrl_socket(rdctldev);
+		blkif->fds[XEN_READ] = open_ctrl_socket(wrctldev);
+		blkif->fds[XEN_WRITE] = open_ctrl_socket(rdctldev);
 	} else {
 		/* No device model => try with tapdisk-ioemu */
 		DPRINTF("No device model\n");
@@ -598,7 +598,7 @@ static int connect_qemu(blkif_t *blkif,
 	free(rdctldev);
 	free(wrctldev);
 	
-	if (blkif->fds[READ] == -1 || blkif->fds[WRITE] == -1)
+	if (blkif->fds[XEN_READ] == -1 || blkif->fds[XEN_WRITE] == -1)
 		return -1;
 
 	DPRINTF("Attached to qemu blktap pipes\n");
@@ -621,10 +621,10 @@ static int connect_tapdisk(blkif_t *blki
 		     "%s/tapctrlwrite%d", BLKTAP_CTRL_DIR, minor) == -1)
 		goto fail;
 	
-	blkif->fds[READ] = open_ctrl_socket(rdctldev);
-	blkif->fds[WRITE] = open_ctrl_socket(wrctldev);
+	blkif->fds[XEN_READ] = open_ctrl_socket(rdctldev);
+	blkif->fds[XEN_WRITE] = open_ctrl_socket(wrctldev);
 	
-	if (blkif->fds[READ] == -1 || blkif->fds[WRITE] == -1)
+	if (blkif->fds[XEN_READ] == -1 || blkif->fds[XEN_WRITE] == -1)
 		goto fail;
 
 	/*launch the new process*/
@@ -683,8 +683,8 @@ static int blktapctrl_new_blkif(blkif_t
 
 		} else {
 			DPRINTF("Process exists!\n");
-			blkif->fds[READ] = exist->fds[READ];
-			blkif->fds[WRITE] = exist->fds[WRITE];
+			blkif->fds[XEN_READ] = exist->fds[XEN_READ];
+			blkif->fds[XEN_WRITE] = exist->fds[XEN_WRITE];
 		}
 
 		add_disktype(blkif, type);
@@ -703,13 +703,13 @@ static int blktapctrl_new_blkif(blkif_t
 
 		/* Both of the following read and write calls will block up to 
 		 * max_timeout val*/
-		if (write_msg(blkif->fds[WRITE], CTLMSG_PARAMS, blkif, ptr) 
+		if (write_msg(blkif->fds[XEN_WRITE], CTLMSG_PARAMS, blkif, ptr) 
 		    <= 0) {
 			DPRINTF("Write_msg failed - CTLMSG_PARAMS\n");
 			goto fail;
 		}
 
-		if (read_msg(blkif->fds[READ], CTLMSG_IMG, blkif) <= 0) {
+		if (read_msg(blkif->fds[XEN_READ], CTLMSG_IMG, blkif) <= 0) {
 			DPRINTF("Read_msg failure - CTLMSG_IMG\n");
 			goto fail;
 		}
@@ -725,12 +725,12 @@ fail:
 static int map_new_blktapctrl(blkif_t *blkif)
 {
 	DPRINTF("Received a poll for a new devmap\n");
-	if (write_msg(blkif->fds[WRITE], CTLMSG_NEWDEV, blkif, NULL) <= 0) {
+	if (write_msg(blkif->fds[XEN_WRITE], CTLMSG_NEWDEV, blkif, NULL) <= 0) {
 		DPRINTF("Write_msg failed - CTLMSG_NEWDEV\n");
 		return -EINVAL;
 	}
 
-	if (read_msg(blkif->fds[READ], CTLMSG_NEWDEV_RSP, blkif) <= 0) {
+	if (read_msg(blkif->fds[XEN_READ], CTLMSG_NEWDEV_RSP, blkif) <= 0) {
 		DPRINTF("Read_msg failed - CTLMSG_NEWDEV_RSP\n");
 		return -EINVAL;
 	}
@@ -743,15 +743,15 @@ static int unmap_blktapctrl(blkif_t *blk
 {
 	DPRINTF("Unmapping vbd\n");
 
-	if (write_msg(blkif->fds[WRITE], CTLMSG_CLOSE, blkif, NULL) <= 0) {
+	if (write_msg(blkif->fds[XEN_WRITE], CTLMSG_CLOSE, blkif, NULL) <= 0) {
 		DPRINTF("Write_msg failed - CTLMSG_CLOSE\n");
 		return -EINVAL;
 	}
 
 	if (del_disktype(blkif)) {
 		DPRINTF("Closing communication pipe to pid %d\n", blkif->tappid);
-		close(blkif->fds[WRITE]);
-		close(blkif->fds[READ]);
+		close(blkif->fds[XEN_WRITE]);
+		close(blkif->fds[XEN_READ]);
 	}
 
 	return 0;
--- tools/blktap/drivers/tapdisk.c.orig	2011-01-10 11:33:42.160375869 +0100
+++ tools/blktap/drivers/tapdisk.c	2011-01-10 11:36:42.820168882 +0100
@@ -138,10 +138,10 @@ static inline int LOCAL_FD_SET(fd_set *r
 		if (ptr->tap_fd) {
 			FD_SET(ptr->tap_fd, readfds);
 			td_for_each_disk(ptr->s, dd) {
-				if (dd->io_fd[READ]) 
-					FD_SET(dd->io_fd[READ], readfds);
-				maxfds = (dd->io_fd[READ] > maxfds ? 
-					  dd->io_fd[READ] : maxfds);
+				if (dd->io_fd[INPUT]) 
+					FD_SET(dd->io_fd[INPUT], readfds);
+				maxfds = (dd->io_fd[INPUT] > maxfds ? 
+					  dd->io_fd[INPUT] : maxfds);
 			}
 			maxfds = (ptr->tap_fd > maxfds ? ptr->tap_fd : maxfds);
 		}
@@ -380,7 +380,7 @@ static int read_msg(char *buf)
 	struct td_state *s = NULL;
 	fd_list_entry_t *entry;
 
-	length = read(fds[READ], buf, MSG_SIZE);
+	length = read(fds[INPUT], buf, MSG_SIZE);
 
 	if (length > 0 && length >= sizeof(msg_hdr_t)) 
 	{
@@ -435,7 +435,7 @@ static int read_msg(char *buf)
 				msg->type = CTLMSG_IMG_FAIL;
 				msg->len = msglen;
 			}
-			len = write(fds[WRITE], buf, msglen);
+			len = write(fds[OUTPUT], buf, msglen);
 			free(path);
 			return 1;
 			
@@ -457,7 +457,7 @@ static int read_msg(char *buf)
 				              : CTLMSG_NEWDEV_FAIL);
 			msg->len = msglen;
 
-			len = write(fds[WRITE], buf, msglen);
+			len = write(fds[OUTPUT], buf, msglen);
 			return 1;
 
 		case CTLMSG_CLOSE:
@@ -479,7 +479,7 @@ static int read_msg(char *buf)
 			process = getpid();
 			msg_pid->pid = process;
 
-			len = write(fds[WRITE], buf, msglen);
+			len = write(fds[OUTPUT], buf, msglen);
 			return 1;
 
 		default:
@@ -782,12 +782,12 @@ int main(int argc, char *argv[])
 	signal (SIGINT, sig_handler);
 
 	/*Open the control channel*/
-	fds[READ]  = open(argv[1],O_RDWR|O_NONBLOCK);
-	fds[WRITE] = open(argv[2],O_RDWR|O_NONBLOCK);
+	fds[INPUT]  = open(argv[1],O_RDWR|O_NONBLOCK);
+	fds[OUTPUT] = open(argv[2],O_RDWR|O_NONBLOCK);
 
-	if ( (fds[READ] < 0) || (fds[WRITE] < 0) ) 
+	if ( (fds[INPUT] < 0) || (fds[OUTPUT] < 0) ) 
 	{
-		DPRINTF("FD open failed [%d,%d]\n", fds[READ], fds[WRITE]);
+		DPRINTF("FD open failed [%d,%d]\n", fds[INPUT], fds[OUTPUT]);
 		exit(-1);
 	}
 
@@ -803,8 +803,8 @@ int main(int argc, char *argv[])
         {
 		ret = 0;
 		FD_ZERO(&readfds);
-		FD_SET(fds[READ], &readfds);
-		maxfds = fds[READ];
+		FD_SET(fds[INPUT], &readfds);
+		maxfds = fds[INPUT];
 
 		/*Set all tap fds*/
 		LOCAL_FD_SET(&readfds);
@@ -822,10 +822,10 @@ int main(int argc, char *argv[])
 				tapdev_info_t *info = ptr->s->ring_info;
 
 				td_for_each_disk(ptr->s, dd) {
-					if (dd->io_fd[READ] &&
-					    FD_ISSET(dd->io_fd[READ], 
+					if (dd->io_fd[INPUT] &&
+					    FD_ISSET(dd->io_fd[INPUT], 
 						     &readfds)) {
-						io_done(dd, READ);
+						io_done(dd, INPUT);
 						progress_made = 1;
 					}
 				}
@@ -851,13 +851,13 @@ int main(int argc, char *argv[])
 				ptr = ptr->next;
 			}
 
-			if (FD_ISSET(fds[READ], &readfds))
+			if (FD_ISSET(fds[INPUT], &readfds))
 				read_msg(buf);
 		}
 	}
 	free(buf);
-	close(fds[READ]);
-	close(fds[WRITE]);
+	close(fds[INPUT]);
+	close(fds[OUTPUT]);
 
 	ptr = fd_start;
 	while (ptr != NULL) {
