On Aug 16, 2017, at 9:41 AM, Jan Kara <jack@xxxxxxx> wrote: > > 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. > > Signed-off-by: Jan Kara <jack@xxxxxxx> Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx> > --- > fs/ocfs2/quota_local.c | 6 +++--- > fs/quota/dquot.c | 6 +++--- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c > index 1311eff1c050..1829f6a45d46 100644 > --- a/fs/ocfs2/quota_local.c > +++ b/fs/ocfs2/quota_local.c > @@ -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); > @@ -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) { > @@ -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; > } > > 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); > -- > 2.12.3 > Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP