94
94
| OCFS2_FEATURE_INCOMPAT_EXTENDED_SLOT_MAP \
95
95
| OCFS2_FEATURE_INCOMPAT_USERSPACE_STACK \
96
96
| OCFS2_FEATURE_INCOMPAT_XATTR)
97
- #define OCFS2_FEATURE_RO_COMPAT_SUPP OCFS2_FEATURE_RO_COMPAT_UNWRITTEN
97
+ #define OCFS2_FEATURE_RO_COMPAT_SUPP ( OCFS2_FEATURE_RO_COMPAT_UNWRITTEN)
98
98
99
99
/*
100
100
* Heartbeat-only devices are missing journals and other files. The
163
163
*/
164
164
#define OCFS2_FEATURE_RO_COMPAT_UNWRITTEN 0x0001
165
165
166
+ /*
167
+ * Maintain quota information for this filesystem
168
+ */
169
+ #define OCFS2_FEATURE_RO_COMPAT_USRQUOTA 0x0002
170
+ #define OCFS2_FEATURE_RO_COMPAT_GRPQUOTA 0x0004
171
+
166
172
/* The byte offset of the first backup block will be 1G.
167
173
* The following will be 4G, 16G, 64G, 256G and 1T.
168
174
*/
192
198
#define OCFS2_HEARTBEAT_FL (0x00000200) /* Heartbeat area */
193
199
#define OCFS2_CHAIN_FL (0x00000400) /* Chain allocator */
194
200
#define OCFS2_DEALLOC_FL (0x00000800) /* Truncate log */
201
+ #define OCFS2_QUOTA_FL (0x00001000) /* Quota file */
195
202
196
203
/*
197
204
* Flags on ocfs2_dinode.i_dyn_features
@@ -329,13 +336,17 @@ enum {
329
336
#define OCFS2_FIRST_ONLINE_SYSTEM_INODE SLOT_MAP_SYSTEM_INODE
330
337
HEARTBEAT_SYSTEM_INODE ,
331
338
GLOBAL_BITMAP_SYSTEM_INODE ,
332
- #define OCFS2_LAST_GLOBAL_SYSTEM_INODE GLOBAL_BITMAP_SYSTEM_INODE
339
+ USER_QUOTA_SYSTEM_INODE ,
340
+ GROUP_QUOTA_SYSTEM_INODE ,
341
+ #define OCFS2_LAST_GLOBAL_SYSTEM_INODE GROUP_QUOTA_SYSTEM_INODE
333
342
ORPHAN_DIR_SYSTEM_INODE ,
334
343
EXTENT_ALLOC_SYSTEM_INODE ,
335
344
INODE_ALLOC_SYSTEM_INODE ,
336
345
JOURNAL_SYSTEM_INODE ,
337
346
LOCAL_ALLOC_SYSTEM_INODE ,
338
347
TRUNCATE_LOG_SYSTEM_INODE ,
348
+ LOCAL_USER_QUOTA_SYSTEM_INODE ,
349
+ LOCAL_GROUP_QUOTA_SYSTEM_INODE ,
339
350
NUM_SYSTEM_INODES
340
351
};
341
352
@@ -349,14 +360,18 @@ static struct ocfs2_system_inode_info ocfs2_system_inodes[NUM_SYSTEM_INODES] = {
349
360
[SLOT_MAP_SYSTEM_INODE ] = { "slot_map" , 0 , S_IFREG | 0644 },
350
361
[HEARTBEAT_SYSTEM_INODE ] = { "heartbeat" , OCFS2_HEARTBEAT_FL , S_IFREG | 0644 },
351
362
[GLOBAL_BITMAP_SYSTEM_INODE ] = { "global_bitmap" , 0 , S_IFREG | 0644 },
363
+ [USER_QUOTA_SYSTEM_INODE ] = { "aquota.user" , OCFS2_QUOTA_FL , S_IFREG | 0644 },
364
+ [GROUP_QUOTA_SYSTEM_INODE ] = { "aquota.group" , OCFS2_QUOTA_FL , S_IFREG | 0644 },
352
365
353
366
/* Slot-specific system inodes (one copy per slot) */
354
367
[ORPHAN_DIR_SYSTEM_INODE ] = { "orphan_dir:%04d" , 0 , S_IFDIR | 0755 },
355
368
[EXTENT_ALLOC_SYSTEM_INODE ] = { "extent_alloc:%04d" , OCFS2_BITMAP_FL | OCFS2_CHAIN_FL , S_IFREG | 0644 },
356
369
[INODE_ALLOC_SYSTEM_INODE ] = { "inode_alloc:%04d" , OCFS2_BITMAP_FL | OCFS2_CHAIN_FL , S_IFREG | 0644 },
357
370
[JOURNAL_SYSTEM_INODE ] = { "journal:%04d" , OCFS2_JOURNAL_FL , S_IFREG | 0644 },
358
371
[LOCAL_ALLOC_SYSTEM_INODE ] = { "local_alloc:%04d" , OCFS2_BITMAP_FL | OCFS2_LOCAL_ALLOC_FL , S_IFREG | 0644 },
359
- [TRUNCATE_LOG_SYSTEM_INODE ] = { "truncate_log:%04d" , OCFS2_DEALLOC_FL , S_IFREG | 0644 }
372
+ [TRUNCATE_LOG_SYSTEM_INODE ] = { "truncate_log:%04d" , OCFS2_DEALLOC_FL , S_IFREG | 0644 },
373
+ [LOCAL_USER_QUOTA_SYSTEM_INODE ] = { "aquota.user:%04d" , OCFS2_QUOTA_FL , S_IFREG | 0644 },
374
+ [LOCAL_GROUP_QUOTA_SYSTEM_INODE ] = { "aquota.group:%04d" , OCFS2_QUOTA_FL , S_IFREG | 0644 },
360
375
};
361
376
362
377
/* Parameter passed from mount.ocfs2 to module */
0 commit comments