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 <wjw@digiware.nl>
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);
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),
#define RW_IO_MAX (INT_MAX & CEPH_PAGE_MASK)
+enum struct blk_access_mode_t {
+ DIRECT,
+ BUFFERED
+};
class KernelDevice : public BlockDevice {
std::vector<int> fd_directs, fd_buffereds;