liblustre.h

来自「lustre 1.6.5 source code」· C头文件 代码 · 共 907 行 · 第 1/2 页

H
907
字号
/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * *  Copyright (C) 2001 Cluster File Systems, Inc. <info@clusterfs.com> * *   This file is part of Lustre, http://www.lustre.org. * *   Lustre is free software; you can redistribute it and/or *   modify it under the terms of version 2 of the GNU General Public *   License as published by the Free Software Foundation. * *   Lustre 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 Lustre; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * User-space Lustre headers. * */#ifndef LIBLUSTRE_H__#define LIBLUSTRE_H__#ifdef __KERNEL__#error Kernel files should not #include <liblustre.h>#else/* * The userspace implementations of linux/spinlock.h vary; we just * include our own for all of them */#define __LINUX_SPINLOCK_H#endif#include <sys/mman.h>#ifdef HAVE_STDINT_H# include <stdint.h>#endif#ifdef HAVE_ASM_PAGE_H# include <asm/page.h>#endif#ifdef HAVE_SYS_USER_H# include <sys/user.h>#endif#ifdef HAVE_SYS_IOCTL_H# include <sys/ioctl.h>#endif#ifndef _IOWR# include "ioctl.h"#endif#include <stdio.h>#include <sys/ioctl.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/stat.h>#ifdef HAVE_SYS_VFS_H# include <sys/vfs.h>#endif#include <unistd.h>#include <fcntl.h>#include <libcfs/list.h>#include <lnet/lnet.h>#include <libcfs/kp30.h>#include <libcfs/user-bitops.h>/* definitions for liblustre */#ifdef __CYGWIN__#define CFS_PAGE_SHIFT  12#define CFS_PAGE_SIZE   (1UL << CFS_PAGE_SHIFT)#define CFS_PAGE_MASK   (~((__u64)CFS_PAGE_SIZE-1))#define loff_t long long#define ERESTART 2001typedef unsigned short umode_t;#endif#ifndef CURRENT_SECONDS# define CURRENT_SECONDS time(0)#endif#ifndef ARRAY_SIZE#define ARRAY_SIZE(a) ((sizeof (a))/(sizeof ((a)[0])))#endif/* This is because lprocfs_status.h gets included here indirectly.  It would * be much better to just avoid lprocfs being included into liblustre entirely * but that requires more header surgery than I can handle right now. */#ifndef smp_processor_id#define smp_processor_id() 0#endif#ifndef num_online_cpus#define num_online_cpus() 1#endif#ifndef num_possible_cpus#define num_possible_cpus() 1#endif/* always adopt 2.5 definitions */#define KERNEL_VERSION(a,b,c) ((a)*100+(b)*10+c)#define LINUX_VERSION_CODE KERNEL_VERSION(2,5,0)#ifndef page_private#define page_private(page) ((page)->private)#define set_page_private(page, v) ((page)->private = (v))#endifstatic inline void inter_module_put(void *a){        return;}void *inter_module_get(char *arg);/* cheats for now */struct work_struct {        void (*ws_task)(void *arg);        void *ws_arg;};static inline void prepare_work(struct work_struct *q, void (*t)(void *),                                void *arg){        q->ws_task = t;        q->ws_arg = arg;        return;}static inline void schedule_work(struct work_struct *q){        q->ws_task(q->ws_arg);}#define strnlen(a,b) strlen(a)static inline void *kmalloc(int size, int prot){        return malloc(size);}#define vmalloc malloc#define vfree free#define kfree(a) free(a)#define GFP_KERNEL 1#define GFP_HIGHUSER 1#define GFP_ATOMIC 1#define GFP_NOFS 1#define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)#define PTR_ERR(a) ((long)(a))#define ERR_PTR(a) ((void*)((long)(a)))typedef struct {        void *cwd;}mm_segment_t;typedef int (read_proc_t)(char *page, char **start, off_t off,                          int count, int *eof, void *data);struct file; /* forward ref */typedef int (write_proc_t)(struct file *file, const char *buffer,                           unsigned long count, void *data);#define NIPQUAD(addr) \        ((unsigned char *)&addr)[0], \        ((unsigned char *)&addr)[1], \        ((unsigned char *)&addr)[2], \        ((unsigned char *)&addr)[3]#if defined(__LITTLE_ENDIAN)#define HIPQUAD(addr) \        ((unsigned char *)&addr)[3], \        ((unsigned char *)&addr)[2], \        ((unsigned char *)&addr)[1], \        ((unsigned char *)&addr)[0]#elif defined(__BIG_ENDIAN)#define HIPQUAD NIPQUAD#else#error "Undefined byteorder??"#endif /* __LITTLE_ENDIAN *//* bits ops *//* a long can be more than 32 bits, so use BITS_PER_LONG * to allow the compiler to adjust the bit shifting accordingly */static __inline__ int ext2_set_bit(int nr, void *addr){        return set_bit(nr, addr);}static __inline__ int ext2_clear_bit(int nr, void *addr){        return clear_bit(nr, addr);}static __inline__ int ext2_test_bit(int nr, void *addr){        return test_bit(nr, addr);}/* modules */struct module {        int count;};static inline void MODULE_AUTHOR(char *name){        printf("%s\n", name);}#define MODULE_DESCRIPTION(name) MODULE_AUTHOR(name)#define MODULE_LICENSE(name) MODULE_AUTHOR(name)#define THIS_MODULE NULL#define __init#define __exit/* devices */static inline int misc_register(void *foo){        return 0;}static inline int misc_deregister(void *foo){        return 0;}static inline int request_module(char *name){        return (-EINVAL);}#define __MOD_INC_USE_COUNT(m)  do {} while (0)#define __MOD_DEC_USE_COUNT(m)  do {} while (0)#define MOD_INC_USE_COUNT       do {} while (0)#define MOD_DEC_USE_COUNT       do {} while (0)static inline void __module_get(struct module *module){}static inline int try_module_get(struct module *module){        return 1;}static inline void module_put(struct module *module){}/* module initialization */extern int init_obdclass(void);extern int ptlrpc_init(void);extern int ldlm_init(void);extern int osc_init(void);extern int lov_init(void);extern int mdc_init(void);extern int mgc_init(void);extern int echo_client_init(void);/* general stuff */#define EXPORT_SYMBOL(S)struct rcu_head { };typedef struct { } spinlock_t;typedef __u64 kdev_t;#define SPIN_LOCK_UNLOCKED (spinlock_t) { }#define LASSERT_SPIN_LOCKED(lock) do {} while(0)#define LASSERT_SEM_LOCKED(sem) do {} while(0)static inline void spin_lock(spinlock_t *l) {return;}static inline void spin_unlock(spinlock_t *l) {return;}static inline void spin_lock_init(spinlock_t *l) {return;}static inline void local_irq_save(unsigned long flag) {return;}static inline void local_irq_restore(unsigned long flag) {return;}static inline int spin_is_locked(spinlock_t *l) {return 1;}static inline void spin_lock_bh(spinlock_t *l) {}static inline void spin_unlock_bh(spinlock_t *l) {}static inline void spin_lock_irqsave(spinlock_t *a, unsigned long b) {}static inline void spin_unlock_irqrestore(spinlock_t *a, unsigned long b) {}#define min(x,y) ((x)<(y) ? (x) : (y))#define max(x,y) ((x)>(y) ? (x) : (y))#ifndef min_t#define min_t(type,x,y) \        ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })#endif#ifndef max_t#define max_t(type,x,y) \        ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })#endif#define simple_strtol strtol/* registering symbols */#ifndef ERESTARTSYS#define ERESTARTSYS ERESTART#endif#define HZ 1/* random */void get_random_bytes(void *ptr, int size);/* memory *//* memory size: used for some client tunables */#define num_physpages (256 * 1024) /* 1GB */static inline int copy_from_user(void *a,void *b, int c){        memcpy(a,b,c);        return 0;}static inline int copy_to_user(void *a,void *b, int c){        memcpy(a,b,c);        return 0;}/* slabs */typedef struct {         int size;} kmem_cache_t;#define SLAB_HWCACHE_ALIGN 0static inline kmem_cache_t *kmem_cache_create(const char *name, size_t objsize, size_t cdum,                  unsigned long d,                  void (*e)(void *, kmem_cache_t *, unsigned long),                  void (*f)(void *, kmem_cache_t *, unsigned long)){        kmem_cache_t *c;        c = malloc(sizeof(*c));        if (!c)                return NULL;        c->size = objsize;        CDEBUG(D_MALLOC, "alloc slab cache %s at %p, objsize %d\n",               name, c, (int)objsize);        return c;};static inline int kmem_cache_destroy(kmem_cache_t *a){        CDEBUG(D_MALLOC, "destroy slab cache %p, objsize %u\n", a, a->size);        free(a);        return 0;}/* struct page decl moved out from here into portals/include/libcfs/user-prim.h *//* 2.4 defines */#define PAGE_LIST_ENTRY list#define PAGE_LIST(page) ((page)->list)#define kmap(page) (page)->addr#define kunmap(a) do {} while (0)static inline cfs_page_t *alloc_pages(int mask, unsigned long order){        cfs_page_t *pg = malloc(sizeof(*pg));        if (!pg)                return NULL;#if 0 //#ifdef MAP_ANONYMOUS        pg->addr = mmap(0, PAGE_SIZE << order, PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);#else        pg->addr = malloc(CFS_PAGE_SIZE << order);#endif        if (!pg->addr) {                free(pg);                return NULL;        }        return pg;}#define cfs_alloc_pages(mask, order)  alloc_pages((mask), (order))#define alloc_page(mask)      alloc_pages((mask), 0)#define cfs_alloc_page(mask)  alloc_page(mask)static inline void __free_pages(cfs_page_t *pg, int what){#if 0 //#ifdef MAP_ANONYMOUS        munmap(pg->addr, PAGE_SIZE);#else        free(pg->addr);#endif        free(pg);}#define __cfs_free_pages(pg, order)  __free_pages((pg), (order))#define __free_page(page) __free_pages((page), 0)#define free_page(page) __free_page(page)#define __cfs_free_page(page)  __cfs_free_pages((page), 0)static inline cfs_page_t* __grab_cache_page(unsigned long index){        cfs_page_t *pg = alloc_pages(0, 0);        if (pg)                pg->index = index;        return pg;}#define grab_cache_page(index) __grab_cache_page(index)#define page_cache_release(page) __free_pages(page, 0)/* arithmetic */#define do_div(a,b)                     \        ({                              \                unsigned long remainder;\                remainder = (a) % (b);  \                (a) = (a) / (b);        \                (remainder);            \        })/* VFS stuff */#define ATTR_MODE       0x0001#define ATTR_UID        0x0002#define ATTR_GID        0x0004#define ATTR_SIZE       0x0008#define ATTR_ATIME      0x0010#define ATTR_MTIME      0x0020#define ATTR_CTIME      0x0040#define ATTR_ATIME_SET  0x0080#define ATTR_MTIME_SET  0x0100#define ATTR_FORCE      0x0200  /* Not a change, but a change it */#define ATTR_ATTR_FLAG  0x0400#define ATTR_RAW        0x0800  /* file system, not vfs will massage attrs */#define ATTR_FROM_OPEN  0x1000  /* called from open path, ie O_TRUNC */#define ATTR_CTIME_SET  0x2000#define ATTR_KILL_SUID  0#define ATTR_KILL_SGID  0struct iattr {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?