X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Fposix%2Flibcfs.h;h=95ec2ab5a2947f86f6dec88ad09044247be79f90;hb=3bffa4d32bc5b0bc71ba6873e262ddbca436bae1;hp=b204213450eafd62bd5529d803c6025ffb9180b2;hpb=4c1c3b4d33c85216b8d50264b8ba8101173e2698;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h index b204213..95ec2ab 100644 --- a/libcfs/include/libcfs/posix/libcfs.h +++ b/libcfs/include/libcfs/posix/libcfs.h @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -66,6 +66,7 @@ #include #include #include +#include #ifdef HAVE_NETDB_H #include @@ -104,10 +105,9 @@ #include #include #include -#include -# define do_gettimeofday(tv) gettimeofday(tv, NULL); -typedef unsigned long long cycles_t; +# define cfs_gettimeofday(tv) gettimeofday(tv, NULL); +typedef unsigned long long cfs_cycles_t; #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L) #define PTR_ERR(a) ((long)(a)) @@ -126,6 +126,9 @@ typedef struct dentry cfs_dentry_t; typedef struct dirent64 cfs_dirent_t; #endif +#define cfs_get_fd(x) NULL +#define cfs_put_file(f) do {} while (0) + #ifdef __linux__ /* Userpace byte flipping */ # include @@ -148,16 +151,16 @@ typedef struct dirent64 cfs_dirent_t; # define cpu_to_be16(x) bswap_16(x) # define be32_to_cpu(x) bswap_32(x) # define cpu_to_be32(x) bswap_32(x) -# define be64_to_cpu(x) bswap_64(x) -# define cpu_to_be64(x) bswap_64(x) +# define be64_to_cpu(x) (__u64)bswap_64(x) +# define cpu_to_be64(x) (__u64)bswap_64(x) # else # if __BYTE_ORDER == __BIG_ENDIAN # define le16_to_cpu(x) bswap_16(x) # define cpu_to_le16(x) bswap_16(x) # define le32_to_cpu(x) bswap_32(x) # define cpu_to_le32(x) bswap_32(x) -# define le64_to_cpu(x) bswap_64(x) -# define cpu_to_le64(x) bswap_64(x) +# define le64_to_cpu(x) (__u64)bswap_64(x) +# define cpu_to_le64(x) (__u64)bswap_64(x) # define be16_to_cpu(x) (x) # define cpu_to_be16(x) (x) @@ -195,14 +198,20 @@ typedef struct dirent64 cfs_dirent_t; #define __swab64s(x) do { *(x) = __swab64(*(x)); } while (0) #endif +#if !defined(ALIGN) +#define __ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask)) +#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a) - 1) +#endif # ifndef THREAD_SIZE /* x86_64 linux has THREAD_SIZE in userspace */ -# define THREAD_SIZE 8192 +# define CFS_THREAD_SIZE 8192 +# else +# define CFS_THREAD_SIZE THREAD_SIZE # endif -#define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) +#define LUSTRE_TRACE_SIZE (CFS_THREAD_SIZE >> 5) -#define CHECK_STACK() do { } while(0) +#define CFS_CHECK_STACK(msgdata, mask, cdls) do {} while(0) #define CDEBUG_STACK() (0L) /* initial pid */ @@ -225,10 +234,10 @@ typedef __u32 cfs_kernel_cap_t; /** * Module support (probably shouldn't be used in generic code?) */ -struct module { +typedef struct cfs_module { int count; char *name; -}; +} cfs_module_t; static inline void MODULE_AUTHOR(char *name) { @@ -241,26 +250,28 @@ static inline void MODULE_AUTHOR(char *name) #define __init #define __exit -static inline int request_module(char *name) +#define EXPORT_SYMBOL(symbol) + +static inline int cfs_request_module(const char *name, ...) { return (-EINVAL); } -static inline void __module_get(struct module *module) +static inline void __cfs_module_get(cfs_module_t *module) { } -static inline int try_module_get(struct module *module) +static inline int cfs_try_module_get(cfs_module_t *module) { return 1; } -static inline void module_put(struct module *module) +static inline void cfs_module_put(cfs_module_t *module) { } -static inline int module_refcount(struct module *m) +static inline int cfs_module_refcount(cfs_module_t *m) { return 1; } @@ -271,20 +282,21 @@ static inline int module_refcount(struct module *m) * ***************************************************************************/ -struct shrinker { +struct cfs_shrinker { ; }; -#define DEFAULT_SEEKS (0) +#define CFS_DEFAULT_SEEKS (0) -typedef int (*shrinker_t)(int, unsigned int); +typedef int (*cfs_shrinker_t)(int, unsigned int); -static inline struct shrinker *set_shrinker(int seeks, shrinker_t shrinkert) +static inline +struct cfs_shrinker *cfs_set_shrinker(int seeks, cfs_shrinker_t shrink) { - return (struct shrinker *)0xdeadbea1; // Cannot return NULL here + return (struct cfs_shrinker *)0xdeadbea1; // Cannot return NULL here } -static inline void remove_shrinker(struct shrinker *shrinker) +static inline void cfs_remove_shrinker(struct cfs_shrinker *shrinker) { } @@ -299,12 +311,12 @@ static inline void remove_shrinker(struct shrinker *shrinker) ***************************************************************************/ struct radix_tree_root { - struct list_head list; + cfs_list_t list; void *rnode; }; struct radix_tree_node { - struct list_head _node; + cfs_list_t _node; unsigned long index; void *item; }; @@ -334,7 +346,7 @@ static inline int radix_tree_insert(struct radix_tree_root *root, CFS_INIT_LIST_HEAD(&node->_node); node->index = idx; node->item = item; - list_add_tail(&node->_node, &root->list); + cfs_list_add_tail(&node->_node, &root->list); root->rnode = (void *)1001; return 0; } @@ -344,7 +356,7 @@ static inline struct radix_tree_node *radix_tree_lookup0(struct radix_tree_root { struct radix_tree_node *node; - if (list_empty(&root->list)) + if (cfs_list_empty(&root->list)) return NULL; cfs_list_for_each_entry_typed(node, &root->list, @@ -374,10 +386,10 @@ static inline void *radix_tree_delete(struct radix_tree_root *root, if (p == NULL) return NULL; - list_del_init(&p->_node); + cfs_list_del_init(&p->_node); item = p->item; free(p); - if (list_empty(&root->list)) + if (cfs_list_empty(&root->list)) root->rnode = NULL; return item; @@ -410,6 +422,78 @@ static inline void radix_tree_preload_end(void) { } +/*************************************************************************** + * + * Linux kernel red black tree emulation. + * + ***************************************************************************/ +struct rb_node { + unsigned long rb_parent_color; +#define RB_RED 0 +#define RB_BLACK 1 + struct rb_node *rb_right; + struct rb_node *rb_left; +}; + +struct rb_root { + struct rb_node *rb_node; +}; + + +#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3)) +#define rb_color(r) ((r)->rb_parent_color & 1) +#define rb_is_red(r) (!rb_color(r)) +#define rb_is_black(r) rb_color(r) +#define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0) +#define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0) + +static inline void rb_set_parent(struct rb_node *rb, struct rb_node *p) +{ + rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p; +} +static inline void rb_set_color(struct rb_node *rb, int color) +{ + rb->rb_parent_color = (rb->rb_parent_color & ~1) | color; +} + +#define RB_ROOT ((struct rb_root) { NULL, }) +#define rb_entry(ptr, type, member) container_of(ptr, type, member) + +#define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL) +#define RB_EMPTY_NODE(node) (rb_parent(node) == node) +#define RB_CLEAR_NODE(node) (rb_set_parent(node, node)) + +static inline void rb_init_node(struct rb_node *rb) +{ + rb->rb_parent_color = 0; + rb->rb_right = NULL; + rb->rb_left = NULL; + RB_CLEAR_NODE(rb); +} + +extern void rb_insert_color(struct rb_node *, struct rb_root *); +extern void rb_erase(struct rb_node *, struct rb_root *); + +/* Find logical next and previous nodes in a tree */ +extern struct rb_node *rb_next(const struct rb_node *); +extern struct rb_node *rb_prev(const struct rb_node *); +extern struct rb_node *rb_first(const struct rb_root *); +extern struct rb_node *rb_last(const struct rb_root *); +static inline void rb_link_node(struct rb_node *node, struct rb_node *parent, + struct rb_node **rb_link) +{ + node->rb_parent_color = (unsigned long)parent; + node->rb_left = node->rb_right = NULL; + + *rb_link = node; +} + +/*************************************************************************** + * + * End of Linux kernel red black tree emulation. + * + ***************************************************************************/ + typedef ssize_t (*read_actor_t)(); #define CFS_IFSHIFT 12