Hi Tao,<div><br></div><div>The new design looks OK me.<br>
BTW, you have removed the section about &quot;ll_lookup_lock&quot; from the first 
version document. So you will not change related logic, right? I think 
this part should be fixed in new kernels.<br>
<br>
Cheers,<br>
Nasf<br><br><div class="gmail_quote">On Thu, Feb 9, 2012 at 3:15 PM,  <span dir="ltr">&lt;<a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
&gt; -----Original Message-----<br>
&gt; From: Fan Yong [mailto:<a href="mailto:yong.fan@whamcloud.com">yong.fan@whamcloud.com</a>]<br>
</div><div><div class="h5">&gt; Sent: Saturday, February 04, 2012 12:18 AM<br>
&gt; To: Peng, Tao<br>
&gt; Cc: <a href="mailto:adilger@whamcloud.com">adilger@whamcloud.com</a>; <a href="mailto:bergwolf@gmail.com">bergwolf@gmail.com</a>; Tang, Haiying; faibish, sorin; Liu, Xuezhao;<br>
&gt; <a href="mailto:laisiyao@whamcloud.com">laisiyao@whamcloud.com</a>; <a href="mailto:green@whamcloud.com">green@whamcloud.com</a>; <a href="mailto:eeb@whamcloud.com">eeb@whamcloud.com</a>; <a href="mailto:bryon@whamcloud.com">bryon@whamcloud.com</a>; lustre-<br>

&gt; <a href="mailto:devel@lists.lustre.org">devel@lists.lustre.org</a><br>
&gt; Subject: Re: Lustre dcache clean up and distributed locking<br>
&gt;<br>
&gt; On 2/3/12 3:37 PM, <a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a> wrote:<br>
&gt; &gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt; From: Fan Yong [mailto:<a href="mailto:yong.fan@whamcloud.com">yong.fan@whamcloud.com</a>]<br>
&gt; &gt;&gt; Sent: Tuesday, January 31, 2012 8:02 PM<br>
&gt; &gt;&gt; To: Peng, Tao<br>
&gt; &gt;&gt; Cc: Andreas Dilger; <a href="mailto:bergwolf@gmail.com">bergwolf@gmail.com</a>; Tang, Haiying; faibish, sorin; Liu, Xuezhao;<br>
&gt; &gt;&gt; <a href="mailto:laisiyao@whamcloud.com">laisiyao@whamcloud.com</a>; <a href="mailto:green@whamcloud.com">green@whamcloud.com</a>; <a href="mailto:eeb@whamcloud.com">eeb@whamcloud.com</a>; <a href="mailto:bryon@whamcloud.com">bryon@whamcloud.com</a>; lustre-<br>

