virtual int invalidate_cache(uint64_t off, uint64_t len) = 0;
virtual int open(const std::string& path) = 0;
virtual void close() = 0;
+
+protected:
+ bool is_valid_io(uint64_t off, uint64_t len) const {
+ return (off % block_size == 0 &&
+ len % block_size == 0 &&
+ len > 0 &&
+ off < size &&
+ off + len <= size);
+ }
};
#endif //CEPH_OS_BLUESTORE_BLOCKDEVICE_H
dout(20) << __func__ << " 0x" << std::hex << off << "~" << len << std::dec
<< (buffered ? " (buffered)" : " (direct)")
<< dendl;
- assert(off % block_size == 0);
- assert(len % block_size == 0);
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
if ((!buffered || bl.get_num_buffers() >= IOV_MAX) &&
bl.rebuild_aligned_size_and_memory(block_size, block_size)) {
dout(5) << __func__ << " 0x" << std::hex << off << "~" << len << std::dec
<< (buffered ? " (buffered)" : " (direct)")
<< dendl;
- assert(off % block_size == 0);
- assert(len % block_size == 0);
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
_aio_log_start(ioc, off, len);
uint64_t len = bl.length();
dout(20) << __func__ << " " << off << "~" << len << " ioc " << ioc
<< " buffered " << buffered << dendl;
- assert(off % block_size == 0);
- assert(len % block_size == 0);
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
Task *t = new Task(this, IOCommand::WRITE_COMMAND, off, len);
bool buffered)
{
dout(5) << __func__ << " " << off << "~" << len << " ioc " << ioc << dendl;
- assert(off % block_size == 0);
- assert(len % block_size == 0);
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
Task *t = new Task(this, IOCommand::READ_COMMAND, off, len, 1);
bufferptr p = buffer::create_page_aligned(len);
IOContext *ioc)
{
dout(20) << __func__ << " " << off << "~" << len << " ioc " << ioc << dendl;
- assert(off % block_size == 0);
- assert(len % block_size == 0);
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
Task *t = new Task(this, IOCommand::READ_COMMAND, off, len);
{
uint64_t len = bl.length();
dout(20) << __func__ << " " << off << "~" << len << dendl;
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
dout(40) << "data: ";
bl.hexdump(*_dout);
bool buffered)
{
dout(5) << __func__ << " " << off << "~" << len << dendl;
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ assert(is_valid_io(off, len));
bufferptr p = buffer::create_page_aligned(len);
memcpy(p.c_str(), addr + off, len);
int PMEMDevice::read_random(uint64_t off, uint64_t len, char *buf, bool buffered)
{
- assert(len > 0);
- assert(off < size);
- assert(off + len <= size);
+ dout(5) << __func__ << " " << off << "~" << len << dendl;
+ assert(is_valid_io(off, len));
memcpy(buf, addr + off, len);
return 0;
int invalidate_cache(uint64_t off, uint64_t len) override;
int open(const std::string &path) override;
void close() override;
+
+private:
+ bool is_valid_io(uint64_t off, uint64_t len) const {
+ return (len > 0 &&
+ off < size &&
+ off + len <= size);
+ }
};
#endif