Version: 1
-Previous: bf8339067226b23200eba0ab89b906251779cf88
-Head: 77bd90142d4369fbf22b0f6cf70ab4ad26f2106c
+Previous: d0023ad5bd0966f7b4a43e49d53760e9981868e0
+Head: 5d3b93c68e98b8d321c63a44af06d052e552a0f6
Applied:
rm-ib-var: 63a728f303f78348ad9727c46ac3e271197dace4
cma-rm-pd: 2ffda7f2991395570b9e776ff5ae256ca9684771
transpose: 7856c0c353736cee5399eb2f706a6ac2913cc368
fork: 1768d762d8a2100e5250234ddf080b722a5e582f
rstream-fork: 2724e02d5b461f8c580249461271de0f7acefcab
- fork-xfer: 90f61d3079894915082ed164f71d54b21aa5a289
- refresh-temp: 77bd90142d4369fbf22b0f6cf70ab4ad26f2106c
+ fork-xfer: 5d3b93c68e98b8d321c63a44af06d052e552a0f6
Unapplied:
dbg: 3ec7b3dd2db8422fd840e3cee062c629e7b8f5b6
waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8
Bottom: e0b82367be775902f3588a79dd714486d21646b3
-Top: 64f842716d428bde944b1d88a9c26dc0d4dbd189
+Top: 701bfad47cfeefb22f51e3977fe3629945359257
Author: Sean Hefty <sean.hefty@intel.com>
Date: 2012-07-19 17:09:29 -0700
---
diff --git a/src/preload.c b/src/preload.c
-index f824af3..7086997 100644
+index f824af3..82a4125 100644
--- a/src/preload.c
+++ b/src/preload.c
@@ -96,7 +96,6 @@ static int sq_size;
{
int fd, ret;
uint32_t msg;
-@@ -489,6 +493,71 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl
+@@ -489,6 +493,95 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl
return rconnect(ret, addr, addrlen);
}
-+static int fork_passive(int socket)
++static void fork_passive(int socket)
+{
+ struct sockaddr_in6 sin6;
+ sem_t *sem;
+ socklen_t len;
+ uint32_t msg;
+
++ fd_get(socket, &sfd);
++
+ len = sizeof sin6;
+ ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len);
+ if (ret)
+
+ sem = sem_open("/rsocket_fork", O_CREAT | O_RDWR,
+ S_IRWXU | S_IRWXG, 1);
-+ if (sem == SEM_FAILED)
++ if (sem == SEM_FAILED) {
++ ret = -1;
+ goto out;
++ }
+
+ lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
-+ if (lfd < 0)
++ if (lfd < 0) {
++ ret = lfd;
+ goto sclose;
++ }
+
+ param = 1;
+ rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param);
+ goto lclose;
+
+ dfd = raccept(lfd, NULL, NULL);
-+ if (dfd < 0)
++ if (dfd < 0) {
++ ret = dfd;
+ goto lclose;
++ }
+
+ param = 1;
+ rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param);
+out:
+ if (ret)
+ fd_store(socket, sfd, fd_normal);
-+ return ret;
++}
++
++static inline enum fd_type fd_fork_get(int index, int *fd)
++{
++ struct fd_info *fdi;
++
++ fdi = idm_lookup(&idm, index);
++ if (fdi) {
++ if (fdi->type == fd_fork)
++ fork_passive(index);
++ *fd = fdi->fd;
++ return fdi->type;
++
++ } else {
++ *fd = index;
++ return fd_normal;
++ }
+}
+
int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
{
struct sockaddr_in *sin;
-@@ -496,7 +565,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+@@ -496,7 +589,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
switch (fd_get(socket, &fd)) {
case fd_fork:
case fd_rsocket:
sin = (struct sockaddr_in *) addr;
if (ntohs(sin->sin_port) > 1024) {
-@@ -812,85 +881,3 @@ int fcntl(int socket, int cmd, ... /* arg */)
+@@ -522,7 +615,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+ ssize_t recv(int socket, void *buf, size_t len, int flags)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rrecv(fd, buf, len, flags) : real.recv(fd, buf, len, flags);
+ }
+
+@@ -530,7 +623,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags,
+ struct sockaddr *src_addr, socklen_t *addrlen)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rrecvfrom(fd, buf, len, flags, src_addr, addrlen) :
+ real.recvfrom(fd, buf, len, flags, src_addr, addrlen);
+ }
+@@ -538,7 +631,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags,
+ ssize_t recvmsg(int socket, struct msghdr *msg, int flags)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rrecvmsg(fd, msg, flags) : real.recvmsg(fd, msg, flags);
+ }
+
+@@ -546,7 +639,7 @@ ssize_t read(int socket, void *buf, size_t count)
+ {
+ int fd;
+ init_preload();
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rread(fd, buf, count) : real.read(fd, buf, count);
+ }
+
+@@ -554,14 +647,14 @@ ssize_t readv(int socket, const struct iovec *iov, int iovcnt)
+ {
+ int fd;
+ init_preload();
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rreadv(fd, iov, iovcnt) : real.readv(fd, iov, iovcnt);
+ }
+
+ ssize_t send(int socket, const void *buf, size_t len, int flags)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rsend(fd, buf, len, flags) : real.send(fd, buf, len, flags);
+ }
+
+@@ -569,7 +662,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags,
+ const struct sockaddr *dest_addr, socklen_t addrlen)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rsendto(fd, buf, len, flags, dest_addr, addrlen) :
+ real.sendto(fd, buf, len, flags, dest_addr, addrlen);
+ }
+@@ -577,7 +670,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags,
+ ssize_t sendmsg(int socket, const struct msghdr *msg, int flags)
+ {
+ int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rsendmsg(fd, msg, flags) : real.sendmsg(fd, msg, flags);
+ }
+
+@@ -585,7 +678,7 @@ ssize_t write(int socket, const void *buf, size_t count)
+ {
+ int fd;
+ init_preload();
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rwrite(fd, buf, count) : real.write(fd, buf, count);
+ }
+
+@@ -593,7 +686,7 @@ ssize_t writev(int socket, const struct iovec *iov, int iovcnt)
+ {
+ int fd;
+ init_preload();
+- return (fd_get(socket, &fd) == fd_rsocket) ?
++ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
+ rwritev(fd, iov, iovcnt) : real.writev(fd, iov, iovcnt);
+ }
+
+@@ -812,85 +905,3 @@ int fcntl(int socket, int cmd, ... /* arg */)
va_end(args);
return ret;
}
+++ /dev/null
-Bottom: 64f842716d428bde944b1d88a9c26dc0d4dbd189
-Top: 701bfad47cfeefb22f51e3977fe3629945359257
-Author: Sean Hefty <sean.hefty@intel.com>
-Date: 2012-07-23 12:35:44 -0700
-
-Refresh of fork-xfer
-
----
-
-diff --git a/src/preload.c b/src/preload.c
-index 7086997..82a4125 100644
---- a/src/preload.c
-+++ b/src/preload.c
-@@ -493,7 +493,7 @@ static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrle
- return rconnect(ret, addr, addrlen);
- }
-
--static int fork_passive(int socket)
-+static void fork_passive(int socket)
- {
- struct sockaddr_in6 sin6;
- sem_t *sem;
-@@ -501,6 +501,8 @@ static int fork_passive(int socket)
- socklen_t len;
- uint32_t msg;
-
-+ fd_get(socket, &sfd);
-+
- len = sizeof sin6;
- ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len);
- if (ret)
-@@ -510,12 +512,16 @@ static int fork_passive(int socket)
-
- sem = sem_open("/rsocket_fork", O_CREAT | O_RDWR,
- S_IRWXU | S_IRWXG, 1);
-- if (sem == SEM_FAILED)
-+ if (sem == SEM_FAILED) {
-+ ret = -1;
- goto out;
-+ }
-
- lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
-- if (lfd < 0)
-+ if (lfd < 0) {
-+ ret = lfd;
- goto sclose;
-+ }
-
- param = 1;
- rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param);
-@@ -535,8 +541,10 @@ static int fork_passive(int socket)
- goto lclose;
-
- dfd = raccept(lfd, NULL, NULL);
-- if (dfd < 0)
-+ if (dfd < 0) {
-+ ret = dfd;
- goto lclose;
-+ }
-
- param = 1;
- rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param);
-@@ -555,7 +563,23 @@ sclose:
- out:
- if (ret)
- fd_store(socket, sfd, fd_normal);
-- return ret;
-+}
-+
-+static inline enum fd_type fd_fork_get(int index, int *fd)
-+{
-+ struct fd_info *fdi;
-+
-+ fdi = idm_lookup(&idm, index);
-+ if (fdi) {
-+ if (fdi->type == fd_fork)
-+ fork_passive(index);
-+ *fd = fdi->fd;
-+ return fdi->type;
-+
-+ } else {
-+ *fd = index;
-+ return fd_normal;
-+ }
- }
-
- int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
-@@ -591,7 +615,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
- ssize_t recv(int socket, void *buf, size_t len, int flags)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rrecv(fd, buf, len, flags) : real.recv(fd, buf, len, flags);
- }
-
-@@ -599,7 +623,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags,
- struct sockaddr *src_addr, socklen_t *addrlen)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rrecvfrom(fd, buf, len, flags, src_addr, addrlen) :
- real.recvfrom(fd, buf, len, flags, src_addr, addrlen);
- }
-@@ -607,7 +631,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags,
- ssize_t recvmsg(int socket, struct msghdr *msg, int flags)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rrecvmsg(fd, msg, flags) : real.recvmsg(fd, msg, flags);
- }
-
-@@ -615,7 +639,7 @@ ssize_t read(int socket, void *buf, size_t count)
- {
- int fd;
- init_preload();
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rread(fd, buf, count) : real.read(fd, buf, count);
- }
-
-@@ -623,14 +647,14 @@ ssize_t readv(int socket, const struct iovec *iov, int iovcnt)
- {
- int fd;
- init_preload();
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rreadv(fd, iov, iovcnt) : real.readv(fd, iov, iovcnt);
- }
-
- ssize_t send(int socket, const void *buf, size_t len, int flags)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rsend(fd, buf, len, flags) : real.send(fd, buf, len, flags);
- }
-
-@@ -638,7 +662,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags,
- const struct sockaddr *dest_addr, socklen_t addrlen)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rsendto(fd, buf, len, flags, dest_addr, addrlen) :
- real.sendto(fd, buf, len, flags, dest_addr, addrlen);
- }
-@@ -646,7 +670,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags,
- ssize_t sendmsg(int socket, const struct msghdr *msg, int flags)
- {
- int fd;
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rsendmsg(fd, msg, flags) : real.sendmsg(fd, msg, flags);
- }
-
-@@ -654,7 +678,7 @@ ssize_t write(int socket, const void *buf, size_t count)
- {
- int fd;
- init_preload();
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rwrite(fd, buf, count) : real.write(fd, buf, count);
- }
-
-@@ -662,7 +686,7 @@ ssize_t writev(int socket, const struct iovec *iov, int iovcnt)
- {
- int fd;
- init_preload();
-- return (fd_get(socket, &fd) == fd_rsocket) ?
-+ return (fd_fork_get(socket, &fd) == fd_rsocket) ?
- rwritev(fd, iov, iovcnt) : real.writev(fd, iov, iovcnt);
- }