&gt; &gt;&gt; <a href="mailto:devel@lists.lustre.org">devel@lists.lustre.org</a><br>
&gt; &gt;&gt; Subject: Re: Lustre dcache clean up and distributed locking<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On 1/31/12 7:27 AM, Andreas Dilger wrote:<br>
&gt; &gt;&gt;&gt; On 2012-01-30, at 12:46 AM,&lt;<a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a>&gt;   wrote:<br>
&gt; &gt;&gt;&gt;&gt; Sorry for the late reply. I got your email earlier but didn&#39;t have chance to read the document<br>
&gt; due<br>
&gt; &gt;&gt; to very limited internet access.<br>
&gt; &gt;&gt;&gt;&gt; Thank you very much for taking detailed look at the document and giving so many valuable comments.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; About adding new inode bitlock, I must admit that I missed hardlink case. Although the lock mode<br>
&gt; &gt;&gt; can be changed to be the same as LOOKUP lock, I agree that inode bitlock cannot sufficiently<br>
&gt; protect<br>
&gt; &gt;&gt; every name/dentry separately for hardlinked files. And I agree, as you suggested in the document,<br>
&gt; &gt;&gt; adding a name entry based lock can solve it.<br>
&gt; &gt;&gt;&gt;&gt; IIUC, to add a name entry based lock, both client and server should be modified, and LDLM need to<br>
&gt; &gt;&gt; be changed to manage the new lock information. Like new inode bitlock, the name entry based lock<br>
&gt; will<br>
&gt; &gt;&gt; as well introduce interoperability issues as a result of on wire protocol change. And in DNE<br>
&gt; &gt;&gt; environment as Andreas explained, the original plan is to get LOOKUP on both master MDT and remote<br>
&gt; MDT.<br>
&gt; &gt;&gt; If we introduce name entry based lock, DNE case may need some change as well.<br>
&gt; &gt;&gt;&gt;&gt; I will take a closer look at the approach. In the meanwhile, could you please confirm if it is<br>
&gt; the<br>
&gt; &gt;&gt; right way to go? The benefit of above complexity seems to be better distributed dentry locking<br>
&gt; under<br>
&gt; &gt;&gt; dcache framework.<br>
&gt; &gt;&gt;&gt;&gt; What do others think? Andreas?<br>
&gt; &gt;&gt;&gt; Tao, before we go down the road of implementing such a change, there would have to be clear<br>
&gt; benefits<br>
&gt; &gt;&gt; to the performance and/or kernel integration before we could accept the interoperability issues and<br>
&gt; &gt;&gt; added code complexity.<br>
&gt; &gt;&gt;&gt; The benefits of having a per-name lock, as I see them, are:<br>
&gt; &gt;&gt;&gt; - can be cancelled separately from other name locks<br>
&gt; &gt;&gt;&gt; - can be changed independently from the inode permissions (LOOKUP)<br>
&gt; &gt;&gt;&gt; - potential ease of integration with the Linux dcache<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; The drawbacks of introducing a per-name lock:<br>
&gt; &gt;&gt;&gt; - only useful for hard-linked files (uncommon case)<br>
&gt; &gt;&gt;&gt; - added code complexity for a new lock type<br>
&gt; &gt;&gt;&gt; - incompatibility with existing client/server<br>
&gt; &gt;&gt;&gt; - additional code to handle incompatibility transparently<br>
&gt; &gt;&gt;&gt; - lock enqueue may need extra RPC for each name lock (different resource)<br>
&gt; &gt;&gt;&gt; - lock cancellation may need an extra RPC for each resource<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; The way I see it is that the DENTRY lock would need to be a different resource for each name on a<br>
&gt; &gt;&gt; file.  The only way this is going to be useful AFAICS is if the client enqueues each DENTRY lock on<br>
&gt; a<br>
&gt; &gt;&gt; separate resource, so that it can be granted and cancelled independently of the LOOKUP lock (which<br>
&gt; is<br>
&gt; &gt;&gt; on the FID and would be common for all names that reference this inode).  That would either need an<br>
&gt; &gt;&gt; extra RPC for every filename lookup (to enqueue both the DENTRY and LOOKUP locks) or a new<br>
&gt; &gt;&gt; LDLM_ENQUEUE RPC that can request and be granted two different locks (FID [seq, oid, ver, 0], and<br>
&gt; &gt;&gt; FID+name hash [seq, oid, ver, hash]) in a single RPC.<br>
&gt; &gt;&gt;&gt; So, the main question is how much better the client dcache/VFS integration will be with the DCACHE<br>
&gt; &gt;&gt; lock compared to the existing mechanism with the LOOKUP (FID) lock?  Is it impossible (or very<br>
&gt; &gt;&gt; difficult) to use the existing mechanism for the new lockless dcache code?  Or is it a matter of<br>
&gt; this<br>
&gt; &gt;&gt; being a somewhat cleaner implementation, but not critical for moving forward?<br>
&gt; &gt;&gt;&gt; I&#39;m aware that our dcache code has been too complex for some time, but I haven&#39;t looked recently<br>
&gt; to<br>
&gt; &gt;&gt; see how much of this is due to using/supporting old kernel APIs, and how much of it is due to the<br>
&gt; use<br>
&gt; &gt;&gt; of the LOOKUP lock on the FID protecting too much of the state on the client.<br>
&gt; &gt;&gt;&gt; Cheers, Andreas<br>
&gt; &gt;&gt; Hi Tao,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; To introduce either per-name lock or DENTRY lock is mainly for removing<br>
&gt; &gt;&gt; Lustre special flag &quot;DCACHE_LUSTRE_INVALID&quot; to simply Lustre code. But<br>
&gt; &gt;&gt; if such simplification causes more complex ldlm logic, we have to<br>
&gt; &gt;&gt; consider whether it is worth to remove &quot;DCACHE_LUSTRE_INVALID&quot;. It is<br>
&gt; &gt;&gt; not impossible to make &quot;DCACHE_LUSTRE_INVALID&quot; accepted by linux kernel.<br>
&gt; &gt;&gt; On the other hand, &quot;DCACHE_LUSTRE_INVALID&quot; can work together with<br>
&gt; &gt;&gt; lockless dcache in new linux kernel also.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; So to push the project move forward, we can divide it as two parts<br>
&gt; &gt;&gt; (according to your document): Lustre dcache code cleanup, and some new<br>
&gt; &gt;&gt; ldlm logic to remove &quot;DCACHE_LUSTRE_INVALID&quot;. Before we reach an<br>
&gt; &gt;&gt; agreement on the second part, we can start from the first part to<br>
&gt; &gt;&gt; cleanup Lustre dcache code. How do you think?<br>
&gt; &gt;&gt;<br>
&gt; &gt; Thank you, Andreas and Yong. I tend to agree with you that we should avoid the complexity if there<br>
&gt; is no obvious benefits. However, as we need to make sure the code is acceptable by kernel community, I<br>
&gt; will try to consolidate a design for adding the new type of lock but just don&#39;t implement it at this<br>
&gt; point. And if later we are asked (by kernel community developers) to do it, we just need to do the<br>
&gt; implementation.<br>
&gt;<br>
&gt; Hi Tao,<br>
&gt;<br>
&gt; We has another way to remove Lustre special dentry flags<br>
&gt; &quot;DCACHE_LUSTRE_INVALID&quot;. To indicate the dentry in dcache without LOOKUP<br>
&gt; lock protected but not unhashed yet, we can add new flags in<br>
&gt; &quot;ll_dentry_data&quot; (pointed by &quot;dentry::d_fsdata&quot;). Since it is Lustre<br>
&gt; private date, no need to worry about whether the new flags will conflict<br>
&gt; with any other VFS standard &quot;dentry::d_flags&quot; or not, and maybe save<br>
&gt; some effort to implement the complex DENTRY lock in your original design.<br>
&gt;<br>
</div></div>Hi Fan Yong,<br>
<br>
Thanks for your great suggestion. I updated the design doc with following changes, please help to review. Thank you!<br>
<br>
Changelog:<br>
1. Macro cleanups are removed. I prefer to do it separately while cleaning up other obsolete macros.<br>
2. Remove DENTRY LDLM lock proposal. Because DCACHE_LUSTRE_INVALID flag can be hidden from generic VFS layer, it is no longer necessary to introduce such complex change.<br>
3. Add a section to describe how to add LLD_LUSTRE_INVALID flag to ll_dentry_data structure to replace existing DCACHE_LUSTRE_INVALID flag.<br>
<br>
Cheers,<br>
Tao<br>
<div class="HOEnZb"><div class="h5">&gt; Cheers,<br>
&gt; Nasf<br>
&gt;<br>
&gt; &gt; Please stay tuned.<br>
&gt; &gt;<br>
&gt; &gt; Best,<br>
&gt; &gt; Tao<br>
&gt; &gt;<br>
&gt; &gt;&gt; Cheers,<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt; Nasf<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt;&gt;&gt;&gt; From: Fan Yong [mailto:<a href="mailto:yong.fan@whamcloud.com">yong.fan@whamcloud.com</a>]<br>
&gt; &gt;&gt;&gt;&gt;&gt; Sent: Saturday, January 21, 2012 1:11 AM<br>
&gt; &gt;&gt;&gt;&gt;&gt; To: Peng, Tao; <a href="mailto:bergwolf@gmail.com">bergwolf@gmail.com</a><br>
&gt; &gt;&gt;&gt;&gt;&gt; Cc: Tang, Haiying; <a href="mailto:adilger@whamcloud.com">adilger@whamcloud.com</a>; faibish, sorin; Liu, Xuezhao; <a href="mailto:laisiyao@whamcloud.com">laisiyao@whamcloud.com</a>;<br>
&gt; &gt;&gt;&gt;&gt;&gt; <a href="mailto:green@whamcloud.com">green@whamcloud.com</a>; <a href="mailto:eeb@whamcloud.com">eeb@whamcloud.com</a>; Bryon Neitzel<br>
&gt; &gt;&gt;&gt;&gt;&gt; Subject: Re: Lustre dcache clean up and distributed locking<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; Hi Tao,<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; Excellent work. I just added some comments inside your document. Please check.<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; Best Regards,<br>
&gt; &gt;&gt;&gt;&gt;&gt; Fan Yong<br>
&gt; &gt;&gt;&gt;&gt;&gt; Whamcloud, Inc.<br>
&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt; On 1/20/12 9:34 AM, <a href="mailto:haiying.tang@emc.com">haiying.tang@emc.com</a> wrote:<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Hi Andreas,<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Tao is on vacation now. It might be difficult for him to check emails due to limited internet<br>
&gt; &gt;&gt; access<br>
&gt; &gt;&gt;&gt;&gt;&gt; at hometown.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; For urgent issue, you folks could send email to his gmail account <a href="mailto:bergwolf@gmail.com">bergwolf@gmail.com</a>.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Thanks,<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Haiying<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; From: Andreas Dilger [mailto:<a href="mailto:adilger@whamcloud.com">adilger@whamcloud.com</a>]<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Sent: 2012\u5e741\u670820\u65e5 1:39<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; To: Peng, Tao<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Cc: faibish, sorin; Tang, Haiying; Liu, Xuezhao;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:laisiyao@whamcloud.com">laisiyao@whamcloud.com</a>; <a href="mailto:yong.fan@whamcloud.com">yong.fan@whamcloud.com</a>; <a href="mailto:green@whamcloud.com">green@whamcloud.com</a>;<br>

&gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:eeb@whamcloud.com">eeb@whamcloud.com</a><br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Subject: Re: Lustre dcache clean up and distributed locking<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; On 2012-01-17, at 3:21 AM,&lt;<a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a>&gt;   &lt;<a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a>&gt;   wrote:<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks Siyao and Oleg for answering my dcache revalidation question on lustre mailing list. I<br>
&gt; &gt;&gt;&gt;&gt;&gt; updated the design to reflect it.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; Please see attachment.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Tao,<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Fan Yong is also taking a more detailed look at your document and will<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; hopefully have a chance to reply before the New Year holidays.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Also, we are just working on landing the patches to add support for<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Linux<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; 2.6.38 for the Lustre client.  One of the patches relates to the<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; lockless dcache changes that were introduced in that kernel.  If you<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; are interested to review this patch, and become more familiar with the<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Lustre development process, you should visit <a href="http://review.whamcloud.com/1865" target="_blank">http://review.whamcloud.com/1865</a> for the patch.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; You need to create an account in Gerrit using OpenID (Google, mostly),<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; and an account in our bug tracking system (<a href="http://jira.whamcloud.com" target="_blank">http://jira.whamcloud.com</a>)<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; if you haven&#39;t already.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; From: Andreas Dilger [mailto:<a href="mailto:adilger@whamcloud.com">adilger@whamcloud.com</a>]<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Sent: Tuesday, January 17, 2012 4:16 PM<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; To: Peng, Tao<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Cc: faibish, sorin; Tang, Haiying; Liu, Xuezhao; Lai Siyao; Fan<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Yong; Oleg Drokin; Eric Barton<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Subject: Re: Lustre dcache clean up and distributed locking<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On 2012-01-16, at 9:25 PM,&lt;<a href="mailto:tao.peng@emc.com">tao.peng@emc.com</a>&gt;   wrote:<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I finally started to work on Lustre dcache cleanup and locking.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; After reading Lustre, ocfs2 and VFS<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; dcache related code, I came to a design for cleaning up Lustre<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; dcache code and doing distributed locking under dcache. For<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; distributed locking, the main idea is to add a new inode bitlock<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; DENTRY lock to just protect valid dentry, instead of letting LOOKUP<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; lock handle multiple purpose, which makes client unable to know<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; whether file is deleted or not when server cancels LOOKUP lock. Instead, client holds PR mode<br>
&gt; &gt;&gt;&gt;&gt;&gt; DENTRY lock on all valid denties and when server cancels it, client knows the file is deleted.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; For details, please see the attachments (I attached both word and<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; pdf versions as I am not sure if<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; which is more convenient for you:). And please help to review and comment. Thank you!<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Tao,<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I&#39;m passing this on to the engineers that are most familiar with the<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; DLM and client dcache code in Lustre.  After a quick first read<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; through your document, your investigation of the client code is very<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; insightful and looks like it will be able to remove some of the significant complexity that<br>
&gt; has<br>
&gt; &gt;&gt;&gt;&gt;&gt; grown over time in the llite code.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Cheers, Andreas<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Andreas Dilger                       Whamcloud, Inc.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Principal Engineer                   <a href="http://www.whamcloud.com/" target="_blank">http://www.whamcloud.com/</a><br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;dcache_distributed_locking-v2.docx&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Cheers, Andreas<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Andreas Dilger                       Whamcloud, Inc.<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Principal Engineer                   <a href="http://www.whamcloud.com/" target="_blank">http://www.whamcloud.com/</a><br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Cheers, Andreas<br>
&gt; &gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt; Andreas Dilger                       Whamcloud, Inc.<br>
&gt; &gt;&gt;&gt; Principal Engineer                   <a href="http://www.whamcloud.com/" target="_blank">http://www.whamcloud.com/</a><br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div>