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
fs
ocfs2
quota.h
Go to the documentation of this file.
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
/*
21
* In-memory structures
22
*/
23
struct
ocfs2_dquot
{
24
struct
dquot
dq_dquot
;
/* Generic VFS dquot */
25
loff_t
dq_local_off
;
/* Offset in the local quota file */
26
u64
dq_local_phys_blk
;
/* Physical block carrying quota structure */
27
struct
ocfs2_quota_chunk
*
dq_chunk
;
/* Chunk dquot is in */
28
unsigned
int
dq_use_count
;
/* Number of nodes having reference to this entry in global quota file */
29
s64
dq_origspace
;
/* Last globally synced space usage */
30
s64
dq_originodes
;
/* Last globally synced inode usage */
31
};
32
33
/* Description of one chunk to recover in memory */
34
struct
ocfs2_recovery_chunk
{
35
struct
list_head
rc_list
;
/* List of chunks */
36
int
rc_chunk
;
/* Chunk number */
37
unsigned
long
*
rc_bitmap
;
/* Bitmap of entries to recover */
38
};
39
40
struct
ocfs2_quota_recovery
{
41
struct
list_head
r_list
[
MAXQUOTAS
];
/* List of chunks to recover */
42
};
43
44
/* In-memory structure with quota header information */
45
struct
ocfs2_mem_dqinfo
{
46
unsigned
int
dqi_type
;
/* Quota type this structure describes */
47
unsigned
int
dqi_chunks
;
/* Number of chunks in local quota file */
48
unsigned
int
dqi_blocks
;
/* Number of blocks allocated for local quota file */
49
unsigned
int
dqi_syncms
;
/* How often should we sync with other nodes */
50
struct
list_head
dqi_chunk
;
/* List of chunks */
51
struct
inode
*
dqi_gqinode
;
/* Global quota file inode */
52
struct
ocfs2_lock_res
dqi_gqlock
;
/* Lock protecting quota information structure */
53
struct
buffer_head *
dqi_gqi_bh
;
/* Buffer head with global quota file inode - set only if inode lock is obtained */
54
int
dqi_gqi_count
;
/* Number of holders of dqi_gqi_bh */
55
u64
dqi_giblk
;
/* Number of block with global information header */
56
struct
buffer_head *
dqi_lqi_bh
;
/* Buffer head with local quota file inode */
57
struct
buffer_head *
dqi_libh
;
/* Buffer with local information header */
58
struct
qtree_mem_dqinfo
dqi_gi
;
/* Info about global file */
59
struct
delayed_work
dqi_sync_work
;
/* Work for syncing dquots */
60
struct
ocfs2_quota_recovery
*
dqi_rec
;
/* Pointer to recovery
61
* information, in case we
62
* enable quotas on file
63
* needing it */
64
};
65
66
static
inline
struct
ocfs2_dquot
*OCFS2_DQUOT(
struct
dquot
*
dquot
)
67
{
68
return
container_of
(dquot,
struct
ocfs2_dquot
,
dq_dquot
);
69
}
70
71
struct
ocfs2_quota_chunk
{
72
struct
list_head
qc_chunk
;
/* List of quotafile chunks */
73
int
qc_num
;
/* Number of quota chunk */
74
struct
buffer_head *
qc_headerbh
;
/* Buffer head with chunk header */
75
};
76
77
extern
struct
kmem_cache
*
ocfs2_dquot_cachep
;
78
extern
struct
kmem_cache
*
ocfs2_qf_chunk_cachep
;
79
80
extern
struct
qtree_fmt_operations
ocfs2_global_ops
;
81
82
struct
ocfs2_quota_recovery
*
ocfs2_begin_quota_recovery
(
83
struct
ocfs2_super
*osb,
int
slot_num);
84
int
ocfs2_finish_quota_recovery
(
struct
ocfs2_super
*osb,
85
struct
ocfs2_quota_recovery
*rec,
86
int
slot_num);
87
void
ocfs2_free_quota_recovery
(
struct
ocfs2_quota_recovery
*rec);
88
ssize_t
ocfs2_quota_read
(
struct
super_block
*
sb
,
int
type
,
char
*
data
,
89
size_t
len, loff_t off);
90
ssize_t
ocfs2_quota_write
(
struct
super_block
*
sb
,
int
type
,
91
const
char
*
data
,
size_t
len, loff_t off);
92
int
ocfs2_global_read_info
(
struct
super_block
*
sb
,
int
type
);
93
int
ocfs2_global_write_info
(
struct
super_block
*
sb
,
int
type
);
94
int
ocfs2_global_read_dquot
(
struct
dquot
*
dquot
);
95
int
__ocfs2_sync_dquot
(
struct
dquot
*
dquot
,
int
freeing);
96
static
inline
int
ocfs2_sync_dquot(
struct
dquot
*
dquot
)
97
{
98
return
__ocfs2_sync_dquot
(dquot, 0);
99
}
100
static
inline
int
ocfs2_global_release_dquot(
struct
dquot
*
dquot
)
101
{
102
return
__ocfs2_sync_dquot
(dquot, 1);
103
}
104
105
int
ocfs2_lock_global_qf
(
struct
ocfs2_mem_dqinfo
*oinfo,
int
ex);
106
void
ocfs2_unlock_global_qf
(
struct
ocfs2_mem_dqinfo
*oinfo,
int
ex);
107
int
ocfs2_validate_quota_block
(
struct
super_block
*
sb
,
struct
buffer_head *bh);
108
int
ocfs2_read_quota_phys_block
(
struct
inode
*
inode
,
u64
p_block,
109
struct
buffer_head **bh);
110
int
ocfs2_create_local_dquot
(
struct
dquot
*
dquot
);
111
int
ocfs2_local_release_dquot
(handle_t *
handle
,
struct
dquot
*
dquot
);
112
int
ocfs2_local_write_dquot
(
struct
dquot
*
dquot
);
113
114
extern
const
struct
dquot_operations
ocfs2_quota_operations
;
115
extern
struct
quota_format_type
ocfs2_quota_format
;
116
117
#endif
/* _OCFS2_QUOTA_H */
Generated on Thu Jan 10 2013 14:47:17 for Linux Kernel by
1.8.2