<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:34:19 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-3486] LBUG when exporting Lustre 2.4 via NFS on SLES11SP2: ll_dops_init: ASSERTION( de-&gt;d_op == &amp;ll_d_ops ) failed</title>
                <link>https://jira.whamcloud.com/browse/LU-3486</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;As noted in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-3483&quot; title=&quot;Null pointer dereference in ll_revalidate_nd (llite/dcache.c) in an NFS mounted Lustre file system&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-3483&quot;&gt;&lt;del&gt;LU-3483&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-3484&quot; title=&quot;Incorrect identification of anonymous dentry as root under SLES11SP2&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-3484&quot;&gt;&lt;del&gt;LU-3484&lt;/del&gt;&lt;/a&gt;, we&apos;re attempting to export Lustre 2.4 via NFS on SLES11SP2.  This is the third of three issues we&apos;ve found while doing so.&lt;/p&gt;

&lt;p&gt;When attempting to do a mkdir (in the root of the exported file system, from the nfs client, with the nfs server a patchless SLES11SP2 2.4 client) and then an ls -la of this new directory, we got the following:&lt;br/&gt;
&amp;#8212;&lt;br/&gt;
2013-06-10T09:52:52.210323-05:00 c0-0c0s7n1 LustreError: 17310:0:(dcache.c:256:ll_dops_init()) ASSERTION( de-&amp;gt;d_op == &amp;amp;ll_d_ops ) failed:&lt;br/&gt;
2013-06-10T09:52:52.235599-05:00 c0-0c0s7n1 LustreError: 17310:0:(dcache.c:256:ll_dops_init()) LBUG&lt;br/&gt;
2013-06-10T09:52:52.235681-05:00 c0-0c0s7n1 Pid: 17310, comm: nfsd&lt;br/&gt;
2013-06-10T09:52:52.235765-05:00 c0-0c0s7n1 Call Trace:&lt;br/&gt;
2013-06-10T09:52:52.235969-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81005da9&amp;gt;&amp;#93;&lt;/span&gt; try_stack_unwind+0x169/0x1b0&lt;br/&gt;
2013-06-10T09:52:52.260723-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81004849&amp;gt;&amp;#93;&lt;/span&gt; dump_trace+0x89/0x450&lt;br/&gt;
2013-06-10T09:52:52.261059-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffffa07548d7&amp;gt;&amp;#93;&lt;/span&gt; libcfs_debug_dumpstack+0x57/0x80 &lt;span class=&quot;error&quot;&gt;&amp;#91;libcfs&amp;#93;&lt;/span&gt;&lt;br/&gt;
2013-06-10T09:52:52.261291-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffffa0754e37&amp;gt;&amp;#93;&lt;/span&gt; lbug_with_loc+0x47/0xc0 &lt;span class=&quot;error&quot;&gt;&amp;#91;libcfs&amp;#93;&lt;/span&gt;&lt;br/&gt;
2013-06-10T09:52:52.286133-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffffa0c8e7ac&amp;gt;&amp;#93;&lt;/span&gt; ll_dops_init+0x3cc/0x560 &lt;span class=&quot;error&quot;&gt;&amp;#91;lustre&amp;#93;&lt;/span&gt;&lt;br/&gt;
2013-06-10T09:52:52.286416-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffffa0ccd2af&amp;gt;&amp;#93;&lt;/span&gt; ll_iget_for_nfs+0x2ff/0x390 &lt;span class=&quot;error&quot;&gt;&amp;#91;lustre&amp;#93;&lt;/span&gt;&lt;br/&gt;
2013-06-10T09:52:52.311470-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffffa0ccdae0&amp;gt;&amp;#93;&lt;/span&gt; ll_get_parent+0x410/0x830 &lt;span class=&quot;error&quot;&gt;&amp;#91;lustre&amp;#93;&lt;/span&gt;&lt;br/&gt;
2013-06-10T09:52:52.311692-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81253ce0&amp;gt;&amp;#93;&lt;/span&gt; reconnect_path+0x140/0x2d0&lt;br/&gt;
2013-06-10T09:52:52.311799-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81254036&amp;gt;&amp;#93;&lt;/span&gt; exportfs_decode_fh+0xa6/0x280&lt;br/&gt;
2013-06-10T09:52:52.311913-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81257c33&amp;gt;&amp;#93;&lt;/span&gt; fh_verify+0x353/0x6b0&lt;br/&gt;
2013-06-10T09:52:52.311958-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff812589f9&amp;gt;&amp;#93;&lt;/span&gt; nfsd_access+0x39/0x130&lt;br/&gt;
2013-06-10T09:52:52.336898-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81261e3f&amp;gt;&amp;#93;&lt;/span&gt; nfsd3_proc_access+0x7f/0xe0&lt;br/&gt;
2013-06-10T09:52:52.337073-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff812545db&amp;gt;&amp;#93;&lt;/span&gt; nfsd_dispatch+0xbb/0x260&lt;br/&gt;
2013-06-10T09:52:52.362097-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81491a8b&amp;gt;&amp;#93;&lt;/span&gt; svc_process+0x4ab/0x7a0&lt;br/&gt;
2013-06-10T09:52:52.362253-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81254d75&amp;gt;&amp;#93;&lt;/span&gt; nfsd+0xd5/0x150&lt;br/&gt;
2013-06-10T09:52:52.362356-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff81068e0e&amp;gt;&amp;#93;&lt;/span&gt; kthread+0x9e/0xb0&lt;br/&gt;
2013-06-10T09:52:52.362547-05:00 c0-0c0s7n1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;ffffffff814cfed4&amp;gt;&amp;#93;&lt;/span&gt; kernel_thread_helper+0x4/0x10&lt;br/&gt;
&amp;#8212;&lt;/p&gt;

