Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
nilfs2_fs.h
Go to the documentation of this file.
1
/*
2
* nilfs2_fs.h - NILFS2 on-disk structures and common declarations.
3
*
4
* Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU Lesser General Public License as published
8
* by the Free Software Foundation; either version 2.1 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
*
20
* Written by Koji Sato <
[email protected]
>
21
* Ryusuke Konishi <
[email protected]
>
22
*/
23
/*
24
* linux/include/linux/ext2_fs.h
25
*
26
* Copyright (C) 1992, 1993, 1994, 1995
27
* Remy Card (
[email protected]
)
28
* Laboratoire MASI - Institut Blaise Pascal
29
* Universite Pierre et Marie Curie (Paris VI)
30
*
31
* from
32
*
33
* linux/include/linux/minix_fs.h
34
*
35
* Copyright (C) 1991, 1992 Linus Torvalds
36
*/
37
38
#ifndef _LINUX_NILFS_FS_H
39
#define _LINUX_NILFS_FS_H
40
41
#include <linux/types.h>
42
#include <
linux/ioctl.h
>
43
#include <linux/magic.h>
44
#include <
linux/bug.h
>
45
46
47
#define NILFS_INODE_BMAP_SIZE 7
48
66
struct
nilfs_inode
{
67
__le64
i_blocks
;
68
__le64
i_size
;
69
__le64
i_ctime
;
70
__le64
i_mtime
;
71
__le32
i_ctime_nsec
;
72
__le32
i_mtime_nsec
;
73
__le32
i_uid
;
74
__le32
i_gid
;
75
__le16
i_mode
;
76
__le16
i_links_count
;
77
__le32
i_flags
;
78
__le64
i_bmap
[
NILFS_INODE_BMAP_SIZE
];
79
#define i_device_code i_bmap[0]
80
__le64
i_xattr
;
81
__le32
i_generation
;
82
__le32
i_pad
;
83
};
84
95
struct
nilfs_super_root
{
96
__le32
sr_sum
;
97
__le16
sr_bytes
;
98
__le16
sr_flags
;
99
__le64
sr_nongc_ctime
;
100
struct
nilfs_inode
sr_dat
;
101
struct
nilfs_inode
sr_cpfile
;
102
struct
nilfs_inode
sr_sufile
;
103
};
104
105
#define NILFS_SR_MDT_OFFSET(inode_size, i) \
106
((unsigned long)&((struct nilfs_super_root *)0)->sr_dat + \
107
(inode_size) * (i))
108
#define NILFS_SR_DAT_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 0)
109
#define NILFS_SR_CPFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 1)
110
#define NILFS_SR_SUFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 2)
111
#define NILFS_SR_BYTES(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 3)
112
113
/*
114
* Maximal mount counts
115
*/
116
#define NILFS_DFL_MAX_MNT_COUNT 50
/* 50 mounts */
117
118
/*
119
* File system states (sbp->s_state, nilfs->ns_mount_state)
120
*/
121
#define NILFS_VALID_FS 0x0001
/* Unmounted cleanly */
122
#define NILFS_ERROR_FS 0x0002
/* Errors detected */
123
#define NILFS_RESIZE_FS 0x0004
/* Resize required */
124
125
/*
126
* Mount flags (sbi->s_mount_opt)
127
*/
128
#define NILFS_MOUNT_ERROR_MODE 0x0070
/* Error mode mask */
129
#define NILFS_MOUNT_ERRORS_CONT 0x0010
/* Continue on errors */
130
#define NILFS_MOUNT_ERRORS_RO 0x0020
/* Remount fs ro on errors */
131
#define NILFS_MOUNT_ERRORS_PANIC 0x0040
/* Panic on errors */
132
#define NILFS_MOUNT_BARRIER 0x1000
/* Use block barriers */
133
#define NILFS_MOUNT_STRICT_ORDER 0x2000
/* Apply strict in-order
134
semantics also for data */
135
#define NILFS_MOUNT_NORECOVERY 0x4000
/* Disable write access during
136
mount-time recovery */
137
#define NILFS_MOUNT_DISCARD 0x8000
/* Issue DISCARD requests */
138
139
143
struct
nilfs_super_block
{
144
/*00*/
__le32
s_rev_level
;
/* Revision level */
145
__le16
s_minor_rev_level
;
/* minor revision level */
146
__le16
s_magic
;
/* Magic signature */
147
148
__le16
s_bytes
;
/* Bytes count of CRC calculation
149
for this structure. s_reserved
150
is excluded. */
151
__le16
s_flags
;
/* flags */
152
__le32
s_crc_seed
;
/* Seed value of CRC calculation */
153
/*10*/
__le32
s_sum
;
/* Check sum of super block */
154
155
__le32
s_log_block_size
;
/* Block size represented as follows
156
blocksize =
157
1 << (s_log_block_size + 10) */
158
__le64
s_nsegments
;
/* Number of segments in filesystem */
159
/*20*/
__le64
s_dev_size
;
/* block device size in bytes */
160
__le64
s_first_data_block
;
/* 1st seg disk block number */
161
/*30*/
__le32
s_blocks_per_segment
;
/* number of blocks per full segment */
162
__le32
s_r_segments_percentage
;
/* Reserved segments percentage */
163
164
__le64
s_last_cno
;
/* Last checkpoint number */
165
/*40*/
__le64
s_last_pseg
;
/* disk block addr pseg written last */
166
__le64
s_last_seq
;
/* seq. number of seg written last */
167
/*50*/
__le64
s_free_blocks_count
;
/* Free blocks count */
168
169
__le64
s_ctime
;
/* Creation time (execution time of
170
newfs) */
171
/*60*/
__le64
s_mtime
;
/* Mount time */
172
__le64
s_wtime
;
/* Write time */
173
/*70*/
__le16
s_mnt_count
;
/* Mount count */
174
__le16
s_max_mnt_count
;
/* Maximal mount count */
175
__le16
s_state
;
/* File system state */
176
__le16
s_errors
;
/* Behaviour when detecting errors */
177
__le64
s_lastcheck
;
/* time of last check */
178
179
/*80*/
__le32
s_checkinterval
;
/* max. time between checks */
180
__le32
s_creator_os
;
/* OS */
181
__le16
s_def_resuid
;
/* Default uid for reserved blocks */
182
__le16
s_def_resgid
;
/* Default gid for reserved blocks */
183
__le32
s_first_ino
;
/* First non-reserved inode */
184
185
/*90*/
__le16
s_inode_size
;
/* Size of an inode */
186
__le16
s_dat_entry_size
;
/* Size of a dat entry */
187
__le16
s_checkpoint_size
;
/* Size of a checkpoint */
188
__le16
s_segment_usage_size
;
/* Size of a segment usage */
189
190
/*98*/
__u8
s_uuid
[16];
/* 128-bit uuid for volume */
191
/*A8*/
char
s_volume_name
[80];
/* volume name */
192
193
/*F8*/
__le32
s_c_interval
;
/* Commit interval of segment */
194
__le32
s_c_block_max
;
/* Threshold of data amount for
195
the segment construction */
196
/*100*/
__le64
s_feature_compat
;
/* Compatible feature set */
197
__le64
s_feature_compat_ro
;
/* Read-only compatible feature set */
198
__le64
s_feature_incompat
;
/* Incompatible feature set */
199
__u32
s_reserved
[186];
/* padding to the end of the block */
200
};
201
202
/*
203
* Codes for operating systems
204
*/
205
#define NILFS_OS_LINUX 0
206
/* Codes from 1 to 4 are reserved to keep compatibility with ext2 creator-OS */
207
208
/*
209
* Revision levels
210
*/
211
#define NILFS_CURRENT_REV 2
/* current major revision */
212
#define NILFS_MINOR_REV 0
/* minor revision */
213
#define NILFS_MIN_SUPP_REV 2
/* minimum supported revision */
214
215
/*
216
* Feature set definitions
217
*
218
* If there is a bit set in the incompatible feature set that the kernel
219
* doesn't know about, it should refuse to mount the filesystem.
220
*/
221
#define NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT 0x00000001ULL
222
223
#define NILFS_FEATURE_COMPAT_SUPP 0ULL
224
#define NILFS_FEATURE_COMPAT_RO_SUPP NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT
225
#define NILFS_FEATURE_INCOMPAT_SUPP 0ULL
226
227
/*
228
* Bytes count of super_block for CRC-calculation
229
*/
230
#define NILFS_SB_BYTES \
231
((long)&((struct nilfs_super_block *)0)->s_reserved)
232
233
/*
234
* Special inode number
235
*/
236
#define NILFS_ROOT_INO 2
/* Root file inode */
237
#define NILFS_DAT_INO 3
/* DAT file */
238
#define NILFS_CPFILE_INO 4
/* checkpoint file */
239
#define NILFS_SUFILE_INO 5
/* segment usage file */
240
#define NILFS_IFILE_INO 6
/* ifile */
241
#define NILFS_ATIME_INO 7
/* Atime file (reserved) */
242
#define NILFS_XATTR_INO 8
/* Xattribute file (reserved) */
243
#define NILFS_SKETCH_INO 10
/* Sketch file */
244
#define NILFS_USER_INO 11
/* Fisrt user's file inode number */
245
246
#define NILFS_SB_OFFSET_BYTES 1024
/* byte offset of nilfs superblock */
247
248
#define NILFS_SEG_MIN_BLOCKS 16
/* Minimum number of blocks in
249
a full segment */
250
#define NILFS_PSEG_MIN_BLOCKS 2
/* Minimum number of blocks in
251
a partial segment */
252
#define NILFS_MIN_NRSVSEGS 8
/* Minimum number of reserved
253
segments */
254
255
/*
256
* We call DAT, cpfile, and sufile root metadata files. Inodes of
257
* these files are written in super root block instead of ifile, and
258
* garbage collector doesn't keep any past versions of these files.
259
*/
260
#define NILFS_ROOT_METADATA_FILE(ino) \
261
((ino) >= NILFS_DAT_INO && (ino) <= NILFS_SUFILE_INO)
262
263
/*
264
* bytes offset of secondary super block
265
*/
266
#define NILFS_SB2_OFFSET_BYTES(devsize) ((((devsize) >> 12) - 1) << 12)
267
268
/*
269
* Maximal count of links to a file
270
*/
271
#define NILFS_LINK_MAX 32000
272
273
/*
274
* Structure of a directory entry
275
* (Same as ext2)
276
*/
277
278
#define NILFS_NAME_LEN 255
279
280
/*
281
* Block size limitations
282
*/
283
#define NILFS_MIN_BLOCK_SIZE 1024
284
#define NILFS_MAX_BLOCK_SIZE 65536
285
286
/*
287
* The new version of the directory entry. Since V0 structures are
288
* stored in intel byte order, and the name_len field could never be
289
* bigger than 255 chars, it's safe to reclaim the extra byte for the
290
* file_type field.
291
*/
292
struct
nilfs_dir_entry
{
293
__le64
inode
;
/* Inode number */
294
__le16
rec_len
;
/* Directory entry length */
295
__u8
name_len
;
/* Name length */
296
__u8
file_type
;
/* Dir entry type (file, dir, etc) */
297
char
name
[
NILFS_NAME_LEN
];
/* File name */
298
char
pad
;
299
};
300
301
/*
302
* NILFS directory file types. Only the low 3 bits are used. The
303
* other bits are reserved for now.
304
*/
305
enum
{
306
NILFS_FT_UNKNOWN
,
307
NILFS_FT_REG_FILE
,
308
NILFS_FT_DIR
,
309
NILFS_FT_CHRDEV
,
310
NILFS_FT_BLKDEV
,
311
NILFS_FT_FIFO
,
312
NILFS_FT_SOCK
,
313
NILFS_FT_SYMLINK
,
314
NILFS_FT_MAX
315
};
316
317
/*
318
* NILFS_DIR_PAD defines the directory entries boundaries
319
*
320
* NOTE: It must be a multiple of 8
321
*/
322
#define NILFS_DIR_PAD 8
323
#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1)
324
#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \
325
~NILFS_DIR_ROUND)
326
#define NILFS_MAX_REC_LEN ((1<<16)-1)
327
328
static
inline
unsigned
nilfs_rec_len_from_disk(
__le16
dlen
)
329
{
330
unsigned
len
=
le16_to_cpu
(dlen);
331
332
#if !defined(__KERNEL__) || (PAGE_CACHE_SIZE >= 65536)
333
if
(len ==
NILFS_MAX_REC_LEN
)
334
return
1 << 16;
335
#endif
336
return
len;
337
}
338
339
static
inline
__le16
nilfs_rec_len_to_disk(
unsigned
len)
340
{
341
#if !defined(__KERNEL__) || (PAGE_CACHE_SIZE >= 65536)
342
if
(len == (1 << 16))
343
return
cpu_to_le16
(
NILFS_MAX_REC_LEN
);
344
else
if
(len > (1 << 16))
345
BUG
();
346
#endif
347
return
cpu_to_le16
(len);
348
}
349
357
struct
nilfs_finfo
{
358
__le64
fi_ino
;
359
__le64
fi_cno
;
360
__le32
fi_nblocks
;
361
__le32
fi_ndatablk
;
362
/* array of virtual block numbers */
363
};
364
370
struct
nilfs_binfo_v
{
371
__le64
bi_vblocknr
;
372
__le64
bi_blkoff
;
373
};
374
381
struct
nilfs_binfo_dat
{
382
__le64
bi_blkoff
;
383
__u8
bi_level
;
384
__u8
bi_pad
[7];
385
};
386
392
union
nilfs_binfo
{
393
struct
nilfs_binfo_v
bi_v
;
394
struct
nilfs_binfo_dat
bi_dat
;
395
};
396
413
struct
nilfs_segment_summary
{
414
__le32
ss_datasum
;
415
__le32
ss_sumsum
;
416
__le32
ss_magic
;
417
__le16
ss_bytes
;
418
__le16
ss_flags
;
419
__le64
ss_seq
;
420
__le64
ss_create
;
421
__le64
ss_next
;
422
__le32
ss_nblocks
;
423
__le32
ss_nfinfo
;
424
__le32
ss_sumbytes
;
425
__le32
ss_pad
;
426
__le64
ss_cno
;
427
/* array of finfo structures */
428
};
429
430
#define NILFS_SEGSUM_MAGIC 0x1eaffa11
/* segment summary magic number */
431
432
/*
433
* Segment summary flags
434
*/
435
#define NILFS_SS_LOGBGN 0x0001
/* begins a logical segment */
436
#define NILFS_SS_LOGEND 0x0002
/* ends a logical segment */
437
#define NILFS_SS_SR 0x0004
/* has super root */
438
#define NILFS_SS_SYNDT 0x0008
/* includes data only updates */
439
#define NILFS_SS_GC 0x0010
/* segment written for cleaner operation */
440
448
struct
nilfs_btree_node
{
449
__u8
bn_flags
;
450
__u8
bn_level
;
451
__le16
bn_nchildren
;
452
__le32
bn_pad
;
453
};
454
455
/* flags */
456
#define NILFS_BTREE_NODE_ROOT 0x01
457
458
/* level */
459
#define NILFS_BTREE_LEVEL_DATA 0
460
#define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1)
461
#define NILFS_BTREE_LEVEL_MAX 14
462
467
struct
nilfs_palloc_group_desc
{
468
__le32
pg_nfrees
;
469
};
470
478
struct
nilfs_dat_entry
{
479
__le64
de_blocknr
;
480
__le64
de_start
;
481
__le64
de_end
;
482
__le64
de_rsv
;
483
};
484
490
struct
nilfs_snapshot_list
{
491
__le64
ssl_next
;
492
__le64
ssl_prev
;
493
};
494
507
struct
nilfs_checkpoint
{
508
__le32
cp_flags
;
509
__le32
cp_checkpoints_count
;
510
struct
nilfs_snapshot_list
cp_snapshot_list
;
511
__le64
cp_cno
;
512
__le64
cp_create
;
513
__le64
cp_nblk_inc
;
514
__le64
cp_inodes_count
;
515
__le64
cp_blocks_count
;
516
517
/* Do not change the byte offset of ifile inode.
518
To keep the compatibility of the disk format,
519
additional fields should be added behind cp_ifile_inode. */
520
struct
nilfs_inode
cp_ifile_inode
;
521
};
522
523
/* checkpoint flags */
524
enum
{
525
NILFS_CHECKPOINT_SNAPSHOT
,
526
NILFS_CHECKPOINT_INVALID
,
527
NILFS_CHECKPOINT_SKETCH
,
528
NILFS_CHECKPOINT_MINOR
,
529
};
530
531
#define NILFS_CHECKPOINT_FNS(flag, name) \
532
static inline void \
533
nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
534
{ \
535
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
536
(1UL << NILFS_CHECKPOINT_##flag)); \
537
} \
538
static inline void \
539
nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
540
{ \
541
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
542
~(1UL << NILFS_CHECKPOINT_##flag)); \
543
} \
544
static inline int \
545
nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
546
{ \
547
return !!(le32_to_cpu(cp->cp_flags) & \
548
(1UL << NILFS_CHECKPOINT_##flag)); \
549
}
550
551
NILFS_CHECKPOINT_FNS
(SNAPSHOT, snapshot)
552
NILFS_CHECKPOINT_FNS
(
INVALID
,
invalid
)
553
NILFS_CHECKPOINT_FNS
(
MINOR
, minor)
554
566
struct
nilfs_cpinfo
{
567
__u32
ci_flags;
568
__u32
ci_pad;
569
__u64
ci_cno;
570
__u64
ci_create;
571
__u64
ci_nblk_inc;
572
__u64
ci_inodes_count;
573
__u64
ci_blocks_count;
574
__u64
ci_next;
575
};
576
577
#define NILFS_CPINFO_FNS(flag, name) \
578
static inline int \
579
nilfs_cpinfo_##name(const struct nilfs_cpinfo *cpinfo) \
580
{ \
581
return !!(cpinfo->ci_flags & (1UL << NILFS_CHECKPOINT_##flag)); \
582
}
583
584
NILFS_CPINFO_FNS
(SNAPSHOT, snapshot)
585
NILFS_CPINFO_FNS
(
INVALID
,
invalid
)
586
NILFS_CPINFO_FNS
(
MINOR
, minor)
587
588
595
struct
nilfs_cpfile_header
{
596
__le64
ch_ncheckpoints;
597
__le64
ch_nsnapshots;
598
struct
nilfs_snapshot_list
ch_snapshot_list;
599
};
600
601
#define NILFS_CPFILE_FIRST_CHECKPOINT_OFFSET \
602
((sizeof(struct nilfs_cpfile_header) + \
603
sizeof(struct nilfs_checkpoint) - 1) / \
604
sizeof(struct nilfs_checkpoint))
605
612
struct
nilfs_segment_usage
{
613
__le64
su_lastmod
;
614
__le32
su_nblocks
;
615
__le32
su_flags
;
616
};
617
618
/* segment usage flag */
619
enum
{
620
NILFS_SEGMENT_USAGE_ACTIVE
,
621
NILFS_SEGMENT_USAGE_DIRTY
,
622
NILFS_SEGMENT_USAGE_ERROR
,
623
624
/* ... */
625
};
626
627
#define NILFS_SEGMENT_USAGE_FNS(flag, name) \
628
static inline void \
629
nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
630
{ \
631
su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
632
(1UL << NILFS_SEGMENT_USAGE_##flag));\
633
} \
634
static inline void \
635
nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
636
{ \
637
su->su_flags = \
638
cpu_to_le32(le32_to_cpu(su->su_flags) & \
639
~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
640
} \
641
static inline int \
642
nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
643
{ \
644
return !!(le32_to_cpu(su->su_flags) & \
645
(1UL << NILFS_SEGMENT_USAGE_##flag)); \
646
}
647
648
NILFS_SEGMENT_USAGE_FNS
(
ACTIVE
,
active
)
649
NILFS_SEGMENT_USAGE_FNS
(
DIRTY
,
dirty
)
650
NILFS_SEGMENT_USAGE_FNS
(
ERROR
,
error
)
651
652
static
inline
void
653
nilfs_segment_usage_set_clean(
struct
nilfs_segment_usage
*
su
)
654
{
655
su->su_lastmod =
cpu_to_le64
(0);
656
su->su_nblocks =
cpu_to_le32
(0);
657
su->su_flags =
cpu_to_le32
(0);
658
}
659
660
static
inline
int
661
nilfs_segment_usage_clean(
const
struct
nilfs_segment_usage
*
su
)
662
{
663
return
!
le32_to_cpu
(su->
su_flags
);
664
}
665
672
struct
nilfs_sufile_header
{
673
__le64
sh_ncleansegs
;
674
__le64
sh_ndirtysegs
;
675
__le64
sh_last_alloc
;
676
/* ... */
677
};
678
679
#define NILFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET \
680
((sizeof(struct nilfs_sufile_header) + \
681
sizeof(struct nilfs_segment_usage) - 1) / \
682
sizeof(struct nilfs_segment_usage))
683
690
struct
nilfs_suinfo
{
691
__u64
sui_lastmod
;
692
__u32
sui_nblocks
;
693
__u32
sui_flags
;
694
};
695
696
#define NILFS_SUINFO_FNS(flag, name) \
697
static inline int \
698
nilfs_suinfo_##name(const struct nilfs_suinfo *si) \
699
{ \
700
return si->sui_flags & (1UL << NILFS_SEGMENT_USAGE_##flag); \
701
}
702
703
NILFS_SUINFO_FNS
(
ACTIVE
,
active
)
704
NILFS_SUINFO_FNS
(
DIRTY
,
dirty
)
705
NILFS_SUINFO_FNS
(
ERROR
,
error
)
706
707
static
inline
int
nilfs_suinfo_clean(
const
struct
nilfs_suinfo
*si)
708
{
709
return
!si->sui_flags;
710
}
711
712
/* ioctl */
713
enum
{
714
NILFS_CHECKPOINT
,
715
NILFS_SNAPSHOT
,
716
};
717
724
struct
nilfs_cpmode
{
725
__u64
cm_cno
;
726
__u32
cm_mode
;
727
__u32
cm_pad
;
728
};
729
738
struct
nilfs_argv
{
739
__u64
v_base
;
740
__u32
v_nmembs
;
/* number of members */
741
__u16
v_size
;
/* size of members */
742
__u16
v_flags
;
743
__u64
v_index
;
744
};
745
751
struct
nilfs_period
{
752
__u64
p_start
;
753
__u64
p_end
;
754
};
755
762
struct
nilfs_cpstat
{
763
__u64
cs_cno
;
764
__u64
cs_ncps
;
765
__u64
cs_nsss
;
766
};
767
777
struct
nilfs_sustat
{
778
__u64
ss_nsegs
;
779
__u64
ss_ncleansegs
;
780
__u64
ss_ndirtysegs
;
781
__u64
ss_ctime
;
782
__u64
ss_nongc_ctime
;
783
__u64
ss_prot_seq
;
784
};
785
793
struct
nilfs_vinfo
{
794
__u64
vi_vblocknr
;
795
__u64
vi_start
;
796
__u64
vi_end
;
797
__u64
vi_blocknr
;
798
};
799
811
struct
nilfs_vdesc
{
812
__u64
vd_ino
;
813
__u64
vd_cno
;
814
__u64
vd_vblocknr
;
815
struct
nilfs_period
vd_period
;
816
__u64
vd_blocknr
;
817
__u64
vd_offset
;
818
__u32
vd_flags
;
819
__u32
vd_pad
;
820
};
821
831
struct
nilfs_bdesc
{
832
__u64
bd_ino
;
833
__u64
bd_oblocknr
;
834
__u64
bd_blocknr
;
835
__u64
bd_offset
;
836
__u32
bd_level
;
837
__u32
bd_pad
;
838
};
839
840
#define NILFS_IOCTL_IDENT 'n'
841
842
#define NILFS_IOCTL_CHANGE_CPMODE \
843
_IOW(NILFS_IOCTL_IDENT, 0x80, struct nilfs_cpmode)
844
#define NILFS_IOCTL_DELETE_CHECKPOINT \
845
_IOW(NILFS_IOCTL_IDENT, 0x81, __u64)
846
#define NILFS_IOCTL_GET_CPINFO \
847
_IOR(NILFS_IOCTL_IDENT, 0x82, struct nilfs_argv)
848
#define NILFS_IOCTL_GET_CPSTAT \
849
_IOR(NILFS_IOCTL_IDENT, 0x83, struct nilfs_cpstat)
850
#define NILFS_IOCTL_GET_SUINFO \
851
_IOR(NILFS_IOCTL_IDENT, 0x84, struct nilfs_argv)
852
#define NILFS_IOCTL_GET_SUSTAT \
853
_IOR(NILFS_IOCTL_IDENT, 0x85, struct nilfs_sustat)
854
#define NILFS_IOCTL_GET_VINFO \
855
_IOWR(NILFS_IOCTL_IDENT, 0x86, struct nilfs_argv)
856
#define NILFS_IOCTL_GET_BDESCS \
857
_IOWR(NILFS_IOCTL_IDENT, 0x87, struct nilfs_argv)
858
#define NILFS_IOCTL_CLEAN_SEGMENTS \
859
_IOW(NILFS_IOCTL_IDENT, 0x88, struct nilfs_argv[5])
860
#define NILFS_IOCTL_SYNC \
861
_IOR(NILFS_IOCTL_IDENT, 0x8A, __u64)
862
#define NILFS_IOCTL_RESIZE \
863
_IOW(NILFS_IOCTL_IDENT, 0x8B, __u64)
864
#define NILFS_IOCTL_SET_ALLOC_RANGE \
865
_IOW(NILFS_IOCTL_IDENT, 0x8C, __u64[2])
866
867
#endif
/* _LINUX_NILFS_FS_H */
Generated on Thu Jan 10 2013 14:52:13 for Linux Kernel by
1.8.2