X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fliblustre.h;h=dc339a419835b6494e467438f1b8759bb622d305;hb=a8209f8c79f3b037c6dc47ccb9eb5f0fcf4ffe78;hp=3c602cd8f9550a1f2945d6585da3652ca360fed8;hpb=c39489126f88bb5b30643ebb11c72fbe9f9d2241;p=fs%2Flustre-release.git diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h index 3c602cd..dc339a4 100644 --- a/lustre/include/liblustre.h +++ b/lustre/include/liblustre.h @@ -25,13 +25,18 @@ #define LIBLUSTRE_H__ #include -#ifndef __CYGWIN__ -#include -#include -#else -#include -#include "ioctl.h" +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_ASM_PAGE_H +# include #endif +#ifdef HAVE_SYS_USER_H +# include +#endif + +#include "ioctl.h" + #include #include #include @@ -40,9 +45,9 @@ #include #include -#include +#include #include -#include +#include /* definitions for liblustre */ @@ -65,6 +70,62 @@ typedef unsigned short umode_t; #define smp_processor_id() 0 #endif +#ifndef smp_mb +#define smp_mb() do {} while (0) +#endif + +#ifndef might_sleep_if +#define might_sleep_if(cond) do {} while (0) +#endif + +#ifndef might_sleep +#define might_sleep() do {} while (0) +#endif + +#ifndef signal_pending +#define signal_pending(proc) 0 +#endif + +#ifndef MAY_EXEC +#define MAY_EXEC 1 +#endif + +#ifndef MAY_WRITE +#define MAY_WRITE 2 +#endif + +#ifndef MAY_READ +#define MAY_READ 4 +#endif + +#ifndef MAY_APPEND +#define MAY_APPEND 8 +#endif + +#ifndef FMODE_READ +#define FMODE_READ 1 +#endif + +#ifndef FMODE_WRITE +#define FMODE_WRITE 2 +#endif + +#ifndef FMODE_EXEC +#define FMODE_EXEC 4 +#endif + +#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) +#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO) +#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) +#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) +#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) + +#define LBUG() \ + do { \ + printf("!!!LBUG at %s:%d\n", __FILE__, __LINE__); \ + sleep(1000000); \ + } while (0) + /* always adopt 2.5 definitions */ #define KERNEL_VERSION(a,b,c) ((a)*100+(b)*10+c) #define LINUX_VERSION_CODE (2*200+5*10+0) @@ -117,7 +178,7 @@ static inline void *kmalloc(int size, int prot) typedef struct { void *cwd; -}mm_segment_t; +} mm_segment_t; typedef int (read_proc_t)(char *page, char **start, off_t off, int count, int *eof, void *data); @@ -176,6 +237,16 @@ static __inline__ int test_bit(int nr, long * addr) return ((mask & *addr) != 0); } +static __inline__ int test_and_set_bit(int nr, long * addr) +{ + int res; + + res = test_bit(nr, addr); + set_bit(nr, addr); + + return res; +} + static __inline__ int ext2_set_bit(int nr, void *addr) { return set_bit(nr, (long*)addr); @@ -197,16 +268,17 @@ 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 MODULE_AUTHOR(name) +#define MODULE_DESCRIPTION(name) +#define MODULE_LICENSE(name) + +#define module_init(init) +#define module_exit(exit) #define THIS_MODULE NULL #define __init #define __exit +#define __user /* devices */ @@ -275,6 +347,14 @@ 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) {} +typedef struct { } rwlock_t; +#define rwlock_init(x) do {} while(0) +#define RW_LOCK_UNLOCKED (rwlock_t) {} +#define read_lock(l) +#define read_unlock(l) +#define write_lock(l) +#define write_unlock(l) + #define min(x,y) ((x)<(y) ? (x) : (y)) #define max(x,y) ((x)>(y) ? (x) : (y)) @@ -287,6 +367,10 @@ static inline void spin_unlock_irqrestore(spinlock_t *a, unsigned long b) {} ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; }) #endif +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + /* registering symbols */ #define ERESTARTSYS ERESTART @@ -313,6 +397,12 @@ static inline int copy_to_user(void *a,void *b, int c) return 0; } +static inline long strncpy_from_user(char *dest, const char *src, long n) +{ + char *s; + s = strncpy(dest, src, n); + return strnlen(s, n); +} /* slabs */ typedef struct { @@ -348,21 +438,13 @@ static inline int kmem_cache_destroy(kmem_cache_t *a) #define PAGE_CACHE_SHIFT PAGE_SHIFT #define PAGE_CACHE_MASK PAGE_MASK -struct page { - void *addr; - unsigned long index; - struct list_head list; - unsigned long private; - - /* internally used by liblustre file i/o */ - int _offset; - int _count; -}; +/* 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 page_address(page) ((page)->addr) #define kmap(page) (page)->addr #define kunmap(a) do {} while (0) @@ -435,7 +517,7 @@ static inline struct page* __grab_cache_page(unsigned long index) #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 +/* ATTR_CTIME_SET has been defined in lustre_idl.h */ struct iattr { unsigned int ia_valid; @@ -465,25 +547,30 @@ struct iattr { #define INTENT_MAGIC 0x19620323 -struct lustre_intent_data { - int it_disposition; - int it_status; - __u64 it_lock_handle; - void *it_data; - int it_lock_mode; - int it_int_flags; -}; struct lookup_intent { int it_magic; void (*it_op_release)(struct lookup_intent *); int it_op; int it_flags; int it_create_mode; - union { - struct lustre_intent_data lustre; - } d; + union { + void *fs_data; /* FS-specific intent data */ + } d; +}; + +struct lustre_intent_data { + int it_disposition; + int it_status; + __u64 it_lock_handle; + void *it_data; + int it_lock_mode; + int it_int_flags; + void *it_key; + int it_key_size; }; +#define LUSTRE_IT(it) ((struct lustre_intent_data *)((it)->d.fs_data)) + static inline void intent_init(struct lookup_intent *it, int op, int flags) { memset(it, 0, sizeof(*it)); @@ -511,6 +598,78 @@ struct semaphore { int count; }; +struct crypto_tfm; + +struct scatterlist { + struct page *page; + unsigned int offset; + __u32 dma_address; + unsigned int length; +}; + +struct cipher_tfm { + void *cit_iv; + unsigned int cit_ivsize; + __u32 cit_mode; + int (*cit_setkey)(struct crypto_tfm *tfm, + const __u8 *key, unsigned int keylen); + int (*cit_encrypt)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes); + int (*cit_encrypt_iv)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, __u8 *iv); + int (*cit_decrypt)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes); + int (*cit_decrypt_iv)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, __u8 *iv); + void (*cit_xor_block)(__u8 *dst, const __u8 *src); +}; + +struct digest_tfm { + void (*dit_init)(struct crypto_tfm *tfm); + void (*dit_update)(struct crypto_tfm *tfm, + struct scatterlist *sg, unsigned int nsg); + void (*dit_update_kernel)(struct crypto_tfm *tfm, + const void *data, size_t count); + void (*dit_final)(struct crypto_tfm *tfm, __u8 *out); + void (*dit_digest)(struct crypto_tfm *tfm, struct scatterlist *sg, + unsigned int nsg, __u8 *out); + int (*dit_setkey)(struct crypto_tfm *tfm, + const __u8 *key, unsigned int keylen); +#ifdef CONFIG_CRYPTO_HMAC + void *dit_hmac_block; +#endif +}; + +struct compress_tfm { + int (*cot_compress)(struct crypto_tfm *tfm, + const __u8 *src, unsigned int slen, + __u8 *dst, unsigned int *dlen); + int (*cot_decompress)(struct crypto_tfm *tfm, + const __u8 *src, unsigned int slen, + __u8 *dst, unsigned int *dlen); +}; + +struct crypto_tfm { + + __u32 crt_flags; + + union { + struct cipher_tfm cipher; + struct digest_tfm digest; + struct compress_tfm compress; + } crt_u; + + struct crypto_alg *__crt_alg; +}; + /* use the macro's argument to avoid unused warnings */ #define down(a) do { (void)a; } while (0) #define up(a) do { (void)a; } while (0) @@ -520,16 +679,25 @@ struct semaphore { #define up_write(a) do { (void)a; } while (0) #define sema_init(a,b) do { (void)a; } while (0) #define init_rwsem(a) do { (void)a; } while (0) + #define DECLARE_MUTEX(name) \ struct semaphore name = { 1 } + static inline void init_MUTEX (struct semaphore *sem) { sema_init(sem, 1); } +struct rpc_pipe_msg { + struct list_head list; + void *data; + size_t len; + size_t copied; + int error; +}; typedef struct { - struct list_head sleepers; + struct list_head task_list; } wait_queue_head_t; typedef struct { @@ -551,12 +719,15 @@ struct task_struct { struct signal pending; char comm[32]; int pid; + uid_t uid; + gid_t gid; int fsuid; int fsgid; int max_groups; int ngroups; gid_t *groups; __u32 cap_effective; + __u32 pag; struct fs_struct __fs; }; @@ -574,15 +745,15 @@ static inline int capable(int cap) #define set_current_state(foo) do { current->state = foo; } while (0) #define init_waitqueue_entry(q,p) do { (q)->process = p; } while (0) -#define add_wait_queue(q,p) do { list_add(&(q)->sleepers, &(p)->sleeping); } while (0) +#define add_wait_queue(q,p) do { list_add(&(q)->task_list, &(p)->sleeping); } while (0) #define del_wait_queue(p) do { list_del(&(p)->sleeping); } while (0) #define remove_wait_queue(q,p) do { list_del(&(p)->sleeping); } while (0) #define DECLARE_WAIT_QUEUE_HEAD(HEAD) \ wait_queue_head_t HEAD = { \ - .sleepers = LIST_HEAD_INIT(HEAD.sleepers) \ + .task_list = LIST_HEAD_INIT(HEAD.task_list) \ } -#define init_waitqueue_head(l) INIT_LIST_HEAD(&(l)->sleepers) +#define init_waitqueue_head(l) INIT_LIST_HEAD(&(l)->task_list) #define wake_up(l) do { int a; a++; } while (0) #define TASK_INTERRUPTIBLE 0 #define TASK_UNINTERRUPTIBLE 1 @@ -609,6 +780,7 @@ static inline int schedule_timeout(signed long t) } #define lock_kernel() do {} while (0) +#define unlock_kernel() do {} while (0) #define daemonize(l) do {} while (0) #define sigfillset(l) do {} while (0) #define recalc_sigpending(l) do {} while (0) @@ -633,6 +805,14 @@ static inline int schedule_timeout(signed long t) #define time_after(a, b) ((long)(b) - (long)(a) < 0) #define time_before(a, b) time_after(b,a) +static inline unsigned long get_seconds(void) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + return (tv.tv_sec + tv.tv_usec / 1000000); +} + struct timer_list { struct list_head tl_list; void (*function)(unsigned long unused); @@ -666,9 +846,11 @@ static inline void del_timer(struct timer_list *l) typedef struct { volatile int counter; } atomic_t; +#define ATOMIC_INIT(i) { (i) } #define atomic_read(a) ((a)->counter) #define atomic_set(a,b) do {(a)->counter = b; } while (0) #define atomic_dec_and_test(a) ((--((a)->counter)) == 0) +#define atomic_dec_and_lock(a, l) atomic_dec_and_test(a) #define atomic_inc(a) (((a)->counter)++) #define atomic_dec(a) do { (a)->counter--; } while (0) #define atomic_add(b,a) do {(a)->counter += b;} while (0) @@ -716,14 +898,6 @@ static inline int llog_cleanup_commit_master(int force) { return 0; } static inline void portals_run_lbug_upcall(char *file, const char *fn, const int l){} -#define LBUG() \ - do { \ - printf("!!!LBUG at %s:%d\n", __FILE__, __LINE__); \ - sleep(1000000); \ - } while (0) - - - /* completion */ struct completion { unsigned int done; @@ -761,5 +935,4 @@ int liblustre_wait_event(int timeout); #include #include - #endif