diff options
author | Jan Kara <jack@suse.cz> | 2017-06-08 15:06:28 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2017-08-17 18:59:04 +0200 |
commit | d6ab3661020cbf8a8909b49a8e1408d5ae434001 (patch) | |
tree | 5607206d8306bd409efa27212911b99fedeb188c /fs/quota | |
parent | 0cff9151d3fa27574c2201377a080e1b9b87b8ba (diff) | |
download | op-kernel-dev-d6ab3661020cbf8a8909b49a8e1408d5ae434001.zip op-kernel-dev-d6ab3661020cbf8a8909b49a8e1408d5ae434001.tar.gz |
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.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 8d5ccad..3852a3c 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); |