<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style>
<!--
@font-face
        {font-family:SimSun}
@font-face
        {font-family:SimSun}
@font-face
        {font-family:Calibri}
@font-face
        {font-family:SimSun}
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif"}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
span.EmailStyle17
        {font-family:"Calibri","sans-serif";
        color:windowtext}
.MsoChpDefault
        {}
@page WordSection1
        {margin:72.0pt 90.0pt 72.0pt 90.0pt}
div.WordSection1
        {}
-->
</style>
</head>
<body lang="ZH-CN" link="blue" vlink="purple" style="">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi, </span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span lang="EN-US">I find some code may be not correct as reviewing the heart beat code and test that.</span></p>
<p class="MsoNormal"><span lang="EN-US">The heart beat writing onto disk.</span></p>
<p class="MsoNormal"><span lang="EN-US">I have another question that why not encapsulate the o2hb_wait_on_io into the function o2hb_issue_node_write, just as the function o2hb_read_slots.</span></p>
<p class="MsoNormal"><span lang="EN-US">I don&#8217;t know whether the changes is correct.</span></p>
<p class="MsoNormal"><span lang="EN-US">Requesting reviews of the changes? Thanks.
</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span lang="EN-US">diff -p -C 6 cluster-old/heartbeat.c cluster-new/heartbeat.c
</span></p>
<p class="MsoNormal"><span lang="EN-US">*** cluster-old/heartbeat.c&nbsp;&nbsp;&nbsp; 2013-07-31 18:18:35.625069131 &#43;0800</span></p>
<p class="MsoNormal"><span lang="EN-US">--- cluster-new/heartbeat.c&nbsp;&nbsp;&nbsp; 2013-07-31 18:18:35.613069052 &#43;0800</span></p>
<p class="MsoNormal"><span lang="EN-US">*************** static int o2hb_do_disk_heartbeat(struct</span></p>
<p class="MsoNormal"><span lang="EN-US">*** 1029,1046 ****</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; ret = o2hb_issue_node_write(reg, &amp;write_wc);</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; if (ret &lt; 0) {</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mlog_errno(ret);</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto bail;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; </span></p>
<p class="MsoNormal"><span lang="EN-US">- &nbsp;&nbsp;&nbsp;&nbsp; i = -1;</span></p>
<p class="MsoNormal"><span lang="EN-US">- &nbsp;&nbsp;&nbsp;&nbsp; while((i = find_next_bit(configured_nodes,</span></p>
<p class="MsoNormal"><span lang="EN-US">- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;O2NM_MAX_NODES, i &#43; 1)) &lt; O2NM_MAX_NODES) {</span></p>
<p class="MsoNormal"><span lang="EN-US">- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; membership_change |= o2hb_check_slot(reg, &amp;reg-&gt;hr_slots[i]);</span></p>
<p class="MsoNormal"><span lang="EN-US">- &nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span lang="EN-US">- </span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* We have to be sure we've advertised ourselves on disk</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* before we can go to steady state.&nbsp; This ensures that</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* people we find in our steady state have seen us.</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; o2hb_wait_on_io(reg, &amp;write_wc);</span></p>
<p class="MsoNormal"><span lang="EN-US">--- 1029,1040 ----</span></p>
<p class="MsoNormal"><span lang="EN-US">*************** static int o2hb_do_disk_heartbeat(struct</span></p>
<p class="MsoNormal"><span lang="EN-US">*** 1058,1069 ****</span></p>
<p class="MsoNormal"><span lang="EN-US">--- 1052,1069 ----</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; if (own_slot_ok) {</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o2hb_set_quorum_device(reg);</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o2hb_arm_write_timeout(reg);</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; </span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;bail:</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43;&nbsp;&nbsp;&nbsp;&nbsp; i = -1;</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43; &nbsp;&nbsp;&nbsp; while((i = find_next_bit(configured_nodes,</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;O2NM_MAX_NODES, i &#43; 1)) &lt; O2NM_MAX_NODES) {</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; membership_change |= o2hb_check_slot(reg, &amp;reg-&gt;hr_slots[i]);</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43; &nbsp;&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span lang="EN-US">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* let the person who launched us know when things are steady */</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp; if (atomic_read(&amp;reg-&gt;hr_steady_iterations) != 0) {</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!ret &amp;&amp; own_slot_ok &amp;&amp; !membership_change) {</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (atomic_dec_and_test(&amp;reg-&gt;hr_steady_iterations))</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wake_up(&amp;o2hb_steady_queue);</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
</div>
<span style="font-size:7.5pt; font-family:&#21326;&#25991;&#32454;&#40657;; color:gray"><span lang="EN-US">-------------------------------------------------------------------------------------------------------------------------------------<br>
</span>&#26412;&#37038;&#20214;&#21450;&#20854;&#38468;&#20214;&#21547;&#26377;&#26477;&#24030;&#21326;&#19977;&#36890;&#20449;&#25216;&#26415;&#26377;&#38480;&#20844;&#21496;&#30340;&#20445;&#23494;&#20449;&#24687;&#65292;&#20165;&#38480;&#20110;&#21457;&#36865;&#32473;&#19978;&#38754;&#22320;&#22336;&#20013;&#21015;&#20986;<span lang="EN-US"><br>
</span>&#30340;&#20010;&#20154;&#25110;&#32676;&#32452;&#12290;&#31105;&#27490;&#20219;&#20309;&#20854;&#20182;&#20154;&#20197;&#20219;&#20309;&#24418;&#24335;&#20351;&#29992;&#65288;&#21253;&#25324;&#20294;&#19981;&#38480;&#20110;&#20840;&#37096;&#25110;&#37096;&#20998;&#22320;&#27844;&#38706;&#12289;&#22797;&#21046;&#12289;<span lang="EN-US"><br>
</span>&#25110;&#25955;&#21457;&#65289;&#26412;&#37038;&#20214;&#20013;&#30340;&#20449;&#24687;&#12290;&#22914;&#26524;&#24744;&#38169;&#25910;&#20102;&#26412;&#37038;&#20214;&#65292;&#35831;&#24744;&#31435;&#21363;&#30005;&#35805;&#25110;&#37038;&#20214;&#36890;&#30693;&#21457;&#20214;&#20154;&#24182;&#21024;&#38500;&#26412;<span lang="EN-US"><br>
</span>&#37038;&#20214;&#65281;<span lang="EN-US"><br>
</span></span><span lang="EN-US" style="font-size:7.5pt; font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; color:gray">This e-mail and its attachments contain confidential information from H3C, which is
<br>
intended only for the person or entity whose address is listed above. Any use of the
<br>
information contained herein in any way (including, but not limited to, total or partial
<br>
disclosure, reproduction, or dissemination) by persons other than the intended <br>
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
<br>
by phone or email immediately and delete it!</span>
</body>
</html>