diff options
-rw-r--r-- | fs/quota.c | 18 | ||||
-rw-r--r-- | include/linux/quota.h | 2 |
2 files changed, 12 insertions, 8 deletions
diff --git a/fs/quota.c b/fs/quota.c index db1cc9f3c7aa..7f4386ebc23a 100644 --- a/fs/quota.c +++ b/fs/quota.c | |||
@@ -186,7 +186,7 @@ static void quota_sync_sb(struct super_block *sb, int type) | |||
186 | 186 | ||
187 | void sync_dquots(struct super_block *sb, int type) | 187 | void sync_dquots(struct super_block *sb, int type) |
188 | { | 188 | { |
189 | int cnt, dirty; | 189 | int cnt; |
190 | 190 | ||
191 | if (sb) { | 191 | if (sb) { |
192 | if (sb->s_qcop->quota_sync) | 192 | if (sb->s_qcop->quota_sync) |
@@ -198,11 +198,17 @@ void sync_dquots(struct super_block *sb, int type) | |||
198 | restart: | 198 | restart: |
199 | list_for_each_entry(sb, &super_blocks, s_list) { | 199 | list_for_each_entry(sb, &super_blocks, s_list) { |
200 | /* This test just improves performance so it needn't be reliable... */ | 200 | /* This test just improves performance so it needn't be reliable... */ |
201 | for (cnt = 0, dirty = 0; cnt < MAXQUOTAS; cnt++) | 201 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { |
202 | if ((type == cnt || type == -1) && sb_has_quota_enabled(sb, cnt) | 202 | if (type != -1 && type != cnt) |
203 | && info_any_dirty(&sb_dqopt(sb)->info[cnt])) | 203 | continue; |
204 | dirty = 1; | 204 | if (!sb_has_quota_enabled(sb, cnt)) |
205 | if (!dirty) | 205 | continue; |
206 | if (!info_dirty(&sb_dqopt(sb)->info[cnt]) && | ||
207 | list_empty(&sb_dqopt(sb)->info[cnt].dqi_dirty_list)) | ||
208 | continue; | ||
209 | break; | ||
210 | } | ||
211 | if (cnt == MAXQUOTAS) | ||
206 | continue; | 212 | continue; |
207 | sb->s_count++; | 213 | sb->s_count++; |
208 | spin_unlock(&sb_lock); | 214 | spin_unlock(&sb_lock); |
diff --git a/include/linux/quota.h b/include/linux/quota.h index dcddfb200947..6f1d97ddf828 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
@@ -224,8 +224,6 @@ struct super_block; | |||
224 | 224 | ||
225 | extern void mark_info_dirty(struct super_block *sb, int type); | 225 | extern void mark_info_dirty(struct super_block *sb, int type); |
226 | #define info_dirty(info) test_bit(DQF_INFO_DIRTY_B, &(info)->dqi_flags) | 226 | #define info_dirty(info) test_bit(DQF_INFO_DIRTY_B, &(info)->dqi_flags) |
227 | #define info_any_dquot_dirty(info) (!list_empty(&(info)->dqi_dirty_list)) | ||
228 | #define info_any_dirty(info) (info_dirty(info) || info_any_dquot_dirty(info)) | ||
229 | 227 | ||
230 | #define sb_dqopt(sb) (&(sb)->s_dquot) | 228 | #define sb_dqopt(sb) (&(sb)->s_dquot) |
231 | #define sb_dqinfo(sb, type) (sb_dqopt(sb)->info+(type)) | 229 | #define sb_dqinfo(sb, type) (sb_dqopt(sb)->info+(type)) |