Skip to content
Snippets Groups Projects
Select Git revision
22 results Searching

cache-node.c

Blame
  • 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;
    }