<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:28:23 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-2809] fix ll_setxattr() to always ignore ll_stripe_offset</title>
                <link>https://jira.whamcloud.com/browse/LU-2809</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;With the introduction of lum_layout_version field to lov_user_md, using &quot;&lt;tt&gt;tar --xattr&lt;/tt&gt;&quot; to backup and restore the Lustre layout (LOV EA) will incorrectly pass the lum_layout_version value back to ll_setxattr() as lum_stripe_offset.  This will incorrectly turn the layout version into the starting OST index, for cases where the version is within &lt;span class=&quot;error&quot;&gt;&amp;#91;1,max_ost_idx&amp;#93;&lt;/span&gt;.  &lt;/p&gt;

&lt;p&gt;This may cause, for example, all files that have been migrated once to be restored by tar onto OST1.&lt;/p&gt;</description>
                <environment></environment>
        <key id="17560">LU-2809</key>
            <summary>fix ll_setxattr() to always ignore ll_stripe_offset</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="jay">Jinshan Xiong</assignee>
                                    <reporter username="adilger">Andreas Dilger</reporter>
                        <labels>
                            <label>MB</label>
                    </labels>
                <created>Wed, 13 Feb 2013 18:24:34 +0000</created>
                <updated>Wed, 13 Mar 2013 17:19:37 +0000</updated>
                            <resolved>Wed, 13 Mar 2013 16:47:44 +0000</resolved>
                                    <version>Lustre 2.4.0</version>
                    <version>Lustre 2.1.5</version>
                                    <fixVersion>Lustre 2.4.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>12</watches>
                                                                            <comments>
                            <comment id="52462" author="nedbass" created="Fri, 15 Feb 2013 13:48:48 +0000"  >&lt;p&gt;With this we lose the ability to set the offset of stripe 0 through the fsetxattr() interface.  Andreas, in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-2182&quot; title=&quot;Add llapi_file_get_layout() function in liblustreapi&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-2182&quot;&gt;&lt;del&gt;LU-2182&lt;/del&gt;&lt;/a&gt; you mentioned the possibility to add support for setting OST indexes of all stripes. Is there an issue to track that effort? What would the interface be, i.e. letting user pass in a lov_user_ost_data_v1[] array with the lum data?&lt;/p&gt;</comment>
                            <comment id="52479" author="adilger" created="Fri, 15 Feb 2013 16:43:20 +0000"  >&lt;p&gt;Actually, I have an options that would avoid the present conflict - change the HSM lum_layout_gen code to keep the version larger than LOV_MAX_STRIPE_COUNT instead of incrementing from 0, so that it does not conflict when setting lum_stripe_offset.  That way, for applications like tar that save/restore the same xattr the large lum_layout_gen value will be treated as &quot;-1&quot; (i.e. unspecified striping offset), while small values (generated from userspace and not returned from getxattr()) will be treated as actual OST index values.  A bit ugly, but workable.  So far, the only code I can see that manipulates the layout generation is in mdd_swap_layouts():&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; &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; mdd_swap_layouts(&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; struct lu_env *env, struct md_object *obj1,
                            struct md_object *obj2, __u64 flags)
{
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (fst_buf) {          
                fst_lmm = fst_buf-&amp;gt;lb_buf;
                fst_gen = le16_to_cpu(fst_lmm-&amp;gt;lmm_layout_gen);
        }        
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (snd_buf) {
                snd_lmm = snd_buf-&amp;gt;lb_buf;
                snd_gen = le16_to_cpu(snd_lmm-&amp;gt;lmm_layout_gen);
        }

        &lt;span class=&quot;code-comment&quot;&gt;/* increase the generation layout numbers */&lt;/span&gt;
        snd_gen = max(snd_gen + 1, LOV_MAX_STRIPE_COUNT);
        fst_gen = max(fst_gen + 1, LOV_MAX_STRIPE_COUNT);

        &lt;span class=&quot;code-comment&quot;&gt;/* set the file specific informations in lmm */&lt;/span&gt;
        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (fst_lmm) {
                fst_lmm-&amp;gt;lmm_layout_gen = cpu_to_le16(snd_gen);
        }

