Fixes: http://tracker.ceph.com/issues/16878
Signed-off-by: David Zafman <dzafman@redhat.com>
(reinterpret_cast<char*>(&h.magic2) - reinterpret_cast<char*>(&h));
corrupt(wfd, corrupt_at);
}
+
+off64_t FileJournal::get_journal_size_estimate()
+{
+ off64_t size, start = header.start;
+ if (write_pos < start) {
+ size = (max_size - start) + write_pos;
+ } else {
+ size = write_pos - start;
+ }
+ dout(20) << __func__ << " journal size=" << size << dendl;
+ return size;
+}
void set_wait_on_full(bool b) { wait_on_full = b; }
+ off64_t get_journal_size_estimate();
+
// reads
/// Result code for read_entry
}
buf0->total = buf.f_blocks * buf.f_bsize;
buf0->available = buf.f_bavail * buf.f_bsize;
+ // Adjust for writes pending in the journal
+ if (journal) {
+ uint64_t estimate = journal->get_journal_size_estimate();
+ if (buf0->available > estimate)
+ buf0->available -= estimate;
+ else
+ buf0->available = 0;
+ }
return 0;
}
virtual int prepare_entry(vector<ObjectStore::Transaction>& tls, bufferlist* tbl) = 0;
+ virtual off64_t get_journal_size_estimate() { return 0; }
+
// reads/recovery
};