summaryrefslogtreecommitdiff
path: root/fs/quota
diff options
context:
space:
mode:
authorJeff Mahoney <jeffm@suse.com>2013-02-27 14:43:09 -0500
committerJan Kara <jack@suse.cz>2013-03-11 22:05:56 +0100
commit68ac8bfb6aa4ce1a146b5a291f03fc2dd6d17cf2 (patch)
treeeabebb028d5b7023bf57c72d5936891a01a0e3d8 /fs/quota
parentf6161aa153581da4a3867a2d1a7caf4be19b6ec9 (diff)
downloadlwn-68ac8bfb6aa4ce1a146b5a291f03fc2dd6d17cf2.tar.gz
lwn-68ac8bfb6aa4ce1a146b5a291f03fc2dd6d17cf2.zip
quota: add missing use of dq_data_lock in __dquot_initialize
The bulk of __dquot_initialize runs under the dqptr_sem which protects the inode->i_dquot pointers. It doesn't protect the dereferenced contents, though. Those are protected by the dq_data_lock, which is missing around the dquot_resv_space call. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/quota')
-rw-r--r--fs/quota/dquot.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 05ae3c97f7a5..3e64169ef527 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -1439,8 +1439,11 @@ static void __dquot_initialize(struct inode *inode, int type)
* did a write before quota was turned on
*/
rsv = inode_get_rsv_space(inode);
- if (unlikely(rsv))
+ if (unlikely(rsv)) {
+ spin_lock(&dq_data_lock);
dquot_resv_space(inode->i_dquot[cnt], rsv);
+ spin_unlock(&dq_data_lock);
+ }
}
}
out_err: