]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh
authorSean Hefty <sean.hefty@intel.com>
Mon, 13 Aug 2012 21:43:11 +0000 (14:43 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 13 Aug 2012 21:43:11 +0000 (14:43 -0700)
meta
patches/fork-connect
patches/refresh-temp [deleted file]

diff --git a/meta b/meta
index e85d4850ba82719936ea743c32a2cab70be0033a..831c4b3dbf2e7e47cdd55f69684a51443398143e 100644 (file)
--- a/meta
+++ b/meta
@@ -1,12 +1,11 @@
 Version: 1
-Previous: 00af8cc96d50146cc6767fbbf0e9cc0161d3180a
-Head: a1b220168dfcc2cf8faf7a7b85ca0e614c5d6bf6
+Previous: 853536fe56092678f43e8004889f171b8b97257a
+Head: 9f41de8f49824b574067c97a6cd00b13f3e11e16
 Applied:
   real-close: 3409f8d6af187d25c63a5d1f8ee8bff5f14555e2
   dup2: ca5813e7cf95dee5933fc417e4a34d26f2b01824
   oobinline: ac51c1095f505373a6ec54b8f1d990259fb34d97
-  fork-connect: 88050a624781407f5f83e4494897bb1dd482699c
-  refresh-temp: a1b220168dfcc2cf8faf7a7b85ca0e614c5d6bf6
+  fork-connect: 9f41de8f49824b574067c97a6cd00b13f3e11e16
 Unapplied:
   dbg-out: 04273ee712db4d53efb390462c1b738bb54a57df
   fstat: a62c653906870422edef5f6388dac9f76c953e35
index 1ad0be4ddcb0ba8988775220bb4096f721007f10..138ea9621cb5bbf3e94e32ee8280326a75948cc7 100644 (file)
@@ -1,5 +1,5 @@
 Bottom: 3ea2748a5c41b11a2e7033c56bddd938d2770b6c
-Top:    da811bd45f316fb30abd2a28fca7900d8b0f8de6
+Top:    e5851de376df609d0644456f8a89570a86a723f0
 Author: Sean Hefty <sean.hefty@intel.com>
 Date:   2012-08-10 21:44:39 -0700
 
@@ -28,7 +28,7 @@ Signed-off-by: Sean Hefty <sean.hefty@intel.com>
 ---
 
 diff --git a/src/preload.c b/src/preload.c
-index b18d310..b4c319f 100644
+index b18d310..2830f14 100644
 --- a/src/preload.c
 +++ b/src/preload.c
 @@ -99,12 +99,20 @@ static int fork_support;
@@ -162,7 +162,7 @@ index b18d310..b4c319f 100644
                return index;
        } else {
                return real.accept(fd, addr, addrlen);
-@@ -453,8 +486,7 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -453,35 +486,49 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
   * We can't fork RDMA connections and pass them from the parent to the child
   * process.  Instead, we need to establish the RDMA connection after calling
   * fork.  To do this, we delay establishing the RDMA connection until we try
@@ -170,30 +170,103 @@ index b18d310..b4c319f 100644
 - * to fork, so we switch from a TCP connection to an rsocket when connecting.
 + * to send/receive on the server side.
   */
- static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrlen)
+-static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrlen)
++static void fork_active(int socket)
  {
-@@ -465,13 +497,16 @@ static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrle
-       fd = fd_getd(socket);
-       flags = real.fcntl(fd, F_GETFL);
-       real.fcntl(fd, F_SETFL, 0);
+-      int fd, ret;
++      struct sockaddr_storage addr;
++      int sfd, dfd, ret;
++      socklen_t len;
+       uint32_t msg;
+       long flags;
+-      fd = fd_getd(socket);
+-      flags = real.fcntl(fd, F_GETFL);
+-      real.fcntl(fd, F_SETFL, 0);
 -      ret = real.connect(fd, addr, addrlen);
--      if (ret)
--              return ret;
++      sfd = fd_getd(socket);
 +
-+      if (!(flags & O_NONBLOCK) && addr && addrlen) {
-+              ret = real.connect(fd, addr, addrlen);
-+              if (ret)
-+                      return ret;
-+      }
++      len = sizeof addr;
++      ret = real.getpeername(sfd, (struct sockaddr *) &addr, &len);
+       if (ret)
+-              return ret;
++              goto err1;
  
-       ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
-       if ((ret != sizeof msg) || msg) {
+-      ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
+-      if ((ret != sizeof msg) || msg) {
 -              fd_store(socket, fd, fd_normal);
-+              fd_store(socket, fd, fd_normal, fd_ready);
-               return 0;
+-              return 0;
+-      }
++      dfd = rsocket(addr.ss_family, SOCK_STREAM, 0);
++      if (dfd < 0)
++              goto err1;
+-      real.fcntl(fd, F_SETFL, flags);
+-      ret = transpose_socket(socket, fd_rsocket);
+-      if (ret < 0)
+-              return ret;
++      flags = real.fcntl(sfd, F_GETFL);
++      real.fcntl(sfd, F_SETFL, 0);
++      ret = real.recv(sfd, &msg, sizeof msg, MSG_PEEK);
++      real.fcntl(sfd, F_SETFL, flags);
++      if ((ret != sizeof msg) || msg)
++              goto err2;
+-      real.close(fd);
+-      return rconnect(ret, addr, addrlen);
++      ret = rconnect(ret, &sin6, len);
++      if (ret)
++              goto err2;
++
++      set_rsocket_options(dfd);
++      copysockopts(dfd, sfd, &rs, &real);
++      real.shutdown(sfd, SHUT_RDWR);
++      real.close(sfd);
++      fd_store(socket, dfd, fd_rsocket, fd_ready);
++      return;
++
++err2:
++      rclose(dfd);
++err1:
++      fd_store(socket, sfd, fd_normal, fd_ready);
+ }
+ static void fork_passive(int socket)
+@@ -492,7 +539,7 @@ static void fork_passive(int socket)
+       socklen_t len;
+       uint32_t msg;
+-      fd_get(socket, &sfd);
++      sfd = fd_getd(socket);
+       len = sizeof sin6;
+       ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len);
+@@ -510,7 +557,7 @@ static void fork_passive(int socket)
+       lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
+       if (lfd < 0) {
+-              ret  = lfd;
++              ret = lfd;
+               goto sclose;
        }
  
