mutex: set pshared attributes on rw semaphore

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/mutex.c b/mutex.c
index 6022cdd..5a65e53 100644
--- a/mutex.c
+++ b/mutex.c
@@ -180,6 +180,7 @@
 struct fio_rwlock *fio_rwlock_init(void)
 {
 	struct fio_rwlock *lock;
+	pthread_rwlockattr_t attr;
 	int ret;
 
 	lock = (void *) mmap(NULL, sizeof(struct fio_rwlock),
@@ -193,13 +194,30 @@
 
 	lock->magic = FIO_RWLOCK_MAGIC;
 
-	ret = pthread_rwlock_init(&lock->lock, NULL);
+	ret = pthread_rwlockattr_init(&attr);
 	if (ret) {
 		log_err("pthread_rwlock_init: %s\n", strerror(ret));
 		goto err;
 	}
+#ifdef FIO_HAVE_PSHARED_MUTEX
+	ret = pthread_rwlockattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+	if (ret) {
+		log_err("pthread_rwlock_init: %s\n", strerror(ret));
+		goto destroy_attr;
+	}
+#endif
+
+	ret = pthread_rwlock_init(&lock->lock, &attr);
+	if (ret) {
+		log_err("pthread_rwlock_init: %s\n", strerror(ret));
+		goto destroy_attr;
+	}
+
+	pthread_rwlockattr_destroy(&attr);
 
 	return lock;
+destroy_attr:
+	pthread_rwlockattr_destroy(&attr);
 err:
 	if (lock)
 		fio_rwlock_remove(lock);