From 278d732ecd3594cd76e172d78ce3ec84e58e178b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 15 Jan 2015 11:20:18 -0800 Subject: [PATCH] os/FileJournal: Fix journal write fail, align for direct io when config journal_zero_on_create true, osd mkfs will fail when zeroing journal. journal open with O_DIRECT, buf should align with blocksize. Backport: giant, firefly, dumpling Signed-off-by: Xie Rui <875016668@qq.com> Reviewed-by: Sage Weil (cherry picked from commit 80473f63853593e53d72f17c098152caf17f5e9e) --- src/os/FileJournal.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/os/FileJournal.cc b/src/os/FileJournal.cc index b1d2db15cb316..3d2fc8aa89831 100644 --- a/src/os/FileJournal.cc +++ b/src/os/FileJournal.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -296,24 +297,28 @@ int FileJournal::_open_file(int64_t oldsize, blksize_t blksize, if (create && g_conf->journal_zero_on_create) { derr << "FileJournal::_open_file : zeroing journal" << dendl; uint64_t write_size = 1 << 20; - char *buf = new char[write_size]; + char *buf; + ret = ::posix_memalign((void **)&buf, block_size, write_size); + if (ret != 0) { + return ret; + } memset(static_cast(buf), 0, write_size); uint64_t i = 0; for (; (i + write_size) <= (unsigned)max_size; i += write_size) { ret = ::pwrite(fd, static_cast(buf), write_size, i); if (ret < 0) { - delete [] buf; + free(buf); return -errno; } } if (i < (unsigned)max_size) { ret = ::pwrite(fd, static_cast(buf), max_size - i, i); if (ret < 0) { - delete [] buf; + free(buf); return -errno; } } - delete [] buf; + free(buf); } -- 2.39.5