quota: Convert dqio_mutex to rwsem
Convert dqio_mutex to rwsem and call it dqio_sem. No functional changes yet. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
* Locking of quotas with OCFS2 is rather complex. Here are rules that
|
||||
* should be obeyed by all the functions:
|
||||
* - any write of quota structure (either to local or global file) is protected
|
||||
* by dqio_mutex or dquot->dq_lock.
|
||||
* by dqio_sem or dquot->dq_lock.
|
||||
* - any modification of global quota file holds inode cluster lock, i_mutex,
|
||||
* and ip_alloc_sem of the global quota file (achieved by
|
||||
* ocfs2_lock_global_qf). It also has to hold qinfo_lock.
|
||||
@@ -42,9 +42,9 @@
|
||||
*
|
||||
* A rough sketch of locking dependencies (lf = local file, gf = global file):
|
||||
* Normal filesystem operation:
|
||||
* start_trans -> dqio_mutex -> write to lf
|
||||
* start_trans -> dqio_sem -> write to lf
|
||||
* Syncing of local and global file:
|
||||
* ocfs2_lock_global_qf -> start_trans -> dqio_mutex -> qinfo_lock ->
|
||||
* ocfs2_lock_global_qf -> start_trans -> dqio_sem -> qinfo_lock ->
|
||||
* write to gf
|
||||
* -> write to lf
|
||||
* Acquire dquot for the first time:
|
||||
@@ -60,7 +60,7 @@
|
||||
* Recovery:
|
||||
* inode cluster lock of recovered lf
|
||||
* -> read bitmaps -> ip_alloc_sem of lf
|
||||
* -> ocfs2_lock_global_qf -> start_trans -> dqio_mutex -> qinfo_lock ->
|
||||
* -> ocfs2_lock_global_qf -> start_trans -> dqio_sem -> qinfo_lock ->
|
||||
* write to gf
|
||||
*/
|
||||
|
||||
@@ -611,7 +611,7 @@ static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type)
|
||||
mlog_errno(status);
|
||||
goto out_ilock;
|
||||
}
|
||||
mutex_lock(&sb_dqopt(sb)->dqio_mutex);
|
||||
down_write(&sb_dqopt(sb)->dqio_sem);
|
||||
status = ocfs2_sync_dquot(dquot);
|
||||
if (status < 0)
|
||||
mlog_errno(status);
|
||||
@@ -619,7 +619,7 @@ static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type)
|
||||
status = ocfs2_local_write_dquot(dquot);
|
||||
if (status < 0)
|
||||
mlog_errno(status);
|
||||
mutex_unlock(&sb_dqopt(sb)->dqio_mutex);
|
||||
up_write(&sb_dqopt(sb)->dqio_sem);
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
out_ilock:
|
||||
ocfs2_unlock_global_qf(oinfo, 1);
|
||||
@@ -666,9 +666,9 @@ static int ocfs2_write_dquot(struct dquot *dquot)
|
||||
mlog_errno(status);
|
||||
goto out;
|
||||
}
|
||||
mutex_lock(&sb_dqopt(dquot->dq_sb)->dqio_mutex);
|
||||
down_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
|
||||
status = ocfs2_local_write_dquot(dquot);
|
||||
mutex_unlock(&sb_dqopt(dquot->dq_sb)->dqio_mutex);
|
||||
up_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
out:
|
||||
return status;
|
||||
@@ -939,7 +939,7 @@ static int ocfs2_mark_dquot_dirty(struct dquot *dquot)
|
||||
mlog_errno(status);
|
||||
goto out_ilock;
|
||||
}
|
||||
mutex_lock(&sb_dqopt(sb)->dqio_mutex);
|
||||
down_write(&sb_dqopt(sb)->dqio_sem);
|
||||
status = ocfs2_sync_dquot(dquot);
|
||||
if (status < 0) {
|
||||
mlog_errno(status);
|
||||
@@ -948,7 +948,7 @@ static int ocfs2_mark_dquot_dirty(struct dquot *dquot)
|
||||
/* Now write updated local dquot structure */
|
||||
status = ocfs2_local_write_dquot(dquot);
|
||||
out_dlock:
|
||||
mutex_unlock(&sb_dqopt(sb)->dqio_mutex);
|
||||
up_write(&sb_dqopt(sb)->dqio_sem);
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
out_ilock:
|
||||
ocfs2_unlock_global_qf(oinfo, 1);
|
||||
|
Reference in New Issue
Block a user