diff options
Diffstat (limited to 'libglusterfs/src/inode.h')
| -rw-r--r-- | libglusterfs/src/inode.h | 160 | 
1 files changed, 160 insertions, 0 deletions
diff --git a/libglusterfs/src/inode.h b/libglusterfs/src/inode.h new file mode 100644 index 00000000000..67490f0ee2d --- /dev/null +++ b/libglusterfs/src/inode.h @@ -0,0 +1,160 @@ +/* +   Copyright (c) 2007, 2008 Z RESEARCH, Inc. <http://www.zresearch.com> +   This file is part of GlusterFS. + +   GlusterFS is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation; either version 3 of the License, +   or (at your option) any later version. + +   GlusterFS is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see +   <http://www.gnu.org/licenses/>. +*/ + +#ifndef _INODE_H +#define _INODE_H + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include <stdint.h> +#include <sys/types.h> + +struct _inode_table; +typedef struct _inode_table inode_table_t; + +struct _inode; +typedef struct _inode inode_t; + +struct _dentry; +typedef struct _dentry dentry_t; + +#include "list.h" +#include "xlator.h" + + +struct _inode_table { +        pthread_mutex_t    lock; +        size_t             hashsize;    /* bucket size of inode hash and dentry hash */ +        char              *name;        /* name of the inode table, just for gf_log() */ +        inode_t           *root;        /* root directory inode, with number 1 */ +        xlator_t          *xl;          /* xlator to be called to do purge */ +        uint32_t           lru_limit;   /* maximum LRU cache size */ +        struct list_head  *inode_hash;  /* buckets for inode hash table */ +        struct list_head  *name_hash;   /* buckets for dentry hash table */ +        struct list_head   active;      /* list of inodes currently active (in an fop) */ +        uint32_t           active_size; /* count of inodes in active list */ +        struct list_head   lru;         /* list of inodes recently used. +                                           lru.next most recent */ +        uint32_t           lru_size;    /* count of inodes in lru list  */ +        struct list_head   purge;       /* list of inodes to be purged soon */ +        uint32_t           purge_size;  /* count of inodes in purge list */ +}; + + +struct _dentry { +        struct list_head   inode_list;   /* list of dentries of inode */ +        struct list_head   hash;         /* hash table pointers */ +        struct list_head   parent_list;  /* list of dentries under the parent  */ +        inode_t           *inode;        /* inode of this directory entry */ +        char              *name;         /* name of the directory entry */ +        inode_t           *parent;       /* directory of the entry */ +}; + +//#define ZR_INODE_CTX_VALUE_LEN 2 +struct _inode_ctx { +	uint64_t key; +	uint64_t value; +	//uint64_t value[ZR_INODE_CTX_VALUE_LEN]; +}; + +struct _inode { +        inode_table_t    *table;         /* the table this inode belongs to */ +        gf_lock_t         lock; +        uint64_t          nlookup; +        uint64_t          generation; +        uint32_t          ref;           /* reference count on this inode */ +        ino_t             ino;           /* inode number in the storage (persistent) */ +        dict_t           *ctx;           /* per xlator private */ +        mode_t            st_mode;       /* what kind of file */ +        struct list_head  fd_list;       /* list of open files on this inode */ +        struct list_head  dentry_list;   /* list of directory entries for this inode */ +        struct list_head  child_list;    /* list of directory entries under this inode */ +        struct list_head  hash;          /* hash table pointers */ +        struct list_head  list;          /* active/lru/purge */ + +	struct _inode_ctx *_ctx;    /* replacement for dict_t *(inode->ctx) */ +}; + + +inode_table_t * +inode_table_new (size_t lru_limit, xlator_t *xl); + +inode_t * +inode_new (inode_table_t *table); + +inode_t * +inode_search (inode_table_t *table, ino_t ino, const char *name); + +int +inode_link (inode_t *inode, inode_t *parent, +            const char *name, struct stat *stbuf); + +void +inode_unlink (inode_t *inode, +              inode_t *parent, +              const char *name); + +inode_t * +inode_parent (inode_t *inode, ino_t par, const char *name); + +inode_t * +inode_ref (inode_t *inode); + +inode_t * +inode_unref (inode_t *inode); + +int +inode_lookup (inode_t *inode); + +int +inode_forget (inode_t *inode, +	      uint64_t nlookup); + +int +inode_rename (inode_table_t *table, +	      inode_t *olddir, +	      const char *oldname, +	      inode_t *newdir, +	      const char *newname, +	      inode_t *inode, +	      struct stat *stbuf); + + +int32_t +inode_path (inode_t *inode, +	    const char *name, +	    char **bufp); + +inode_t * +inode_from_path (inode_table_t *table, +		 const char *path); + +int +inode_ctx_put (inode_t *inode, xlator_t *xlator, uint64_t value); + +int  +inode_ctx_get (inode_t *inode, xlator_t *xlator, uint64_t *value); + +int  +inode_ctx_del (inode_t *inode, xlator_t *xlator, uint64_t *value); + +#endif /* _INODE_H */  | 
