| 137 | } |
| 138 | |
| 139 | int |
| 140 | RamCacheLRU::get(CryptoHash *key, Ptr<IOBufferData> *ret_data, uint64_t auxkey) |
| 141 | { |
| 142 | if (!max_bytes) { |
| 143 | return 0; |
| 144 | } |
| 145 | uint32_t i = key->slice32(3) % nbuckets; |
| 146 | RamCacheLRUEntry *e = bucket[i].head; |
| 147 | while (e) { |
| 148 | if (e->key == *key && e->auxkey == auxkey) { |
| 149 | lru.remove(e); |
| 150 | lru.enqueue(e); |
| 151 | (*ret_data) = e->data; |
| 152 | DDbg(dbg_ctl_ram_cache, "get %X %" PRIu64 " HIT", key->slice32(3), auxkey); |
| 153 | ts::Metrics::Counter::increment(cache_rsb.ram_cache_hits); |
| 154 | ts::Metrics::Counter::increment(stripe->cache_vol->vol_rsb.ram_cache_hits); |
| 155 | |
| 156 | return 1; |
| 157 | } |
| 158 | e = e->hash_link.next; |
| 159 | } |
| 160 | DDbg(dbg_ctl_ram_cache, "get %X %" PRIu64 " MISS", key->slice32(3), auxkey); |
| 161 | ts::Metrics::Counter::increment(cache_rsb.ram_cache_misses); |
| 162 | ts::Metrics::Counter::increment(stripe->cache_vol->vol_rsb.ram_cache_misses); |
| 163 | |
| 164 | return 0; |
| 165 | } |
| 166 | |
| 167 | RamCacheLRUEntry * |
| 168 | RamCacheLRU::remove(RamCacheLRUEntry *e) |