diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c
new file mode 100644
index cf7938c..0859fbf
*** a/src/backend/storage/ipc/dsm_impl.c
--- b/src/backend/storage/ipc/dsm_impl.c
*************** dsm_impl_posix(dsm_op op, dsm_handle han
*** 368,374 ****
  
  	/* Map it. */
  	address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! 				   MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
  	if (address == MAP_FAILED)
  	{
  		int			save_errno;
--- 368,374 ----
  
  	/* Map it. */
  	address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! 				   MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
  	if (address == MAP_FAILED)
  	{
  		int			save_errno;
*************** dsm_impl_mmap(dsm_op op, dsm_handle hand
*** 960,966 ****
  
  	/* Map it. */
  	address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! 				   MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
  	if (address == MAP_FAILED)
  	{
  		int			save_errno;
--- 960,966 ----
  
  	/* Map it. */
  	address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! 				   MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
  	if (address == MAP_FAILED)
  	{
  		int			save_errno;
diff --git a/src/include/portability/mem.h b/src/include/portability/mem.h
new file mode 100644
index 7c77dbd..a4b01fe
*** a/src/include/portability/mem.h
--- b/src/include/portability/mem.h
***************
*** 30,35 ****
--- 30,43 ----
  #define MAP_HASSEMAPHORE		0
  #endif
  
+ /*
+  * BSD-derived systems use the MAP_NOSYNC flag to prevent dirty mmap(2)
+  * pages from being gratuitously flushed to disk.
+  */
+ #ifndef MAP_NOSYNC
+ #define MAP_NOSYNC			0
+ #endif
+ 
  #define PG_MMAP_FLAGS			(MAP_SHARED|MAP_ANONYMOUS|MAP_HASSEMAPHORE)
  
  /* Some really old systems don't define MAP_FAILED. */
