Merge pull request #837 from ceph/port/fallocate

FileJournal: zero-fill in-lieu of posix_fallocate

We may want to change that to a #warning later...

Reviewed-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2013-12-26 21:33:39 -08:00
commit b8fb366eab
2 changed files with 21 additions and 0 deletions

View File

@ -642,6 +642,7 @@ F_SETPIPE_SZ]])],
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])

View File

@ -11,6 +11,7 @@
* Foundation. See file COPYING.
*
*/
#include "acconfig.h"
#include "common/debug.h"
#include "common/errno.h"
@ -258,6 +259,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 "
@ -265,6 +267,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;