diff options
author | Christoph Hellwig <hch@lst.de> | 2009-04-27 10:43:54 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-11 21:36:04 -0400 |
commit | 850b201b087f5525a0a7278551c2bcd0423c3b26 (patch) | |
tree | a076f135430380d2ffaeb041ee53d09352cb2752 /fs/quota | |
parent | 60b0680fa236ac4e17ce31a50048c9d75f9ec831 (diff) |
quota: cleanup dquota sync functions (version 4)
Currently the VFS calls vfs_dq_sync to sync out disk quotas for a given
superblock. This is a small wrapper around sync_dquots which for the
case of a non-NULL superblock is a small wrapper around quota_sync_sb.
Just make quota_sync_sb global (rename it to sync_quota_sb) and call it
directly. Also call it directly for those cases in quota.c that have a
superblock and leave sync_dquots purely an iterator over sync_quota_sb and
remove it's superblock argument.
To make this nicer move the check for the lack of a quota_sync method
from the callers into sync_quota_sb.
[folded build fix from Alexander Beregalov <a.beregalov@gmail.com>]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/quota')
-rw-r--r-- | fs/quota/quota.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/fs/quota/quota.c b/fs/quota/quota.c index b7f5a468f076..95c5b42384b2 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c | |||
@@ -159,10 +159,14 @@ static int check_quotactl_valid(struct super_block *sb, int type, int cmd, | |||
159 | return error; | 159 | return error; |
160 | } | 160 | } |
161 | 161 | ||
162 | static void quota_sync_sb(struct super_block *sb, int type) | 162 | #ifdef CONFIG_QUOTA |
163 | void sync_quota_sb(struct super_block *sb, int type) | ||
163 | { | 164 | { |
164 | int cnt; | 165 | int cnt; |
165 | 166 | ||
167 | if (!sb->s_qcop->quota_sync) | ||
168 | return; | ||
169 | |||
166 | sb->s_qcop->quota_sync(sb, type); | 170 | sb->s_qcop->quota_sync(sb, type); |
167 | 171 | ||
168 | if (sb_dqopt(sb)->flags & DQUOT_QUOTA_SYS_FILE) | 172 | if (sb_dqopt(sb)->flags & DQUOT_QUOTA_SYS_FILE) |
@@ -191,17 +195,13 @@ static void quota_sync_sb(struct super_block *sb, int type) | |||
191 | } | 195 | } |
192 | mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex); | 196 | mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex); |
193 | } | 197 | } |
198 | #endif | ||
194 | 199 | ||
195 | void sync_dquots(struct super_block *sb, int type) | 200 | static void sync_dquots(int type) |
196 | { | 201 | { |
202 | struct super_block *sb; | ||
197 | int cnt; | 203 | int cnt; |
198 | 204 | ||
199 | if (sb) { | ||
200 | if (sb->s_qcop->quota_sync) | ||
201 | quota_sync_sb(sb, type); | ||
202 | return; | ||
203 | } | ||
204 | |||
205 | spin_lock(&sb_lock); | 205 | spin_lock(&sb_lock); |
206 | restart: | 206 | restart: |
207 | list_for_each_entry(sb, &super_blocks, s_list) { | 207 | list_for_each_entry(sb, &super_blocks, s_list) { |
@@ -222,8 +222,8 @@ restart: | |||
222 | sb->s_count++; | 222 | sb->s_count++; |
223 | spin_unlock(&sb_lock); | 223 | spin_unlock(&sb_lock); |
224 | down_read(&sb->s_umount); | 224 | down_read(&sb->s_umount); |
225 | if (sb->s_root && sb->s_qcop->quota_sync) | 225 | if (sb->s_root) |
226 | quota_sync_sb(sb, type); | 226 | sync_quota_sb(sb, type); |
227 | up_read(&sb->s_umount); | 227 | up_read(&sb->s_umount); |
228 | spin_lock(&sb_lock); | 228 | spin_lock(&sb_lock); |
229 | if (__put_super_and_need_restart(sb)) | 229 | if (__put_super_and_need_restart(sb)) |
@@ -301,7 +301,10 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id, | |||
301 | return sb->s_qcop->set_dqblk(sb, type, id, &idq); | 301 | return sb->s_qcop->set_dqblk(sb, type, id, &idq); |
302 | } | 302 | } |
303 | case Q_SYNC: | 303 | case Q_SYNC: |
304 | sync_dquots(sb, type); | 304 | if (sb) |
305 | sync_quota_sb(sb, type); | ||
306 | else | ||
307 | sync_dquots(type); | ||
305 | return 0; | 308 | return 0; |
306 | 309 | ||
307 | case Q_XQUOTAON: | 310 | case Q_XQUOTAON: |