summaryrefslogtreecommitdiffstats
path: root/fs/quota
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-06-08 15:06:28 +0200
committerJan Kara <jack@suse.cz>2017-08-17 18:59:04 +0200
commitd6ab3661020cbf8a8909b49a8e1408d5ae434001 (patch)
tree5607206d8306bd409efa27212911b99fedeb188c /fs/quota
parent0cff9151d3fa27574c2201377a080e1b9b87b8ba (diff)
downloadlinux-stable-d6ab3661020cbf8a8909b49a8e1408d5ae434001.tar.gz
linux-stable-d6ab3661020cbf8a8909b49a8e1408d5ae434001.tar.bz2
linux-stable-d6ab3661020cbf8a8909b49a8e1408d5ae434001.zip
quota: Acquire dqio_sem for reading in vfs_load_quota_inode()
vfs_load_quota_inode() needs dqio_sem only for reading. In fact dqio_sem is not needed there at all since the function can be called only during quota on when quota file cannot be modified but let's leave the protection there since it is logical and the path is in no way performance critical. Reviewed-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/quota')
-rw-r--r--fs/quota/dquot.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 8d5ccad3bf3e..3852a3c79ac9 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -2331,15 +2331,15 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id,
dqopt->info[type].dqi_format = fmt;
dqopt->info[type].dqi_fmt_id = format_id;
INIT_LIST_HEAD(&dqopt->info[type].dqi_dirty_list);
- down_write(&dqopt->dqio_sem);
+ down_read(&dqopt->dqio_sem);
error = dqopt->ops[type]->read_file_info(sb, type);
if (error < 0) {
- up_write(&dqopt->dqio_sem);
+ up_read(&dqopt->dqio_sem);
goto out_file_init;
}
if (dqopt->flags & DQUOT_QUOTA_SYS_FILE)
dqopt->info[type].dqi_flags |= DQF_SYS_FILE;
- up_write(&dqopt->dqio_sem);
+ up_read(&dqopt->dqio_sem);
spin_lock(&dq_state_lock);
dqopt->flags |= dquot_state_flag(flags, type);
spin_unlock(&dq_state_lock);