1
/* -*- mode: c; c-basic-offset: 8; -*-
2
* vim: noexpandtab sw=8 ts=8 sts=0:
6
* Defines OCFS2 ioctls.
8
* Copyright (C) 2010 Oracle. All rights reserved.
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public
12
* License, version 2, as published by the Free Software Foundation.
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* General Public License for more details.
26
#define OCFS2_IOC_GETFLAGS FS_IOC_GETFLAGS
27
#define OCFS2_IOC_SETFLAGS FS_IOC_SETFLAGS
28
#define OCFS2_IOC32_GETFLAGS FS_IOC32_GETFLAGS
29
#define OCFS2_IOC32_SETFLAGS FS_IOC32_SETFLAGS
32
* Space reservation / allocation / free ioctls and argument structure
33
* are designed to be compatible with XFS.
35
* ALLOCSP* and FREESP* are not and will never be supported, but are
36
* included here for completeness.
38
struct ocfs2_space_resv {
42
__s64 l_len; /* len == 0 means until end of file */
45
__s32 l_pad[4]; /* reserve area */
48
#define OCFS2_IOC_ALLOCSP _IOW ('X', 10, struct ocfs2_space_resv)
49
#define OCFS2_IOC_FREESP _IOW ('X', 11, struct ocfs2_space_resv)
50
#define OCFS2_IOC_RESVSP _IOW ('X', 40, struct ocfs2_space_resv)
51
#define OCFS2_IOC_UNRESVSP _IOW ('X', 41, struct ocfs2_space_resv)
52
#define OCFS2_IOC_ALLOCSP64 _IOW ('X', 36, struct ocfs2_space_resv)
53
#define OCFS2_IOC_FREESP64 _IOW ('X', 37, struct ocfs2_space_resv)
54
#define OCFS2_IOC_RESVSP64 _IOW ('X', 42, struct ocfs2_space_resv)
55
#define OCFS2_IOC_UNRESVSP64 _IOW ('X', 43, struct ocfs2_space_resv)
57
/* Used to pass group descriptor data when online resize is done */
58
struct ocfs2_new_group_input {
59
__u64 group; /* Group descriptor's blkno. */
60
__u32 clusters; /* Total number of clusters in this group */
61
__u32 frees; /* Total free clusters in this group */
62
__u16 chain; /* Chain for this group */
67
#define OCFS2_IOC_GROUP_EXTEND _IOW('o', 1, int)
68
#define OCFS2_IOC_GROUP_ADD _IOW('o', 2,struct ocfs2_new_group_input)
69
#define OCFS2_IOC_GROUP_ADD64 _IOW('o', 3,struct ocfs2_new_group_input)
71
/* Used to pass 2 file names to reflink. */
72
struct reflink_arguments {
77
#define OCFS2_IOC_REFLINK _IOW('o', 4, struct reflink_arguments)
79
/* Following definitions dedicated for ocfs2_info_request ioctls. */
80
#define OCFS2_INFO_MAX_REQUEST (50)
81
#define OCFS2_TEXT_UUID_LEN (OCFS2_VOL_UUID_LEN * 2)
83
/* Magic number of all requests */
84
#define OCFS2_INFO_MAGIC (0x4F32494E)
87
* Always try to separate info request into small pieces to
88
* guarantee the backward&forward compatibility.
91
__u64 oi_requests; /* Array of __u64 pointers to requests */
92
__u32 oi_count; /* Number of requests in info_requests */
96
struct ocfs2_info_request {
97
/*00*/ __u32 ir_magic; /* Magic number */
98
__u32 ir_code; /* Info request code */
99
__u32 ir_size; /* Size of request */
100
__u32 ir_flags; /* Request flags */
101
/*10*/ /* Request specific fields */
104
struct ocfs2_info_clustersize {
105
struct ocfs2_info_request ic_req;
106
__u32 ic_clustersize;
110
struct ocfs2_info_blocksize {
111
struct ocfs2_info_request ib_req;
116
struct ocfs2_info_maxslots {
117
struct ocfs2_info_request im_req;
122
struct ocfs2_info_label {
123
struct ocfs2_info_request il_req;
124
__u8 il_label[OCFS2_MAX_VOL_LABEL_LEN];
125
} __attribute__ ((packed));
127
struct ocfs2_info_uuid {
128
struct ocfs2_info_request iu_req;
129
__u8 iu_uuid_str[OCFS2_TEXT_UUID_LEN + 1];
130
} __attribute__ ((packed));
132
struct ocfs2_info_fs_features {
133
struct ocfs2_info_request if_req;
134
__u32 if_compat_features;
135
__u32 if_incompat_features;
136
__u32 if_ro_compat_features;
140
struct ocfs2_info_journal_size {
141
struct ocfs2_info_request ij_req;
142
__u64 ij_journal_size;
145
struct ocfs2_info_freeinode {
146
struct ocfs2_info_request ifi_req;
147
struct ocfs2_info_local_freeinode {
150
} ifi_stat[OCFS2_MAX_SLOTS];
151
__u32 ifi_slotnum; /* out */
155
#define OCFS2_INFO_MAX_HIST (32)
157
struct ocfs2_info_freefrag {
158
struct ocfs2_info_request iff_req;
159
struct ocfs2_info_freefrag_stats { /* (out) */
160
struct ocfs2_info_free_chunk_list {
161
__u32 fc_chunks[OCFS2_INFO_MAX_HIST];
162
__u32 fc_clusters[OCFS2_INFO_MAX_HIST];
165
__u32 ffs_free_clusters;
166
__u32 ffs_free_chunks;
167
__u32 ffs_free_chunks_real;
168
__u32 ffs_min; /* Minimum free chunksize in clusters */
173
__u32 iff_chunksize; /* chunksize in clusters(in) */
177
/* Codes for ocfs2_info_request */
178
enum ocfs2_info_type {
179
OCFS2_INFO_CLUSTERSIZE = 1,
180
OCFS2_INFO_BLOCKSIZE,
184
OCFS2_INFO_FS_FEATURES,
185
OCFS2_INFO_JOURNAL_SIZE,
186
OCFS2_INFO_FREEINODE,
191
/* Flags for struct ocfs2_info_request */
192
/* Filled by the caller */
193
#define OCFS2_INFO_FL_NON_COHERENT (0x00000001) /* Cluster coherency not
194
required. This is a hint.
195
It is up to ocfs2 whether
196
the request can be fulfilled
198
/* Filled by ocfs2 */
199
#define OCFS2_INFO_FL_FILLED (0x40000000) /* Filesystem understood
201
filled in the answer */
203
#define OCFS2_INFO_FL_ERROR (0x80000000) /* Error happened during
206
#define OCFS2_IOC_INFO _IOR('o', 5, struct ocfs2_info)
208
struct ocfs2_move_extents {
209
/* All values are in bytes */
211
__u64 me_start; /* Virtual start in the file to move */
212
__u64 me_len; /* Length of the extents to be moved */
213
__u64 me_goal; /* Physical offset of the goal,
214
it's in block unit */
215
__u64 me_threshold; /* Maximum distance from goal or threshold
216
for auto defragmentation */
217
__u64 me_flags; /* Flags for the operation:
218
* - auto defragmentation.
219
* - refcount,xattr cases.
222
__u64 me_moved_len; /* Moved/defraged length */
223
__u64 me_new_offset; /* Resulting physical location */
224
__u32 me_reserved[2]; /* Reserved for futhure */
227
#define OCFS2_MOVE_EXT_FL_AUTO_DEFRAG (0x00000001) /* Kernel manages to
230
for extents moving */
231
#define OCFS2_MOVE_EXT_FL_PART_DEFRAG (0x00000002) /* Allow partial extent
235
even more fragmented */
236
#define OCFS2_MOVE_EXT_FL_COMPLETE (0x00000004) /* Move or defragmenation
237
completely gets done.
240
#define OCFS2_IOC_MOVE_EXT _IOW('o', 6, struct ocfs2_move_extents)
242
#endif /* OCFS2_IOCTL_H */