diff options
author | Jeff Mahoney <jeffm@suse.com> | 2013-02-27 20:43:09 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2013-03-11 22:05:56 +0100 |
commit | 68ac8bfb6aa4ce1a146b5a291f03fc2dd6d17cf2 (patch) | |
tree | eabebb028d5b7023bf57c72d5936891a01a0e3d8 /fs/quota/dquot.c | |
parent | Linux 3.9-rc2 (diff) | |
download | linux-68ac8bfb6aa4ce1a146b5a291f03fc2dd6d17cf2.tar.xz linux-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/dquot.c')
-rw-r--r-- | fs/quota/dquot.c | 5 |
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: |