Whamcloud - gitweb
foo
[fs/lustre-release.git] / lustre / include / linux / presto.h
1 #ifndef __PRESTO_H_
2 #define __PRESTO_H_ 1
3
4 /* super.c */
5 #if 0
6 extern struct super_block * ext2_read_super (struct super_block * sb, 
7                                              void * data,
8                                              int silent);
9 #endif
10 extern struct file_system_type presto_fs_type;
11 extern int init_presto_fs(void);
12
13 int presto_ispresto(struct inode *);
14
15 struct bottomfs {
16         struct super_operations *bottom_sops;
17
18         struct inode_operations *bottom_dir_iops;
19         struct inode_operations *bottom_file_iops;
20         struct inode_operations *bottom_sym_iops;
21
22         struct file_operations *bottom_dir_fops;
23         struct file_operations *bottom_file_fops;
24         struct file_operations *bottom_sym_fops;
25         kdev_t bottom_dev;
26 };
27 extern struct bottomfs *the_bottom;
28
29 /* inode.c */
30 void presto_read_inode(struct inode *inode);
31 int presto_notify_change(struct dentry *de, struct iattr *iattr);
32
33 /* dcache.c */
34 extern struct dentry_operations presto_dentry_operations;
35
36 /* dir.c */
37 extern struct inode_operations presto_dir_iops;
38 extern struct inode_operations presto_file_iops;
39 extern struct inode_operations presto_sym_iops;
40 extern struct file_operations presto_dir_fops;
41 extern struct file_operations presto_file_fops;
42 extern struct file_operations presto_sym_fops;
43
44 void presto_setup_file_ops(struct inode *);
45 void presto_setup_symlink_ops(struct inode *);
46
47 int presto_lookup(struct inode * dir, struct dentry *dentry);
48 int presto_dir_open(struct inode *inode, struct file *file);
49 int presto_file_open(struct inode *inode, struct file *file);
50 int presto_file_release(struct inode *inode, struct file *file);
51
52 int presto_mkdir(struct inode *inode, struct dentry *, int mode);
53 int presto_create(struct inode *inode, struct dentry *, int mode);
54 int presto_unlink(struct inode *inode, struct dentry *);
55 int presto_rmdir(struct inode *inode, struct dentry *);
56 int presto_symlink(struct inode *, struct dentry *, const char *);
57 int presto_rename(struct inode *old_dir, struct dentry *old_dentry,
58                   struct inode *new_dir, struct dentry *new_dentry);
59
60 int lento_journal(char *page);
61
62 /* intermezzo.c */
63 #define PRESTO_ATTR             0x00000001 /* attributes cached */
64 #define PRESTO_DATA             0x00000002 /* data cached */
65 #define PRESTO_VOLROOT          0x00000004 /* this dentry is root of volume */
66 #define PRESTO_HASPERMIT        0x00000008 /* we have a permit to WB */
67
68 #define EISVOLROOT              0x2001
69
70 int presto_chk(struct dentry *dentry, int flag);
71 void presto_set(struct dentry *dentry, int flag);
72 void presto_permit(struct inode *);
73 int presto_mark_dentry(const char *path, int and_bits, int or_bits);
74
75 /* journal.c */
76
77 #define JOURNAL_PAGE  PAGE_SIZE
78
79
80 #define PRESTO_CREATE  1
81 #define PRESTO_MKDIR   2
82 #define PRESTO_UNLINK  3
83 #define PRESTO_RMDIR   4
84 #define PRESTO_CLOSE   5
85 #define PRESTO_SYMLINK 6
86 #define PRESTO_RENAME  7
87 #define PRESTO_SETATTR 8
88 #define PRESTO_LINK    9
89
90 void journal_create(struct inode *dirinode, struct inode *fileinode, int len, const char *name, int mode);
91 void journal_symlink(struct inode *inode, int len, const char *name, const char *target);
92 void journal_mkdir(struct inode *inode, int len, const char *name, int mode);
93 void journal_unlink(struct inode *inode, int len, const char *name);
94 void journal_rmdir(struct inode *inode, int len, const char *name);
95 void journal_rename(struct inode *old_dir, struct inode *old_file,
96                     struct inode *new_dir, int new_len, const char *new_name);
97 void journal_setattr(struct inode *, int uid, int gid, int fsize, int atime,
98                      int mtime, int ctime, int mode, unsigned int flags,
99                      unsigned int valid);
100 void journal_close(struct inode *inode);
101 void journal_link(struct inode *src, struct inode *tpdiri, 
102                   struct inode *ti, int len, const char *name);
103 void journal_fetch(void);
104
105 /* sysctl.c */
106 void presto_sysctl_init(void);
107 void presto_sysctl_clean(void);
108
109 /* global variables */
110 extern int presto_debug;
111 extern int presto_print_entry;
112
113 /* debugging masks */
114 #define D_SUPER     1   /* print results returned by Venus */ 
115 #define D_INODE     2   /* print entry and exit into procedure */
116 #define D_FILE      4   
117 #define D_CACHE     8   /* cache debugging */
118 #define D_MALLOC    16  /* print malloc, de-alloc information */
119 #define D_JOURNAL   32
120 #define D_UPCALL    64  /* up and downcall debugging */
121 #define D_PSDEV    128  
122 #define D_PIOCTL   256
123 #define D_SPECIAL  512
124 #define D_TIMING  1024
125 #define D_DOWNCALL 2048
126  
127 #if 0
128 #define CDEBUG(mask, format, a...)                                \
129   do {                                                            \
130   if (presto_debug & mask) {                                        \
131     printk("(%s,l. %d): ",  __FUNCTION__, __LINE__);              \
132     printk(format, ## a); }                                       \
133 } while (0) ;                            
134 #else
135 #define CDEBUG(mask, format, a...) ;
136 #endif
137
138 #define ENTRY    \
139     if(presto_print_entry) printk("Process %d entered %s\n",current->pid,__FUNCTION__)
140
141 #define EXIT    \
142     if(presto_print_entry) printk("Process %d leaving %s\n",current->pid,__FUNCTION__)
143
144
145 #define PRESTO_ALLOC(ptr, cast, size)                                       \
146 do {                                                                      \
147     if (size <= 4096) {                                                    \
148         ptr = (cast)kmalloc((unsigned long) size, GFP_KERNEL);            \
149                 CDEBUG(D_MALLOC, "kmalloced: %x at %x.\n", (int) size, (int) ptr);\
150      }  else {                                                             \
151         ptr = (cast)vmalloc((unsigned long) size);                        \
152         CDEBUG(D_MALLOC, "vmalloced: %x at %x.\n", (int) size, (int) ptr);}\
153     if (ptr == 0) {                                                       \
154         printk("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__);  \
155     }                                                                     \
156     memset( ptr, 0, size );                                                   \
157 } while (0)
158
159
160 #define PRESTO_FREE(ptr,size) do {if (size <= 4096) { kfree_s((ptr), (size)); CDEBUG(D_MALLOC, "kfreed: %x at %x.\n", (int) size, (int) ptr); } else { vfree((ptr)); CDEBUG(D_MALLOC, "vfreed: %x at %x.\n", (int) size, (int) ptr);} } while (0)
161
162 #endif