&lt;p&gt;Here&apos;s the code in ll_dops_init:&lt;br/&gt;
&amp;#8212;&lt;br/&gt;
int ll_dops_init(struct dentry *de, int block, int init_sa)&lt;br/&gt;
{&lt;br/&gt;
        struct ll_dentry_data *lld = ll_d2d(de);&lt;br/&gt;
        int rc = 0;&lt;/p&gt;

&lt;p&gt;        if (lld == NULL &amp;amp;&amp;amp; block != 0) &lt;/p&gt;
{
                rc = ll_set_dd(de);
                if (rc)
                        return rc;
         
                lld = ll_d2d(de);
        }

&lt;p&gt;        if (lld != NULL &amp;amp;&amp;amp; init_sa != 0)&lt;br/&gt;
                lld-&amp;gt;lld_sa_generation = 0; &lt;/p&gt;

&lt;p&gt;#ifdef HAVE_DCACHE_LOCK &lt;br/&gt;
        de-&amp;gt;d_op = &amp;amp;ll_d_ops;&lt;br/&gt;
#else&lt;br/&gt;
        /* kernel &amp;gt;= 2.6.38 d_op is set in d_alloc() */&lt;br/&gt;
        LASSERT(de-&amp;gt;d_op == &amp;amp;ll_d_ops); &lt;br/&gt;
#endif &lt;br/&gt;
        return rc;&lt;br/&gt;
&amp;#8212;&lt;/p&gt;

&lt;p&gt;I&apos;ve investigated the crash dump and found that the d_op pointer is set to ll_d_root_ops, rather than ll_d_ops.&lt;br/&gt;
So I checked the dentry in question, and it IS the root dentry, which means it&apos;s correct that the dentry operations would be ll_d_root_ops.  &lt;/p&gt;

&lt;p&gt;d_obtain_alias (replacement for d_alloc) only sets ll_d_ops as described in the comment above when it is creating an anonymous dentry (done when it can&apos;t find any aliases for the inode).  Presumably, the root dentry would already have an alias, which is why it&apos;s not getting set.&lt;/p&gt;

&lt;p&gt;Prior to 2.6.38, d_op is set directly here to ll_d_ops.&lt;/p&gt;

&lt;p&gt;That suggests a few possible issues, with varying fixes:&lt;br/&gt;
1) The assertion is wrong and it&apos;s OK for the dentry operations to be ll_d_root_ops in this case.&lt;br/&gt;
2) The root dentry should never make it here, something else is wrong.  (What?)&lt;br/&gt;
3) It&apos;s not OK for the dentry operations to be ll_d_root_ops and we need to set them to ll_d_ops here.  (But if so, why have ll_d_root_ops?  This seems incorrect.)&lt;/p&gt;</description>
                <environment>SLES11SP2 patchless client exporting the file system over NFS</environment>
        <key id="19499">LU-3486</key>
            <summary>LBUG when exporting Lustre 2.4 via NFS on SLES11SP2: ll_dops_init: ASSERTION( de-&gt;d_op == &amp;ll_d_ops ) failed</summary>
                <type id="1" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="1" iconUrl="https://jira.whamcloud.com/images/icons/priorities/blocker.svg">Blocker</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="laisiyao">Lai Siyao</assignee>
                                    <reporter username="paf">Patrick Farrell</reporter>
                        <labels>
                    </labels>
                <created>Thu, 20 Jun 2013 18:37:20 +0000</created>
                <updated>Tue, 10 Jun 2014 17:59:13 +0000</updated>
                            <resolved>Tue, 6 Aug 2013 07:28:04 +0000</resolved>
                                    <version>Lustre 2.4.0</version>
                                    <fixVersion>Lustre 2.5.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>9</watches>
                                                                            <comments>
                            <comment id="61070" author="laisiyao" created="Mon, 24 Jun 2013 02:59:18 +0000"  >&lt;p&gt;I&apos;m okay with the option 2. Because lustre root dentry won&apos;t be really revalidated, ll_dops_init() should not be called for it.&lt;/p&gt;

