X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Fposix%2Flibcfs.h;h=305b74bc01eaf68c9edca932456695f8cb793208;hb=c8fd9c3c38a66ab3dd479c48e0168577a4ff960e;hp=18551ca4da83f76fc22dd6e7123785545ebc97d7;hpb=c72335a45d56d1ad61a65c228a8aff0cf010b1dc;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h index 18551ca..305b74b 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. @@ -28,6 +26,8 @@ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, 2013, 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 @@ -109,6 +110,7 @@ typedef unsigned long long cfs_cycles_t; #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L) +#define IS_ERR_VALUE(a) (IS_ERR(a)) #define PTR_ERR(a) ((long)(a)) #define ERR_PTR(a) ((void*)((long)(a))) @@ -119,14 +121,8 @@ typedef unsigned long long cfs_cycles_t; #include #endif -typedef struct file cfs_file_t; -typedef struct dentry cfs_dentry_t; -#ifdef __linux__ -typedef struct dirent64 cfs_dirent_t; -#endif - -#define cfs_get_fd(x) NULL -#define cfs_put_file(f) do {} while (0) +#define fget(x) NULL +#define fput(f) do {} while (0) #ifdef __linux__ /* Userpace byte flipping */ @@ -150,16 +146,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) @@ -197,6 +193,10 @@ 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 CFS_THREAD_SIZE 8192 @@ -206,7 +206,7 @@ typedef struct dirent64 cfs_dirent_t; #define LUSTRE_TRACE_SIZE (CFS_THREAD_SIZE >> 5) -#define CFS_CHECK_STACK() do { } while(0) +#define CFS_CHECK_STACK(msgdata, mask, cdls) do {} while(0) #define CDEBUG_STACK() (0L) /* initial pid */ @@ -245,6 +245,8 @@ static inline void MODULE_AUTHOR(char *name) #define __init #define __exit +#define EXPORT_SYMBOL(symbol) + static inline int cfs_request_module(const char *name, ...) { return (-EINVAL); @@ -415,11 +417,84 @@ static inline void radix_tree_preload_end(void) { } -typedef ssize_t (*read_actor_t)(); +/*************************************************************************** + * + * 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. + * + ***************************************************************************/ -#define CFS_IFSHIFT 12 +typedef ssize_t (*read_actor_t)(); -#define CFS_IFTODT(type) (((type) & S_IFMT) >> CFS_IFSHIFT) -#define CFS_DTTOIF(dirtype) ((dirtype) << CFS_IFSHIFT) +# ifndef IFTODT +# define IFSHIFT 12 +# define IFTODT(type) (((type) & S_IFMT) >> IFSHIFT) +# define DTTOIF(dirtype) ((dirtype) << IFSHIFT) +# endif #endif