return NULL;
}
+void BlockDevice::queue_reap_ioc(IOContext *ioc)
+{
+ Mutex::Locker l(ioc_reap_lock);
+ if (ioc_reap_count.read() == 0)
+ ioc_reap_count.inc();
+ ioc_reap_queue.push_back(ioc);
+}
+
+void BlockDevice::reap_ioc()
+{
+ if (ioc_reap_count.read()) {
+ Mutex::Locker l(ioc_reap_lock);
+ for (auto p : ioc_reap_queue) {
+ dout(20) << __func__ << " reap ioc " << p << dendl;
+ delete p;
+ }
+ ioc_reap_queue.clear();
+ ioc_reap_count.dec();
+ }
+}
class BlockDevice {
+ Mutex ioc_reap_lock;
+ vector<IOContext*> ioc_reap_queue;
+ atomic_t ioc_reap_count;
+
public:
+ BlockDevice(): ioc_reap_lock("BlockDevice::ioc_reap_lock") {}
virtual ~BlockDevice() {}
typedef void (*aio_callback_t)(void *handle, void *aio);
virtual int aio_zero(uint64_t off, uint64_t len, IOContext *ioc) = 0;
virtual int flush() = 0;
+ void queue_reap_ioc(IOContext *ioc);
+ void reap_ioc();
+
// for managing buffered readers/writers
virtual int invalidate_cache(uint64_t off, uint64_t len) = 0;
virtual int open(string path) = 0;
size(0), block_size(0),
fs(NULL), aio(false), dio(false),
debug_lock("KernelDevice::debug_lock"),
- ioc_reap_lock("KernelDevice::ioc_reap_lock"),
flush_lock("KernelDevice::flush_lock"),
aio_queue(g_conf->bdev_aio_max_queue_depth),
aio_callback(cb),
}
}
}
- if (ioc_reap_count.read()) {
- Mutex::Locker l(ioc_reap_lock);
- for (auto p : ioc_reap_queue) {
- dout(20) << __func__ << " reap ioc " << p << dendl;
- delete p;
- }
- ioc_reap_queue.clear();
- ioc_reap_count.dec();
- }
+ reap_ioc();
}
dout(10) << __func__ << " end" << dendl;
}
return r;
}
-void KernelDevice::queue_reap_ioc(IOContext *ioc)
-{
- Mutex::Locker l(ioc_reap_lock);
- if (ioc_reap_count.read() == 0)
- ioc_reap_count.inc();
- ioc_reap_queue.push_back(ioc);
-}
Mutex debug_lock;
interval_set<uint64_t> debug_inflight;
- Mutex ioc_reap_lock;
- vector<IOContext*> ioc_reap_queue;
- atomic_t ioc_reap_count;
-
Mutex flush_lock;
atomic_t io_since_flush;
IOContext *ioc) override;
int flush() override;
- void queue_reap_ioc(IOContext *ioc);
-
// for managing buffered readers/writers
int invalidate_cache(uint64_t off, uint64_t len) override;
int open(string path) override;