<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:54:29 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-5783] o2iblnd: investigate new memory registration mechanisms</title>
                <link>https://jira.whamcloud.com/browse/LU-5783</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;The OFED has support of new memory registration mechanisms that the o2iblnd currently don&apos;t use.&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;IB_WR_FAST_REG_MR: work request based asynchronous memory registration. It removes memory registration out of the critical path and has the potential of improving throughput.&lt;/li&gt;
	&lt;li&gt;IB_WR_REG_INDIR_MR: allows registration of non-page aligned memory fragments. See:&lt;br/&gt;
&lt;a href=&quot;https://www.mail-archive.com/linux-rdma@vger.kernel.org/msg21430.html&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.mail-archive.com/linux-rdma@vger.kernel.org/msg21430.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The 1st one may improve throughput and the 2nd one may solve the long-standing issue of &quot;too many RDMA frags&quot; failures we had (forgot which ticket, Liang?).&lt;/p&gt;

&lt;p&gt;We should do some investigation and decide whether to add support of these OFED features to the o2iblnd.&lt;/p&gt;</description>
                <environment></environment>
        <key id="27145">LU-5783</key>
            <summary>o2iblnd: investigate new memory registration mechanisms</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</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="dmiter">Dmitry Eremin</assignee>
                                    <reporter username="isaac">Isaac Huang</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Oct 2014 21:00:38 +0000</created>
                <updated>Sat, 4 Jun 2016 13:49:13 +0000</updated>
                            <resolved>Fri, 13 May 2016 13:01:50 +0000</resolved>
                                                    <fixVersion>Lustre 2.9.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>18</watches>
                                                                            <comments>
                            <comment id="127735" author="simmonsja" created="Fri, 18 Sep 2015 02:07:12 +0000"  >&lt;p&gt;I believe this is the replacement for FMR in the mlx5 driver&lt;/p&gt;</comment>
                            <comment id="128105" author="simmonsja" created="Tue, 22 Sep 2015 17:03:55 +0000"  >&lt;p&gt;Just was told by a coworker that the above apis are being thrown out and replaced by a new RDMA api. When they API hits FMR will be removed from all drivers. You see the details in this thread:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://article.gmane.org/gmane.linux.drivers.rdma/29040&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://article.gmane.org/gmane.linux.drivers.rdma/29040&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="129773" author="simmonsja" created="Thu, 8 Oct 2015 01:06:40 +0000"  >&lt;p&gt;Started work on a patch to support Fast Registration API.&lt;/p&gt;</comment>
                            <comment id="136311" author="gerrit" created="Tue, 15 Dec 2015 11:57:45 +0000"  >&lt;p&gt;Dmitry Eremin (dmitry.eremin@intel.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/17606&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/17606&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-5783&quot; title=&quot;o2iblnd: investigate new memory registration mechanisms&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-5783&quot;&gt;&lt;del&gt;LU-5783&lt;/del&gt;&lt;/a&gt; o2iblnd: Add Fast Reg memory registration support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 833db95ca7ada950c06de0e5bbdd1ca3da83c3db&lt;/p&gt;</comment>
                            <comment id="136429" author="shadow" created="Tue, 15 Dec 2015 20:39:51 +0000"  >&lt;p&gt;I&apos;m sorry, but i not able to post comments into gerrit directly.&lt;br/&gt;
But patch is completely wrong. &lt;br/&gt;
First of all - you don&apos;t need an alloc any pages via ib_alloc_fast_reg_page_list, but you need an just map pages from MD to dma addresses. &lt;br/&gt;
second - you must change a QP attributes. you don&apos;t need so large WR / SGE limits if fast registration enabled - typically you needs an 7 WR * num_parallel sends.&lt;br/&gt;
third - you must INVALIDATE a memory region after use, it&apos;s possible via READ_INV command, but for write you need additional WR with invalidate operation.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;Consumer interface details:

 - A new device capability flag IB_DEVICE_MEM_MGT_EXTENSIONS is added
   to indicate device support for these features.

 - New send work request opcodes IB_WR_FAST_REG_MR, IB_WR_LOCAL_INV,
   IB_WR_RDMA_READ_WITH_INV are added.

 - A new consumer API function, ib_alloc_mr() is added to allocate
   fast register memory regions.

 - New consumer API functions, ib_alloc_fast_reg_page_list() and
   ib_free_fast_reg_page_list() are added to allocate and free
   device-specific memory for fast registration page lists.

 - A new consumer API function, ib_update_fast_reg_key(), is added to
   allow the key portion of the R_Key and L_Key of a fast registration
   MR to be updated.  Consumers call this if desired before posting
   a IB_WR_FAST_REG_MR work request.

Consumers can use this as follows:

 - MR is allocated with ib_alloc_mr().

 - Page list memory is allocated with ib_alloc_fast_reg_page_list().

 - MR R_Key/L_Key &quot;key&quot; field is updated with ib_update_fast_reg_key().

 - MR made VALID and bound to a specific page list via
   ib_post_send(IB_WR_FAST_REG_MR)

 - MR made INVALID via ib_post_send(IB_WR_LOCAL_INV),
   ib_post_send(IB_WR_RDMA_READ_WITH_INV) or an incoming send with
   invalidate operation.

 - MR is deallocated with ib_dereg_mr()

 - page lists dealloced via ib_free_fast_reg_page_list().
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt; </comment>
                            <comment id="136541" author="simmonsja" created="Wed, 16 Dec 2015 15:26:01 +0000"  >&lt;p&gt;This work might have flaws but it works like a charm on my mlx5 system.&lt;/p&gt;</comment>
                            <comment id="136560" author="shadow" created="Wed, 16 Dec 2015 16:31:09 +0000"  >&lt;p&gt;James,&lt;/p&gt;

&lt;p&gt;mlx5 system may work in older style. I have run o2iblnd without modification on own mlx5 system. why not ?&lt;br/&gt;
FRM codepath is inactive for common use, it&apos;s activated just with map_on_demand option. In common case o2iblnd uses an global MR mapping &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;if&lt;/span&gt; (hdev-&amp;gt;ibh_mr_shift == 64) {
                LIBCFS_ALLOC(hdev-&amp;gt;ibh_mrs, 1 * sizeof(*hdev-&amp;gt;ibh_mrs));
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (hdev-&amp;gt;ibh_mrs == NULL) {
                        CERROR(&lt;span class=&quot;code-quote&quot;&gt;&quot;Failed to allocate MRs table\n&quot;&lt;/span&gt;);
                        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; -ENOMEM;
                }

                hdev-&amp;gt;ibh_mrs[0] = NULL;
                hdev-&amp;gt;ibh_nmrs   = 1;

                mr = ib_get_dma_mr(hdev-&amp;gt;ibh_pd, acflags);
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (IS_ERR(mr)) {
                        CERROR(&lt;span class=&quot;code-quote&quot;&gt;&quot;Failed ib_get_dma_mr : %ld\n&quot;&lt;/span&gt;, PTR_ERR(mr));
                        kiblnd_hdev_cleanup_mrs(hdev);
                        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; PTR_ERR(mr);
                }

                hdev-&amp;gt;ibh_mrs[0] = mr;

                &lt;span class=&quot;code-keyword&quot;&gt;goto&lt;/span&gt; out;
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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 ib_mr *
kiblnd_find_rd_dma_mr(kib_hca_dev_t *hdev, kib_rdma_desc_t *rd)
{
        struct ib_mr *prev_mr;
        struct ib_mr *mr;
        &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt;           i;

        LASSERT (hdev-&amp;gt;ibh_mrs[0] != NULL);

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (*kiblnd_tunables.kib_map_on_demand &amp;gt; 0 &amp;amp;&amp;amp;
            *kiblnd_tunables.kib_map_on_demand &amp;lt;= rd-&amp;gt;rd_nfrags)
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; NULL;

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (hdev-&amp;gt;ibh_nmrs == 1)

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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-comment&quot;&gt;/* looking &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; pre-mapping MR */&lt;/span&gt;
        mr = kiblnd_find_rd_dma_mr(hdev, rd);
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (mr != NULL) {
                &lt;span class=&quot;code-comment&quot;&gt;/* found pre-mapping MR */&lt;/span&gt;
                rd-&amp;gt;rd_key = (rd != tx-&amp;gt;tx_rd) ? mr-&amp;gt;rkey : mr-&amp;gt;lkey;
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; 0;
        }

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (net-&amp;gt;ibn_fmr_ps != NULL)
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; kiblnd_fmr_map_tx(net, tx, rd, nob);
        &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (net-&amp;gt;ibn_pmr_ps != NULL)
                &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; kiblnd_pmr_map_tx(net, tx, rd, nob);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So just enough to send a local dma address for mapped page as part of IB_WR_RDMA_WRITE / IB_WR_RDMA_READ request.&lt;br/&gt;
all pages sends in WR chain.&lt;/p&gt;

&lt;p&gt;simple check. if fast reg used - you may safety drop number WR per QP from 256 * num_parallel_send to 5*parallel_sends.&lt;br/&gt;
explanation - with older code - you need a fill remote address + R_key for each IB_WR_RDMA_WRITE / IB_WR_RDMA_READ request. But with IB memory extension you able to have a single WR request to point whole transfer. Page list to fill an tranfer will take from fast reg operation and addressed by special L_Key.&lt;/p&gt;

&lt;p&gt;It&apos;s way to solve problems with OOM on nodes reported may times in past.&lt;/p&gt;
</comment>
                            <comment id="136577" author="simmonsja" created="Wed, 16 Dec 2015 17:13:35 +0000"  >&lt;p&gt;Actually for my mlx5 stack testing I am enabling map_on_demand and it is working.&lt;/p&gt;</comment>
                            <comment id="136608" author="shadow" created="Wed, 16 Dec 2015 20:06:05 +0000"  >&lt;p&gt;well, with enabling map_on_depand it may work, but anyway.&lt;br/&gt;
1) IB_WR_RDMA_WRITE_IMM, IB_WR_RDMA_READ_INV should be reused to avoid extra WR.&lt;br/&gt;
2) total number WR per QP need adjusted to reflect extra WR used for mapping purpose.&lt;br/&gt;
3) don&apos;t prefer a FMR if exist. Fast Reg supported for most cards now, and it&apos;s better choose.&lt;br/&gt;
4)  don&apos;t use a &quot;invalidate-&amp;gt;register&quot; WR links it&apos;s directly affects (1).&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;if&lt;/span&gt; (!frd-&amp;gt;frd_valid) {
+                               wrq = &amp;amp;frd-&amp;gt;frd_inv_wr;
+                               wrq-&amp;gt;next = &amp;amp;frd-&amp;gt;frd_fastreg_wr;
+                       } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
+                               wrq = &amp;amp;frd-&amp;gt;frd_fastreg_wr;
+                       }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It may a simplify a code by avoid calling a invalidate on error case, but it block IB card optimization. per IB spec WR workflow it should be in order&lt;br/&gt;
1) register&lt;br/&gt;
2) write/read&lt;br/&gt;
3) invalidate&lt;/p&gt;</comment>
                            <comment id="136620" author="simmonsja" created="Wed, 16 Dec 2015 21:05:08 +0000"  >&lt;p&gt;Oh I agree. Because something works doesn&apos;t mean it is done right &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; I agree with you that perhaps we should just remove FMR support at this since it will be going away.&lt;/p&gt;</comment>
                            <comment id="136675" author="shadow" created="Thu, 17 Dec 2015 06:27:53 +0000"  >&lt;p&gt;well, i know were you take an original code &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; but one note.&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-comment&quot;&gt;/* Prepare FASTREG WR */&lt;/span&gt;
