diff options
Diffstat (limited to 'fs/exofs/exofs.h')
-rw-r--r-- | fs/exofs/exofs.h | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/fs/exofs/exofs.h b/fs/exofs/exofs.h index c35fd4623986..8442e353309f 100644 --- a/fs/exofs/exofs.h +++ b/fs/exofs/exofs.h | |||
@@ -55,12 +55,28 @@ | |||
55 | /* u64 has problems with printk this will cast it to unsigned long long */ | 55 | /* u64 has problems with printk this will cast it to unsigned long long */ |
56 | #define _LLU(x) (unsigned long long)(x) | 56 | #define _LLU(x) (unsigned long long)(x) |
57 | 57 | ||
58 | struct exofs_layout { | ||
59 | osd_id s_pid; /* partition ID of file system*/ | ||
60 | |||
61 | /* Our way of looking at the data_map */ | ||
62 | unsigned stripe_unit; | ||
63 | unsigned mirrors_p1; | ||
64 | |||
65 | unsigned group_width; | ||
66 | u64 group_depth; | ||
67 | unsigned group_count; | ||
68 | |||
69 | enum exofs_inode_layout_gen_functions lay_func; | ||
70 | |||
71 | unsigned s_numdevs; /* Num of devices in array */ | ||
72 | struct osd_dev *s_ods[0]; /* Variable length */ | ||
73 | }; | ||
74 | |||
58 | /* | 75 | /* |
59 | * our extension to the in-memory superblock | 76 | * our extension to the in-memory superblock |
60 | */ | 77 | */ |
61 | struct exofs_sb_info { | 78 | struct exofs_sb_info { |
62 | struct exofs_fscb s_fscb; /* Written often, pre-allocate*/ | 79 | struct exofs_fscb s_fscb; /* Written often, pre-allocate*/ |
63 | osd_id s_pid; /* partition ID of file system*/ | ||
64 | int s_timeout; /* timeout for OSD operations */ | 80 | int s_timeout; /* timeout for OSD operations */ |
65 | uint64_t s_nextid; /* highest object ID used */ | 81 | uint64_t s_nextid; /* highest object ID used */ |
66 | uint32_t s_numfiles; /* number of files on fs */ | 82 | uint32_t s_numfiles; /* number of files on fs */ |
@@ -69,22 +85,27 @@ struct exofs_sb_info { | |||
69 | atomic_t s_curr_pending; /* number of pending commands */ | 85 | atomic_t s_curr_pending; /* number of pending commands */ |
70 | uint8_t s_cred[OSD_CAP_LEN]; /* credential for the fscb */ | 86 | uint8_t s_cred[OSD_CAP_LEN]; /* credential for the fscb */ |
71 | 87 | ||
72 | struct pnfs_osd_data_map data_map; /* Default raid to use */ | 88 | struct pnfs_osd_data_map data_map; /* Default raid to use |
73 | unsigned s_numdevs; /* Num of devices in array */ | 89 | * FIXME: Needed ? |
74 | struct osd_dev *s_ods[1]; /* Variable length, minimum 1 */ | 90 | */ |
91 | /* struct exofs_layout dir_layout;*/ /* Default dir layout */ | ||
92 | struct exofs_layout layout; /* Default files layout, | ||
93 | * contains the variable osd_dev | ||
94 | * array. Keep last */ | ||
95 | struct osd_dev *_min_one_dev[1]; /* Place holder for one dev */ | ||
75 | }; | 96 | }; |
76 | 97 | ||
77 | /* | 98 | /* |
78 | * our extension to the in-memory inode | 99 | * our extension to the in-memory inode |
79 | */ | 100 | */ |
80 | struct exofs_i_info { | 101 | struct exofs_i_info { |
102 | struct inode vfs_inode; /* normal in-memory inode */ | ||
103 | wait_queue_head_t i_wq; /* wait queue for inode */ | ||
81 | unsigned long i_flags; /* various atomic flags */ | 104 | unsigned long i_flags; /* various atomic flags */ |
82 | uint32_t i_data[EXOFS_IDATA];/*short symlink names and device #s*/ | 105 | uint32_t i_data[EXOFS_IDATA];/*short symlink names and device #s*/ |
83 | uint32_t i_dir_start_lookup; /* which page to start lookup */ | 106 | uint32_t i_dir_start_lookup; /* which page to start lookup */ |
84 | wait_queue_head_t i_wq; /* wait queue for inode */ | ||
85 | uint64_t i_commit_size; /* the object's written length */ | 107 | uint64_t i_commit_size; /* the object's written length */ |
86 | uint8_t i_cred[OSD_CAP_LEN];/* all-powerful credential */ | 108 | uint8_t i_cred[OSD_CAP_LEN];/* all-powerful credential */ |
87 | struct inode vfs_inode; /* normal in-memory inode */ | ||
88 | }; | 109 | }; |
89 | 110 | ||
90 | static inline osd_id exofs_oi_objno(struct exofs_i_info *oi) | 111 | static inline osd_id exofs_oi_objno(struct exofs_i_info *oi) |
@@ -101,7 +122,7 @@ struct exofs_io_state { | |||
101 | void *private; | 122 | void *private; |
102 | exofs_io_done_fn done; | 123 | exofs_io_done_fn done; |
103 | 124 | ||
104 | struct exofs_sb_info *sbi; | 125 | struct exofs_layout *layout; |
105 | struct osd_obj_id obj; | 126 | struct osd_obj_id obj; |
106 | u8 *cred; | 127 | u8 *cred; |
107 | 128 | ||
@@ -109,7 +130,11 @@ struct exofs_io_state { | |||
109 | loff_t offset; | 130 | loff_t offset; |
110 | unsigned long length; | 131 | unsigned long length; |
111 | void *kern_buff; | 132 | void *kern_buff; |
112 | struct bio *bio; | 133 | |
134 | struct page **pages; | ||
135 | unsigned nr_pages; | ||
136 | unsigned pgbase; | ||
137 | unsigned pages_consumed; | ||
113 | 138 | ||
114 | /* Attributes */ | 139 | /* Attributes */ |
115 | unsigned in_attr_len; | 140 | unsigned in_attr_len; |
@@ -122,6 +147,9 @@ struct exofs_io_state { | |||
122 | struct exofs_per_dev_state { | 147 | struct exofs_per_dev_state { |
123 | struct osd_request *or; | 148 | struct osd_request *or; |
124 | struct bio *bio; | 149 | struct bio *bio; |
150 | loff_t offset; | ||
151 | unsigned length; | ||
152 | unsigned dev; | ||
125 | } per_dev[]; | 153 | } per_dev[]; |
126 | }; | 154 | }; |
127 | 155 | ||
@@ -175,6 +203,12 @@ static inline struct exofs_i_info *exofs_i(struct inode *inode) | |||
175 | } | 203 | } |
176 | 204 | ||
177 | /* | 205 | /* |
206 | * Given a layout, object_number and stripe_index return the associated global | ||
207 | * dev_index | ||
208 | */ | ||
209 | unsigned exofs_layout_od_id(struct exofs_layout *layout, | ||
210 | osd_id obj_no, unsigned layout_index); | ||
211 | /* | ||
178 | * Maximum count of links to a file | 212 | * Maximum count of links to a file |
179 | */ | 213 | */ |
180 | #define EXOFS_LINK_MAX 32000 | 214 | #define EXOFS_LINK_MAX 32000 |
@@ -189,7 +223,8 @@ void exofs_make_credential(u8 cred_a[OSD_CAP_LEN], | |||
189 | int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj, | 223 | int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj, |
190 | u64 offset, void *p, unsigned length); | 224 | u64 offset, void *p, unsigned length); |
191 | 225 | ||
192 | int exofs_get_io_state(struct exofs_sb_info *sbi, struct exofs_io_state** ios); | 226 | int exofs_get_io_state(struct exofs_layout *layout, |
227 | struct exofs_io_state **ios); | ||
193 | void exofs_put_io_state(struct exofs_io_state *ios); | 228 | void exofs_put_io_state(struct exofs_io_state *ios); |
194 | 229 | ||
195 | int exofs_check_io(struct exofs_io_state *ios, u64 *resid); | 230 | int exofs_check_io(struct exofs_io_state *ios, u64 *resid); |
@@ -226,7 +261,7 @@ int exofs_write_begin(struct file *file, struct address_space *mapping, | |||
226 | struct page **pagep, void **fsdata); | 261 | struct page **pagep, void **fsdata); |
227 | extern struct inode *exofs_iget(struct super_block *, unsigned long); | 262 | extern struct inode *exofs_iget(struct super_block *, unsigned long); |
228 | struct inode *exofs_new_inode(struct inode *, int); | 263 | struct inode *exofs_new_inode(struct inode *, int); |
229 | extern int exofs_write_inode(struct inode *, int); | 264 | extern int exofs_write_inode(struct inode *, struct writeback_control *wbc); |
230 | extern void exofs_delete_inode(struct inode *); | 265 | extern void exofs_delete_inode(struct inode *); |
231 | 266 | ||
232 | /* dir.c: */ | 267 | /* dir.c: */ |