Skip to content

Commit

Permalink
quota: Acquire dqio_sem for reading in vfs_load_quota_inode()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Jan Kara <[email protected]>
  • Loading branch information
jankara committed Aug 17, 2017
1 parent 0cff915 commit d6ab366
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
6 changes: 3 additions & 3 deletions fs/ocfs2/quota_local.c
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ static int ocfs2_local_read_info(struct super_block *sb, int type)

/* We don't need the lock and we have to acquire quota file locks
* which will later depend on this lock */
up_write(&sb_dqopt(sb)->dqio_sem);
up_read(&sb_dqopt(sb)->dqio_sem);
info->dqi_max_spc_limit = 0x7fffffffffffffffLL;
info->dqi_max_ino_limit = 0x7fffffffffffffffLL;
oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS);
Expand Down Expand Up @@ -772,7 +772,7 @@ static int ocfs2_local_read_info(struct super_block *sb, int type)
goto out_err;
}

down_write(&sb_dqopt(sb)->dqio_sem);
down_read(&sb_dqopt(sb)->dqio_sem);
return 0;
out_err:
if (oinfo) {
Expand All @@ -786,7 +786,7 @@ static int ocfs2_local_read_info(struct super_block *sb, int type)
kfree(oinfo);
}
brelse(bh);
down_write(&sb_dqopt(sb)->dqio_sem);
down_read(&sb_dqopt(sb)->dqio_sem);
return -1;
}

Expand Down
6 changes: 3 additions & 3 deletions fs/quota/dquot.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit d6ab366

Please sign in to comment.