summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Watkins <noahwatkins@gmail.com>2013-07-21 17:54:26 -0700
committerNoah Watkins <noahwatkins@gmail.com>2013-09-17 10:43:34 -0700
commit2ceb719ac45042a7441966392e77f9e7005bbbf6 (patch)
tree88eeac0e08e6ae5786bd5f545588a529bb811ec3
parent80a7e3fbd57b0fee8f774edef946ce63537781e9 (diff)
downloadceph-2ceb719ac45042a7441966392e77f9e7005bbbf6.tar.gz
wip: unsorted / combined patches
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r--configure.ac7
-rw-r--r--src/client/Client.cc2
-rw-r--r--src/common/sctp_crc32.c2
-rw-r--r--src/common/sync_filesystem.h2
-rw-r--r--src/include/cephfs/libcephfs.h4
-rw-r--r--src/include/compat.h14
-rw-r--r--src/log/Log.cc5
-rw-r--r--src/osd/OSD.cc9
-rw-r--r--src/pybind/rados.py3
-rw-r--r--src/test/system/cross_process_sem.cc4
-rw-r--r--src/test/system/systest_runnable.cc10
-rw-r--r--src/tools/rados/rados.cc2
12 files changed, 56 insertions, 8 deletions
diff --git a/configure.ac b/configure.ac
index e6a704fb1ef..7e4450cbcc3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,7 +123,7 @@ AX_C_PRETTY_FUNC
ACX_PTHREAD
AC_SEARCH_LIBS([uuid_parse], [uuid], [], AC_MSG_FAILURE([no uuid library found]))
AC_CHECK_LIB([m], [pow], [true], AC_MSG_FAILURE([libm not found]))
-AC_CHECK_LIB([resolv], [__res_nquery], [true], AC_MSG_FAILURE([libresolv not found]))
+#AC_CHECK_LIB([resolv], [__res_nquery], [true], AC_MSG_FAILURE([libresolv not found]))
if test x"$linux" = x"yes"; then
AC_CHECK_LIB([keyutils], [add_key], [true], AC_MSG_FAILURE([libkeyutils not found]))
fi
@@ -583,6 +583,11 @@ AC_CHECK_FUNC([pthread_spin_init],
LIBS="$saved_LIBS"
CFLAGS="$saved_CFLAGS"
+AC_CHECK_FUNCS([on_exit])
+
+AC_CHECK_HEADERS([stdint.h sys/types.h linux/types.h])
+AC_CHECK_HEADERS([sys/vfs.h sys/param.h sys/mount.h])h
+
AC_CHECK_TYPES(int8_t)
AC_CHECK_TYPES(uint8_t)
AC_CHECK_TYPES(int16_t)
diff --git a/src/client/Client.cc b/src/client/Client.cc
index f6a8a1bf1a6..709d632b235 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -5692,9 +5692,11 @@ int Client::_read(Fh *f, int64_t offset, uint64_t size, bufferlist *bl)
if (!conf->client_debug_force_sync_read &&
(cct->_conf->client_oc && (have & CEPH_CAP_FILE_CACHE))) {
+#ifndef DARWIN
if (f->flags & O_RSYNC) {
_flush_range(in, offset, size);
}
+#endif
r = _read_async(f, offset, size, bl);
} else {
r = _read_sync(f, offset, size, bl);
diff --git a/src/common/sctp_crc32.c b/src/common/sctp_crc32.c
index 7e2678a2b7c..a7b6e32868d 100644
--- a/src/common/sctp_crc32.c
+++ b/src/common/sctp_crc32.c
@@ -44,6 +44,8 @@ __FBSDID("$FreeBSD: src/sys/netinet/sctp_crc32.c,v 1.8 2007/05/08 17:01:10 rrs E
#if defined(__FreeBSD__)
#include <sys/endian.h>
+#elif defined(__APPLE__)
+#include <machine/endian.h>
#else
#include <endian.h>
#endif
diff --git a/src/common/sync_filesystem.h b/src/common/sync_filesystem.h
index eff18d20af0..1d17cef7472 100644
--- a/src/common/sync_filesystem.h
+++ b/src/common/sync_filesystem.h
@@ -16,7 +16,7 @@
#define CEPH_SYNC_FILESYSTEM_H
#include <unistd.h>
-#include <syscall.h>
+//#include <syscall.h>
#ifndef __CYGWIN__
# ifndef DARWIN
diff --git a/src/include/cephfs/libcephfs.h b/src/include/cephfs/libcephfs.h
index 2f69ba7a3b9..5b0884a09a7 100644
--- a/src/include/cephfs/libcephfs.h
+++ b/src/include/cephfs/libcephfs.h
@@ -22,7 +22,7 @@
#include <sys/socket.h>
// FreeBSD compatibility
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__APPLE__)
typedef off_t loff_t;
typedef off_t off64_t;
#endif
@@ -34,7 +34,7 @@ extern "C" {
/*
* On FreeBSD the offset is 64 bit, but libc doesn't announce it in the way glibc does.
*/
-#if !defined(__FreeBSD__) && !defined(__USE_FILE_OFFSET64)
+#if !defined(__FreeBSD__) && !defined(__APPLE__) && !defined(__USE_FILE_OFFSET64)
# error libceph: must define __USE_FILE_OFFSET64 or readdir results will be corrupted
#endif
diff --git a/src/include/compat.h b/src/include/compat.h
index a410acb35f6..35c71b534cd 100644
--- a/src/include/compat.h
+++ b/src/include/compat.h
@@ -12,6 +12,8 @@
#ifndef CEPH_COMPAT_H
#define CEPH_COMPAT_H
+#include "acconfig.h"
+
#if defined(__FreeBSD__)
#define lseek64(fd, offset, whence) lseek(fd, offset, whence)
#define ENODATA 61
@@ -19,4 +21,16 @@
#define MSG_MORE 0
#endif /* !__FreeBSD__ */
+#ifdef DARWIN
+
+#define TEMP_FAILURE_RETRY(expression) \
+ ({ long int __result; \
+ do __result = (long int) (expression); \
+ while (__result == -1L && errno == EINTR); \
+ __result; })
+
+#define lseek64(fd, offset, whence) lseek(fd, offset, whence)
+
+#endif
+
#endif /* !CEPH_COMPAT_H */
diff --git a/src/log/Log.cc b/src/log/Log.cc
index afeb1208002..a5eba2327f6 100644
--- a/src/log/Log.cc
+++ b/src/log/Log.cc
@@ -13,6 +13,7 @@
#include "common/safe_io.h"
#include "common/Clock.h"
#include "include/assert.h"
+#include "include/compat.h"
#define DEFAULT_MAX_NEW 100
#define DEFAULT_MAX_RECENT 10000
@@ -87,7 +88,11 @@ void Log::set_flush_on_exit()
// assume that exit() won't race with ~Log().
if (m_indirect_this == NULL) {
m_indirect_this = new (Log*)(this);
+#ifdef HAVE_ON_EXIT
on_exit(log_on_exit, m_indirect_this);
+#else
+# warning "Flush on exit not implemented. Need atexit."
+#endif
}
}
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 76bdb02c0ad..6d19cce05eb 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -20,10 +20,15 @@
#include <ctype.h>
#include <boost/scoped_ptr.hpp>
-#if defined(DARWIN) || defined(__FreeBSD__)
+#include "acconfig.h"
+
+#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
+#endif
+
+#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
-#endif // DARWIN || __FreeBSD__
+#endif
#include "osd/PG.h"
diff --git a/src/pybind/rados.py b/src/pybind/rados.py
index a0e5bf42ba9..99d33d02e76 100644
--- a/src/pybind/rados.py
+++ b/src/pybind/rados.py
@@ -6,6 +6,7 @@ Copyright 2011, Hannu Valtonen <hannu.valtonen@ormod.com>
from ctypes import CDLL, c_char_p, c_size_t, c_void_p, c_char, c_int, c_long, \
c_ulong, create_string_buffer, byref, Structure, c_uint64, c_ubyte, \
pointer, CFUNCTYPE
+from ctypes.util import find_library
import ctypes
import errno
import threading
@@ -184,7 +185,7 @@ Rados object in state %s." % (self.state))
def __init__(self, rados_id=None, name=None, clustername=None,
conf_defaults=None, conffile=None, conf=None, flags=0):
- self.librados = CDLL('librados.so.2')
+ self.librados = CDLL('librados.2.dylib')
self.cluster = c_void_p()
self.rados_id = rados_id
if rados_id is not None and not isinstance(rados_id, str):
diff --git a/src/test/system/cross_process_sem.cc b/src/test/system/cross_process_sem.cc
index 667ba1cc861..654e1830ce7 100644
--- a/src/test/system/cross_process_sem.cc
+++ b/src/test/system/cross_process_sem.cc
@@ -19,6 +19,10 @@
#include <stdlib.h>
#include <sys/mman.h>
+#ifndef MAP_ANONYMOUS
+# define MAP_ANONYMOUS MAP_ANON
+#endif
+
/* We put our cross-process semaphore into a page of memory mapped with mmap. */
struct cross_process_sem_data_t
{
diff --git a/src/test/system/systest_runnable.cc b/src/test/system/systest_runnable.cc
index ec9b823db14..0d6ce0142f1 100644
--- a/src/test/system/systest_runnable.cc
+++ b/src/test/system/systest_runnable.cc
@@ -31,6 +31,8 @@
#include <unistd.h>
#include <vector>
+#include "acconfig.h"
+
#if defined(__FreeBSD__)
#include <pthread_np.h>
#endif
@@ -42,8 +44,14 @@ static pid_t do_gettid(void)
{
#if defined(__linux__)
return static_cast < pid_t >(syscall(SYS_gettid));
-#else
+#elif defined(__FreeBSD__)
return static_cast < pid_t >(pthread_getthreadid_np());
+#elif defined(DARWIN)
+ uint64_t tid;
+ pthread_threadid_np(NULL, &tid);
+ return static_cast < pid_t >(tid);
+#else
+# error "no thread id query function"
#endif
}
diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc
index e8386959349..90fb2be5489 100644
--- a/src/tools/rados/rados.cc
+++ b/src/tools/rados/rados.cc
@@ -41,6 +41,8 @@ using namespace librados;
#include <climits>
#include <locale>
+#include "include/compat.h"
+
#include "cls/lock/cls_lock_client.h"
int rados_tool_sync(const std::map < std::string, std::string > &opts,