diff options
Diffstat (limited to 'fs/ocfs2/quota.h')
-rw-r--r-- | fs/ocfs2/quota.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/fs/ocfs2/quota.h b/fs/ocfs2/quota.h new file mode 100644 index 000000000000..1f1c86311b32 --- /dev/null +++ b/fs/ocfs2/quota.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * quota.h for OCFS2 | ||
3 | * | ||
4 | * On disk quota structures for local and global quota file, in-memory | ||
5 | * structures. | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | #ifndef _OCFS2_QUOTA_H | ||
10 | #define _OCFS2_QUOTA_H | ||
11 | |||
12 | #include <linux/types.h> | ||
13 | #include <linux/slab.h> | ||
14 | #include <linux/quota.h> | ||
15 | #include <linux/list.h> | ||
16 | #include <linux/dqblk_qtree.h> | ||
17 | |||
18 | #include "ocfs2.h" | ||
19 | |||
20 | /* Common stuff */ | ||
21 | /* id number of quota format */ | ||
22 | #define QFMT_OCFS2 3 | ||
23 | |||
24 | /* | ||
25 | * In-memory structures | ||
26 | */ | ||
27 | struct ocfs2_dquot { | ||
28 | struct dquot dq_dquot; /* Generic VFS dquot */ | ||
29 | loff_t dq_local_off; /* Offset in the local quota file */ | ||
30 | struct ocfs2_quota_chunk *dq_chunk; /* Chunk dquot is in */ | ||
31 | unsigned int dq_use_count; /* Number of nodes having reference to this entry in global quota file */ | ||
32 | s64 dq_origspace; /* Last globally synced space usage */ | ||
33 | s64 dq_originodes; /* Last globally synced inode usage */ | ||
34 | }; | ||
35 | |||
36 | /* In-memory structure with quota header information */ | ||
37 | struct ocfs2_mem_dqinfo { | ||
38 | unsigned int dqi_type; /* Quota type this structure describes */ | ||
39 | unsigned int dqi_chunks; /* Number of chunks in local quota file */ | ||
40 | unsigned int dqi_blocks; /* Number of blocks allocated for local quota file */ | ||
41 | unsigned int dqi_syncms; /* How often should we sync with other nodes */ | ||
42 | struct list_head dqi_chunk; /* List of chunks */ | ||
43 | struct inode *dqi_gqinode; /* Global quota file inode */ | ||
44 | struct ocfs2_lock_res dqi_gqlock; /* Lock protecting quota information structure */ | ||
45 | struct buffer_head *dqi_gqi_bh; /* Buffer head with global quota file inode - set only if inode lock is obtained */ | ||
46 | int dqi_gqi_count; /* Number of holders of dqi_gqi_bh */ | ||
47 | struct buffer_head *dqi_lqi_bh; /* Buffer head with local quota file inode */ | ||
48 | struct buffer_head *dqi_ibh; /* Buffer with information header */ | ||
49 | struct qtree_mem_dqinfo dqi_gi; /* Info about global file */ | ||
50 | }; | ||
51 | |||
52 | static inline struct ocfs2_dquot *OCFS2_DQUOT(struct dquot *dquot) | ||
53 | { | ||
54 | return container_of(dquot, struct ocfs2_dquot, dq_dquot); | ||
55 | } | ||
56 | |||
57 | struct ocfs2_quota_chunk { | ||
58 | struct list_head qc_chunk; /* List of quotafile chunks */ | ||
59 | int qc_num; /* Number of quota chunk */ | ||
60 | struct buffer_head *qc_headerbh; /* Buffer head with chunk header */ | ||
61 | }; | ||
62 | |||
63 | extern struct kmem_cache *ocfs2_dquot_cachep; | ||
64 | extern struct kmem_cache *ocfs2_qf_chunk_cachep; | ||
65 | |||
66 | extern struct qtree_fmt_operations ocfs2_global_ops; | ||
67 | |||
68 | ssize_t ocfs2_quota_read(struct super_block *sb, int type, char *data, | ||
69 | size_t len, loff_t off); | ||
70 | ssize_t ocfs2_quota_write(struct super_block *sb, int type, | ||
71 | const char *data, size_t len, loff_t off); | ||
72 | int ocfs2_global_read_info(struct super_block *sb, int type); | ||
73 | int ocfs2_global_write_info(struct super_block *sb, int type); | ||
74 | int ocfs2_global_read_dquot(struct dquot *dquot); | ||
75 | int __ocfs2_sync_dquot(struct dquot *dquot, int freeing); | ||
76 | static inline int ocfs2_sync_dquot(struct dquot *dquot) | ||
77 | { | ||
78 | return __ocfs2_sync_dquot(dquot, 0); | ||
79 | } | ||
80 | static inline int ocfs2_global_release_dquot(struct dquot *dquot) | ||
81 | { | ||
82 | return __ocfs2_sync_dquot(dquot, 1); | ||
83 | } | ||
84 | |||
85 | int ocfs2_lock_global_qf(struct ocfs2_mem_dqinfo *oinfo, int ex); | ||
86 | void ocfs2_unlock_global_qf(struct ocfs2_mem_dqinfo *oinfo, int ex); | ||
87 | struct buffer_head *ocfs2_read_quota_block(struct inode *inode, | ||
88 | int block, int *err); | ||
89 | |||
90 | extern struct dquot_operations ocfs2_quota_operations; | ||
91 | extern struct quota_format_type ocfs2_quota_format; | ||
92 | |||
93 | #endif /* _OCFS2_QUOTA_H */ | ||