[PATCH] Add support for the read/write interface of SG v3
diff --git a/fio.c b/fio.c
index 9dd8e24..5c45cae 100644
--- a/fio.c
+++ b/fio.c
@@ -1235,12 +1235,14 @@
 
 static int get_file_size(struct thread_data *td)
 {
-	int ret;
+	int ret = 0;
 
 	if (td->filetype == FIO_TYPE_FILE)
 		ret = file_size(td);
-	else
+	else if (td->filetype == FIO_TYPE_BD)
 		ret = bdev_size(td);
+	else
+		td->real_file_size = -1;
 
 	if (ret)
 		return ret;
@@ -1356,9 +1358,14 @@
 	if (td->odirect)
 		flags |= O_DIRECT;
 
-	if (td_read(td))
-		td->fd = open(td->file_name, flags | O_RDONLY);
-	else {
+	if (td_read(td)) {
+		if (td->filetype == FIO_TYPE_CHAR)
+			flags |= O_RDWR;
+		else
+			flags |= O_RDONLY;
+
+		td->fd = open(td->file_name, flags);
+	} else {
 		if (td->filetype == FIO_TYPE_FILE) {
 			if (!td->overwrite)
 				flags |= O_TRUNC;