<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hi Joel,</div><div><br /></div><div>Thanks for your suggestion and i've sent a new patch for it.</div><div><br /></div><div>Thanks,</div><div>Xu<br /></div><br /><br /><br /><br /><div  style="position:relative;zoom:1"></div><br /><pre><br />From: Joel Colledge &lt;joel.colledge@linbit.com&gt;
Date: 2022-05-03 16:37:28
To:  Rui Xu &lt;rui.xu@easystack.cn&gt;
Cc:  Philipp Reisner &lt;philipp.reisner@linbit.com&gt;,drbd-dev@lists.linbit.com
Subject: Re: [Drbd-dev] [PATCH] drbd: change the variable ov_left to atomic&gt;Hi Xu,
&gt;
&gt;Your analysis of the problem seems correct to me. Some details of the
&gt;fix could be improved.
&gt;
&gt;In verify_progress() there are now 3 separate atomic operations. It
&gt;would be better to use atomic64_dec_return() and then use the returned
&gt;value instead of calling atomic64_read() separately. This could have
&gt;minor effects on the behavior.
&gt;
&gt;Similarly, in receive_DataRequest() there is no need to read ov_left
&gt;again after setting it. This should have no effect on the behavior,
&gt;but leads to cleaner code.
&gt;
&gt;Also the repeated reads in finish_state_change() could be avoided for
&gt;cleaner code. Take care of the read after set_ov_position(), since
&gt;that changes the value of ov_left. You could use peer_device-&gt;rs_total
&gt;instead of peer_device-&gt;ov_left there, since that is what it is set to
&gt;in set_ov_position().
&gt;
&gt;Best regards,
&gt;Joel
</pre></div><br>