        &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (snd_lmm) {
                snd_lmm-&amp;gt;lmm_layout_gen = cpu_to_le16(fst_gen);
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This would work for the short term, but would become problematic if we wanted to have the full range of 64k OSTs, and is more of a &quot;hack&quot; solution.&lt;/p&gt;

&lt;p&gt;Another alternative, as Ned suggests, is to use &lt;tt&gt;lmm_objects&lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt;.l_ost_idx&lt;/tt&gt; to specify the striping layout, but this would cause &quot;tar&quot; to restore all objects to the original OST index and not take current OST counts into account (i.e. no rebalancing would happen during restore, which could cause OST imbalance).  Inside ll_setxattr() it could distinguish these cases by using a different lum_magic value for the new API and converting it inside ll_setxattr() so there is no network protocol incompatibility.&lt;/p&gt;

&lt;p&gt;Thoughts?&lt;/p&gt;</comment>
                            <comment id="52498" author="nedbass" created="Fri, 15 Feb 2013 18:19:57 +0000"  >&lt;p&gt;The first option does make me cringe a bit, though it seems like the simpler solution to implement. But if we&apos;re going to put in the effort I&apos;d rather implement something we can live with long term, so I&apos;d vote for the second option.&lt;/p&gt;

&lt;p&gt;Using lum_magic to distinguish the cases is a little icky too, but I don&apos;t see a better alternative.  We could leverage the fact that the existing lum_magic numbers have a 0 MSB to embed a flag to signal that lmm_objects OST data should be honored.  This would provide forward-compatibility with future LOV_USER format versions. i.e.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;lustre_user.h&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;#define LOV_USER_MAGIC_V1 0x0BD10BD0
#define LOV_USER_MAGIC    LOV_USER_MAGIC_V1
#define LOV_USER_MAGIC_JOIN_V1 0x0BD20BD0
#define LOV_USER_MAGIC_V3 0x0BD30BD0
#define LOV_USER_MAGIC_V4 0x0BD40BD0 &lt;span class=&quot;code-comment&quot;&gt;/* someday */&lt;/span&gt;

#define LOV_USER_OST_INDEX_FL 0x10000000 &lt;span class=&quot;code-comment&quot;&gt;/* Honor OST indexes supplied with lum */&lt;/span&gt;
&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;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;ll_setxattr()&lt;/b&gt;&lt;/div&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; (lump-&amp;gt;lum_magic &amp;amp; LOV_USER_OST_INDEX_FL) {
    lump-&amp;gt;lum_magic &amp;amp;= ~LOV_USER_OST_INDEX_FL;
    &lt;span class=&quot;code-comment&quot;&gt;/* ... */&lt;/span&gt;
} &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
    &lt;span class=&quot;code-comment&quot;&gt;/* normal processing */&lt;/span&gt;
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

</comment>
                            <comment id="52535" author="jcl" created="Sat, 16 Feb 2013 09:23:53 +0000"  >&lt;p&gt;The version field in lum (lum_magic) is exactly done to manage such structure change case. So the 2nd case is better. With this change we can introduce an explicit conversion of lum to lustre internal/wire structures (replace the type cast). The conversion lum-&amp;gt;lsm-&amp;gt;lmm is more complex than lum-&amp;gt;lmm but I find it better for future.&lt;/p&gt;</comment>
                            <comment id="52810" author="jlevi" created="Thu, 21 Feb 2013 10:56:38 +0000"  >&lt;p&gt;Emoly,&lt;br/&gt;
Could you please have a look at this one?&lt;/p&gt;</comment>
                            <comment id="52856" author="emoly.liu" created="Fri, 22 Feb 2013 00:28:24 +0000"  >&lt;p&gt;OK, I will look into this one.&lt;/p&gt;</comment>
                            <comment id="52991" author="emoly.liu" created="Mon, 25 Feb 2013 20:58:04 +0000"  >&lt;p&gt;During the test, I found another problem.&lt;/p&gt;

&lt;p&gt;OSTCOUNT=4,&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;[root@centos6-1 ~]# cd /mnt/lustre
[root@centos6-1 lustre]# mkdir test;cd test
[root@centos6-1 test]# &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; i in 0 1 2 3; &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt; lfs setstripe -i $i -c -1 testfile$i;dd &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;=/dev/zero of=testfile$i bs=2M count=5;done
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 0.0220632 s, 475 MB/s
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 0.0193019 s, 543 MB/s
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 0.0200823 s, 522 MB/s
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 0.0190184 s, 551 MB/s
[root@centos6-1 test]# lfs getstripe *
testfile0
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  0
	obdidx		 objid		objid		 group
	     0	             1	          0x1	             0
	     1	             1	          0x1	             0
	     2	             1	          0x1	             0
	     3	             1	          0x1	             0

testfile1
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  1
	obdidx		 objid		objid		 group
	     1	             2	          0x2	             0
	     2	             2	          0x2	             0
	     3	             2	          0x2	             0
	     1	             3	          0x3	             0

testfile2
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		objid		 group
	     2	             3	          0x3	             0
	     3	             3	          0x3	             0
	     1	             4	          0x4	             0
	     2	             4	          0x4	             0

testfile3
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  3
	obdidx		 objid		objid		 group
	     3	             4	          0x4	             0
	     1	             5	          0x5	             0
	     2	             5	          0x5	             0
	     3	             5	          0x5	             0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When stripe_offset is not 0, even stripe_count = -1, data can&apos;t be striped over all the OSTs and OST0 is always excluded.&lt;/p&gt;

&lt;p&gt;I reported this bug in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-2871&quot; title=&quot;Data can&amp;#39;t be striped across all the OSTs correctly by running &amp;quot;lfs setstripe -c -1 -i n&amp;quot; (n&amp;gt;0)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-2871&quot;&gt;&lt;del&gt;LU-2871&lt;/del&gt;&lt;/a&gt; .&lt;/p&gt;</comment>
                            <comment id="52997" author="emoly.liu" created="Mon, 25 Feb 2013 22:16:55 +0000"  >&lt;p&gt;When I ran &quot;tar --xattrs&quot; with ./test and untar to a new dir, the data can be striped over all the OSTs.&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;[root@centos6-1 lustre]# tar --xattrs -czvf /tmp/test.tar.gz ./test
./test/
./test/testfile1
./test/testfile0
./test/testfile3
./test/testfile2
[root@centos6-1 lustre]# mkdir unzip; cd unzip
[root@centos6-1 unzip]# tar -zxvf /tmp/test.tar.gz
./test/
./test/testfile1
./test/testfile0
./test/testfile3
./test/testfile2
[root@centos6-1 unzip]# lfs getstripe ./test
./test
stripe_count:   1 stripe_size:    1048576 stripe_offset:  -1 
./test/testfile1
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		objid		 group
	     2	             6	          0x6	             0
	     3	             6	          0x6	             0
	     0	             2	          0x2	             0
	     1	             6	          0x6	             0

./test/testfile0
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  3
	obdidx		 objid		objid		 group
	     3	             7	          0x7	             0
	     0	             3	          0x3	             0
	     1	             7	          0x7	             0
	     2	             7	          0x7	             0

./test/testfile3
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  0
	obdidx		 objid		objid		 group
	     0	             4	          0x4	             0
	     1	             8	          0x8	             0
	     2	             8	          0x8	             0
	     3	             8	          0x8	             0

./test/testfile2
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  1
	obdidx		 objid		objid		 group
	     1	             9	          0x9	             0
	     2	             9	          0x9	             0
	     3	             9	          0x9	             0
	     0	             5	          0x5	             0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="53077" author="adilger" created="Wed, 27 Feb 2013 00:53:16 +0000"  >&lt;p&gt;Emoly, this is probably a bug in the new lustre/lod/lod_qos.c code.  I suspect either OST0 didn&apos;t have any objects or was inactive, and it was skipped during object allocation, then lod_qos_prep_create() is adding the same OST twice.  The old LOV behaviour allowed files to be created with &amp;gt;= 3/4 of the requested stripes, if OSTs are unavailable, but would normally have blocked to wait for the OST without objects if the OST was just in the progress of creating objects.&lt;/p&gt;</comment>
                            <comment id="53322" author="emoly.liu" created="Tue, 5 Mar 2013 08:11:52 +0000"  >&lt;p&gt;I did a test to reproduce the problem in the description by setting lum_layout_gen explicitly.&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;diff --git a/lustre/utils/liblustreapi.c b/lustre/utils/liblustreapi.c
index 4067bd4..d0991c0 100644
--- a/lustre/utils/liblustreapi.c
+++ b/lustre/utils/liblustreapi.c
@@ -582,6 +582,7 @@ &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; llapi_file_open_pool(&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;char&lt;/span&gt; *name, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; flags, &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; mode,
         lum.lmm_stripe_size = stripe_size;
         lum.lmm_stripe_count = stripe_count;
         lum.lmm_stripe_offset = stripe_offset;
+       lum.u.lum_layout_gen = 2;
         &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (pool_name != NULL) {
                 strncpy(lum.lmm_pool_name, pool_name, LOV_MAXPOOLNAME);
         } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; {
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;When running &quot;lfs setstripe -c -1 -i $i /mnt/lustre/testfile$i&quot; on 4 OSTs, the output is&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;testfile0
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		 objid		 group
	     2	            37	         0x25	             0
	     3	            37	         0x25	             0
	     0	            37	         0x25	             0
	     1	            38	         0x26	             0

testfile1
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		 objid		 group
	     2	            38	         0x26	             0
	     3	            38	         0x26	             0
	     0	            38	         0x26	             0
	     1	            39	         0x27	             0

testfile2
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		 objid		 group
	     2	            39	         0x27	             0
	     3	            39	         0x27	             0
	     0	            39	         0x27	             0
	     1	            40	         0x28	             0

testfile3
lmm_stripe_count:   4
lmm_stripe_size:    1048576
lmm_layout_gen:     0
lmm_stripe_offset:  2
	obdidx		 objid		 objid		 group
	     2	            40	         0x28	             0
	     3	            40	         0x28	             0
	     0	            40	         0x28	             0
	     1	            41	         0x29	             0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It shows stripe_offset is overwritten by lum_layout_gen. &lt;/p&gt;</comment>
                            <comment id="53328" author="emoly.liu" created="Tue, 5 Mar 2013 10:23:42 +0000"  >&lt;p&gt;It&apos;s improper to set lum_layout_gen explicitly because stripe_offset and layout_gen share in a union, for writing and reading separately.&lt;/p&gt;

&lt;p&gt;I&apos;m just wondering how to reproduce this problem. I try to use &quot;tar --xattrs&quot; mentioned in description, but even I set &quot;lum.u.lum_layout_gen = 2&quot;, after untar, layout_gen turns back to zero and it isn&apos;t misread as stripe_offset.&lt;/p&gt;</comment>
                            <comment id="53354" author="adilger" created="Tue, 5 Mar 2013 14:09:46 +0000"  >&lt;p&gt;Emoly, I think your reproducer exactly demonstrates the problem - if lum_layout_gen is non-zero it will be confused with lum_stripe_offset.&lt;/p&gt;

&lt;p&gt;Ned, I think your solution is interesting, and is also related to LOV_MAGIC_V&lt;span class=&quot;error&quot;&gt;&amp;#91;13&amp;#93;&lt;/span&gt;_DEF magic that already exists in the code.  Should this new flag be implemented in the context of &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-2182&quot; title=&quot;Add llapi_file_get_layout() function in liblustreapi&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-2182&quot;&gt;&lt;del&gt;LU-2182&lt;/del&gt;&lt;/a&gt;?&lt;/p&gt;</comment>
                            <comment id="53360" author="nedbass" created="Tue, 5 Mar 2013 14:20:37 +0000"  >&lt;p&gt;Emoly, you can reproduce the problem without modifying liblustreapi by swapping the layout of two files with the llapi_swap_layouts() function, which will force their generation numbers to increment.  Then tarring and untarring them with --xattr will force their offset to be at index 1.&lt;/p&gt;</comment>
                            <comment id="53364" author="nedbass" created="Tue, 5 Mar 2013 14:34:37 +0000"  >&lt;p&gt;Andreas, yes we could do this in the context on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-2182&quot; title=&quot;Add llapi_file_get_layout() function in liblustreapi&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-2182&quot;&gt;&lt;del&gt;LU-2182&lt;/del&gt;&lt;/a&gt;.  I was thinking we could handle the simple case first, which is to set the offset of stripe 0. llapi_layout_ost_index_set() would store the OST index of stripe N  in lum.lmm_objects&lt;span class=&quot;error&quot;&gt;&amp;#91;N&amp;#93;&lt;/span&gt;.l_ost_idx.  For now, ll_setxattr would copy lmm_objects&lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt;.l_ost_idx to lum.lum_stripe_offset if lmm_magic has the flag set.  This approach would let us match the functionality that exists today without changing any server code.  Eventually we can extend this to support stripes &amp;gt; 0 without changing the API, but that would be more invasive (i.e. requiring changes to lod).  Does this approach sound reasonable?&lt;/p&gt;</comment>
                            <comment id="53411" author="emoly.liu" created="Wed, 6 Mar 2013 01:43:25 +0000"  >&lt;p&gt;Ned, thanks for reminder! We have &quot;lfs swap_layouts&quot;. &lt;/p&gt;</comment>
                            <comment id="53442" author="adilger" created="Wed, 6 Mar 2013 10:25:58 +0000"  >&lt;p&gt;Ned, yes this does seem like a good path forward. There have been requests to allow specifying the exact OST index for all of the stripes. &lt;/p&gt;</comment>
                            <comment id="53571" author="jay" created="Thu, 7 Mar 2013 23:01:57 +0000"  >&lt;p&gt;hmm.. do you think it&apos;s a good idea to pack layout_gen into low 12bit of lmm_stripe_size. Usually we don&apos;t need to know the exact version of layout_gen because it&apos;s only used to detect layout change. That being said, we don&apos;t need to keep layout_gen when restoring a file.&lt;/p&gt;</comment>
                            <comment id="53641" author="jay" created="Fri, 8 Mar 2013 20:16:16 +0000"  >&lt;p&gt;patch is at: &lt;a href=&quot;http://review.whamcloud.com/5664&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/5664&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above patch, layout_gen is cleared for getxattr&lt;/p&gt;</comment>
                            <comment id="53707" author="nedbass" created="Mon, 11 Mar 2013 13:19:53 +0000"  >&lt;p&gt;Jinshan, my reservation about that approach is that you are removing functionality from the getxattr interface. On platforms that use function shipping, &lt;span class=&quot;error&quot;&gt;&amp;#91;gs&amp;#93;&lt;/span&gt;etxattr may be the only option because the needed ioctls are not supported. Also, having inconsistent semantics between ioctl and getxattr is confusing.&lt;/p&gt;

&lt;p&gt;Having said all that, I don&apos;t know whether applications on function-shipping clients would ever need to know they layout generation number.  But in general it seems better to leave open the possibility in case we need it later.&lt;/p&gt;</comment>
                            <comment id="53720" author="jay" created="Mon, 11 Mar 2013 14:54:33 +0000"  >&lt;p&gt;getxattr should take the returning data as opaque unless the extended attributes are system defined. Ioctl and getxattr are already two separate interfaces so I tend to think it&apos;s okay to return different data, if we have defined the return value clearly.&lt;/p&gt;

&lt;p&gt;I worked out this patch because it&apos;d be the simplest way to keep compatibility. Also this solution won&apos;t last long because v4 version of layout is on its way, at that time, layout gen will no longer share field with others.&lt;/p&gt;</comment>
                            <comment id="53721" author="nedbass" created="Mon, 11 Mar 2013 15:04:07 +0000"  >&lt;blockquote&gt;&lt;p&gt;Also this solution won&apos;t last long because v4 version of layout is on its way, at that time, layout gen will no longer share field with others.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;In that case I agree with your solution. Thanks&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="17704">LU-2871</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="16365">LU-2182</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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|hzvj3j:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6799</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>