Home | History | Annotate | Download | only in disk_cache

Lines Matching defs:node

32   // addr is the cache addres of the node being inserted or removed. We want to
249 // We cannot return a shared node because we are not keeping a reference
250 // to the entry that owns the buffer. Make this node a copy of the one that
258 void Rankings::Insert(CacheRankingsBlock* node, bool modified, List list) {
259 Trace("Insert 0x%x", node->address().value());
260 DCHECK(node->HasData());
263 Transaction lock(control_data_, node->address(), INSERT, list);
270 head.Data()->prev != node->address().value()) { // FinishInsert().
275 head.Data()->prev = node->address().value();
281 node->Data()->next = my_head.value();
282 node->Data()->prev = node->address().value();
283 my_head.set_value(node->address().value());
285 if (!my_tail.is_initialized() || my_tail.value() == node->address().value()) {
286 my_tail.set_value(node->address().value());
287 node->Data()->next = my_tail.value();
293 node->Data()->last_used = now.ToInternalValue();
295 node->Data()->last_modified = now.ToInternalValue();
296 node->Store();
299 // The last thing to do is move our head to point to a node already stored.
318 // 4. a(x, b), r(0, 0), b(a, y), head(x), tail(y) node.Store()
331 void Rankings::Remove(CacheRankingsBlock* node, List list) {
332 Trace("Remove 0x%x (0x%x 0x%x)", node->address().value(), node->Data()->next,
333 node->Data()->prev);
334 DCHECK(node->HasData());
335 InvalidateIterators(node);
336 Addr next_addr(node->Data()->next);
337 Addr prev_addr(node->Data()->prev);
349 if (!CheckLinks(node, &prev, &next, list))
352 Transaction lock(control_data_, node->address(), REMOVE, list);
357 CacheAddr node_value = node->address().value();
389 node->Data()->next = 0;
390 node->Data()->prev = 0;
392 // The last thing to get to disk is the node itself, so before that there is
398 node->Store();
408 void Rankings::UpdateRank(CacheRankingsBlock* node, bool modified, List list) {
410 Remove(node, list);
411 Insert(node, modified, list);
425 CacheRankingsBlock node(backend_->File(node_addr), node_addr);
426 if (!node.Load())
429 node.Data()->dummy = 0;
430 node.Store();
435 // We want to leave the node inside the list. The entry must me marked as
440 FinishInsert(&node);
443 RevertRemove(&node);
450 void Rankings::FinishInsert(CacheRankingsBlock* node) {
455 if (my_head.value() != node->address().value()) {
456 if (my_tail.value() == node->address().value()) {
458 node->Data()->next = my_tail.value();
461 Insert(node, true, static_cast<List>(control_data_->operation_list));
465 backend_->RecoveredEntry(node);
468 void Rankings::RevertRemove(CacheRankingsBlock* node) {
469 Addr next_addr(node->Data()->next);
470 Addr prev_addr(node->Data()->prev);
488 CacheAddr node_value = node->address().value();
525 CacheRankingsBlock* Rankings::GetNext(CacheRankingsBlock* node, List list) {
527 if (!node) {
533 if (!node->HasData())
534 node->Load();
538 if (my_tail.value() == node->address().value())
540 Addr address(node->Data()->next);
541 if (address.value() == node->address().value())
552 if (node && !CheckSingleLink(node, next.get()))
558 CacheRankingsBlock* Rankings::GetPrev(CacheRankingsBlock* node, List list) {
560 if (!node) {
566 if (!node->HasData())
567 node->Load();
571 if (my_head.value() == node->address().value())
573 Addr address(node->Data()->prev);
574 if (address.value() == node->address().value())
585 if (node && !CheckSingleLink(prev.get(), node))
591 void Rankings::FreeRankingsBlock(CacheRankingsBlock* node) {
592 TrackRankingsBlock(node, false);
595 void Rankings::TrackRankingsBlock(CacheRankingsBlock* node,
597 if (!node)
600 IteratorPair current(node->address().value(), node);
619 bool Rankings::SanityCheck(CacheRankingsBlock* node, bool from_list) {
620 const RankingsNode* data = node->Data();
631 // Both pointers on zero is a node out of the list.
635 if ((node->address().value() == data->prev) && !IsHead(data->prev))
638 if ((node->address().value() == data->next) && !IsTail(data->next))
670 bool Rankings::CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev,
672 if ((prev->Data()->next != node->address().value() &&
673 heads_[list].value() != node->address().value()) ||
674 (next->Data()->prev != node->address().value() &&
675 tails_[list].value() != node->address().value())) {
680 // The list is actually ok, node is wrong.
681 node->Data()->next = 0;
682 node->Data()->prev = 0;
683 node->Store();
728 scoped_ptr<CacheRankingsBlock> node;
730 node.reset(new CacheRankingsBlock(backend_->File(address), address));
731 node->Load();
732 if (node->Data()->prev != prev.value())
734 if (!CheckEntry(node.get()))
738 address.set_value(node->Data()->next);
743 } while (node->address().value() != address.value());
763 // of cache iterators and update all that are pointing to the given node.
764 void Rankings::UpdateIterators(CacheRankingsBlock* node) {
765 CacheAddr address = node->address().value();
770 *other->Data() = *node->Data();
775 void Rankings::InvalidateIterators(CacheRankingsBlock* node) {
776 CacheAddr address = node->address().value();