Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 44462517234f07e03c4dc71e5b5460cd70feeb07:

  configure: add option to disable libnuma usage (2013-10-31 11:00:54 -0600)

are available in the git repository at:
  git://git.kernel.dk/fio.git master

Bruce Cran (3):
      Update Windows code to fix build breakage
      Implement writev on Windows
      server: ensure that fio_time_init() is called before option parsing

 backend.c                            |    7 ++++++-
 engines/net.c                        |   18 +++++++++---------
 os/os-windows.h                      |    9 ++++-----
 os/windows/posix.c                   |   32 +++++++++++++++++++++++++++-----
 os/windows/posix/include/arpa/inet.h |   13 +++++++++++++
 os/windows/posix/include/sys/uio.h   |    4 ++--
 os/windows/posix/include/sys/wait.h  |    2 +-
 7 files changed, 62 insertions(+), 23 deletions(-)

---

Diff of recent changes:

diff --git a/backend.c b/backend.c
index 180a487..00a23db 100644
--- a/backend.c
+++ b/backend.c
@@ -1129,6 +1129,11 @@ static void *thread_main(void *data)
 	} else
 		td->pid = gettid();
 
+	/*
+	 * fio_time_init() may not have been called yet if running as a server
+	 */
+	fio_time_init();
+
 	fio_local_clock_init(o->use_thread);
 
 	dprint(FD_PROCESS, "jobs pid=%d started\n", (int) td->pid);
@@ -1590,7 +1595,7 @@ static void run_threads(void)
 
 	if (fio_gtod_offload && fio_start_gtod_thread())
 		return;
-	
+
 	fio_idle_prof_init();
 
 	set_sig_handlers();
diff --git a/engines/net.c b/engines/net.c
index 0c90e1c..52cc8a7 100644
--- a/engines/net.c
+++ b/engines/net.c
@@ -38,7 +38,7 @@ struct netio_options {
 	unsigned int pingpong;
 	unsigned int nodelay;
 	unsigned int ttl;
-	char * interface;
+	char *intfc;
 };
 
 struct udp_close_msg {
@@ -134,7 +134,7 @@ static struct fio_option options[] = {
 		.name	= "interface",
 		.lname	= "net engine interface",
 		.type	= FIO_OPT_STR_STORE,
-		.off1	= offsetof(struct netio_options, interface),
+		.off1	= offsetof(struct netio_options, intfc),
 		.help	= "Network interface to use",
 		.category = FIO_OPT_C_ENGINE,
 		.group	= FIO_OPT_G_NETIO,
@@ -557,20 +557,20 @@ static int fio_netio_connect(struct thread_data *td, struct fio_file *f)
 		if (!fio_netio_is_multicast(td->o.filename))
 			return 0;
 
-		if (o->interface) {
+		if (o->intfc) {
 			struct in_addr interface_addr;
-			if (inet_aton(o->interface, &interface_addr) == 0) {
+			if (inet_aton(o->intfc, &interface_addr) == 0) {
 				log_err("fio: interface not valid interface IP\n");
 				close(f->fd);
 				return 1;
 			}
-			if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr)) < 0) {
+			if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&interface_addr, sizeof(interface_addr)) < 0) {
 				td_verror(td, errno, "setsockopt IP_MULTICAST_IF");
 				close(f->fd);
 				return 1;
 			}
 		}
-		if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_TTL, &o->ttl, sizeof(o->ttl)) < 0) {
+		if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_TTL, (const char*)&o->ttl, sizeof(o->ttl)) < 0) {
 			td_verror(td, errno, "setsockopt IP_MULTICAST_TTL");
 			close(f->fd);
 			return 1;
@@ -884,8 +884,8 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port)
 		inet_aton(td->o.filename, &sin.sin_addr);
 
 		mr.imr_multiaddr = sin.sin_addr;
-		if (o->interface) {
-			if (inet_aton(o->interface, &mr.imr_interface) == 0) {
+		if (o->intfc) {
+			if (inet_aton(o->intfc, &mr.imr_interface) == 0) {
 				log_err("fio: interface not valid interface IP\n");
 				close(fd);
 				return 1;
@@ -893,7 +893,7 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port)
 		} else {
 			mr.imr_interface.s_addr = htonl(INADDR_ANY);
 		}
-		if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) {
+		if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char*)&mr, sizeof(mr)) < 0) {
 			td_verror(td, errno, "setsockopt IP_ADD_MEMBERSHIP");
 			close(fd);
 			return 1;
diff --git a/os/os-windows.h b/os/os-windows.h
index 4f4e2bb..de120b6 100644
--- a/os/os-windows.h
+++ b/os/os-windows.h
@@ -18,6 +18,10 @@
 
 #include "windows/posix.h"
 
+#ifndef PTHREAD_STACK_MIN
+#define PTHREAD_STACK_MIN 65535
+#endif
+
 #define FIO_HAVE_ODIRECT
 #define FIO_HAVE_CPU_AFFINITY
 #define FIO_HAVE_CHARDEV_SIZE
@@ -38,9 +42,6 @@
 
 typedef DWORD_PTR os_cpu_mask_t;
 
-#define CLOCK_REALTIME	1
-#define CLOCK_MONOTONIC	2
-
 #define _SC_PAGESIZE			0x1
 #define _SC_NPROCESSORS_ONLN	0x2
 #define _SC_PHYS_PAGES			0x4
@@ -115,7 +116,6 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 	HANDLE hFile;
 	GET_LENGTH_INFORMATION info;
 	DWORD outBytes;
-	LARGE_INTEGER size;
 
 	if (f->hFile == NULL) {
 		hFile = CreateFile(f->file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
@@ -124,7 +124,6 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 		hFile = f->hFile;
 	}
 
-	size.QuadPart = 0;
 	if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL))
 		*bytes = info.Length.QuadPart;
 	else
