From: Noah Watkins Date: Sun, 10 Nov 2013 23:50:13 +0000 (-0800) Subject: filejournal: add journal pre-allocate for osx X-Git-Tag: v0.75~30^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cfb82a17598175f9553bf62250d9cd84e2ce50b3;p=ceph.git filejournal: add journal pre-allocate for osx Signed-off-by: Noah Watkins --- diff --git a/configure.ac b/configure.ac index 13d80856f006..ccb48103a72e 100644 --- a/configure.ac +++ b/configure.ac @@ -541,6 +541,7 @@ AC_CHECK_FUNC([fallocate], AC_CHECK_HEADERS([arpa/nameser_compat.h]) +AC_CHECK_FUNCS([posix_fallocate]) AC_CHECK_HEADERS([sys/prctl.h]) AC_CHECK_FUNCS([prctl]) AC_CHECK_FUNCS([pipe2]) diff --git a/src/os/FileJournal.cc b/src/os/FileJournal.cc index 4a2af08dd4c0..9c2526cb573b 100644 --- a/src/os/FileJournal.cc +++ b/src/os/FileJournal.cc @@ -11,6 +11,7 @@ * Foundation. See file COPYING. * */ +#include "acconfig.h" #include "common/debug.h" #include "common/errno.h" @@ -298,6 +299,7 @@ int FileJournal::_open_file(int64_t oldsize, blksize_t blksize, << newsize << " bytes: " << cpp_strerror(err) << dendl; return -err; } +#ifdef HAVE_POSIX_FALLOCATE ret = ::posix_fallocate(fd, 0, newsize); if (ret) { derr << "FileJournal::_open_file : unable to preallocation journal to " @@ -305,6 +307,24 @@ int FileJournal::_open_file(int64_t oldsize, blksize_t blksize, return -ret; } max_size = newsize; +#elif defined(__APPLE__) + fstore_t store; + store.fst_flags = F_ALLOCATECONTIG; + store.fst_posmode = F_PEOFPOSMODE; + store.fst_offset = 0; + store.fst_length = newsize; + + ret = ::fcntl(fd, F_PREALLOCATE, &store); + if (ret == -1) { + ret = -errno; + derr << "FileJournal::_open_file : unable to preallocation journal to " + << newsize << " bytes: " << cpp_strerror(ret) << dendl; + return ret; + } + max_size = newsize; +#else +# error "Journal pre-allocation not supported on platform." +#endif } else { max_size = oldsize;