On 05/20/2013 07:09 AM, Jan Friesse wrote:
Code for zero-copy in cpg does following mmaps:
- Mmap anonymous, private memory to some address (-> malloc)
- Mmap shared memory of fd to address returned by first mmap
   (effectively shadows first mapping)

This is not necessary and only one mapping is needed.

This is a leftover cut and paste from IPC where 2x the memory is needed to provide a circular map. This isn't needed in the zcb code in cpg because it doesn't use a circular buffer.

Reviewed-by: Steven Dake <[email protected]>
Signed-off-by: Jan Friesse <[email protected]>
---
  exec/cpg.c |   17 ++++-------------
  lib/cpg.c  |   18 +++++-------------
  2 files changed, 9 insertions(+), 26 deletions(-)

diff --git a/exec/cpg.c b/exec/cpg.c
index 695f311..bc5feb6 100644
--- a/exec/cpg.c
+++ b/exec/cpg.c
@@ -1603,7 +1603,6 @@ memory_map (
        void **buf)
  {
        int32_t fd;
-       void *addr_orig;
        void *addr;
        int32_t res;
@@ -1620,18 +1619,10 @@ memory_map (
                goto error_close_unlink;
        }
- addr_orig = mmap (NULL, bytes, PROT_NONE,
-               MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+       addr = mmap (NULL, bytes, PROT_READ | PROT_WRITE,
+               MAP_SHARED, fd, 0);
- if (addr_orig == MAP_FAILED) {
-               goto error_close_unlink;
-       }
-
-       addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
-               MAP_FIXED | MAP_SHARED, fd, 0);
-
-       if (addr != addr_orig) {
-               munmap(addr_orig, bytes);
+       if (addr == MAP_FAILED) {
                goto error_close_unlink;
        }
  #ifdef MADV_NOSYNC
@@ -1642,7 +1633,7 @@ memory_map (
        if (res) {
                return (-1);
        }
-       *buf = addr_orig;
+       *buf = addr;
        return (0);
error_close_unlink:
diff --git a/lib/cpg.c b/lib/cpg.c
index b96df4e..8408466 100644
--- a/lib/cpg.c
+++ b/lib/cpg.c
@@ -730,7 +730,6 @@ static int
  memory_map (char *path, const char *file, void **buf, size_t bytes)
  {
        int32_t fd;
-       void *addr_orig;
        void *addr;
        int32_t res;
        char *buffer;
@@ -772,28 +771,21 @@ retry_write:
        }
        free (buffer);
- addr_orig = mmap (NULL, bytes, PROT_NONE,
-               MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+       addr = mmap (NULL, bytes, PROT_READ | PROT_WRITE,
+               MAP_SHARED, fd, 0);
- if (addr_orig == MAP_FAILED) {
-               goto error_close_unlink;
-       }
-
-       addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
-               MAP_FIXED | MAP_SHARED, fd, 0);
-
-       if (addr != addr_orig) {
+       if (addr == MAP_FAILED) {
                goto error_close_unlink;
        }
  #ifdef MADV_NOSYNC
-       madvise(addr_orig, bytes, MADV_NOSYNC);
+       madvise(addr, bytes, MADV_NOSYNC);
  #endif
res = close (fd);
        if (res) {
                return (-1);
        }
-       *buf = addr_orig;
+       *buf = addr;
return 0;

_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss

Reply via email to