1 /* internal.h: internal AFS stuff 2 * 3 * Copyright (C) 2002 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11 12 #ifndef AFS_INTERNAL_H 13 #define AFS_INTERNAL_H 14 15 #include <linux/compiler.h> 16 #include <linux/kernel.h> 17 #include <linux/fs.h> 18 #include <linux/pagemap.h> 19 20 /* 21 * debug tracing 22 */ 23 #define kenter(FMT, a...) printk("==> %s("FMT")\n",__FUNCTION__ , ## a) 24 #define kleave(FMT, a...) printk("<== %s()"FMT"\n",__FUNCTION__ , ## a) 25 #define kdebug(FMT, a...) printk(FMT"\n" , ## a) 26 #define kproto(FMT, a...) printk("### "FMT"\n" , ## a) 27 #define knet(FMT, a...) printk(FMT"\n" , ## a) 28 29 #ifdef __KDEBUG 30 #define _enter(FMT, a...) kenter(FMT , ## a) 31 #define _leave(FMT, a...) kleave(FMT , ## a) 32 #define _debug(FMT, a...) kdebug(FMT , ## a) 33 #define _proto(FMT, a...) kproto(FMT , ## a) 34 #define _net(FMT, a...) knet(FMT , ## a) 35 #else 36 #define _enter(FMT, a...) do { } while(0) 37 #define _leave(FMT, a...) do { } while(0) 38 #define _debug(FMT, a...) do { } while(0) 39 #define _proto(FMT, a...) do { } while(0) 40 #define _net(FMT, a...) do { } while(0) 41 #endif 42 43 static inline void afs_discard_my_signals(void) 44 { 45 while (signal_pending(current)) { 46 siginfo_t sinfo; 47 48 spin_lock_irq(¤t->sighand->siglock); 49 dequeue_signal(current,¤t->blocked, &sinfo); 50 spin_unlock_irq(¤t->sighand->siglock); 51 } 52 } 53 54 /* 55 * cell.c 56 */ 57 extern struct rw_semaphore afs_proc_cells_sem; 58 extern struct list_head afs_proc_cells; 59 #ifdef AFS_CACHING_SUPPORT 60 extern struct cachefs_index_def afs_cache_cell_index_def; 61 #endif 62 63 /* 64 * dir.c 65 */ 66 extern struct inode_operations afs_dir_inode_operations; 67 extern struct file_operations afs_dir_file_operations; 68 69 /* 70 * file.c 71 */ 72 extern struct address_space_operations afs_fs_aops; 73 extern struct inode_operations afs_file_inode_operations; 74 extern struct file_operations afs_file_file_operations; 75 76 #ifdef AFS_CACHING_SUPPORT 77 extern int afs_cache_get_page_cookie(struct page *page, 78 struct cachefs_page **_page_cookie); 79 #endif 80 81 /* 82 * inode.c 83 */ 84 extern int afs_iget(struct super_block *sb, struct afs_fid *fid, 85 struct inode **_inode); 86 extern int afs_inode_getattr(struct vfsmount *mnt, struct dentry *dentry, 87 struct kstat *stat); 88 extern void afs_clear_inode(struct inode *inode); 89 90 /* 91 * key_afs.c 92 */ 93 #ifdef CONFIG_KEYS 94 extern int afs_key_register(void); 95 extern void afs_key_unregister(void); 96 #endif 97 98 /* 99 * main.c 100 */ 101 #ifdef AFS_CACHING_SUPPORT 102 extern struct cachefs_netfs afs_cache_netfs; 103 #endif 104 105 /* 106 * mntpt.c 107 */ 108 extern struct inode_operations afs_mntpt_inode_operations; 109 extern struct file_operations afs_mntpt_file_operations; 110 extern struct afs_timer afs_mntpt_expiry_timer; 111 extern struct afs_timer_ops afs_mntpt_expiry_timer_ops; 112 extern unsigned long afs_mntpt_expiry_timeout; 113 114 extern int afs_mntpt_check_symlink(struct afs_vnode *vnode); 115 116 /* 117 * super.c 118 */ 119 extern int afs_fs_init(void); 120 extern void afs_fs_exit(void); 121 122 #define AFS_CB_HASH_COUNT (PAGE_SIZE / sizeof(struct list_head)) 123 124 extern struct list_head afs_cb_hash_tbl[]; 125 extern spinlock_t afs_cb_hash_lock; 126 127 #define afs_cb_hash(SRV,FID) \ 128 afs_cb_hash_tbl[((unsigned long)(SRV) + \ 129 (FID)->vid + (FID)->vnode + (FID)->unique) % \ 130 AFS_CB_HASH_COUNT] 131 132 /* 133 * proc.c 134 */ 135 extern int afs_proc_init(void); 136 extern void afs_proc_cleanup(void); 137 extern int afs_proc_cell_setup(struct afs_cell *cell); 138 extern void afs_proc_cell_remove(struct afs_cell *cell); 139 140 #endif /* AFS_INTERNAL_H */ 141