From: Sean Hefty Date: Tue, 17 Jul 2012 19:34:22 +0000 (-0700) Subject: refresh X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=2e97b537ce3a5a9f334e3fcc68df3261244dc6de;p=~shefty%2Flibrdmacm.git refresh --- diff --git a/meta b/meta index 073ec6a2..33860432 100644 --- a/meta +++ b/meta @@ -1,10 +1,9 @@ Version: 1 -Previous: 522ddb4fa21524c0f00148e1312e808d29de7f86 -Head: aaef2b3382a3bb7a45d12dfcf61dbe5f8114be6f +Previous: 1250945bdad5b28b8152a68d2e8c30bf10001f2d +Head: c41b63504fb961b432e3a09b0e9c99480ddf6a1a Applied: transpose: 84e0beee0d2d3c217cd9703b9e438d25856cacb6 - fork: b131326fd7cad28cd3b9a3d09c29c9476d7fddb0 - refresh-temp: aaef2b3382a3bb7a45d12dfcf61dbe5f8114be6f + fork: c41b63504fb961b432e3a09b0e9c99480ddf6a1a Unapplied: waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8 rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de diff --git a/patches/fork b/patches/fork index 564e103a..89f4e824 100644 --- a/patches/fork +++ b/patches/fork @@ -1,5 +1,5 @@ Bottom: c0306f4628b14e75db3da212b4a99875f49be65f -Top: 3ef5d9a598c00e66ce2beafac99c914e0942c3c3 +Top: 89b109b9172f2fd26f7feaca314718e1127b4e64 Author: Sean Hefty Date: 2012-07-13 15:25:53 -0700 @@ -14,7 +14,7 @@ Signed-off-by: Sean Hefty --- diff --git a/src/preload.c b/src/preload.c -index d2058e2..5860a4c 100644 +index d2058e2..1d76df9 100644 --- a/src/preload.c +++ b/src/preload.c @@ -46,6 +46,8 @@ @@ -137,7 +137,7 @@ index d2058e2..5860a4c 100644 sin = (struct sockaddr_in *) addr; if (ntohs(sin->sin_port) > 1024) { ret = rconnect(fd, addr, addrlen); -@@ -754,3 +803,57 @@ int fcntl(int socket, int cmd, ... /* arg */) +@@ -754,3 +803,85 @@ int fcntl(int socket, int cmd, ... /* arg */) va_end(args); return ret; } @@ -156,40 +156,68 @@ index d2058e2..5860a4c 100644 +pid_t fork(void) +{ + struct sockaddr_storage sa; ++ struct sockaddr_in6 sin6; + pid_t pid; + sem_t *sem; -+ int fd, lfd, newfd, ret, len, param; ++ int lfd, sfd, dfd, ret, len, param; + uint32_t msg; + + init_preload(); + pid = real.fork(); + if (pid || !fork_support || (last_accept < 0) || -+ (fd_get(last_accept, &fd) != fd_fork)) ++ (fd_get(last_accept, &sfd) != fd_fork)) + goto out; + ++ len = sizeof sa; ++ ret = real.getsockname(sfd, &sa, &len); ++ if (ret) ++ goto out; ++ sin6.sin6_family = sa.ss_family; ++ sin6.sin6_port = ((struct sockaddr_in6 *) &sa)->sin6_port; ++ + sem = sem_open("/rsocket_fork", O_CREAT, 0644, 1); + if (sem == SEM_FAILED) + goto out; + -+ lfd = transpose_socket(last_accept, fd_rsocket); ++ lfd = rsocket(sa.ss_family, SOCK_STREAM, 0); + if (lfd < 0) -+ goto out; ++ goto sclose; + + param = 1; -+ len = sizeof param; -+ rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); ++ rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param); + -+ len = sizeof sa; -+ ret = real.getsockname(fd, &sa, &len); ++ sem_wait(sem); ++ ret = rbind(lfd, &sin6, sizeof sin6); + if (ret) -+ goto out; ++ goto lclose; + -+ sem_wait(sem); -+ ret = rbind() ++ ret = rlisten(lfd, 1); ++ if (ret) ++ goto lclose; + -+ real.close(fd); ++ dfd = raccept(lfd, NULL, NULL); ++ if (dfd < 0) ++ goto lclose; ++ ++ param = 1; ++ rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param); ++ ++ msg = 0; ++ ret = real.write(sfd, &msg, sizeof msg); ++ if (ret != sizeof msg) { ++ rclose(dfd); ++ goto lclose; ++ } ++ ++ copysockopts(dfd, sfd, &rs, &real); ++ real.shutdown(sfd, SHUT_RDWR); ++ real.close(sfd); ++ fd_store(last_accept, dfd, fd_rsocket); + ++lclose: ++ rclose(lfd); + sem_post(sem); ++sclose: + sem_close(sem); +out: + last_accept = -1; diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index efba49c2..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,94 +0,0 @@ -Bottom: 3ef5d9a598c00e66ce2beafac99c914e0942c3c3 -Top: 89b109b9172f2fd26f7feaca314718e1127b4e64 -Author: Sean Hefty -Date: 2012-07-17 12:34:22 -0700 - -Refresh of fork - ---- - -diff --git a/src/preload.c b/src/preload.c -index 5860a4c..1d76df9 100644 ---- a/src/preload.c -+++ b/src/preload.c -@@ -818,40 +818,68 @@ int fcntl(int socket, int cmd, ... /* arg */) - pid_t fork(void) - { - struct sockaddr_storage sa; -+ struct sockaddr_in6 sin6; - pid_t pid; - sem_t *sem; -- int fd, lfd, newfd, ret, len, param; -+ int lfd, sfd, dfd, ret, len, param; - uint32_t msg; - - init_preload(); - pid = real.fork(); - if (pid || !fork_support || (last_accept < 0) || -- (fd_get(last_accept, &fd) != fd_fork)) -+ (fd_get(last_accept, &sfd) != fd_fork)) - goto out; - -+ len = sizeof sa; -+ ret = real.getsockname(sfd, &sa, &len); -+ if (ret) -+ goto out; -+ sin6.sin6_family = sa.ss_family; -+ sin6.sin6_port = ((struct sockaddr_in6 *) &sa)->sin6_port; -+ - sem = sem_open("/rsocket_fork", O_CREAT, 0644, 1); - if (sem == SEM_FAILED) - goto out; - -- lfd = transpose_socket(last_accept, fd_rsocket); -+ lfd = rsocket(sa.ss_family, SOCK_STREAM, 0); - if (lfd < 0) -- goto out; -+ goto sclose; - - param = 1; -- len = sizeof param; -- rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -+ rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param); - -- len = sizeof sa; -- ret = real.getsockname(fd, &sa, &len); -+ sem_wait(sem); -+ ret = rbind(lfd, &sin6, sizeof sin6); - if (ret) -- goto out; -+ goto lclose; - -- sem_wait(sem); -- ret = rbind() -+ ret = rlisten(lfd, 1); -+ if (ret) -+ goto lclose; - -- real.close(fd); -+ dfd = raccept(lfd, NULL, NULL); -+ if (dfd < 0) -+ goto lclose; -+ -+ param = 1; -+ rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param); -+ -+ msg = 0; -+ ret = real.write(sfd, &msg, sizeof msg); -+ if (ret != sizeof msg) { -+ rclose(dfd); -+ goto lclose; -+ } -+ -+ copysockopts(dfd, sfd, &rs, &real); -+ real.shutdown(sfd, SHUT_RDWR); -+ real.close(sfd); -+ fd_store(last_accept, dfd, fd_rsocket); - -+lclose: -+ rclose(lfd); - sem_post(sem); -+sclose: - sem_close(sem); - out: - last_accept = -1;