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: */ |
