<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body>
<br>
Re: KNOWN.<br>
<br>
These are on disk flags.&nbsp; Its a mask used to check for unknown flags.<br>
<br>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> lustre-devel &lt;lustre-devel-bounces@lists.lustre.org&gt; on behalf of NeilBrown &lt;neilb@suse.com&gt;<br>
<b>Sent:</b> Monday, December 17, 2018 5:54:41 PM<br>
<b>To:</b> James Simmons; Andreas Dilger; Oleg Drokin; Bobi Jam; Jinshan Xiong<br>
<b>Cc:</b> Lustre Development List<br>
<b>Subject:</b> Re: [lustre-devel] [PATCH 01/28] lustre: pfl: Basic data structures for composite layout</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">On Mon, Dec 17 2018, James Simmons wrote:<br>
<br>
&gt; From: Niu Yawei &lt;yawei.niu@intel.com&gt;<br>
&gt;<br>
&gt; Added basic structures and magic numbers for composite layout.<br>
&gt;<br>
<br>
This would be a great place to (brief) explain what PFL does and what it<br>
is going to do with this data structures.<br>
What are the &quot;components&quot; and how do they form a &quot;composite layout&quot; ??<br>
<br>
&gt; &#43;<br>
&gt; &#43;enum lov_comp_md_entry_flags {<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_PRIMARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00000001,&nbsp;&nbsp; /* Not used */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_STALE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00000002,&nbsp;&nbsp; /* Not used */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_OFFLINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00000004,&nbsp;&nbsp; /* Not used */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_PREFERRED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00000008,&nbsp;&nbsp; /* Not used */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_INIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0x00000010,&nbsp;&nbsp; /* instantiated */<br>
&gt; &#43;};<br>
&gt; &#43;<br>
&gt; &#43;#define LCME_KNOWN_FLAGS&nbsp;&nbsp;&nbsp;&nbsp; LCME_FL_INIT<br>
<br>
What is a &quot;KNOWN&quot; flags?&nbsp; What isn't known about the other ones?<br>
<br>
&gt; &#43;<br>
&gt; &#43;/* lcme_id can be specified as certain flags, and the the first<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^^^^^^^<br>
Too many &quot;the&quot;s.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
<br>
&gt; &#43; * bit of lcme_id is used to indicate that the ID is representing<br>
&gt; &#43; * certain LCME_FL_* but not a real ID. Which implies we can have<br>
&gt; &#43; * at most 31 flags (see LCME_FL_XXX).<br>
&gt; &#43; */<br>
&gt; &#43;enum lcme_id {<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_ID_INVAL&nbsp;&nbsp; = 0x0,<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_ID_MAX&nbsp;&nbsp;&nbsp;&nbsp; = 0x7FFFFFFF,<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_ID_ALL&nbsp;&nbsp;&nbsp;&nbsp; = 0xFFFFFFFF,<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; LCME_ID_NONE&nbsp;&nbsp;&nbsp; = 0x80000000<br>
&gt; &#43;};<br>
&gt; &#43;<br>
&gt; &#43;#define LCME_ID_MASK LCME_ID_MAX<br>
<br>
Why is MASK a #define, but MAX an enum ??<br>
<br>
&gt; &#43;<br>
&gt; &#43;struct lov_comp_md_entry_v1 {<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; __u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* unique id of component */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; __u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_flags;&nbsp;&nbsp;&nbsp;&nbsp; /* LCME_FL_XXX */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; struct lu_extent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_extent;&nbsp;&nbsp;&nbsp; /* file extent for component */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; __u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_offset;&nbsp;&nbsp;&nbsp; /* offset of component blob,<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * start from lov_comp_md_v1<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; __u32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* size of component blob */<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; __u64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcme_padding[2];<br>
&gt; &#43;} __packed;<br>
&gt; &#43;<br>
&gt; &#43;enum lov_comp_md_flags;<br>
<br>
This enum is empty, and never used.<br>
<br>
It eventually gets some LCM_FL_* names added... maybe it should wait<br>
until those are added??<br>
<br>
Thanks,<br>
NeilBrown<br>
</div>
</span></font></div>
</body>
</html>