From: Jianpeng Ma Date: Thu, 8 Sep 2016 11:40:41 +0000 (+0800) Subject: os/bluestore/BlueFS: For logs of rocksdb & bluefs only use directio. X-Git-Tag: v11.0.1~295^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F11012%2Fhead;p=ceph.git os/bluestore/BlueFS: For logs of rocksdb & bluefs only use directio. Now it use bluefs_buffered_io to control whether use buffer or directio when write. But in fact for logs of rocksdb & bluefs, whether bluefs_buffer_io is true or false, the logs only need directio. Signed-off-by: Jianpeng Ma --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 0e665ee50714..99eb31e205e7 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -1375,6 +1375,12 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) assert(!h->file->deleted); assert(h->file->num_readers.load() == 0); + bool buffered; + if (h->file->fnode.ino == 1 || h->writer_type == WRITER_WAL) + buffered = false; + else + buffered = g_conf->bluefs_buffered_io; + if (offset + length <= h->pos) return 0; if (offset < h->pos) { @@ -1506,8 +1512,7 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) h->tail_block.substr_of(bl, bl.length() - tail, tail); t.append_zero(super.block_size - tail); } - bdev[p->bdev]->aio_write(p->offset + x_off, t, h->iocv[p->bdev], - g_conf->bluefs_buffered_io); + bdev[p->bdev]->aio_write(p->offset + x_off, t, h->iocv[p->bdev], buffered); bloff += x_len; length -= x_len; ++p;