+       memset(&amp;amp;fastreg_wr, 0, sizeof(fastreg_wr));
+       fastreg_wr.opcode = IB_WR_FAST_REG_MR;
+       fastreg_wr.send_flags = IB_SEND_SIGNALED;
+       fastreg_wr.wr.fast_reg.iova_start = desc-&amp;gt;data_frpl-&amp;gt;page_list[0] + offset;
+       fastreg_wr.wr.fast_reg.page_list = desc-&amp;gt;data_frpl;
+       fastreg_wr.wr.fast_reg.page_list_len = page_list_len;
+       fastreg_wr.wr.fast_reg.page_shift = SHIFT_4K;
+       fastreg_wr.wr.fast_reg.length = data_size;
+       fastreg_wr.wr.fast_reg.rkey = desc-&amp;gt;data_mr-&amp;gt;rkey;
+       fastreg_wr.wr.fast_reg.access_flags = (IB_ACCESS_LOCAL_WRITE  |
+                                              IB_ACCESS_REMOTE_WRITE |
+                                              IB_ACCESS_REMOTE_READ);
+
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;so iser don&apos;t have two page lists as in patch. It uses directly an preallocated DMA region pages. Probably our&apos;s code will have two more memory usage if we don&apos;t use same pages to transfer and mapping.&lt;/p&gt;

