* returns 0 if doing async read
*/
int ObjectCacher::readx(OSDRead *rd, ObjectSet *oset, Context *onfinish)
+{
+ return _readx(rd, oset, onfinish, true);
+}
+
+int ObjectCacher::_readx(OSDRead *rd, ObjectSet *oset, Context *onfinish,
+ bool external_call)
{
assert(lock.is_locked());
bool success = true;
touch_bh(*bhit);
if (!success) {
- if (perfcounter) {
+ if (perfcounter && external_call) {
perfcounter->inc(l_objectcacher_data_read, total_bytes_read);
perfcounter->inc(l_objectcacher_cache_bytes_hit, bytes_in_cache);
perfcounter->inc(l_objectcacher_cache_bytes_miss, bytes_not_in_cache);
}
return 0; // wait!
}
- if (perfcounter) {
+ if (perfcounter && external_call) {
perfcounter->inc(l_objectcacher_data_read, total_bytes_read);
perfcounter->inc(l_objectcacher_cache_bytes_hit, bytes_in_cache);
perfcounter->inc(l_objectcacher_cache_ops_hit);
void wrlock(Object *o);
void wrunlock(Object *o);
+ int _readx(OSDRead *rd, ObjectSet *oset, Context *onfinish,
+ bool external_call);
+
public:
void bh_read_finish(int64_t poolid, sobject_t oid, loff_t offset,
uint64_t length, bufferlist &bl, int r);
public:
C_RetryRead(ObjectCacher *_oc, OSDRead *r, ObjectSet *os, Context *c) : oc(_oc), rd(r), oset(os), onfinish(c) {}
void finish(int) {
- int r = oc->readx(rd, oset, onfinish);
+ int r = oc->_readx(rd, oset, onfinish, false);
if (r > 0 && onfinish) {
onfinish->finish(r);
delete onfinish;