aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/quota/dquot.c3
-rw-r--r--include/linux/quota.h15
-rw-r--r--include/linux/quotaops.h31
3 files changed, 26 insertions, 23 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 4c2213f7ed36..5a831dc5ab28 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -1301,7 +1301,7 @@ int dquot_initialize(struct inode *inode, int type)
1301{ 1301{
1302 unsigned int id = 0; 1302 unsigned int id = 0;
1303 int cnt, ret = 0; 1303 int cnt, ret = 0;
1304 struct dquot *got[MAXQUOTAS] = { NULL, NULL }; 1304 struct dquot *got[MAXQUOTAS];
1305 struct super_block *sb = inode->i_sb; 1305 struct super_block *sb = inode->i_sb;
1306 qsize_t rsv; 1306 qsize_t rsv;
1307 1307
@@ -1312,6 +1312,7 @@ int dquot_initialize(struct inode *inode, int type)
1312 1312
1313 /* First get references to structures we might need. */ 1313 /* First get references to structures we might need. */
1314 for (cnt = 0; cnt < MAXQUOTAS; cnt++) { 1314 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1315 got[cnt] = NULL;
1315 if (type != -1 && cnt != type) 1316 if (type != -1 && cnt != type)
1316 continue; 1317 continue;
1317 switch (cnt) { 1318 switch (cnt) {
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 570348cbccb1..92547a57e25a 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -357,26 +357,25 @@ enum {
357#define DQUOT_STATE_FLAGS (DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED | \ 357#define DQUOT_STATE_FLAGS (DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED | \
358 DQUOT_SUSPENDED) 358 DQUOT_SUSPENDED)
359/* Other quota flags */ 359/* Other quota flags */
360#define DQUOT_QUOTA_SYS_FILE (1 << 6) /* Quota file is a special 360#define DQUOT_STATE_LAST (_DQUOT_STATE_FLAGS * MAXQUOTAS)
361#define DQUOT_QUOTA_SYS_FILE (1 << DQUOT_STATE_LAST)
362 /* Quota file is a special
361 * system file and user cannot 363 * system file and user cannot
362 * touch it. Filesystem is 364 * touch it. Filesystem is
363 * responsible for setting 365 * responsible for setting
364 * S_NOQUOTA, S_NOATIME flags 366 * S_NOQUOTA, S_NOATIME flags
365 */ 367 */
366#define DQUOT_NEGATIVE_USAGE (1 << 7) /* Allow negative quota usage */ 368#define DQUOT_NEGATIVE_USAGE (1 << (DQUOT_STATE_LAST + 1))
369 /* Allow negative quota usage */
367 370
368static inline unsigned int dquot_state_flag(unsigned int flags, int type) 371static inline unsigned int dquot_state_flag(unsigned int flags, int type)
369{ 372{
370 if (type == USRQUOTA) 373 return flags << _DQUOT_STATE_FLAGS * type;
371 return flags;
372 return flags << _DQUOT_STATE_FLAGS;
373} 374}
374 375
375static inline unsigned int dquot_generic_flag(unsigned int flags, int type) 376static inline unsigned int dquot_generic_flag(unsigned int flags, int type)
376{ 377{
377 if (type == USRQUOTA) 378 return (flags >> _DQUOT_STATE_FLAGS * type) & DQUOT_STATE_FLAGS;
378 return flags;
379 return flags >> _DQUOT_STATE_FLAGS;
380} 379}
381 380
382#ifdef CONFIG_QUOTA_NETLINK_INTERFACE 381#ifdef CONFIG_QUOTA_NETLINK_INTERFACE
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
index 8cfd0d44c994..e563a20cff4f 100644
--- a/include/linux/quotaops.h
+++ b/include/linux/quotaops.h
@@ -79,53 +79,56 @@ static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
79 * Functions for checking status of quota 79 * Functions for checking status of quota
80 */ 80 */
81 81
82static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type) 82static inline bool sb_has_quota_usage_enabled(struct super_block *sb, int type)
83{ 83{
84 return sb_dqopt(sb)->flags & 84 return sb_dqopt(sb)->flags &
85 dquot_state_flag(DQUOT_USAGE_ENABLED, type); 85 dquot_state_flag(DQUOT_USAGE_ENABLED, type);
86} 86}
87 87
88static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type) 88static inline bool sb_has_quota_limits_enabled(struct super_block *sb, int type)
89{ 89{
90 return sb_dqopt(sb)->flags & 90 return sb_dqopt(sb)->flags &
91 dquot_state_flag(DQUOT_LIMITS_ENABLED, type); 91 dquot_state_flag(DQUOT_LIMITS_ENABLED, type);
92} 92}
93 93
94static inline int sb_has_quota_suspended(struct super_block *sb, int type) 94static inline bool sb_has_quota_suspended(struct super_block *sb, int type)
95{ 95{
96 return sb_dqopt(sb)->flags & 96 return sb_dqopt(sb)->flags &
97 dquot_state_flag(DQUOT_SUSPENDED, type); 97 dquot_state_flag(DQUOT_SUSPENDED, type);
98} 98}
99 99
100static inline int sb_any_quota_suspended(struct super_block *sb) 100static inline unsigned sb_any_quota_suspended(struct super_block *sb)
101{ 101{
102 return sb_has_quota_suspended(sb, USRQUOTA) || 102 unsigned type, tmsk = 0;
103 sb_has_quota_suspended(sb, GRPQUOTA); 103 for (type = 0; type < MAXQUOTAS; type++)
104 tmsk |= sb_has_quota_suspended(sb, type) << type;
105 return tmsk;
104} 106}
105 107
106/* Does kernel know about any quota information for given sb + type? */ 108/* Does kernel know about any quota information for given sb + type? */
107static inline int sb_has_quota_loaded(struct super_block *sb, int type) 109static inline bool sb_has_quota_loaded(struct super_block *sb, int type)
108{ 110{
109 /* Currently if anything is on, then quota usage is on as well */ 111 /* Currently if anything is on, then quota usage is on as well */
110 return sb_has_quota_usage_enabled(sb, type); 112 return sb_has_quota_usage_enabled(sb, type);
111} 113}
112 114
113static inline int sb_any_quota_loaded(struct super_block *sb) 115static inline unsigned sb_any_quota_loaded(struct super_block *sb)
114{ 116{
115 return sb_has_quota_loaded(sb, USRQUOTA) || 117 unsigned type, tmsk = 0;
116 sb_has_quota_loaded(sb, GRPQUOTA); 118 for (type = 0; type < MAXQUOTAS; type++)
119 tmsk |= sb_has_quota_loaded(sb, type) << type;
120 return tmsk;
117} 121}
118 122
119static inline int sb_has_quota_active(struct super_block *sb, int type) 123static inline bool sb_has_quota_active(struct super_block *sb, int type)
120{ 124{
121 return sb_has_quota_loaded(sb, type) && 125 return sb_has_quota_loaded(sb, type) &&
122 !sb_has_quota_suspended(sb, type); 126 !sb_has_quota_suspended(sb, type);
123} 127}
124 128
125static inline int sb_any_quota_active(struct super_block *sb) 129static inline unsigned sb_any_quota_active(struct super_block *sb)
126{ 130{
127 return sb_has_quota_active(sb, USRQUOTA) || 131 return sb_any_quota_loaded(sb) & ~sb_any_quota_suspended(sb);
128 sb_has_quota_active(sb, GRPQUOTA);
129} 132}
130 133
131/* 134/*