diff options
Diffstat (limited to 'libglusterfs/src/fd.h')
| -rw-r--r-- | libglusterfs/src/fd.h | 127 |
1 files changed, 97 insertions, 30 deletions
diff --git a/libglusterfs/src/fd.h b/libglusterfs/src/fd.h index d3c9afde3..c1b9157d8 100644 --- a/libglusterfs/src/fd.h +++ b/libglusterfs/src/fd.h @@ -1,20 +1,11 @@ /* - Copyright (c) 2007-2009 Z RESEARCH, Inc. <http://www.zresearch.com> + Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.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/>. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. */ #ifndef _FD_H @@ -30,93 +21,169 @@ #include <unistd.h> #include "glusterfs.h" #include "locking.h" +#include "fd-lk.h" +#include "common-utils.h" + +#define GF_ANON_FD_NO -2 struct _inode; struct _dict; +struct fd_lk_ctx; + struct _fd_ctx { - uint64_t key; - uint64_t value; + union { + uint64_t key; + void *xl_key; + }; + union { + uint64_t value1; + void *ptr1; + }; }; struct _fd { - pid_t pid; + uint64_t pid; int32_t flags; int32_t refcount; struct list_head inode_list; struct _inode *inode; - struct _dict *ctx; gf_lock_t lock; /* used ONLY for manipulating 'struct _fd_ctx' array (_ctx).*/ struct _fd_ctx *_ctx; + int xl_count; /* Number of xl referred in this fd */ + struct fd_lk_ctx *lk_ctx; + gf_boolean_t anonymous; /* geo-rep anonymous fd */ }; typedef struct _fd fd_t; + +struct fd_table_entry { + fd_t *fd; + int next_free; +}; +typedef struct fd_table_entry fdentry_t; + + struct _fdtable { int refcount; uint32_t max_fds; pthread_mutex_t lock; - fd_t **fds; + fdentry_t *fdentries; + int first_free; }; typedef struct _fdtable fdtable_t; + +/* Signifies no more entries in the fd table. */ +#define GF_FDTABLE_END -1 + +/* This is used to invalidated + * the next_free value in an fdentry that has been allocated + */ +#define GF_FDENTRY_ALLOCATED -2 + #include "logging.h" #include "xlator.h" -inline void + +void gf_fd_put (fdtable_t *fdtable, int32_t fd); + fd_t * gf_fd_fdptr_get (fdtable_t *fdtable, int64_t fd); + fdtable_t * gf_fd_fdtable_alloc (void); -int32_t + +int gf_fd_unused_get (fdtable_t *fdtable, fd_t *fdptr); -int32_t -gf_fd_unused_get2 (fdtable_t *fdtable, fd_t *fdptr, int32_t fd); -fd_t ** +fdentry_t * gf_fd_fdtable_get_all_fds (fdtable_t *fdtable, uint32_t *count); -void + +void gf_fd_fdtable_destroy (fdtable_t *fdtable); + +fd_t * +__fd_ref (fd_t *fd); + + fd_t * fd_ref (fd_t *fd); + void fd_unref (fd_t *fd); + fd_t * fd_create (struct _inode *inode, pid_t pid); fd_t * +fd_create_uint64 (struct _inode *inode, uint64_t pid); + +fd_t * fd_lookup (struct _inode *inode, pid_t pid); +fd_t * +fd_lookup_uint64 (struct _inode *inode, uint64_t pid); + +fd_t* +fd_lookup_anonymous (inode_t *inode); + +fd_t * +fd_anonymous (inode_t *inode); + + +gf_boolean_t +fd_is_anonymous (fd_t *fd); + + uint8_t fd_list_empty (struct _inode *inode); + fd_t * fd_bind (fd_t *fd); + int fd_ctx_set (fd_t *fd, xlator_t *xlator, uint64_t value); -int + +int fd_ctx_get (fd_t *fd, xlator_t *xlator, uint64_t *value); -int + +int fd_ctx_del (fd_t *fd, xlator_t *xlator, uint64_t *value); int +__fd_ctx_del (fd_t *fd, xlator_t *xlator, uint64_t *value); + + +int __fd_ctx_set (fd_t *fd, xlator_t *xlator, uint64_t value); -int + +int __fd_ctx_get (fd_t *fd, xlator_t *xlator, uint64_t *value); -int -__fd_ctx_del (fd_t *fd, xlator_t *xlator, uint64_t *value); + +void +fd_ctx_dump (fd_t *fd, char *prefix); + +fdentry_t * +gf_fd_fdtable_copy_all_fds (fdtable_t *fdtable, uint32_t *count); + + +void +gf_fdptr_put (fdtable_t *fdtable, fd_t *fd); #endif /* _FD_H */ |
