X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fos%2Fbluestore%2FBlueFS.cc;h=2ba18f0266d9f18d77b13b5504e9e8d46a550f93;hb=f91f0fd59dc16d284d230f8953e42d49a893715d;hp=417c1e0f68717a52ac5d8baf9b7f4cae9bc449cb;hpb=91f1cf44a5d7f2447155ea575d309309fbbe6f73;p=ceph.git diff --git a/ceph/src/os/bluestore/BlueFS.cc b/ceph/src/os/bluestore/BlueFS.cc index 417c1e0f6..2ba18f026 100644 --- a/ceph/src/os/bluestore/BlueFS.cc +++ b/ceph/src/os/bluestore/BlueFS.cc @@ -20,10 +20,10 @@ using TOPNSPC::common::cmd_getval; MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::File, bluefs_file, bluefs); MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::Dir, bluefs_dir, bluefs); -MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileWriter, bluefs_file_writer, bluefs); +MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileWriter, bluefs_file_writer, bluefs_file_writer); MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReaderBuffer, - bluefs_file_reader_buffer, bluefs); -MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReader, bluefs_file_reader, bluefs); + bluefs_file_reader_buffer, bluefs_file_reader); +MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReader, bluefs_file_reader, bluefs_file_reader); MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileLock, bluefs_file_lock, bluefs); static void wal_discard_cb(void *priv, void* priv2) { @@ -1910,6 +1910,7 @@ int BlueFS::_read_random( logger->inc(l_bluefs_read_random_bytes, len); std::shared_lock s_lock(h->lock); + buf->bl.reassign_to_mempool(mempool::mempool_bluefs_file_reader); while (len > 0) { if (off < buf->bl_off || off >= buf->get_buf_end()) { s_lock.unlock(); @@ -2009,6 +2010,7 @@ int BlueFS::_read( if (off < buf->bl_off || off >= buf->get_buf_end()) { s_lock.unlock(); std::unique_lock u_lock(h->lock); + buf->bl.reassign_to_mempool(mempool::mempool_bluefs_file_reader); if (off < buf->bl_off || off >= buf->get_buf_end()) { // if precondition hasn't changed during locking upgrade. buf->bl.clear(); @@ -2705,7 +2707,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) // do not bother to dirty the file if we are overwriting // previously allocated extents. bool must_dirty = false; - uint64_t clear_upto = 0; if (allocated < offset + length) { // we should never run out of log space here; see the min runway check // in _flush_and_sync_log. @@ -2721,18 +2722,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) ceph_abort_msg("bluefs enospc"); return r; } - if (cct->_conf->bluefs_preextend_wal_files && - h->writer_type == WRITER_WAL) { - // NOTE: this *requires* that rocksdb also has log recycling - // enabled and is therefore doing robust CRCs on the log - // records. otherwise, we will fail to reply the rocksdb log - // properly due to garbage on the device. - h->file->fnode.size = h->file->fnode.get_allocated(); - clear_upto = h->file->fnode.size; - dout(10) << __func__ << " extending WAL size to 0x" << std::hex - << h->file->fnode.size << std::dec << " to include allocated" - << dendl; - } must_dirty = true; } if (h->file->fnode.size < offset + length) { @@ -2793,7 +2782,7 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) } } } - if (length == partial + h->buffer.length() || clear_upto != 0) { + if (length == partial + h->buffer.length()) { /* in case of inital allocation and need to zero, limited flush is unacceptable */ bl.claim_append_piecewise(h->buffer); } else { @@ -2821,15 +2810,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) } else { h->tail_block.clear(); } - if (clear_upto != 0) { - if (offset + length < clear_upto) { - dout(20) << __func__ << " zeroing WAL log up to 0x" - << std::hex << clear_upto - << std::dec << dendl; - bl.append_zero(clear_upto - (offset + length)); - length += clear_upto - (offset + length); - } - } ceph_assert(bl.length() == length); switch (h->writer_type) { @@ -3356,6 +3336,7 @@ BlueFS::FileWriter *BlueFS::_create_writer(FileRef f) void BlueFS::_close_writer(FileWriter *h) { dout(10) << __func__ << " " << h << " type " << h->writer_type << dendl; + h->buffer.reassign_to_mempool(mempool::mempool_bluefs_file_writer); for (unsigned i=0; iiocv[i]) {