&lt;p&gt;&amp;gt; I agree with you that perhaps we should just remove FMR support at this since it will be going away.&lt;br/&gt;
not at all. Yes, Fast reg introduced in 2008, but not at all mlx4 cards may support it (if you have a good melanox contact please ask him).&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;if&lt;/span&gt; ((dev-&amp;gt;dev-&amp;gt;caps.bmme_flags &amp;amp; MLX4_BMME_FLAG_LOCAL_INV) &amp;amp;&amp;amp;
            (dev-&amp;gt;dev-&amp;gt;caps.bmme_flags &amp;amp; MLX4_BMME_FLAG_REMOTE_INV) &amp;amp;&amp;amp;
            (dev-&amp;gt;dev-&amp;gt;caps.bmme_flags &amp;amp; MLX4_BMME_FLAG_FAST_REG_WR))
                props-&amp;gt;device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;so probably better to just lower priority for FMR.&lt;/p&gt;

&lt;p&gt;one more note - don&apos;t use a flag, but have two pointers to function to map and to unmap region, as code completely different. &lt;/p&gt;</comment>
                            <comment id="136930" author="jfilizetti" created="Fri, 18 Dec 2015 23:15:47 +0000"  >&lt;p&gt;I know we have mthca cards in use which use FMR and I don&apos;t believe support fast reg so I&apos;m fine with lowering the priority but not removing the FMR code altogether.  I&apos;m having some issues with the patch but there is already some good feedback here towards a second revision so I&apos;ll wait until then before I dig deeper.&lt;/p&gt;</comment>
                            <comment id="145339" author="gerrit" created="Sun, 13 Mar 2016 06:26:04 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;http://review.whamcloud.com/17606/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/17606/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-5783&quot; title=&quot;o2iblnd: investigate new memory registration mechanisms&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-5783&quot;&gt;&lt;del&gt;LU-5783&lt;/del&gt;&lt;/a&gt; o2iblnd: Add Fast Reg memory registration support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: f2600449ced3a2f78c4b3e650ff29bb88d1e7e45&lt;/p&gt;</comment>
                            <comment id="145340" author="shadow" created="Sun, 13 Mar 2016 08:19:39 +0000"  >&lt;p&gt;I like to see, Intel don&apos;t work in cooperations with other developers, as it land a patch without resolving comments in ticket.&lt;/p&gt;</comment>
                            <comment id="145347" author="simmonsja" created="Sun, 13 Mar 2016 19:20:36 +0000"  >&lt;p&gt;You don&apos;t review the patch in gerrit nor do you push a patch somewhere.  I understand you don&apos;t want to use the gerrit system without gmail support but if you want to improve this work I suggest you create a github branch with your fix. I would gladly push the fix to gerrit for you. You need to figure a way to work with us.&lt;/p&gt;</comment>
                            <comment id="145391" author="shadow" created="Mon, 14 Mar 2016 07:55:45 +0000"  >&lt;p&gt;Intel don&apos;t fix a gerrit to ability to review. When you have a fix own gerrit to work with google ?&lt;br/&gt;
I was asked for two years, new gerrit versions work fine with google, but Intel stick on older and buggy version.&lt;/p&gt;</comment>
                            <comment id="148755" author="spitzcor" created="Wed, 13 Apr 2016 16:28:35 +0000"  >&lt;p&gt;Alexey, we discussed your issue at the OpenSFS LWG and we decided to stick with the status quo.&lt;br/&gt;
James, it was very gracious and helpful of you to offer to push a fix to gerri on behalf of Alexey.  Alexey, I agree with James, you need to find a way to work with us.  Please take him up on his offer, but I suggest you find a way to work with the community more generally.  If you&apos;d like the LWG to revisit this topic, please send mail to the LWG list.&lt;/p&gt;</comment>
                            <comment id="152189" author="pjones" created="Fri, 13 May 2016 13:01:50 +0000"  >&lt;p&gt;As far as aI can see this has been landed for 2.9&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="31084">LU-6850</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="18907">LU-3322</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="32012">LU-7124</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|hzwz5z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>16229</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>