Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
[fs/lustre-release.git] / lustre / liblustre / llite_lib.h
1 #ifndef __LLU_H_
2 #define __LLU_H_
3
4 #include <liblustre.h>
5 #include <linux/obd.h>
6 #include <linux/obd_class.h>
7 #include <portals/procbridge.h>
8 #include <linux/lustre_lite.h>
9
10 #include <sys/types.h>
11 #include <sys/stat.h>
12
13 struct ll_file_data {
14         struct obd_client_handle fd_mds_och;
15         struct obd_client_handle fd_ost_och;
16         __u32 fd_flags;
17 };
18
19 struct llu_sb_info
20 {
21         struct obd_uuid         ll_sb_uuid;
22         struct lustre_handle    ll_mdc_conn;
23         struct lustre_handle    ll_osc_conn;
24         obd_id                  ll_rootino;
25         int                     ll_flags;
26         struct list_head        ll_conn_chain;
27 };
28
29 struct llu_inode_info {
30         struct llu_sb_info      *lli_sbi;
31         struct ll_fid           lli_fid;
32         struct lov_stripe_md    *lli_smd;
33         char                    *lli_symlink_name;
34         /*struct semaphore      lli_open_sem;*/
35         unsigned long           lli_flags;
36         struct list_head        lli_read_extents;
37
38         /* in libsysio we have no chance to store data in file,
39          * so place it here */
40         struct ll_file_data     *lli_file_data;
41
42         /* stat FIXME not 64 bit clean */
43         dev_t                   lli_st_dev;
44         ino_t                   lli_st_ino;
45         mode_t                  lli_st_mode;
46         nlink_t                 lli_st_nlink;
47         uid_t                   lli_st_uid;
48         gid_t                   lli_st_gid;
49         dev_t                   lli_st_rdev;
50         loff_t                  lli_st_size;
51         unsigned int            lli_st_blksize;
52         unsigned int            lli_st_blocks;
53         time_t                  lli_st_atime;
54         time_t                  lli_st_mtime;
55         time_t                  lli_st_ctime;
56
57         /* not for stat, change it later */
58         int                     lli_st_flags;
59         unsigned long           lli_st_generation;
60 };
61
62 static inline struct llu_sb_info *llu_fs2sbi(struct filesys *fs)
63 {
64         return (struct llu_sb_info*)(fs->fs_private);
65 }
66
67 static inline struct llu_inode_info *llu_i2info(struct inode *inode)
68 {
69         return (struct llu_inode_info*)(inode->i_private);
70 }
71
72 static inline struct llu_sb_info *llu_i2sbi(struct inode *inode)
73 {
74         return llu_i2info(inode)->lli_sbi;
75 }
76
77 static inline struct client_obd *sbi2mdc(struct llu_sb_info *sbi)
78 {
79         struct obd_device *obd = class_conn2obd(&sbi->ll_mdc_conn);
80         if (obd == NULL)
81                 LBUG();
82         return &obd->u.cli;
83 }
84
85 static inline struct lustre_handle *llu_i2obdconn(struct inode *inode)
86 {
87         return &(llu_i2info(inode)->lli_sbi->ll_osc_conn);
88 }
89
90
91 struct mount_option_s
92 {
93         char *mdc_uuid;
94         char *osc_uuid;
95 };
96
97 /* llite_lib.c */
98 void generate_random_uuid(unsigned char uuid_out[16]);
99
100 extern struct mount_option_s mount_option;
101
102 /* super.c */
103 void llu_update_inode(struct inode *inode, struct mds_body *body,
104                       struct lov_stripe_md *lmm);
105 void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid);
106 void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid);
107 struct inode* llu_new_inode(struct filesys *fs, ino_t ino, mode_t mode);
108
109 extern struct fssw_ops llu_fssw_ops;
110
111 /* file.c */
112 void llu_prepare_mdc_op_data(struct mdc_op_data *data,
113                              struct inode *i1,
114                              struct inode *i2,
115                              const char *name,
116                              int namelen,
117                              int mode);
118 int llu_create(struct inode *dir, struct pnode_base *pnode, int mode);
119 int llu_iop_open(struct pnode *pnode, int flags, mode_t mode);
120 int llu_iop_close(struct inode *inode);
121 int llu_iop_ipreadv(struct inode *ino,
122                     struct io_arguments *ioargs,
123                     struct ioctx **ioctxp);
124 int llu_iop_ipwritev(struct inode *ino,
125                      struct io_arguments *ioargs,
126                      struct ioctx **ioctxp);
127
128 /* rw.c */
129 int llu_iop_iodone(struct ioctx *ioctxp __IS_UNUSED);
130 ssize_t llu_file_write(struct inode *inode, const struct iovec *iovec,
131                        size_t iovlen, loff_t pos);
132 ssize_t llu_file_read(struct inode *inode, const struct iovec *iovec,
133                        size_t iovlen, loff_t pos);
134
135 #endif