&lt;p&gt;But I don&apos;t know why root dentry is handled different from other dentries, Oleg, could you give some comment?&lt;/p&gt;</comment>
                            <comment id="61072" author="paf" created="Mon, 24 Jun 2013 04:36:04 +0000"  >&lt;p&gt;Lai,&lt;/p&gt;

&lt;p&gt;With option 2, I&apos;m saying if the root dentry shouldn&apos;t have ll_dops_init called on it, I&apos;m not sure what we should change to avoid that.  &lt;br/&gt;
Is it as simple as putting a check in ll_iget_for_nfs to see if it&apos;s working with the root dentry, and then not calling ll_dops_init in that case?&lt;/p&gt;</comment>
                            <comment id="61073" author="laisiyao" created="Mon, 24 Jun 2013 05:00:27 +0000"  >&lt;p&gt;Patrick, yes, it should work in this way, because currently we handle root dentry differently. But if we can make sure root dentry is no different from others, we can get rid of ll_d_root_ops, and make dentry handling more consistent and simpler.&lt;/p&gt;</comment>
                            <comment id="61120" author="paf" created="Mon, 24 Jun 2013 18:53:11 +0000"  >&lt;p&gt;Lai,&lt;/p&gt;

&lt;p&gt;OK.  It&apos;s worth noting that in kernel versions earlier than 2.6.38, ll_dops_init was setting the d_op pointer, since it wasn&apos;t set in d_obtain_alias in the kernel.  So presumably, it was resetting the root dentry d_ops pointer from ll_d_root_ops to ll_d_ops.&lt;/p&gt;

&lt;p&gt;That suggests it&apos;s safe to not have the special ll_d_root_ops struct.  The only different is that some operations are not defined in the root dentry ops.&lt;/p&gt;

&lt;p&gt;Just for reference, here are the two sets of operations:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;&lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; struct dentry_operations ll_d_root_ops = {
        .d_compare = ll_dcompare,
        .d_revalidate = ll_revalidate_nd,
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;#8212;&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;struct dentry_operations ll_d_ops = {
        .d_revalidate = ll_revalidate_nd,
        .d_release = ll_release,
        .d_delete  = ll_ddelete,
        .d_iput    = ll_d_iput,
        .d_compare = ll_dcompare,
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="61279" author="laisiyao" created="Tue, 25 Jun 2013 01:20:45 +0000"  >&lt;p&gt;Yes, I noticed this, that&apos;s why I tend to remove ll_d_root_ops, and treat root dentry as normal ones. I&apos;ll make a patch to test.&lt;/p&gt;</comment>
                            <comment id="61438" author="laisiyao" created="Thu, 27 Jun 2013 10:38:41 +0000"  >&lt;p&gt;Patch is on &lt;a href=&quot;http://review.whamcloud.com/#/c/6797/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/6797/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="63699" author="laisiyao" created="Tue, 6 Aug 2013 07:28:04 +0000"  >&lt;p&gt;patch landed.&lt;/p&gt;</comment>
                            <comment id="86244" author="simmonsja" created="Tue, 10 Jun 2014 17:59:13 +0000"  >&lt;p&gt;Patch &lt;a href=&quot;http://review.whamcloud.com/#/c/6797&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/6797&lt;/a&gt; has been merged to the upstream kernel as commit: 3ea8f3bcabe422c6b5778089ae0929c1028e58f8&lt;/p&gt;

&lt;p&gt;Since this is the case then is ticket can be closed.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="22529">LU-4400</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzvtp3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8767</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10060" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Severity</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10022"><![CDATA[3]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>