From 0c225c6f493bcebaa60c2631bab46a040912ecd4 Mon Sep 17 00:00:00 2001 From: Willem Jan Withagen Date: Sat, 26 Jun 2021 15:24:17 +0200 Subject: [PATCH] blk: use choose_fd for all filehandle references This is a leading part of the changes to implement bluestore on FreeBSD. Without this invalid indexing in the descriptor arrays will occur. Creates a new enum: `blk_access_mode_t` to describe `BUFFERED` and `DIRECT `mode access with `choose_fd()` to get the correct file for the typed access and adds a pretty-printer boolean convertor `blk_access_mode_t::buffermode(bool)` Signed-off-by: Willem Jan Withagen --- src/blk/BlockDevice.cc | 10 ++++++++++ src/blk/kernel/KernelDevice.cc | 5 +++++ src/blk/kernel/KernelDevice.h | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/blk/BlockDevice.cc b/src/blk/BlockDevice.cc index d5d3169e9131e..5932d0d33b5a4 100644 --- a/src/blk/BlockDevice.cc +++ b/src/blk/BlockDevice.cc @@ -47,6 +47,16 @@ using std::string; +std::ostream& operator<<(std::ostream& os, const blk_access_mode_t buffered) +{ + os << (buffered == blk_access_mode_t::BUFFERED ? "(buffered)" : "(direct)"); + return os; +} + +blk_access_mode_t buffermode(bool buffered) { + return buffered ? blk_access_mode_t::BUFFERED : blk_access_mode_t::DIRECT; +} + void IOContext::aio_wait() { std::unique_lock l(lock); diff --git a/src/blk/kernel/KernelDevice.cc b/src/blk/kernel/KernelDevice.cc index 049a99de77fdb..ab4afbfd9651e 100644 --- a/src/blk/kernel/KernelDevice.cc +++ b/src/blk/kernel/KernelDevice.cc @@ -52,6 +52,11 @@ using ceph::make_timespan; using ceph::mono_clock; using ceph::operator <<; +std::ostream& operator<<(std::ostream& os, const blk_access_mode_t buffered); +blk_access_mode_t buffermode(bool buffered) { + return buffered ? blk_access_mode_t::BUFFERED : blk_access_mode_t::DIRECT; +} + KernelDevice::KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb, void *d_cbpriv) : BlockDevice(cct, cb, cbpriv), aio(false), dio(false), diff --git a/src/blk/kernel/KernelDevice.h b/src/blk/kernel/KernelDevice.h index 7ac9b1e7e1e3a..6a934fb3ad332 100644 --- a/src/blk/kernel/KernelDevice.h +++ b/src/blk/kernel/KernelDevice.h @@ -27,6 +27,10 @@ #define RW_IO_MAX (INT_MAX & CEPH_PAGE_MASK) +enum struct blk_access_mode_t { + DIRECT, + BUFFERED +}; class KernelDevice : public BlockDevice { std::vector fd_directs, fd_buffereds; -- 2.39.5