From 5662bd8b2e188f6b1a700866b4c9fafd3c2c5da9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 22 Dec 2015 16:11:48 -0500 Subject: [PATCH] os/bluestore/BlueFS: implement invalidate_cache Signed-off-by: Sage Weil --- src/os/bluestore/BlueFS.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index adaaaf4962322..56d7f4af8f5d4 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -681,7 +681,19 @@ void BlueFS::_invalidate_cache(FileRef f, uint64_t offset, uint64_t length) { dout(10) << __func__ << " file " << f->fnode << " " << offset << "~" << length << dendl; -#warning implement _invalidate_cache + if (offset & ~super.block_mask()) { + offset &= super.block_mask(); + length = ROUND_UP_TO(length, super.block_size); + } + uint64_t x_off = 0; + vector::iterator p = f->fnode.seek(offset, &x_off); + while (length > 0 && p != f->fnode.extents.end()) { + uint64_t x_len = MIN(p->length - x_off, length); + bdev[p->bdev]->invalidate_cache(p->offset + x_off, x_len); + dout(20) << " " << x_off << "~" << x_len << " of " << *p << dendl; + offset += x_len; + length -= x_len; + } } uint64_t BlueFS::_estimate_log_size() -- 2.39.5