|
@@ -328,12 +328,16 @@ static int v2_write_dquot(struct dquot *dquot)
|
|
if (!dquot->dq_off) {
|
|
if (!dquot->dq_off) {
|
|
alloc = true;
|
|
alloc = true;
|
|
down_write(&dqopt->dqio_sem);
|
|
down_write(&dqopt->dqio_sem);
|
|
|
|
+ } else {
|
|
|
|
+ down_read(&dqopt->dqio_sem);
|
|
}
|
|
}
|
|
ret = qtree_write_dquot(
|
|
ret = qtree_write_dquot(
|
|
sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv,
|
|
sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv,
|
|
dquot);
|
|
dquot);
|
|
if (alloc)
|
|
if (alloc)
|
|
up_write(&dqopt->dqio_sem);
|
|
up_write(&dqopt->dqio_sem);
|
|
|
|
+ else
|
|
|
|
+ up_read(&dqopt->dqio_sem);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|