From 165038d589ed736874233656633b94fdb084ceaf Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 19 Apr 2012 16:17:48 -0700 Subject: [PATCH] objectcacher: rename truncate_set -> discard_set, and use discard Do not assume the object extents are at the trailing edge of objects. Instead, discard arbitrary extents. Fix callers. Signed-off-by: Sage Weil --- src/client/Client.cc | 2 +- src/librbd.cc | 4 ++-- src/osdc/ObjectCacher.cc | 26 +++++++++----------------- src/osdc/ObjectCacher.h | 2 +- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 986646f83218..47323bdc8ab7 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2319,7 +2319,7 @@ void Client::_invalidate_inode_cache(Inode *in, int64_t off, int64_t len) if (cct->_conf->client_oc) { vector ls; Filer::file_to_extents(cct, in->ino, &in->layout, off, len, ls); - objectcacher->truncate_set(&in->oset, ls); + objectcacher->discard_set(&in->oset, ls); } if (ino_invalidate_cb) diff --git a/src/librbd.cc b/src/librbd.cc index 2d7c91339e65..c9bfb5efff5a 100644 --- a/src/librbd.cc +++ b/src/librbd.cc @@ -1569,7 +1569,7 @@ int discard(ImageCtx *ictx, uint64_t off, uint64_t len) } if (ictx->object_cacher) - ictx->object_cacher->truncate_set(ictx->object_set, v); + ictx->object_cacher->discard_set(ictx->object_set, v); return total_write; } @@ -1852,7 +1852,7 @@ int aio_discard(ImageCtx *ictx, uint64_t off, size_t len, AioCompletion *c) r = 0; done: if (ictx->object_cacher) - ictx->object_cacher->truncate_set(ictx->object_set, v); + ictx->object_cacher->discard_set(ictx->object_set, v); c->finish_adding_completions(); c->put(); diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 25931dd83340..208002ad16b7 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -1646,16 +1646,16 @@ uint64_t ObjectCacher::release_all() /** - * Truncate an ObjectSet by removing the objects in exls from the in-memory oset. + * discard object extents from an ObjectSet by removing the objects in exls from the in-memory oset. */ -void ObjectCacher::truncate_set(ObjectSet *oset, vector& exls) +void ObjectCacher::discard_set(ObjectSet *oset, vector& exls) { if (oset->objects.empty()) { - ldout(cct, 10) << "truncate_set on " << oset << " dne" << dendl; + ldout(cct, 10) << "discard_set on " << oset << " dne" << dendl; return; } - ldout(cct, 10) << "truncate_set " << oset << dendl; + ldout(cct, 10) << "discard_set " << oset << dendl; bool were_dirty = oset->dirty_or_tx > 0; @@ -1668,19 +1668,11 @@ void ObjectCacher::truncate_set(ObjectSet *oset, vector& exls) continue; Object *ob = objects[oset->poolid][soid]; - // purge or truncate? - if (ex.offset == 0) { - ldout(cct, 10) << "truncate_set purging " << *ob << dendl; - purge(ob); - } else { - // hrm, truncate object - ldout(cct, 10) << "truncate_set truncating " << *ob << " at " << ex.offset << dendl; - ob->truncate(ex.offset); - - if (ob->can_close()) { - ldout(cct, 10) << "truncate_set trimming " << *ob << dendl; - close_object(ob); - } + ob->discard(ex.offset, ex.length); + + if (ob->can_close()) { + ldout(cct, 10) << " closing " << *ob << dendl; + close_object(ob); } } diff --git a/src/osdc/ObjectCacher.h b/src/osdc/ObjectCacher.h index 800a8b7eecc7..8f308af6fbe2 100644 --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@ -487,7 +487,7 @@ class ObjectCacher { loff_t release_set(ObjectSet *oset); // returns # of bytes not released (ie non-clean) uint64_t release_all(); - void truncate_set(ObjectSet *oset, vector& ex); + void discard_set(ObjectSet *oset, vector& ex); // file functions -- 2.47.3