<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}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif"}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:9.0pt;
        font-family:"Calibri","sans-serif"}
span.EmailStyle17
        {font-family:"Calibri","sans-serif";
        color:windowtext}
span.Char
        {font-family:"Calibri","sans-serif"}
span.Char0
        {}
.MsoChpDefault
        {font-family:"Calibri","sans-serif"}
@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="MsoPlainText"><span lang="EN-US">Hi Jiang, </span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">I think there is another scenario about slot overwritten issue.
</span></p>
<p class="MsoPlainText"><span lang="EN-US">There are three nodes in the ocfs2 cluster. Node 3 had mounted with slot 1.
</span></p>
<p class="MsoPlainText"><span lang="EN-US">Node 1 and node 2 execute mounting volume operation at the same time.
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US"> N1 N2</span></p>
<p class="MsoPlainText"><span lang="EN-US"> mount ocfs2 volume mount ocfs2 volume
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ocfs2_fill_super() ocfs2_fill_super()
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ocfs2_initialize_super ocfs2_initialize_super</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ... ... ... ...
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ocfs2_init_slot_info(osb); ocfs2_init_slot_info(osb);
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ocfs2_mount_volume ocfs2_mount_volume</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ocfs2_super_lock ocfs2_super_lock</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Gotten the super lock Waiting for the super lock
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Find slot 0 unused</span></p>
<p class="MsoPlainText"><span lang="EN-US"> from memory</span></p>
<p class="MsoPlainText"><span lang="EN-US"> update the slot 0 with 1</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ... ... </span></p>
<p class="MsoPlainText"><span lang="EN-US"> locked journal 0</span></p>
<p class="MsoPlainText"><span lang="EN-US"> mount finished. </span></p>
<p class="MsoPlainText"><span lang="EN-US"> Gotten super lock and
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Also find slot 0 unused
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> from memory,
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> update the slot 0 with node num 2</span></p>
<p class="MsoPlainText"><span lang="EN-US"> But Journal 0 is locked by N1</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Mounted hang up.
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ... ... ... ...
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> umount volume ... ...</span></p>
<p class="MsoPlainText"><span lang="EN-US"> cleare the slot 0 ... ...</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Gotten joural 0 lock</span></p>
<p class="MsoPlainText"><span lang="EN-US"> mount finished.
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> But here, the slot 0 is cleare by N1</span></p>
<p class="MsoPlainText"><span lang="EN-US">
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> IF N1 mount again</span></p>
<p class="MsoPlainText"><span lang="EN-US"> Same condition with N2</span></p>
<p class="MsoPlainText"><span lang="EN-US"> and will hang up. </span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">In the function of ocfs2_mount_volume, I think the slot info should be refreshed after ocfs2_super_lock called.</span></p>
<p class="MsoPlainText"><span lang="EN-US">static int ocfs2_mount_volume(struct super_block *sb)</span></p>
<p class="MsoPlainText"><span lang="EN-US">{</span></p>
<p class="MsoPlainText"><span lang="EN-US"> status = ocfs2_super_lock(osb, 1);</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ...... </span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">+ status = ocfs2_refresh_slot_info(osb);</span></p>
<p class="MsoPlainText"><span lang="EN-US">+ if (status < 0) {</span></p>
<p class="MsoPlainText"><span lang="EN-US">+ mlog_errno(status);</span></p>
<p class="MsoPlainText"><span lang="EN-US">+ goto leave;</span></p>
<p class="MsoPlainText"><span lang="EN-US">+ }</span></p>
<p class="MsoPlainText"><span lang="EN-US"> ... ... </span></p>
<p class="MsoPlainText"><span lang="EN-US">}</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">Another way is to move ocfs2_init_slot_info() function from ocfs2_initialize_super to replace ocfs2_refresh_slot_info as above.
</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">Message: 5</span></p>
<p class="MsoPlainText"><span lang="EN-US">Date: Wed, 23 Dec 2015 18:23:36 +0800</span></p>
<p class="MsoPlainText"><span lang="EN-US">From: jiangyiwen <<a href="mailto:jiangyiwen@huawei.com">jiangyiwen@huawei.com</a>></span></p>
<p class="MsoPlainText"><span lang="EN-US">Subject: [Ocfs2-devel] [PATCH] ocfs2: fix slot overwritten if storage</span></p>
<p class="MsoPlainText"><span lang="EN-US"> link down during mount</span></p>
<p class="MsoPlainText"><span lang="EN-US">To: Andrew Morton <<a href="mailto:akpm@linux-foundation.org">akpm@linux-foundation.org</a>></span></p>
<p class="MsoPlainText"><span lang="EN-US">Cc: Mark Fasheh <<a href="mailto:mfasheh@suse.de">mfasheh@suse.de</a>>,
<a href="mailto:ocfs2-devel@oss.oracle.com">ocfs2-devel@oss.oracle.com</a></span></p>
<p class="MsoPlainText"><span lang="EN-US">Message-ID: <<a href="mailto:567A7628.5040503@huawei.com">567A7628.5040503@huawei.com</a>></span></p>
<p class="MsoPlainText"><span lang="EN-US">Content-Type: text/plain; charset="utf-8"</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">The following case will lead to slot overwritten.</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">N1 N2</span></p>
<p class="MsoPlainText"><span lang="EN-US">mount ocfs2 volume, find and</span></p>
<p class="MsoPlainText"><span lang="EN-US">allocate slot 0, then set</span></p>
<p class="MsoPlainText"><span lang="EN-US">osb->slot_num to 0, begin to</span></p>
<p class="MsoPlainText"><span lang="EN-US">write slot info to disk</span></p>
<p class="MsoPlainText"><span lang="EN-US"> mount ocfs2 volume, wait for super lock</span></p>
<p class="MsoPlainText"><span lang="EN-US">write block fail because of</span></p>
<p class="MsoPlainText"><span lang="EN-US">storage link down, unlock</span></p>
<p class="MsoPlainText"><span lang="EN-US">super lock</span></p>
<p class="MsoPlainText"><span lang="EN-US"> got super lock and also allocate slot 0</span></p>
<p class="MsoPlainText"><span lang="EN-US"> then unlock super lock</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
<p class="MsoPlainText"><span lang="EN-US">mount fail and then dismount,</span></p>
<p class="MsoPlainText"><span lang="EN-US">since osb->slot_num is 0, try to</span></p>
<p class="MsoPlainText"><span lang="EN-US">put invalid slot to disk. And it</span></p>
<p class="MsoPlainText"><span lang="EN-US">will succeed if storage link</span></p>
<p class="MsoPlainText"><span lang="EN-US">restores.</span></p>
<p class="MsoPlainText"><span lang="EN-US"> N2 slot info is now overwritten</span></p>
<p class="MsoPlainText"><span lang="EN-US"> </span></p>
</div>
<span style="font-size:7.5pt; font-family:华文细黑; color:gray"><span lang="EN-US">-------------------------------------------------------------------------------------------------------------------------------------<br>
</span>本邮件及其附件含有杭州华三通信技术有限公司的保密信息,仅限于发送给上面地址中列出<span lang="EN-US"><br>
</span>的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、<span lang="EN-US"><br>
</span>或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本<span lang="EN-US"><br>
</span>邮件!<span lang="EN-US"><br>
</span></span><span lang="EN-US" style="font-size:7.5pt; font-family:"Arial","sans-serif"; 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>