[Gluster-devel] How does GD_SYNCOP work?
Emmanuel Dreyfus
manu at netbsd.org
Wed Sep 10 09:11:41 UTC 2014
Hi
I am tracking a bug that appear when running self_heald.t on NetBSD.
The test will hang on:
EXPECT "$HEAL_FILES" afr_get_pending_heal_count $V0
The problem inside afr_get_pending_heal_count is when calling
gluster volume heal $vol info
The command will never return. By adding a lot of printf, I
tracked down the problem to GD_SYNCOP() when called throigh
gd_syncop_mgmt_brick_op()
In GD_SYNCOP(), once gd_syncop_submit_request() is called
with success, we call synctask_yield() to wait for the
reply. It will never come: _gd_syncop_brick_op_cbk() is not called.
I suspect this is a synctask_wake() problem somewhere. If I
add synctask_wake() before synctask_yiel() in GD_SYNCOP(),
the currrent task is scheduled immediatly, gd_syncop_mgmt_brick_op()
exits, then later _gd_syncop_brick_op_cbk() is invoked. Of course
it will crash, because the context (args) was allocated on the
stack in gd_syncop_mgmt_brick_op(),
Anyone has an idea of what is going on?
--
Emmanuel Dreyfus
manu at netbsd.org
More information about the Gluster-devel
mailing list