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
xfs
xfs_qm.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000-2005 Silicon Graphics, Inc.
3
* All Rights Reserved.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
#ifndef __XFS_QM_H__
19
#define __XFS_QM_H__
20
21
#include "
xfs_dquot_item.h
"
22
#include "
xfs_dquot.h
"
23
#include "
xfs_quota_priv.h
"
24
25
struct
xfs_inode;
26
27
extern
struct
kmem_zone
*
xfs_qm_dqtrxzone
;
28
29
/*
30
* This defines the unit of allocation of dquots.
31
* Currently, it is just one file system block, and a 4K blk contains 30
32
* (136 * 30 = 4080) dquots. It's probably not worth trying to make
33
* this more dynamic.
34
* XXXsup However, if this number is changed, we have to make sure that we don't
35
* implicitly assume that we do allocations in chunks of a single filesystem
36
* block in the dquot/xqm code.
37
*/
38
#define XFS_DQUOT_CLUSTER_SIZE_FSB (xfs_filblks_t)1
39
40
/*
41
* Various quota information for individual filesystems.
42
* The mount structure keeps a pointer to this.
43
*/
44
typedef
struct
xfs_quotainfo
{
45
struct
radix_tree_root
qi_uquota_tree
;
46
struct
radix_tree_root
qi_gquota_tree
;
47
struct
mutex
qi_tree_lock
;
48
xfs_inode_t *
qi_uquotaip
;
/* user quota inode */
49
xfs_inode_t *
qi_gquotaip
;
/* group quota inode */
50
struct
list_head
qi_lru_list
;
51
struct
mutex
qi_lru_lock
;
52
int
qi_lru_count
;
53
int
qi_dquots
;
54
time_t
qi_btimelimit
;
/* limit for blks timer */
55
time_t
qi_itimelimit
;
/* limit for inodes timer */
56
time_t
qi_rtbtimelimit
;
/* limit for rt blks timer */
57
xfs_qwarncnt_t
qi_bwarnlimit
;
/* limit for blks warnings */
58
xfs_qwarncnt_t
qi_iwarnlimit
;
/* limit for inodes warnings */
59
xfs_qwarncnt_t
qi_rtbwarnlimit
;
/* limit for rt blks warnings */
60
struct
mutex
qi_quotaofflock
;
/* to serialize quotaoff */
61
xfs_filblks_t
qi_dqchunklen
;
/* # BBs in a chunk of dqs */
62
uint
qi_dqperchunk
;
/* # ondisk dqs in above chunk */
63
xfs_qcnt_t
qi_bhardlimit
;
/* default data blk hard limit */
64
xfs_qcnt_t
qi_bsoftlimit
;
/* default data blk soft limit */
65
xfs_qcnt_t
qi_ihardlimit
;
/* default inode count hard limit */
66
xfs_qcnt_t
qi_isoftlimit
;
/* default inode count soft limit */
67
xfs_qcnt_t
qi_rtbhardlimit
;
/* default realtime blk hard limit */
68
xfs_qcnt_t
qi_rtbsoftlimit
;
/* default realtime blk soft limit */
69
struct
shrinker
qi_shrinker
;
70
}
xfs_quotainfo_t
;
71
72
#define XFS_DQUOT_TREE(qi, type) \
73
((type & XFS_DQ_USER) ? \
74
&((qi)->qi_uquota_tree) : \
75
&((qi)->qi_gquota_tree))
76
77
78
extern
void
xfs_trans_mod_dquot
(xfs_trans_t *,
xfs_dquot_t
*,
uint
,
long
);
79
extern
int
xfs_trans_reserve_quota_bydquots
(xfs_trans_t *, xfs_mount_t *,
80
xfs_dquot_t
*,
xfs_dquot_t
*,
long
,
long
,
uint
);
81
extern
void
xfs_trans_dqjoin
(xfs_trans_t *,
xfs_dquot_t
*);
82
extern
void
xfs_trans_log_dquot
(xfs_trans_t *,
xfs_dquot_t
*);
83
84
/*
85
* We keep the usr and grp dquots separately so that locking will be easier
86
* to do at commit time. All transactions that we know of at this point
87
* affect no more than two dquots of one type. Hence, the TRANS_MAXDQS value.
88
*/
89
#define XFS_QM_TRANS_MAXDQS 2
90
typedef
struct
xfs_dquot_acct
{
91
xfs_dqtrx_t
dqa_usrdquots
[
XFS_QM_TRANS_MAXDQS
];
92
xfs_dqtrx_t
dqa_grpdquots
[
XFS_QM_TRANS_MAXDQS
];
93
}
xfs_dquot_acct_t
;
94
95
/*
96
* Users are allowed to have a usage exceeding their softlimit for
97
* a period this long.
98
*/
99
#define XFS_QM_BTIMELIMIT (7 * 24*60*60)
/* 1 week */
100
#define XFS_QM_RTBTIMELIMIT (7 * 24*60*60)
/* 1 week */
101
#define XFS_QM_ITIMELIMIT (7 * 24*60*60)
/* 1 week */
102
103
#define XFS_QM_BWARNLIMIT 5
104
#define XFS_QM_IWARNLIMIT 5
105
#define XFS_QM_RTBWARNLIMIT 5
106
107
extern
void
xfs_qm_destroy_quotainfo
(xfs_mount_t *);
108
extern
int
xfs_qm_quotacheck
(xfs_mount_t *);
109
extern
int
xfs_qm_write_sb_changes
(xfs_mount_t *, __int64_t);
110
111
/* dquot stuff */
112
extern
void
xfs_qm_dqpurge_all
(xfs_mount_t *,
uint
);
113
extern
void
xfs_qm_dqrele_all_inodes
(xfs_mount_t *,
uint
);
114
115
/* quota ops */
116
extern
int
xfs_qm_scall_trunc_qfiles
(xfs_mount_t *,
uint
);
117
extern
int
xfs_qm_scall_getquota
(xfs_mount_t *,
xfs_dqid_t
,
uint
,
118
fs_disk_quota_t
*);
119
extern
int
xfs_qm_scall_setqlim
(xfs_mount_t *,
xfs_dqid_t
,
uint
,
120
fs_disk_quota_t
*);
121
extern
int
xfs_qm_scall_getqstat
(xfs_mount_t *,
fs_quota_stat_t
*);
122
extern
int
xfs_qm_scall_quotaon
(xfs_mount_t *,
uint
);
123
extern
int
xfs_qm_scall_quotaoff
(xfs_mount_t *,
uint
);
124
125
#endif
/* __XFS_QM_H__ */
Generated on Thu Jan 10 2013 14:50:35 for Linux Kernel by
1.8.2