Hi Alex,
I ran the xfstests 234 with procs set to 20 and I can consistently make
it hang.
Looks like, the log buffer is full and all the processes are sleeping at
xlog_wait() or blocked on a mutex which was held by a process that is
sleeping on xlog_wait().
wake up happens when sync is invoked and all processes run free to
completion.
In order to verify the hypothesis, I added the following code
-------------------------
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
index 5cc3dde..b2c0d49 100644
--- a/fs/xfs/xfs_qm_syscalls.c
+++ b/fs/xfs/xfs_qm_syscalls.c
@@ -621,6 +621,7 @@ xfs_qm_scall_setqlim(
dqp->dq_flags |= XFS_DQ_DIRTY;
xfs_trans_log_dquot(tp, dqp);
+ xfs_trans_set_sync(tp);
error = xfs_trans_commit(tp, 0);
xfs_qm_dqrele(dqp);
--------------------------
and it seems to work well.
Not sure if this can be a fix or the nudge has to happen somewhere else.
Please comment.
Regards,
Chandra
|