Select Git revision
cache-node.c
cache-node.c 4.11 KiB
/*
* cache-node.c
*
* Used in diskomd.
*/
#include <stdio.h>
#include <kom-types.h>
#include "exp.h"
#include "cache-node.h"
#include <server/smalloc.h>
#include "lyskomd.h"
EXPORT const Cache_node EMPTY_CACHE_NODE =
((Cache_node){{ 0, 0, 0}, NULL, NULL, 0, 0, 0, 0, NULL, NULL, 0});
EXPORT const Cache_node_block EMPTY_CACHE_NODE_BLOCK =
((Cache_node_block){ 0, NULL, NULL});
EXPORT const Cache_node_mcb EMPTY_CACHE_NODE_MCB =
((Cache_node_mcb){ 0, NULL, 0, 0, NULL, NULL, 0, NULL });
EXPORT void
unlink_lru(Cache_node *node,
Cache_node **lru,
Cache_node **mru)
{
Cache_node *link;
link = node->next;
if ( node->next != NULL )
node->next->prev = node->prev;
else if (*lru == node)
*lru = node->prev;
if ( node->prev != NULL )
node->prev->next = link;
else if (*mru == node)
*mru = link;
node->next = NULL;
node->prev = NULL;
}
EXPORT void
insert_mru(Cache_node *node,
Cache_node **lru,
Cache_node **mru)
{
node->prev = NULL;
node->next = *mru;
*mru = node;
if ( *lru == NULL )
*lru = node;
if ( node->next != NULL )
node->next->prev = node;
}
static Cache_node_mcb *
alloc_cache_node_mcb(void)
{
Cache_node_mcb *t;
t = smalloc(sizeof(Cache_node_mcb));
*t = EMPTY_CACHE_NODE_MCB;
return t;
}