1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "rbd_replay/BufferReader.h"
5 #include "include/assert.h"
6 #include "include/intarith.h"
10 BufferReader::BufferReader(int fd, size_t min_bytes, size_t max_bytes)
11 : m_fd(fd), m_min_bytes(min_bytes), m_max_bytes(max_bytes),
12 m_bl_it(m_bl.begin()), m_eof_reached(false) {
13 assert(m_min_bytes <= m_max_bytes);
16 int BufferReader::fetch(bufferlist::iterator **it) {
17 if (m_bl_it.get_remaining() < m_min_bytes) {
18 ssize_t bytes_to_read = ROUND_UP_TO(m_max_bytes - m_bl_it.get_remaining(),
20 while (!m_eof_reached && bytes_to_read > 0) {
21 int r = m_bl.read_fd(m_fd, CEPH_PAGE_SIZE);
28 assert(r <= bytes_to_read);
37 } // namespace rbd_replay