diff --git a/src/client/Client.cc b/src/client/Client.cc index 2a6c5402c7c..480ed5088ad 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3739,7 +3739,7 @@ void Client::_invalidate_inode_cache(Inode *in, int64_t off, int64_t len) if (cct->_conf->client_oc) { vector ls; Striper::file_to_extents(cct, in->ino, &in->layout, off, len, in->truncate_size, ls); - objectcacher->discard_set(&in->oset, ls); + objectcacher->discard_writeback(&in->oset, ls, nullptr); } _schedule_invalidate_callback(in, off, len); diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 50f9a8d6a6c..711e71fc99a 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -609,7 +609,8 @@ void ObjectCacher::Object::discard(loff_t off, loff_t len, bh->bl.clear(); bh->set_nocache(true); oc->mark_zero(bh); - return; + // we should mark all Rx bh to zero + continue; } else { assert(bh->waitfor_read.empty()); } @@ -2489,8 +2490,8 @@ void ObjectCacher::discard_writeback(ObjectSet *oset, if (gather.has_subs()) { gather.set_finisher(new FunctionContext( - [this, oset, was_dirty, on_finish](int) { - _discard_finish(oset, was_dirty, on_finish); + [this, oset, on_finish](int) { + _discard_finish(oset, false, on_finish); })); gather.activate(); return;