aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nilfs2_fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/nilfs2_fs.h')
-rw-r--r--include/linux/nilfs2_fs.h78
1 files changed, 58 insertions, 20 deletions
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
index 640702e97457..f5487b6f91ed 100644
--- a/include/linux/nilfs2_fs.h
+++ b/include/linux/nilfs2_fs.h
@@ -160,7 +160,7 @@ struct nilfs_super_root {
160 * struct nilfs_super_block - structure of super block on disk 160 * struct nilfs_super_block - structure of super block on disk
161 */ 161 */
162struct nilfs_super_block { 162struct nilfs_super_block {
163 __le32 s_rev_level; /* Revision level */ 163/*00*/ __le32 s_rev_level; /* Revision level */
164 __le16 s_minor_rev_level; /* minor revision level */ 164 __le16 s_minor_rev_level; /* minor revision level */
165 __le16 s_magic; /* Magic signature */ 165 __le16 s_magic; /* Magic signature */
166 166
@@ -169,51 +169,53 @@ struct nilfs_super_block {
169 is excluded. */ 169 is excluded. */
170 __le16 s_flags; /* flags */ 170 __le16 s_flags; /* flags */
171 __le32 s_crc_seed; /* Seed value of CRC calculation */ 171 __le32 s_crc_seed; /* Seed value of CRC calculation */
172 __le32 s_sum; /* Check sum of super block */ 172/*10*/ __le32 s_sum; /* Check sum of super block */
173 173
174 __le32 s_log_block_size; /* Block size represented as follows 174 __le32 s_log_block_size; /* Block size represented as follows
175 blocksize = 175 blocksize =
176 1 << (s_log_block_size + 10) */ 176 1 << (s_log_block_size + 10) */
177 __le64 s_nsegments; /* Number of segments in filesystem */ 177 __le64 s_nsegments; /* Number of segments in filesystem */
178 __le64 s_dev_size; /* block device size in bytes */ 178/*20*/ __le64 s_dev_size; /* block device size in bytes */
179 __le64 s_first_data_block; /* 1st seg disk block number */ 179 __le64 s_first_data_block; /* 1st seg disk block number */
180 __le32 s_blocks_per_segment; /* number of blocks per full segment */ 180/*30*/ __le32 s_blocks_per_segment; /* number of blocks per full segment */
181 __le32 s_r_segments_percentage; /* Reserved segments percentage */ 181 __le32 s_r_segments_percentage; /* Reserved segments percentage */
182 182
183 __le64 s_last_cno; /* Last checkpoint number */ 183 __le64 s_last_cno; /* Last checkpoint number */
184 __le64 s_last_pseg; /* disk block addr pseg written last */ 184/*40*/ __le64 s_last_pseg; /* disk block addr pseg written last */
185 __le64 s_last_seq; /* seq. number of seg written last */ 185 __le64 s_last_seq; /* seq. number of seg written last */
186 __le64 s_free_blocks_count; /* Free blocks count */ 186/*50*/ __le64 s_free_blocks_count; /* Free blocks count */
187 187
188 __le64 s_ctime; /* Creation time (execution time of 188 __le64 s_ctime; /* Creation time (execution time of
189 newfs) */ 189 newfs) */
190 __le64 s_mtime; /* Mount time */ 190/*60*/ __le64 s_mtime; /* Mount time */
191 __le64 s_wtime; /* Write time */ 191 __le64 s_wtime; /* Write time */
192 __le16 s_mnt_count; /* Mount count */ 192/*70*/ __le16 s_mnt_count; /* Mount count */
193 __le16 s_max_mnt_count; /* Maximal mount count */ 193 __le16 s_max_mnt_count; /* Maximal mount count */
194 __le16 s_state; /* File system state */ 194 __le16 s_state; /* File system state */
195 __le16 s_errors; /* Behaviour when detecting errors */ 195 __le16 s_errors; /* Behaviour when detecting errors */
196 __le64 s_lastcheck; /* time of last check */ 196 __le64 s_lastcheck; /* time of last check */
197 197
198 __le32 s_checkinterval; /* max. time between checks */ 198/*80*/ __le32 s_checkinterval; /* max. time between checks */
199 __le32 s_creator_os; /* OS */ 199 __le32 s_creator_os; /* OS */
200 __le16 s_def_resuid; /* Default uid for reserved blocks */ 200 __le16 s_def_resuid; /* Default uid for reserved blocks */
201 __le16 s_def_resgid; /* Default gid for reserved blocks */ 201 __le16 s_def_resgid; /* Default gid for reserved blocks */
202 __le32 s_first_ino; /* First non-reserved inode */ 202 __le32 s_first_ino; /* First non-reserved inode */
203 203
204 __le16 s_inode_size; /* Size of an inode */ 204/*90*/ __le16 s_inode_size; /* Size of an inode */
205 __le16 s_dat_entry_size; /* Size of a dat entry */ 205 __le16 s_dat_entry_size; /* Size of a dat entry */
206 __le16 s_checkpoint_size; /* Size of a checkpoint */ 206 __le16 s_checkpoint_size; /* Size of a checkpoint */
207 __le16 s_segment_usage_size; /* Size of a segment usage */ 207 __le16 s_segment_usage_size; /* Size of a segment usage */
208 208
209 __u8 s_uuid[16]; /* 128-bit uuid for volume */ 209/*98*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */
210 char s_volume_name[16]; /* volume name */ 210/*A8*/ char s_volume_name[80]; /* volume name */
211 char s_last_mounted[64]; /* directory where last mounted */
212 211
213 __le32 s_c_interval; /* Commit interval of segment */ 212/*F8*/ __le32 s_c_interval; /* Commit interval of segment */
214 __le32 s_c_block_max; /* Threshold of data amount for 213 __le32 s_c_block_max; /* Threshold of data amount for
215 the segment construction */ 214 the segment construction */
216 __u32 s_reserved[192]; /* padding to the end of the block */ 215/*100*/ __le64 s_feature_compat; /* Compatible feature set */
216 __le64 s_feature_compat_ro; /* Read-only compatible feature set */
217 __le64 s_feature_incompat; /* Incompatible feature set */
218 __u32 s_reserved[186]; /* padding to the end of the block */
217}; 219};
218 220
219/* 221/*
@@ -229,6 +231,16 @@ struct nilfs_super_block {
229#define NILFS_MINOR_REV 0 /* minor revision */ 231#define NILFS_MINOR_REV 0 /* minor revision */
230 232
231/* 233/*
234 * Feature set definitions
235 *
236 * If there is a bit set in the incompatible feature set that the kernel
237 * doesn't know about, it should refuse to mount the filesystem.
238 */
239#define NILFS_FEATURE_COMPAT_SUPP 0ULL
240#define NILFS_FEATURE_COMPAT_RO_SUPP 0ULL
241#define NILFS_FEATURE_INCOMPAT_SUPP 0ULL
242
243/*
232 * Bytes count of super_block for CRC-calculation 244 * Bytes count of super_block for CRC-calculation
233 */ 245 */
234#define NILFS_SB_BYTES \ 246#define NILFS_SB_BYTES \
@@ -275,6 +287,12 @@ struct nilfs_super_block {
275#define NILFS_NAME_LEN 255 287#define NILFS_NAME_LEN 255
276 288
277/* 289/*
290 * Block size limitations
291 */
292#define NILFS_MIN_BLOCK_SIZE 1024
293#define NILFS_MAX_BLOCK_SIZE 65536
294
295/*
278 * The new version of the directory entry. Since V0 structures are 296 * The new version of the directory entry. Since V0 structures are
279 * stored in intel byte order, and the name_len field could never be 297 * stored in intel byte order, and the name_len field could never be
280 * bigger than 255 chars, it's safe to reclaim the extra byte for the 298 * bigger than 255 chars, it's safe to reclaim the extra byte for the
@@ -314,7 +332,25 @@ enum {
314#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1) 332#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1)
315#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \ 333#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \
316 ~NILFS_DIR_ROUND) 334 ~NILFS_DIR_ROUND)
335#define NILFS_MAX_REC_LEN ((1<<16)-1)
317 336
337static inline unsigned nilfs_rec_len_from_disk(__le16 dlen)
338{
339 unsigned len = le16_to_cpu(dlen);
340
341 if (len == NILFS_MAX_REC_LEN)
342 return 1 << 16;
343 return len;
344}
345
346static inline __le16 nilfs_rec_len_to_disk(unsigned len)
347{
348 if (len == (1 << 16))
349 return cpu_to_le16(NILFS_MAX_REC_LEN);
350 else if (len > (1 << 16))
351 BUG();
352 return cpu_to_le16(len);
353}
318 354
319/** 355/**
320 * struct nilfs_finfo - file information 356 * struct nilfs_finfo - file information
@@ -377,6 +413,7 @@ union nilfs_binfo {
377 * @ss_nfinfo: number of finfo structures 413 * @ss_nfinfo: number of finfo structures
378 * @ss_sumbytes: total size of segment summary in bytes 414 * @ss_sumbytes: total size of segment summary in bytes
379 * @ss_pad: padding 415 * @ss_pad: padding
416 * @ss_cno: checkpoint number
380 */ 417 */
381struct nilfs_segment_summary { 418struct nilfs_segment_summary {
382 __le32 ss_datasum; 419 __le32 ss_datasum;
@@ -391,6 +428,7 @@ struct nilfs_segment_summary {
391 __le32 ss_nfinfo; 428 __le32 ss_nfinfo;
392 __le32 ss_sumbytes; 429 __le32 ss_sumbytes;
393 __le32 ss_pad; 430 __le32 ss_pad;
431 __le64 ss_cno;
394 /* array of finfo structures */ 432 /* array of finfo structures */
395}; 433};
396 434
@@ -437,10 +475,10 @@ struct nilfs_palloc_group_desc {
437 475
438/** 476/**
439 * struct nilfs_dat_entry - disk address translation entry 477 * struct nilfs_dat_entry - disk address translation entry
440 * @dt_blocknr: block number 478 * @de_blocknr: block number
441 * @dt_start: start checkpoint number 479 * @de_start: start checkpoint number
442 * @dt_end: end checkpoint number 480 * @de_end: end checkpoint number
443 * @dt_rsv: reserved for future use 481 * @de_rsv: reserved for future use
444 */ 482 */
445struct nilfs_dat_entry { 483struct nilfs_dat_entry {
446 __le64 de_blocknr; 484 __le64 de_blocknr;