-@@ -544,7 +579,7 @@ static void fork_passive(int socket)
+@@ -527,7 +574,7 @@ static void fork_passive(int socket)
+               goto lclose;
+       msg = 0;
+-      len = real.write(sfd, &msg, sizeof msg);
++      len = real.send(sfd, &msg, sizeof msg, MSG_NODELAY);
+       if (len != sizeof msg)
+               goto lclose;
+@@ -537,14 +584,11 @@ static void fork_passive(int socket)
+               goto lclose;
+       }
+-      param = 1;
+-      rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, &param, sizeof param);
+       set_rsocket_options(dfd);
+-
        copysockopts(dfd, sfd, &rs, &real);
        real.shutdown(sfd, SHUT_RDWR);
        real.close(sfd);
@@ -202,7 +275,7 @@ index b18d310..b4c319f 100644
  
  lclose:
        rclose(lfd);
-@@ -553,7 +588,7 @@ sclose:
+@@ -553,7 +597,7 @@ sclose:
        sem_close(sem);
  out:
        if (ret)
@@ -211,7 +284,7 @@ index b18d310..b4c319f 100644
  }
  
  static inline enum fd_type fd_fork_get(int index, int *fd)
-@@ -562,8 +597,10 @@ static inline enum fd_type fd_fork_get(int index, int *fd)
+@@ -562,8 +606,10 @@ static inline enum fd_type fd_fork_get(int index, int *fd)
  
        fdi = idm_lookup(&idm, index);
        if (fdi) {
@@ -223,7 +296,7 @@ index b18d310..b4c319f 100644
                *fd = fdi->fd;
                return fdi->type;
  
-@@ -576,11 +613,9 @@ static inline enum fd_type fd_fork_get(int index, int *fd)
+@@ -576,11 +622,9 @@ static inline enum fd_type fd_fork_get(int index, int *fd)
  int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
  {
        int fd, ret;
@@ -237,7 +310,7 @@ index b18d310..b4c319f 100644
                ret = rconnect(fd, addr, addrlen);
                if (!ret || errno == EINPROGRESS)
                        return ret;
-@@ -591,9 +626,12 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+@@ -591,9 +635,12 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
  
                rclose(fd);
                fd = ret;
@@ -245,10 +318,10 @@ index b18d310..b4c319f 100644
 -      default:
 -              break;
 +      } else if (fd_gets(socket) == fd_fork) {
-+              flags = real.fcntl(fd, F_GETFL);
-+              if (!(flags & O_NONBLOCK))
-+                      return fork_active(socket, addr, addrlen);
-+
++//            flags = real.fcntl(fd, F_GETFL);
++//            if (!(flags & O_NONBLOCK))
++//                    return fork_active(socket, addr, addrlen);
++//
 +              fd_store(socket, fd, fd_normal, fd_fork_active);
        }
  
diff --git a/patches/refresh-temp b/patches/refresh-temp
deleted file mode 100644 (file)
index 9ae5fc2..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-Bottom: da811bd45f316fb30abd2a28fca7900d8b0f8de6
-Top:    e5851de376df609d0644456f8a89570a86a723f0
-Author: Sean Hefty <sean.hefty@intel.com>
-Date:   2012-08-13 14:43:11 -0700
-
-Refresh of fork-connect
-
----
-
-diff --git a/src/preload.c b/src/preload.c
-index b4c319f..2830f14 100644
---- a/src/preload.c
-+++ b/src/preload.c
-@@ -488,35 +488,47 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
-  * fork.  To do this, we delay establishing the RDMA connection until we try
-  * to send/receive on the server side.
-  */
--static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrlen)
-+static void fork_active(int socket)
- {
--      int fd, ret;
-+      struct sockaddr_storage addr;
-+      int sfd, dfd, ret;
-+      socklen_t len;
-       uint32_t msg;
-       long flags;
--      fd = fd_getd(socket);
--      flags = real.fcntl(fd, F_GETFL);
--      real.fcntl(fd, F_SETFL, 0);
-+      sfd = fd_getd(socket);
--      if (!(flags & O_NONBLOCK) && addr && addrlen) {
--              ret = real.connect(fd, addr, addrlen);
--              if (ret)
--                      return ret;
--      }
-+      len = sizeof addr;
-+      ret = real.getpeername(sfd, (struct sockaddr *) &addr, &len);
-+      if (ret)
-+              goto err1;
--      ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
--      if ((ret != sizeof msg) || msg) {
--              fd_store(socket, fd, fd_normal, fd_ready);
--              return 0;
--      }
-+      dfd = rsocket(addr.ss_family, SOCK_STREAM, 0);
-+      if (dfd < 0)
-+              goto err1;
--      real.fcntl(fd, F_SETFL, flags);
--      ret = transpose_socket(socket, fd_rsocket);
--      if (ret < 0)
--              return ret;
-+      flags = real.fcntl(sfd, F_GETFL);
-+      real.fcntl(sfd, F_SETFL, 0);
-+      ret = real.recv(sfd, &msg, sizeof msg, MSG_PEEK);
-+      real.fcntl(sfd, F_SETFL, flags);
-+      if ((ret != sizeof msg) || msg)
-+              goto err2;
--      real.close(fd);
--      return rconnect(ret, addr, addrlen);
-+      ret = rconnect(ret, &sin6, len);
-+      if (ret)
-+              goto err2;
-+
-+      set_rsocket_options(dfd);
-+      copysockopts(dfd, sfd, &rs, &real);
-+      real.shutdown(sfd, SHUT_RDWR);
-+      real.close(sfd);
-+      fd_store(socket, dfd, fd_rsocket, fd_ready);
-+      return;
-+
-+err2:
-+      rclose(dfd);
-+err1:
-+      fd_store(socket, sfd, fd_normal, fd_ready);
- }
- static void fork_passive(int socket)
-@@ -527,7 +539,7 @@ static void fork_passive(int socket)
-       socklen_t len;
-       uint32_t msg;
--      fd_get(socket, &sfd);
-+      sfd = fd_getd(socket);
-       len = sizeof sin6;
-       ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len);
-@@ -545,7 +557,7 @@ static void fork_passive(int socket)
-       lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
-       if (lfd < 0) {
--              ret  = lfd;
-+              ret = lfd;
-               goto sclose;
-       }
-@@ -562,7 +574,7 @@ static void fork_passive(int socket)
-               goto lclose;
-       msg = 0;
--      len = real.write(sfd, &msg, sizeof msg);
-+      len = real.send(sfd, &msg, sizeof msg, MSG_NODELAY);
-       if (len != sizeof msg)
-               goto lclose;
-@@ -572,10 +584,7 @@ static void fork_passive(int socket)
-               goto lclose;
-       }
--      param = 1;
--      rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, &param, sizeof param);
-       set_rsocket_options(dfd);
--
-       copysockopts(dfd, sfd, &rs, &real);
-       real.shutdown(sfd, SHUT_RDWR);
-       real.close(sfd);
-@@ -627,10 +636,10 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
-               rclose(fd);
-               fd = ret;
-       } else if (fd_gets(socket) == fd_fork) {
--              flags = real.fcntl(fd, F_GETFL);
--              if (!(flags & O_NONBLOCK))
--                      return fork_active(socket, addr, addrlen);
--
-+//            flags = real.fcntl(fd, F_GETFL);
-+//            if (!(flags & O_NONBLOCK))
-+//                    return fork_active(socket, addr, addrlen);
-+//
-               fd_store(socket, fd, fd_normal, fd_fork_active);
-       }