diff --git a/os/windows/posix.c b/os/windows/posix.c
index 49bce43..d238c64 100755
--- a/os/windows/posix.c
+++ b/os/windows/posix.c
@@ -12,12 +12,15 @@
 #include <unistd.h>
 #include <dirent.h>
 #include <pthread.h>
+#include <time.h>
 #include <semaphore.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
 #include <sys/uio.h>
 #include <sys/resource.h>
 #include <sys/poll.h>
+#include <sys/wait.h>
+#include <setjmp.h>
 
 #include "../os-windows.h"
 #include "../../lib/hweight.h"
@@ -706,9 +709,22 @@ ssize_t readv(int fildes, const struct iovec *iov, int iovcnt)
 
 ssize_t writev(int fildes, const struct iovec *iov, int iovcnt)
 {
-	log_err("%s is not implemented\n", __func__);
-	errno = ENOSYS;
-	return -1;
+	int i;
+	DWORD bytes_written = 0;
+	for (i = 0; i < iovcnt; i++)
+	{
+		int len = send((SOCKET)fildes, iov[i].iov_base, iov[i].iov_len, 0);
+		if (len == SOCKET_ERROR)
+		{
+			DWORD err = GetLastError();
+			errno = win_to_posix_error(err);
+			bytes_written = -1;
+			break;
+		}
+		bytes_written += len;
+	}
+
+	return bytes_written;
 }
 
 long long strtoll(const char *restrict str, char **restrict endptr,
@@ -750,7 +766,6 @@ int poll(struct pollfd fds[], nfds_t nfds, int timeout)
 
 		FD_SET(fds[i].fd, &exceptfds);
 	}
-
 	rc = select(nfds, &readfds, &writefds, &exceptfds, to);
 
 	if (rc != SOCKET_ERROR) {
@@ -770,7 +785,6 @@ int poll(struct pollfd fds[], nfds_t nfds, int timeout)
 				fds[i].revents |= POLLHUP;
 		}
 	}
-
 	return rc;
 }
 
@@ -872,6 +886,14 @@ uid_t geteuid(void)
 	return -1;
 }
 
+in_addr_t inet_network(const char *cp)
+{
+	in_addr_t hbo;
+	in_addr_t nbo = inet_addr(cp);
+	hbo = ((nbo & 0xFF) << 24) + ((nbo & 0xFF00) << 8) + ((nbo & 0xFF0000) >> 8) + ((nbo & 0xFF000000) >> 24);
+	return hbo;
+}
+
 const char* inet_ntop(int af, const void *restrict src,
 		char *restrict dst, socklen_t size)
 {
diff --git a/os/windows/posix/include/arpa/inet.h b/os/windows/posix/include/arpa/inet.h
index 7e3bfb7..59c50ad 100644
--- a/os/windows/posix/include/arpa/inet.h
+++ b/os/windows/posix/include/arpa/inet.h
@@ -5,6 +5,19 @@
 #include <inttypes.h>
 
 typedef int socklen_t;
+typedef int in_addr_t;
+
+#define IP_MULTICAST_IF 2
+#define IP_MULTICAST_TTL 3
+#define IP_ADD_MEMBERSHIP 5
+
+struct ip_mreq
+{
+	struct in_addr imr_multiaddr;
+	struct in_addr imr_interface;
+};
+
+in_addr_t inet_network(const char *cp);
 
 const char *inet_ntop(int af, const void *restrict src,
         char *restrict dst, socklen_t size);
diff --git a/os/windows/posix/include/sys/uio.h b/os/windows/posix/include/sys/uio.h
index 25f83d6..402e988 100644
--- a/os/windows/posix/include/sys/uio.h
+++ b/os/windows/posix/include/sys/uio.h
@@ -4,8 +4,8 @@
 #include <inttypes.h>
 #include <unistd.h>
 
- struct iovec
- {
+struct iovec
+{
 	void	*iov_base;  /* Base address of a memory region for input or output */
 	size_t	 iov_len;   /* The size of the memory pointed to by iov_base */
 };
diff --git a/os/windows/posix/include/sys/wait.h b/os/windows/posix/include/sys/wait.h
index 5b8fd3a..ac50aa8 100644
--- a/os/windows/posix/include/sys/wait.h
+++ b/os/windows/posix/include/sys/wait.h
@@ -5,7 +5,7 @@
 #define WIFEXITED(a)	0
 #define WTERMSIG(a)		0
 #define WEXITSTATUS(a)	0
-#define WNOHANG			0
+#define WNOHANG			1
 
 pid_t waitpid(pid_t, int *stat_loc, int options);
 
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux