<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.old.lustre.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lucy</id>
	<title>Obsolete Lustre Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.old.lustre.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lucy"/>
	<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Special:Contributions/Lucy"/>
	<updated>2026-04-08T14:03:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2745</id>
		<title>Contribution Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2745"/>
		<updated>2007-05-21T16:12:39Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Submitting Patches for Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Check-in Policy =&lt;br /&gt;
&lt;br /&gt;
== Submitting Patches for Review ==&lt;br /&gt;
&lt;br /&gt;
To have your changes accepted into a mainline Lustre branch, you must have your code reviewed and approved. The following steps will speed up your review and increase the likelihood of success:&lt;br /&gt;
&lt;br /&gt;
1. Read, complete, and return the form found at http://www.lustre.org/contribute.html  We can&#039;t accept your contributions without it.&lt;br /&gt;
&lt;br /&gt;
2. Generate a patch with the &amp;quot;-upN&amp;quot; flags to diff or cvs diff. Please don&#039;t send other kinds of patches unless your reviewer requests them.&lt;br /&gt;
&lt;br /&gt;
3. Find or file a bug for your issue at http://bugzilla.lustre.org/ . Read the Bugzilla user guide for more information.&lt;br /&gt;
&lt;br /&gt;
4. Attach your patch as an Attachment (not a comment):&lt;br /&gt;
* Provide the patch as an Attachment, and select the Patch box.&lt;br /&gt;
* Edit the new attachment. Under &amp;quot;Flags&amp;quot; select &amp;quot;Review&amp;quot; and the question mark.&lt;br /&gt;
* Enter the email address of the person who should review.  If you haven&#039;t been collaborating with someone, and don&#039;t know who should review your work, try [mailto:bugs@clusterfs.com bugs@clusterfs.com]&lt;br /&gt;
* Submit the attachment update.&lt;br /&gt;
&lt;br /&gt;
5. One or more reviewers will submit comments regarding your patch. Iterate until you receive approval on the patch or the bug is closed.&lt;br /&gt;
&lt;br /&gt;
6. Once you have approval, commit the patch (or ask for it to be committed for you, if you don&#039;t have CVS access). Note the bug number and reviewer in the commit message, along with a concise description of the change.&lt;br /&gt;
&lt;br /&gt;
This applies even if you have write access to the CVS tree -- if you don&#039;t follow these steps, expect your changes to be backed out of the tree without warning.  We have to be strict, or the chaos becomes unbearable.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
Our current policy is that anyone may create and maintain a private branch in CVS. We ask, however, that you observe the best practices outlined in this document. It will save you a lot of effort, I promise.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Patchless_Client&amp;diff=2737</id>
		<title>Patchless Client</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Patchless_Client&amp;diff=2737"/>
		<updated>2007-05-21T15:34:00Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Patchless Client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Patchless Client ==&lt;br /&gt;
As of Lustre 1.6.0, Lustre supports running the client modules on some unpatched &amp;quot;stock&amp;quot; kernels.&lt;br /&gt;
This results in some small performance losses, but may be worthwhile to some users for maintenance or contract reasons.  &lt;br /&gt;
&lt;br /&gt;
We will typically post a &amp;quot;patchless&amp;quot; RPM at the [http://www.lustre.org/downloads.html download site]. Instead, if building from source, the Lustre configure script will automatically detect the unpatched kernel and disable building the servers.&lt;br /&gt;
&lt;br /&gt;
 [lustre]$ ./configure --with-linux=/unpatched/kernel/source&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
Currently, the patchless client works with these kernel versions&lt;br /&gt;
&lt;br /&gt;
Vanilla kernel:&lt;br /&gt;
 * 2.6.15    (1.6.0)&lt;br /&gt;
 * 2.6.16    (1.6.0)&lt;br /&gt;
 * 2.6.17    (1.6.0) Mandriva&#039;s 2.6.17 is also reported working.&lt;br /&gt;
 * 2.6.18    (1.6.0)&lt;br /&gt;
 * 2.6.19    (1.6.0)&lt;br /&gt;
 * 2.6.20    (1.6.1 [https://bugzilla.lustre.org/show_bug.cgi?id=11647 bug 11647])&lt;br /&gt;
 * 2.6.21    (1.6.1 [https://bugzilla.lustre.org/show_bug.cgi?id=11647 bug 11647])&lt;br /&gt;
&lt;br /&gt;
Red Hat Enterprise Linux:&lt;br /&gt;
 * RHEL4 [2.6.9-42.0.8EL] (1.6.0) with the following caveats:&lt;br /&gt;
  - Nested Symlinks: due to improper lookup_continue logic with unpatched 2.6.15&lt;br /&gt;
    kernels and earlier, nested symlinks will lead to unpredictable results&lt;br /&gt;
  - FMODE_EXEC missing: Lustre will incorrectly allow a user from one client to&lt;br /&gt;
    write/truncate a binary simultaneously while a user from a different client&lt;br /&gt;
    executes the same binary &lt;br /&gt;
 * RHEL4U5 [2.6.9-55EL]   (1.6.0) Red Hat has includesd a Lustre-specific patch&lt;br /&gt;
   with RHEL4U5 which resolves the above issues.&lt;br /&gt;
&lt;br /&gt;
 * RHEL5     (1.6.1 [https://bugzilla.lustre.org/show_bug.cgi?id=11647 bug 11647])&lt;br /&gt;
&lt;br /&gt;
Fedora Core:&lt;br /&gt;
 * FC6       (1.6.1 [https://bugzilla.lustre.org/show_bug.cgi?id=11647 bug 11647])&lt;br /&gt;
&lt;br /&gt;
Suse:&lt;br /&gt;
 * SLES 10   (tbd)&lt;br /&gt;
&lt;br /&gt;
=== Known Issues ===&lt;br /&gt;
&lt;br /&gt;
many NFS-related bugs are also addressed by the patchless client fixes.&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2728</id>
		<title>Contribution Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2728"/>
		<updated>2007-05-18T09:52:59Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Submitting Patches for Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Check-in Policy =&lt;br /&gt;
&lt;br /&gt;
== Submitting Patches for Review ==&lt;br /&gt;
&lt;br /&gt;
To have your changes accepted into a mainline Lustre branch, you must have your code reviewed and approved. The following steps will speed up your review and increase the likelihood of success:&lt;br /&gt;
&lt;br /&gt;
1. Read, complete, and return the form found at http://www.lustre.org/contribute.html  We can&#039;t accept your contributions without it.&lt;br /&gt;
&lt;br /&gt;
2. Generate a patch with the &amp;quot;-upN&amp;quot; flags to diff or cvs diff. Please don&#039;t send other kinds of patches unless your reviewer requests them.&lt;br /&gt;
&lt;br /&gt;
3. Find or file a bug for your issue at http://bugzilla.lustre.org/ . Read the Bugzilla user guide for more information.&lt;br /&gt;
&lt;br /&gt;
4. Attach your patch as an Attachment (not a comment):&lt;br /&gt;
* Provide the patch as an Attachment, and select the Patch box.&lt;br /&gt;
* Edit the new attachment. Under &amp;quot;Flags&amp;quot; select &amp;quot;Review&amp;quot; and the question mark.&lt;br /&gt;
* Enter the email address of the person who should review.  If you haven&#039;t been collaborating with someone, and don&#039;t know who should review your work, try bugs@clusterfs.com&lt;br /&gt;
* Submit the attachment update.&lt;br /&gt;
&lt;br /&gt;
5. One or more reviewers will submit comments regarding your patch. Iterate until you receive approval on the patch or the bug is closed.&lt;br /&gt;
&lt;br /&gt;
6. Once you have approval, commit the patch (or ask for it to be committed for you, if you don&#039;t have CVS access). Note the bug number and reviewer in the commit message, along with a concise description of the change.&lt;br /&gt;
&lt;br /&gt;
This applies even if you have write access to the CVS tree -- if you don&#039;t follow these steps, expect your changes to be backed out of the tree without warning.  We have to be strict, or the chaos becomes unbearable.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
Our current policy is that anyone may create and maintain a private branch in CVS. We ask, however, that you observe the best practices outlined in this document. It will save you a lot of effort, I promise.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2727</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2727"/>
		<updated>2007-05-18T09:51:30Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Great detail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2726</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2726"/>
		<updated>2007-05-18T09:50:49Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Guidelines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Simul_Parallel_File_System_Test_Tool&amp;diff=2699</id>
		<title>Simul Parallel File System Test Tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Simul_Parallel_File_System_Test_Tool&amp;diff=2699"/>
		<updated>2007-05-18T08:54:12Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* simul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== simul ==&lt;br /&gt;
&lt;br /&gt;
simul (available in the usual spot on the ftp site, or in ~morrone on MCR) tests most filesystem syscalls from one or more threads on one or more nodes. Building simul is straightforward.&lt;br /&gt;
&lt;br /&gt;
It is easily run with either pdsh or prun. On MCR, this amounts to:&lt;br /&gt;
&lt;br /&gt;
 pdsh -E -w &amp;lt;node list&amp;gt; [-n tasks-per-node] /path/simul -d /mnt/lustre/path/&lt;br /&gt;
&lt;br /&gt;
Using prun is left as an exercise to the reader.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=2526</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=2526"/>
		<updated>2007-05-18T04:17:40Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
**&#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
** &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
** [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
** [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
** [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
** &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
*** [http://wiki.lustre.org/images/7/78/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
*** &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2510</id>
		<title>LibLustre How-To Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2510"/>
		<updated>2007-05-18T03:53:20Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* running programs over liblustre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liblustre A How to Guide =&lt;br /&gt;
== Liblustre Introduction ==&lt;br /&gt;
&lt;br /&gt;
A library version of the Lustre client file system is now available for some versions of Lustre, it gives an user application linked with the library access to Lustre file systems without the need to mount Lustre (VFS) on the client.  The key goals for the library are to provide a portable mechanism to access Lustre from different POSIX compliant operating systems, to provide access from microkernel based systems and from the Windows operating system.&lt;br /&gt;
&lt;br /&gt;
Currently, liblustre is still under development and only works on linux (i386 &amp;amp; x86_64, not tested on ia64).&lt;br /&gt;
&lt;br /&gt;
In this document, we will discuss how to use liblustre.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that liblustre is NOT a required element of Lustre.&#039;&#039;&#039;&lt;br /&gt;
liblustre is not required or even recommended for running Lustre on Linux, you should instead use the Lustre (VFS) client filesystem to mount Lustre directly.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, liblustre implements the Lustre client filesystem in user space. The liblustre component links LNET and libsysio together to form a shared library which could be used by applications to perform File I/O.&lt;br /&gt;
&lt;br /&gt;
== Building clients and servers for the Lustre library version ==&lt;br /&gt;
&lt;br /&gt;
When using liblustre, servers are first built/configured in the usual way as described in [https://projects.clusterfs.com/lustre/LustreHowto Guide to Lustre].  liblustre is built by default unless &amp;quot;./configure --disable-liblustre&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
The liblustre files are located in lustre/liblustre:&lt;br /&gt;
* liblustre/liblustre.so&lt;br /&gt;
* liblustre/tests/&lt;br /&gt;
&lt;br /&gt;
== How to use liblustre ==&lt;br /&gt;
&lt;br /&gt;
First of all you must be running Lustre servers (MDS/OSTs) without ACLs and accepting connections on insecure ports.  For example, add &#039;&#039;&#039;options lnet networks=tcp(eth0) accept=all&#039;&#039;&#039; to /etc/modprobe.conf, then run the script &#039;&#039;&#039;MDS_MOUNT_OPTS=&amp;quot;noacl&amp;quot; sh llmount.sh&#039;&#039;&#039;.  This will set up a MDS, OST, and client on the local machine.  You should umount the Lustre client at /mnt/lustre.&lt;br /&gt;
&lt;br /&gt;
=== Mount Target ===&lt;br /&gt;
&lt;br /&gt;
liblustre needs to know &#039;&#039;mount target&#039;&#039; before connect to lustre server. the format is like following:&lt;br /&gt;
&lt;br /&gt;
    mds_nid:/mds_name/profile_name&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mds_nid&#039;&#039;&#039; is actually the hostname of MDS (or IP address if you don&#039;t have proper name resolution set up).&lt;br /&gt;
* &#039;&#039;&#039;mds_name&#039;&#039;&#039; is the name of the MDS. In the .xml file, it appears in following line:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;mds uuid=&#039;mds_uuid&#039; name=&#039;mds_name&#039;&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
* &#039;&#039;&#039;profile&#039;&#039;&#039; is the profile name of the client mountpoint, often &#039;&#039;&#039;client&#039;&#039;&#039; in many configs.&lt;br /&gt;
&lt;br /&gt;
Please refer to lustre documents for more mount target explaination.  This can be passed to most liblustre programs via the environment variable LIBLUSTRE_MOUNT_TARGET.&lt;br /&gt;
&lt;br /&gt;
=== sanity test ===&lt;br /&gt;
&lt;br /&gt;
there&#039;s a statically built-in liblustre test program at &#039;&#039;lustre/liblustre/tests/sanity&#039;&#039;. you could use it to verify whether liblustre work properly:&lt;br /&gt;
&lt;br /&gt;
    sanity --target mds_nid:/mdsname/profile_name&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
If we run a program, e.g. iozone, we&#039;ll use LD_PRELOAD to load &#039;&#039;liblustre.so&#039;&#039; at first. The start function of &#039;&#039;liblustre.so&#039;&#039; will mount a lustre partion on certain dir, e.g. /mnt/lustre. Furthermore, following loaded iozone&#039;s functions calls such as open/read/write... will dynamically linked with the implementations in &#039;&#039;liblustre.so&#039;&#039; instead of &#039;&#039;libc&#039;&#039; in the usually case. Thus we could intercept the filesystem related system calls and translate into lustre commands.&lt;br /&gt;
&lt;br /&gt;
=== Necessary Environment Variables ===&lt;br /&gt;
There&#039;s a simple script &#039;&#039;lustre/utils/lrun&#039;&#039; which set some ENVs:&lt;br /&gt;
a. mount point&lt;br /&gt;
   &lt;br /&gt;
    LIBLUSTRE_MOUNT_POINT=${LIBLUSTRE_MOUNT_POINT:-&amp;quot;/mnt/lustre&amp;quot;}&lt;br /&gt;
   &lt;br /&gt;
this is where liblustre will mount remote lustre filesystem. default is &#039;&#039;/mnt/lustre&#039;&#039;, please make sure it exist on your system:&lt;br /&gt;
&lt;br /&gt;
b. mount target&lt;br /&gt;
    &lt;br /&gt;
    LIBLUSTRE_MOUNT_TARGET=${LIBLUSTRE_MOUNT_TARGET:-&amp;quot;your_mount_target&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
you need fill in the actual target before using liblustre (e.g. mdshost:/mdsname/client).&lt;br /&gt;
&lt;br /&gt;
c. shared library&lt;br /&gt;
    &lt;br /&gt;
    LD_PRELOAD=${LD_PRELOAD:-&amp;quot;/usr/lib/liblustre.so&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
make sure you&#039;v install lustre/liblustre/liblustre.so into the this place.&lt;br /&gt;
&lt;br /&gt;
=== running programs over liblustre ===&lt;br /&gt;
Until now, only a very small number of applications have been tested with liblustre:&lt;br /&gt;
* iozone&lt;br /&gt;
* IOR&lt;br /&gt;
* simul&lt;br /&gt;
&lt;br /&gt;
and also several standard unix command:&lt;br /&gt;
* ls&lt;br /&gt;
* touch&lt;br /&gt;
* rm&lt;br /&gt;
* mkdir&lt;br /&gt;
* rmdir&lt;br /&gt;
* mv&lt;br /&gt;
* cp&lt;br /&gt;
* find&lt;br /&gt;
* grep&lt;br /&gt;
&lt;br /&gt;
You need prepend &#039;lrun&#039; before the programs you intend to run:&lt;br /&gt;
 &lt;br /&gt;
   lrun iozone -f /mnt/lustre/ioz_testfile -r 256k -s 1g&lt;br /&gt;
    &lt;br /&gt;
   lrun mkdir /mnt/lustre/testdir&lt;br /&gt;
   lrun touch /mnt/lustre/testdir/testfile&lt;br /&gt;
   lrun cp /etc/fstab /mnt/lustre/testdir&lt;br /&gt;
   lrun ls /mnt/lustre/testdir&lt;br /&gt;
   lrun find /mnt/lustre/&lt;br /&gt;
   lrun .....&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;&lt;br /&gt;
liblustre is somewhat sensitive to glibc version, what we are using is glibc-2.2.5 and glic-2.3.2.&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2509</id>
		<title>LibLustre How-To Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2509"/>
		<updated>2007-05-18T03:50:17Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Necessary Environment Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liblustre A How to Guide =&lt;br /&gt;
== Liblustre Introduction ==&lt;br /&gt;
&lt;br /&gt;
A library version of the Lustre client file system is now available for some versions of Lustre, it gives an user application linked with the library access to Lustre file systems without the need to mount Lustre (VFS) on the client.  The key goals for the library are to provide a portable mechanism to access Lustre from different POSIX compliant operating systems, to provide access from microkernel based systems and from the Windows operating system.&lt;br /&gt;
&lt;br /&gt;
Currently, liblustre is still under development and only works on linux (i386 &amp;amp; x86_64, not tested on ia64).&lt;br /&gt;
&lt;br /&gt;
In this document, we will discuss how to use liblustre.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that liblustre is NOT a required element of Lustre.&#039;&#039;&#039;&lt;br /&gt;
liblustre is not required or even recommended for running Lustre on Linux, you should instead use the Lustre (VFS) client filesystem to mount Lustre directly.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, liblustre implements the Lustre client filesystem in user space. The liblustre component links LNET and libsysio together to form a shared library which could be used by applications to perform File I/O.&lt;br /&gt;
&lt;br /&gt;
== Building clients and servers for the Lustre library version ==&lt;br /&gt;
&lt;br /&gt;
When using liblustre, servers are first built/configured in the usual way as described in [https://projects.clusterfs.com/lustre/LustreHowto Guide to Lustre].  liblustre is built by default unless &amp;quot;./configure --disable-liblustre&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
The liblustre files are located in lustre/liblustre:&lt;br /&gt;
* liblustre/liblustre.so&lt;br /&gt;
* liblustre/tests/&lt;br /&gt;
&lt;br /&gt;
== How to use liblustre ==&lt;br /&gt;
&lt;br /&gt;
First of all you must be running Lustre servers (MDS/OSTs) without ACLs and accepting connections on insecure ports.  For example, add &#039;&#039;&#039;options lnet networks=tcp(eth0) accept=all&#039;&#039;&#039; to /etc/modprobe.conf, then run the script &#039;&#039;&#039;MDS_MOUNT_OPTS=&amp;quot;noacl&amp;quot; sh llmount.sh&#039;&#039;&#039;.  This will set up a MDS, OST, and client on the local machine.  You should umount the Lustre client at /mnt/lustre.&lt;br /&gt;
&lt;br /&gt;
=== Mount Target ===&lt;br /&gt;
&lt;br /&gt;
liblustre needs to know &#039;&#039;mount target&#039;&#039; before connect to lustre server. the format is like following:&lt;br /&gt;
&lt;br /&gt;
    mds_nid:/mds_name/profile_name&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mds_nid&#039;&#039;&#039; is actually the hostname of MDS (or IP address if you don&#039;t have proper name resolution set up).&lt;br /&gt;
* &#039;&#039;&#039;mds_name&#039;&#039;&#039; is the name of the MDS. In the .xml file, it appears in following line:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;mds uuid=&#039;mds_uuid&#039; name=&#039;mds_name&#039;&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
* &#039;&#039;&#039;profile&#039;&#039;&#039; is the profile name of the client mountpoint, often &#039;&#039;&#039;client&#039;&#039;&#039; in many configs.&lt;br /&gt;
&lt;br /&gt;
Please refer to lustre documents for more mount target explaination.  This can be passed to most liblustre programs via the environment variable LIBLUSTRE_MOUNT_TARGET.&lt;br /&gt;
&lt;br /&gt;
=== sanity test ===&lt;br /&gt;
&lt;br /&gt;
there&#039;s a statically built-in liblustre test program at &#039;&#039;lustre/liblustre/tests/sanity&#039;&#039;. you could use it to verify whether liblustre work properly:&lt;br /&gt;
&lt;br /&gt;
    sanity --target mds_nid:/mdsname/profile_name&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
If we run a program, e.g. iozone, we&#039;ll use LD_PRELOAD to load &#039;&#039;liblustre.so&#039;&#039; at first. The start function of &#039;&#039;liblustre.so&#039;&#039; will mount a lustre partion on certain dir, e.g. /mnt/lustre. Furthermore, following loaded iozone&#039;s functions calls such as open/read/write... will dynamically linked with the implementations in &#039;&#039;liblustre.so&#039;&#039; instead of &#039;&#039;libc&#039;&#039; in the usually case. Thus we could intercept the filesystem related system calls and translate into lustre commands.&lt;br /&gt;
&lt;br /&gt;
=== Necessary Environment Variables ===&lt;br /&gt;
There&#039;s a simple script &#039;&#039;lustre/utils/lrun&#039;&#039; which set some ENVs:&lt;br /&gt;
a. mount point&lt;br /&gt;
   &lt;br /&gt;
    LIBLUSTRE_MOUNT_POINT=${LIBLUSTRE_MOUNT_POINT:-&amp;quot;/mnt/lustre&amp;quot;}&lt;br /&gt;
   &lt;br /&gt;
this is where liblustre will mount remote lustre filesystem. default is &#039;&#039;/mnt/lustre&#039;&#039;, please make sure it exist on your system:&lt;br /&gt;
&lt;br /&gt;
b. mount target&lt;br /&gt;
    &lt;br /&gt;
    LIBLUSTRE_MOUNT_TARGET=${LIBLUSTRE_MOUNT_TARGET:-&amp;quot;your_mount_target&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
you need fill in the actual target before using liblustre (e.g. mdshost:/mdsname/client).&lt;br /&gt;
&lt;br /&gt;
c. shared library&lt;br /&gt;
    &lt;br /&gt;
    LD_PRELOAD=${LD_PRELOAD:-&amp;quot;/usr/lib/liblustre.so&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
make sure you&#039;v install lustre/liblustre/liblustre.so into the this place.&lt;br /&gt;
&lt;br /&gt;
=== running programs over liblustre ===&lt;br /&gt;
Until now, only a very small number of applications have been tested with liblustre:&lt;br /&gt;
  * iozone&lt;br /&gt;
  * IOR&lt;br /&gt;
  * simul&lt;br /&gt;
&lt;br /&gt;
and also several standard unix command:&lt;br /&gt;
  * ls&lt;br /&gt;
  * touch&lt;br /&gt;
  * rm&lt;br /&gt;
  * mkdir&lt;br /&gt;
  * rmdir&lt;br /&gt;
  * mv&lt;br /&gt;
  * cp&lt;br /&gt;
  * find&lt;br /&gt;
  * grep&lt;br /&gt;
&lt;br /&gt;
You need prepend &#039;lrun&#039; before the programs you intend to run:&lt;br /&gt;
   {{{&lt;br /&gt;
   lrun iozone -f /mnt/lustre/ioz_testfile -r 256k -s 1g&lt;br /&gt;
&lt;br /&gt;
   lrun mkdir /mnt/lustre/testdir&lt;br /&gt;
   lrun touch /mnt/lustre/testdir/testfile&lt;br /&gt;
   lrun cp /etc/fstab /mnt/lustre/testdir&lt;br /&gt;
   lrun ls /mnt/lustre/testdir&lt;br /&gt;
   lrun find /mnt/lustre/&lt;br /&gt;
   lrun .....&lt;br /&gt;
   }}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;&lt;br /&gt;
liblustre is somewhat sensitive to glibc version, what we are using is glibc-2.2.5 and glic-2.3.2.&lt;br /&gt;
----&lt;br /&gt;
 *&#039;&#039;&#039;FrontPage&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2508</id>
		<title>LibLustre How-To Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2508"/>
		<updated>2007-05-18T03:49:23Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* sanity test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liblustre A How to Guide =&lt;br /&gt;
== Liblustre Introduction ==&lt;br /&gt;
&lt;br /&gt;
A library version of the Lustre client file system is now available for some versions of Lustre, it gives an user application linked with the library access to Lustre file systems without the need to mount Lustre (VFS) on the client.  The key goals for the library are to provide a portable mechanism to access Lustre from different POSIX compliant operating systems, to provide access from microkernel based systems and from the Windows operating system.&lt;br /&gt;
&lt;br /&gt;
Currently, liblustre is still under development and only works on linux (i386 &amp;amp; x86_64, not tested on ia64).&lt;br /&gt;
&lt;br /&gt;
In this document, we will discuss how to use liblustre.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that liblustre is NOT a required element of Lustre.&#039;&#039;&#039;&lt;br /&gt;
liblustre is not required or even recommended for running Lustre on Linux, you should instead use the Lustre (VFS) client filesystem to mount Lustre directly.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, liblustre implements the Lustre client filesystem in user space. The liblustre component links LNET and libsysio together to form a shared library which could be used by applications to perform File I/O.&lt;br /&gt;
&lt;br /&gt;
== Building clients and servers for the Lustre library version ==&lt;br /&gt;
&lt;br /&gt;
When using liblustre, servers are first built/configured in the usual way as described in [https://projects.clusterfs.com/lustre/LustreHowto Guide to Lustre].  liblustre is built by default unless &amp;quot;./configure --disable-liblustre&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
The liblustre files are located in lustre/liblustre:&lt;br /&gt;
* liblustre/liblustre.so&lt;br /&gt;
* liblustre/tests/&lt;br /&gt;
&lt;br /&gt;
== How to use liblustre ==&lt;br /&gt;
&lt;br /&gt;
First of all you must be running Lustre servers (MDS/OSTs) without ACLs and accepting connections on insecure ports.  For example, add &#039;&#039;&#039;options lnet networks=tcp(eth0) accept=all&#039;&#039;&#039; to /etc/modprobe.conf, then run the script &#039;&#039;&#039;MDS_MOUNT_OPTS=&amp;quot;noacl&amp;quot; sh llmount.sh&#039;&#039;&#039;.  This will set up a MDS, OST, and client on the local machine.  You should umount the Lustre client at /mnt/lustre.&lt;br /&gt;
&lt;br /&gt;
=== Mount Target ===&lt;br /&gt;
&lt;br /&gt;
liblustre needs to know &#039;&#039;mount target&#039;&#039; before connect to lustre server. the format is like following:&lt;br /&gt;
&lt;br /&gt;
    mds_nid:/mds_name/profile_name&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mds_nid&#039;&#039;&#039; is actually the hostname of MDS (or IP address if you don&#039;t have proper name resolution set up).&lt;br /&gt;
* &#039;&#039;&#039;mds_name&#039;&#039;&#039; is the name of the MDS. In the .xml file, it appears in following line:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;mds uuid=&#039;mds_uuid&#039; name=&#039;mds_name&#039;&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
* &#039;&#039;&#039;profile&#039;&#039;&#039; is the profile name of the client mountpoint, often &#039;&#039;&#039;client&#039;&#039;&#039; in many configs.&lt;br /&gt;
&lt;br /&gt;
Please refer to lustre documents for more mount target explaination.  This can be passed to most liblustre programs via the environment variable LIBLUSTRE_MOUNT_TARGET.&lt;br /&gt;
&lt;br /&gt;
=== sanity test ===&lt;br /&gt;
&lt;br /&gt;
there&#039;s a statically built-in liblustre test program at &#039;&#039;lustre/liblustre/tests/sanity&#039;&#039;. you could use it to verify whether liblustre work properly:&lt;br /&gt;
&lt;br /&gt;
    sanity --target mds_nid:/mdsname/profile_name&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
If we run a program, e.g. iozone, we&#039;ll use LD_PRELOAD to load &#039;&#039;liblustre.so&#039;&#039; at first. The start function of &#039;&#039;liblustre.so&#039;&#039; will mount a lustre partion on certain dir, e.g. /mnt/lustre. Furthermore, following loaded iozone&#039;s functions calls such as open/read/write... will dynamically linked with the implementations in &#039;&#039;liblustre.so&#039;&#039; instead of &#039;&#039;libc&#039;&#039; in the usually case. Thus we could intercept the filesystem related system calls and translate into lustre commands.&lt;br /&gt;
&lt;br /&gt;
=== Necessary Environment Variables ===&lt;br /&gt;
There&#039;s a simple script &#039;&#039;lustre/utils/lrun&#039;&#039; which set some ENVs:&lt;br /&gt;
  a. mount point&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_POINT=${LIBLUSTRE_MOUNT_POINT:-&amp;quot;/mnt/lustre&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  this is where liblustre will mount remote lustre filesystem. default is &#039;&#039;/mnt/lustre&#039;&#039;, please make sure it exist on your system:&lt;br /&gt;
&lt;br /&gt;
  a. mount target&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_TARGET=${LIBLUSTRE_MOUNT_TARGET:-&amp;quot;your_mount_target&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  you need fill in the actual target before using liblustre (e.g. mdshost:/mdsname/client).&lt;br /&gt;
&lt;br /&gt;
  a. shared library&lt;br /&gt;
    {{{&lt;br /&gt;
    LD_PRELOAD=${LD_PRELOAD:-&amp;quot;/usr/lib/liblustre.so&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  make sure you&#039;v install lustre/liblustre/liblustre.so into the this place.&lt;br /&gt;
&lt;br /&gt;
=== running programs over liblustre ===&lt;br /&gt;
Until now, only a very small number of applications have been tested with liblustre:&lt;br /&gt;
  * iozone&lt;br /&gt;
  * IOR&lt;br /&gt;
  * simul&lt;br /&gt;
&lt;br /&gt;
and also several standard unix command:&lt;br /&gt;
  * ls&lt;br /&gt;
  * touch&lt;br /&gt;
  * rm&lt;br /&gt;
  * mkdir&lt;br /&gt;
  * rmdir&lt;br /&gt;
  * mv&lt;br /&gt;
  * cp&lt;br /&gt;
  * find&lt;br /&gt;
  * grep&lt;br /&gt;
&lt;br /&gt;
You need prepend &#039;lrun&#039; before the programs you intend to run:&lt;br /&gt;
   {{{&lt;br /&gt;
   lrun iozone -f /mnt/lustre/ioz_testfile -r 256k -s 1g&lt;br /&gt;
&lt;br /&gt;
   lrun mkdir /mnt/lustre/testdir&lt;br /&gt;
   lrun touch /mnt/lustre/testdir/testfile&lt;br /&gt;
   lrun cp /etc/fstab /mnt/lustre/testdir&lt;br /&gt;
   lrun ls /mnt/lustre/testdir&lt;br /&gt;
   lrun find /mnt/lustre/&lt;br /&gt;
   lrun .....&lt;br /&gt;
   }}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;&lt;br /&gt;
liblustre is somewhat sensitive to glibc version, what we are using is glibc-2.2.5 and glic-2.3.2.&lt;br /&gt;
----&lt;br /&gt;
 *&#039;&#039;&#039;FrontPage&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2507</id>
		<title>LibLustre How-To Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2507"/>
		<updated>2007-05-18T03:48:52Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Mount Target */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liblustre A How to Guide =&lt;br /&gt;
== Liblustre Introduction ==&lt;br /&gt;
&lt;br /&gt;
A library version of the Lustre client file system is now available for some versions of Lustre, it gives an user application linked with the library access to Lustre file systems without the need to mount Lustre (VFS) on the client.  The key goals for the library are to provide a portable mechanism to access Lustre from different POSIX compliant operating systems, to provide access from microkernel based systems and from the Windows operating system.&lt;br /&gt;
&lt;br /&gt;
Currently, liblustre is still under development and only works on linux (i386 &amp;amp; x86_64, not tested on ia64).&lt;br /&gt;
&lt;br /&gt;
In this document, we will discuss how to use liblustre.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that liblustre is NOT a required element of Lustre.&#039;&#039;&#039;&lt;br /&gt;
liblustre is not required or even recommended for running Lustre on Linux, you should instead use the Lustre (VFS) client filesystem to mount Lustre directly.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, liblustre implements the Lustre client filesystem in user space. The liblustre component links LNET and libsysio together to form a shared library which could be used by applications to perform File I/O.&lt;br /&gt;
&lt;br /&gt;
== Building clients and servers for the Lustre library version ==&lt;br /&gt;
&lt;br /&gt;
When using liblustre, servers are first built/configured in the usual way as described in [https://projects.clusterfs.com/lustre/LustreHowto Guide to Lustre].  liblustre is built by default unless &amp;quot;./configure --disable-liblustre&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
The liblustre files are located in lustre/liblustre:&lt;br /&gt;
* liblustre/liblustre.so&lt;br /&gt;
* liblustre/tests/&lt;br /&gt;
&lt;br /&gt;
== How to use liblustre ==&lt;br /&gt;
&lt;br /&gt;
First of all you must be running Lustre servers (MDS/OSTs) without ACLs and accepting connections on insecure ports.  For example, add &#039;&#039;&#039;options lnet networks=tcp(eth0) accept=all&#039;&#039;&#039; to /etc/modprobe.conf, then run the script &#039;&#039;&#039;MDS_MOUNT_OPTS=&amp;quot;noacl&amp;quot; sh llmount.sh&#039;&#039;&#039;.  This will set up a MDS, OST, and client on the local machine.  You should umount the Lustre client at /mnt/lustre.&lt;br /&gt;
&lt;br /&gt;
=== Mount Target ===&lt;br /&gt;
&lt;br /&gt;
liblustre needs to know &#039;&#039;mount target&#039;&#039; before connect to lustre server. the format is like following:&lt;br /&gt;
&lt;br /&gt;
    mds_nid:/mds_name/profile_name&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mds_nid&#039;&#039;&#039; is actually the hostname of MDS (or IP address if you don&#039;t have proper name resolution set up).&lt;br /&gt;
* &#039;&#039;&#039;mds_name&#039;&#039;&#039; is the name of the MDS. In the .xml file, it appears in following line:&lt;br /&gt;
&lt;br /&gt;
       &amp;lt;mds uuid=&#039;mds_uuid&#039; name=&#039;mds_name&#039;&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
* &#039;&#039;&#039;profile&#039;&#039;&#039; is the profile name of the client mountpoint, often &#039;&#039;&#039;client&#039;&#039;&#039; in many configs.&lt;br /&gt;
&lt;br /&gt;
Please refer to lustre documents for more mount target explaination.  This can be passed to most liblustre programs via the environment variable LIBLUSTRE_MOUNT_TARGET.&lt;br /&gt;
&lt;br /&gt;
=== sanity test ===&lt;br /&gt;
&lt;br /&gt;
there&#039;s a statically built-in liblustre test program at &#039;&#039;lustre/liblustre/tests/sanity&#039;&#039;. you could use it to verify whether liblustre work properly:&lt;br /&gt;
    {{{&lt;br /&gt;
    sanity --target mds_nid:/mdsname/profile_name&lt;br /&gt;
    }}}&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
If we run a program, e.g. iozone, we&#039;ll use LD_PRELOAD to load &#039;&#039;liblustre.so&#039;&#039; at first. The start function of &#039;&#039;liblustre.so&#039;&#039; will mount a lustre partion on certain dir, e.g. /mnt/lustre. Furthermore, following loaded iozone&#039;s functions calls such as open/read/write... will dynamically linked with the implementations in &#039;&#039;liblustre.so&#039;&#039; instead of &#039;&#039;libc&#039;&#039; in the usually case. Thus we could intercept the filesystem related system calls and translate into lustre commands.&lt;br /&gt;
&lt;br /&gt;
=== Necessary Environment Variables ===&lt;br /&gt;
There&#039;s a simple script &#039;&#039;lustre/utils/lrun&#039;&#039; which set some ENVs:&lt;br /&gt;
  a. mount point&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_POINT=${LIBLUSTRE_MOUNT_POINT:-&amp;quot;/mnt/lustre&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  this is where liblustre will mount remote lustre filesystem. default is &#039;&#039;/mnt/lustre&#039;&#039;, please make sure it exist on your system:&lt;br /&gt;
&lt;br /&gt;
  a. mount target&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_TARGET=${LIBLUSTRE_MOUNT_TARGET:-&amp;quot;your_mount_target&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  you need fill in the actual target before using liblustre (e.g. mdshost:/mdsname/client).&lt;br /&gt;
&lt;br /&gt;
  a. shared library&lt;br /&gt;
    {{{&lt;br /&gt;
    LD_PRELOAD=${LD_PRELOAD:-&amp;quot;/usr/lib/liblustre.so&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  make sure you&#039;v install lustre/liblustre/liblustre.so into the this place.&lt;br /&gt;
&lt;br /&gt;
=== running programs over liblustre ===&lt;br /&gt;
Until now, only a very small number of applications have been tested with liblustre:&lt;br /&gt;
  * iozone&lt;br /&gt;
  * IOR&lt;br /&gt;
  * simul&lt;br /&gt;
&lt;br /&gt;
and also several standard unix command:&lt;br /&gt;
  * ls&lt;br /&gt;
  * touch&lt;br /&gt;
  * rm&lt;br /&gt;
  * mkdir&lt;br /&gt;
  * rmdir&lt;br /&gt;
  * mv&lt;br /&gt;
  * cp&lt;br /&gt;
  * find&lt;br /&gt;
  * grep&lt;br /&gt;
&lt;br /&gt;
You need prepend &#039;lrun&#039; before the programs you intend to run:&lt;br /&gt;
   {{{&lt;br /&gt;
   lrun iozone -f /mnt/lustre/ioz_testfile -r 256k -s 1g&lt;br /&gt;
&lt;br /&gt;
   lrun mkdir /mnt/lustre/testdir&lt;br /&gt;
   lrun touch /mnt/lustre/testdir/testfile&lt;br /&gt;
   lrun cp /etc/fstab /mnt/lustre/testdir&lt;br /&gt;
   lrun ls /mnt/lustre/testdir&lt;br /&gt;
   lrun find /mnt/lustre/&lt;br /&gt;
   lrun .....&lt;br /&gt;
   }}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;&lt;br /&gt;
liblustre is somewhat sensitive to glibc version, what we are using is glibc-2.2.5 and glic-2.3.2.&lt;br /&gt;
----&lt;br /&gt;
 *&#039;&#039;&#039;FrontPage&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2506</id>
		<title>LibLustre How-To Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=LibLustre_How-To_Guide&amp;diff=2506"/>
		<updated>2007-05-18T03:47:45Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Building clients and servers for the Lustre library version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liblustre A How to Guide =&lt;br /&gt;
== Liblustre Introduction ==&lt;br /&gt;
&lt;br /&gt;
A library version of the Lustre client file system is now available for some versions of Lustre, it gives an user application linked with the library access to Lustre file systems without the need to mount Lustre (VFS) on the client.  The key goals for the library are to provide a portable mechanism to access Lustre from different POSIX compliant operating systems, to provide access from microkernel based systems and from the Windows operating system.&lt;br /&gt;
&lt;br /&gt;
Currently, liblustre is still under development and only works on linux (i386 &amp;amp; x86_64, not tested on ia64).&lt;br /&gt;
&lt;br /&gt;
In this document, we will discuss how to use liblustre.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note that liblustre is NOT a required element of Lustre.&#039;&#039;&#039;&lt;br /&gt;
liblustre is not required or even recommended for running Lustre on Linux, you should instead use the Lustre (VFS) client filesystem to mount Lustre directly.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, liblustre implements the Lustre client filesystem in user space. The liblustre component links LNET and libsysio together to form a shared library which could be used by applications to perform File I/O.&lt;br /&gt;
&lt;br /&gt;
== Building clients and servers for the Lustre library version ==&lt;br /&gt;
&lt;br /&gt;
When using liblustre, servers are first built/configured in the usual way as described in [https://projects.clusterfs.com/lustre/LustreHowto Guide to Lustre].  liblustre is built by default unless &amp;quot;./configure --disable-liblustre&amp;quot; is specified.&lt;br /&gt;
&lt;br /&gt;
The liblustre files are located in lustre/liblustre:&lt;br /&gt;
* liblustre/liblustre.so&lt;br /&gt;
* liblustre/tests/&lt;br /&gt;
&lt;br /&gt;
== How to use liblustre ==&lt;br /&gt;
&lt;br /&gt;
First of all you must be running Lustre servers (MDS/OSTs) without ACLs and accepting connections on insecure ports.  For example, add &#039;&#039;&#039;options lnet networks=tcp(eth0) accept=all&#039;&#039;&#039; to /etc/modprobe.conf, then run the script &#039;&#039;&#039;MDS_MOUNT_OPTS=&amp;quot;noacl&amp;quot; sh llmount.sh&#039;&#039;&#039;.  This will set up a MDS, OST, and client on the local machine.  You should umount the Lustre client at /mnt/lustre.&lt;br /&gt;
&lt;br /&gt;
=== Mount Target ===&lt;br /&gt;
&lt;br /&gt;
liblustre needs to know &#039;&#039;mount target&#039;&#039; before connect to lustre server. the format is like following:&lt;br /&gt;
    {{{&lt;br /&gt;
    mds_nid:/mds_name/profile_name&lt;br /&gt;
    }}}&lt;br /&gt;
  * &#039;&#039;&#039;mds_nid&#039;&#039;&#039; is actually the hostname of MDS (or IP address if you don&#039;t have proper name resolution set up).&lt;br /&gt;
  * &#039;&#039;&#039;mds_name&#039;&#039;&#039; is the name of the MDS. In the .xml file, it appears in following line:&lt;br /&gt;
       {{{&lt;br /&gt;
       &amp;lt;mds uuid=&#039;mds_uuid&#039; name=&#039;mds_name&#039;&amp;gt;&lt;br /&gt;
       }}}&lt;br /&gt;
  * &#039;&#039;&#039;profile&#039;&#039;&#039; is the profile name of the client mountpoint, often &#039;&#039;&#039;client&#039;&#039;&#039; in many configs.&lt;br /&gt;
&lt;br /&gt;
Please refer to lustre documents for more mount target explaination.  This can be passed to most liblustre programs via the environment variable LIBLUSTRE_MOUNT_TARGET.&lt;br /&gt;
&lt;br /&gt;
=== sanity test ===&lt;br /&gt;
&lt;br /&gt;
there&#039;s a statically built-in liblustre test program at &#039;&#039;lustre/liblustre/tests/sanity&#039;&#039;. you could use it to verify whether liblustre work properly:&lt;br /&gt;
    {{{&lt;br /&gt;
    sanity --target mds_nid:/mdsname/profile_name&lt;br /&gt;
    }}}&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
If we run a program, e.g. iozone, we&#039;ll use LD_PRELOAD to load &#039;&#039;liblustre.so&#039;&#039; at first. The start function of &#039;&#039;liblustre.so&#039;&#039; will mount a lustre partion on certain dir, e.g. /mnt/lustre. Furthermore, following loaded iozone&#039;s functions calls such as open/read/write... will dynamically linked with the implementations in &#039;&#039;liblustre.so&#039;&#039; instead of &#039;&#039;libc&#039;&#039; in the usually case. Thus we could intercept the filesystem related system calls and translate into lustre commands.&lt;br /&gt;
&lt;br /&gt;
=== Necessary Environment Variables ===&lt;br /&gt;
There&#039;s a simple script &#039;&#039;lustre/utils/lrun&#039;&#039; which set some ENVs:&lt;br /&gt;
  a. mount point&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_POINT=${LIBLUSTRE_MOUNT_POINT:-&amp;quot;/mnt/lustre&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  this is where liblustre will mount remote lustre filesystem. default is &#039;&#039;/mnt/lustre&#039;&#039;, please make sure it exist on your system:&lt;br /&gt;
&lt;br /&gt;
  a. mount target&lt;br /&gt;
    {{{&lt;br /&gt;
    LIBLUSTRE_MOUNT_TARGET=${LIBLUSTRE_MOUNT_TARGET:-&amp;quot;your_mount_target&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  you need fill in the actual target before using liblustre (e.g. mdshost:/mdsname/client).&lt;br /&gt;
&lt;br /&gt;
  a. shared library&lt;br /&gt;
    {{{&lt;br /&gt;
    LD_PRELOAD=${LD_PRELOAD:-&amp;quot;/usr/lib/liblustre.so&amp;quot;}&lt;br /&gt;
    }}}&lt;br /&gt;
  make sure you&#039;v install lustre/liblustre/liblustre.so into the this place.&lt;br /&gt;
&lt;br /&gt;
=== running programs over liblustre ===&lt;br /&gt;
Until now, only a very small number of applications have been tested with liblustre:&lt;br /&gt;
  * iozone&lt;br /&gt;
  * IOR&lt;br /&gt;
  * simul&lt;br /&gt;
&lt;br /&gt;
and also several standard unix command:&lt;br /&gt;
  * ls&lt;br /&gt;
  * touch&lt;br /&gt;
  * rm&lt;br /&gt;
  * mkdir&lt;br /&gt;
  * rmdir&lt;br /&gt;
  * mv&lt;br /&gt;
  * cp&lt;br /&gt;
  * find&lt;br /&gt;
  * grep&lt;br /&gt;
&lt;br /&gt;
You need prepend &#039;lrun&#039; before the programs you intend to run:&lt;br /&gt;
   {{{&lt;br /&gt;
   lrun iozone -f /mnt/lustre/ioz_testfile -r 256k -s 1g&lt;br /&gt;
&lt;br /&gt;
   lrun mkdir /mnt/lustre/testdir&lt;br /&gt;
   lrun touch /mnt/lustre/testdir/testfile&lt;br /&gt;
   lrun cp /etc/fstab /mnt/lustre/testdir&lt;br /&gt;
   lrun ls /mnt/lustre/testdir&lt;br /&gt;
   lrun find /mnt/lustre/&lt;br /&gt;
   lrun .....&lt;br /&gt;
   }}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note&#039;&#039;&#039;&lt;br /&gt;
liblustre is somewhat sensitive to glibc version, what we are using is glibc-2.2.5 and glic-2.3.2.&lt;br /&gt;
----&lt;br /&gt;
 *&#039;&#039;&#039;FrontPage&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2347</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2347"/>
		<updated>2007-05-13T20:12:08Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Great detail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2346</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2346"/>
		<updated>2007-05-13T20:11:28Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Great detail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  {{{&lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
  }}}&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
 &lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2345</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2345"/>
		<updated>2007-05-13T20:10:50Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Great detail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
 &lt;br /&gt;
  right:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                             &lt;br /&gt;
 &lt;br /&gt;
  wrong:&lt;br /&gt;
 &lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
 &lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
 &lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
 &lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
 &lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
 &lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
 &lt;br /&gt;
  {{{&lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
  }}}&lt;br /&gt;
 &lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
 &lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
 &lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
&lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  wrong:&lt;br /&gt;
&lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
&lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
&lt;br /&gt;
  wrong:&lt;br /&gt;
&lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
&lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2344</id>
		<title>Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Coding_Guidelines&amp;diff=2344"/>
		<updated>2007-05-13T20:09:58Z</updated>

		<summary type="html">&lt;p&gt;Lucy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All Lustre developers should follow the guidelines in this page very strictly to avoid problems during code merges later on. Please make the required changes to the default formatting rules in the editor you use to comply to the guidelines below.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
1. There should be no tabs in any files.&lt;br /&gt;
2. Blocks should be indented by 8 spaces.&lt;br /&gt;
3. New files should contain the following along with the license boilerplate.  This will cause vim and emacs to use spaces instead of tabs for indenting.  If you use a different editor, it also needs to be set to use spaces for indening Lustre code.&lt;br /&gt;
&lt;br /&gt;
  /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-&lt;br /&gt;
   * vim:expandtab:shiftwidth=8:tabstop=8:&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
4. All lines should wrap at 80 characters. If it&#039;s getting too hard to wrap there, you probably need to break it up into more functions.  In some cases, it is acceptable to remove a few spaces between function arguments to avoid overflowing onto the next line.&lt;br /&gt;
5. Don&#039;t have spaces or tabs on blank lines or at the end of lines.&lt;br /&gt;
6. Don&#039;t use &amp;quot;inline&amp;quot; unless you&#039;re doing something so performance critical that the function call overhead will make a difference -- in other words: never.  It makes debugging harder.&lt;br /&gt;
&lt;br /&gt;
All of our wrapping, parenthesis, brace placement, etc. rules are basically Linux kernel rules, which are basically K&amp;amp;R. For those of you in need of a refresher, great detail is provided below.&lt;br /&gt;
&lt;br /&gt;
== Great detail ==&lt;br /&gt;
&lt;br /&gt;
a. When you wrap, the next line should start after the parenthesis:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
&lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                                      longest_argument(sub_argument,&lt;br /&gt;
                                                       foo_argument),&lt;br /&gt;
                                      last_argument);&lt;br /&gt;
&lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
      another_long_condition(very_long_argument_name,&lt;br /&gt;
                             another_long_argument_name) &amp;gt;&lt;br /&gt;
      second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
                            &lt;br /&gt;
&lt;br /&gt;
  wrong:&lt;br /&gt;
&lt;br /&gt;
  variable = do_something_complicated(long_argument, longer_argument,&lt;br /&gt;
                    longest_argument(sub_argument, foo_argument),&lt;br /&gt;
                    last_argument);&lt;br /&gt;
&lt;br /&gt;
  if (some_long_condition(arg1, arg2, arg3) &amp;lt; some_long_value &amp;amp;&amp;amp;&lt;br /&gt;
              another_long_condition(very_long_argument_name,&lt;br /&gt;
                    another_long_argument_name) &amp;gt;&lt;br /&gt;
                    second_long_value) {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
b. If you&#039;re wrapping put the operators at the end of the line, and if there are no parentheses indent 8 more:&lt;br /&gt;
&lt;br /&gt;
  off = le32_to_cpu(fsd-&amp;gt;fsd_client_start) +&lt;br /&gt;
          cl_idx * le16_to_cpu(fsd-&amp;gt;fsd_client_size);&lt;br /&gt;
&lt;br /&gt;
c. Binary and ternary (but not unary) operators should be separated from their arguments by one space.&lt;br /&gt;
&lt;br /&gt;
  a++;&lt;br /&gt;
  b |= c;&lt;br /&gt;
  d = f &amp;gt; g ? 0 : 1;&lt;br /&gt;
&lt;br /&gt;
d. Function calls should be nestled against the parentheses, the parentheses should crowd the arguments, and one space after commas:&lt;br /&gt;
&lt;br /&gt;
  {{{&lt;br /&gt;
  right: do_foo(bar, baz);&lt;br /&gt;
  wrong: do_foo ( bar,baz );&lt;br /&gt;
  }}}&lt;br /&gt;
&lt;br /&gt;
e. All &#039;&#039;if&#039;&#039;, &#039;&#039;for&#039;&#039;, &#039;&#039;while&#039;&#039;, etc. expressions should be separated by a space from the parenthesis, one space after the semicolons:&lt;br /&gt;
&lt;br /&gt;
  for (a = 0; a &amp;lt; b; a++)&lt;br /&gt;
  if (a &amp;lt; b || a == c)&lt;br /&gt;
  while (1)&lt;br /&gt;
&lt;br /&gt;
f. Opening braces should be on the same line as the line that introduces the block, except for function calls.  Closing braces get their own line, except for &amp;quot;else&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
  int foo(void)&lt;br /&gt;
  {&lt;br /&gt;
          if (bar) {&lt;br /&gt;
                  this();&lt;br /&gt;
                  that();&lt;br /&gt;
          } else if (baz) {&lt;br /&gt;
                  ;&lt;br /&gt;
          } else {&lt;br /&gt;
                  ;&lt;br /&gt;
          }&lt;br /&gt;
          do {&lt;br /&gt;
                  cow();&lt;br /&gt;
          } while (0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
g. If one part of a compound &#039;&#039;if&#039;&#039; block has braces, all should.&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
&lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else {&lt;br /&gt;
          salmon();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  wrong:&lt;br /&gt;
&lt;br /&gt;
  if (foo) {&lt;br /&gt;
          bar();&lt;br /&gt;
          baz();&lt;br /&gt;
  } else&lt;br /&gt;
          moose();&lt;br /&gt;
&lt;br /&gt;
h. When you make a macro, protect those who might call it by using do/while and parentheses; line up your backslashes:&lt;br /&gt;
&lt;br /&gt;
  right:&lt;br /&gt;
&lt;br /&gt;
  #define DO_STUFF(a)                              \&lt;br /&gt;
  do {                                             \&lt;br /&gt;
          int b = (a) + MAGIC;                     \&lt;br /&gt;
          do_other_stuff(b);                       \&lt;br /&gt;
  } while (0)&lt;br /&gt;
&lt;br /&gt;
  wrong:&lt;br /&gt;
&lt;br /&gt;
  #define DO_STUFF(a) \&lt;br /&gt;
  { \&lt;br /&gt;
          int b = a + MAGIC; \&lt;br /&gt;
          do_other_stuff(b); \&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
i. If you nest preprocessor commands, use spaces to visually delineate:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # include &amp;lt;goose&amp;gt;&lt;br /&gt;
  # define MOOSE steak&lt;br /&gt;
  #else&lt;br /&gt;
  # include &amp;lt;mutton&amp;gt;&lt;br /&gt;
  # define MOOSE prancing&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
j.  For very long #ifdefs include the conditional with each #endif to make it readable:&lt;br /&gt;
&lt;br /&gt;
  #ifdef __KERNEL__&lt;br /&gt;
  # if LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(2,5,0)&lt;br /&gt;
  /* lots&lt;br /&gt;
     of&lt;br /&gt;
     stuff */&lt;br /&gt;
  # endif /* KERNEL_VERSION(2,5,0) */&lt;br /&gt;
  #else /* !__KERNEL__ */&lt;br /&gt;
  # if HAVE_FEATURE&lt;br /&gt;
  /* more&lt;br /&gt;
   * stuff */&lt;br /&gt;
  # endif&lt;br /&gt;
  #endif /* __KERNEL__ */ &lt;br /&gt;
&lt;br /&gt;
k. Comments should have the leading &#039;&#039;&#039;/*&#039;&#039;&#039; on the same line as the comment, and the trailing &#039;&#039;&#039;*/&#039;&#039;&#039; at the end of the last comment line.  Intermediate lines should start with a &#039;&#039;&#039;*&#039;&#039;&#039; aligned with the first line&#039;s &#039;&#039;&#039;*&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  /* This is a short comment */&lt;br /&gt;
&lt;br /&gt;
  /* This is a multi-line comment.  I wish the line would wrap already,&lt;br /&gt;
   * as I don&#039;t have much to write about. */&lt;br /&gt;
&lt;br /&gt;
l. Function declarations absolutely should NOT go into .c files, unless they are forward declarations for static functions that can&#039;t otherwise be moved before the caller.  Instead, the declaration should go into the most &amp;quot;local&amp;quot; header available (preferrably *_internal.h for a given piece of code).&lt;br /&gt;
&lt;br /&gt;
m. Structure and constant declarations should not be declared in multiple places.  Put the struct into the most &amp;quot;local&amp;quot; header possible.  If it is something that is passed over the wire it needs to go into lustre_idl.h, and needs to be correctly swabbed when the RPC message is unpacked.&lt;br /&gt;
&lt;br /&gt;
n. The types and printf/printk formats used by Lustre code are:&lt;br /&gt;
&lt;br /&gt;
   __u64                 LPU64/LPX64/LPD64 (unsigned, hex, signed)&lt;br /&gt;
   size_t                LPSZ (or cast to int and use %u / %d)&lt;br /&gt;
   __u32/int             %u/%x/%d (unsigned, hex, signed)&lt;br /&gt;
   (unsigned) long long  %llu/%llx/%lld&lt;br /&gt;
   loff_t                %lld after a cast to long long (unfortunately)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2326</id>
		<title>Contribution Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Contribution_Policy&amp;diff=2326"/>
		<updated>2007-05-13T19:53:45Z</updated>

		<summary type="html">&lt;p&gt;Lucy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Check-in Policy =&lt;br /&gt;
&lt;br /&gt;
== Submitting Patches for Review ==&lt;br /&gt;
&lt;br /&gt;
To have your changes accepted into a mainline Lustre branch, you must have your code reviewed and approved. The following steps will speed up your review and increase the likelihood of success:&lt;br /&gt;
&lt;br /&gt;
1. Read, complete, and return the form found at http://www.lustre.org/contribute.html  We can&#039;t accept your contributions without it.&lt;br /&gt;
2. Generate a patch with the &amp;quot;-upN&amp;quot; flags to diff or cvs diff. Please don&#039;t send other kinds of patches unless your reviewer requests them.&lt;br /&gt;
3. Find or file a bug for your issue at http://bugzilla.lustre.org/ . Read the Bugzilla user guide for more information.&lt;br /&gt;
4. Attach your patch as an Attachment (not a comment):&lt;br /&gt;
* Provide the patch as an Attachment, and select the Patch box.&lt;br /&gt;
* Edit the new attachment. Under &amp;quot;Flags&amp;quot; select &amp;quot;Review&amp;quot; and the question mark.&lt;br /&gt;
* Enter the email address of the person who should review.  If you haven&#039;t been collaborating with someone, and don&#039;t know who should review your work, try bugs@clusterfs.com&lt;br /&gt;
* Submit the attachment update.&lt;br /&gt;
5. One or more reviewers will submit comments regarding your patch. Iterate until you receive approval on the patch or the bug is closed.&lt;br /&gt;
6. Once you have approval, commit the patch (or ask for it to be committed for you, if you don&#039;t have CVS access). Note the bug number and reviewer in the commit message, along with a concise description of the change.&lt;br /&gt;
&lt;br /&gt;
This applies even if you have write access to the CVS tree -- if you don&#039;t follow these steps, expect your changes to be backed out of the tree without warning.  We have to be strict, or the chaos becomes unbearable.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
Our current policy is that anyone may create and maintain a private branch in CVS. We ask, however, that you observe the best practices outlined in this document. It will save you a lot of effort, I promise.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
*&#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Simul_Parallel_File_System_Test_Tool&amp;diff=2309</id>
		<title>Simul Parallel File System Test Tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Simul_Parallel_File_System_Test_Tool&amp;diff=2309"/>
		<updated>2007-05-13T19:38:39Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* simul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== simul ==&lt;br /&gt;
&lt;br /&gt;
simul (available in the usual spot on the ftp site, or in ~morrone on MCR) tests most filesystem syscalls from one or more threads on one or more nodes. Building simul is straightforward.&lt;br /&gt;
&lt;br /&gt;
It is easily run with either pdsh or prun. On MCR, this amounts to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   pdsh -E -w &amp;lt;node list&amp;gt; [-n tasks-per-node] /path/simul -d /mnt/lustre/path/&lt;br /&gt;
&lt;br /&gt;
Using prun is left as an exercise to the reader.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Front_Page FrontPage]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1877</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1877"/>
		<updated>2007-05-10T03:17:48Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
  *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1876</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1876"/>
		<updated>2007-05-10T03:16:21Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
*[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
*&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1875</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1875"/>
		<updated>2007-05-10T03:15:41Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.  &lt;br /&gt;
  *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1874</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1874"/>
		<updated>2007-05-10T03:15:11Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
*[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.    *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1873</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1873"/>
		<updated>2007-05-10T03:14:18Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
                                                                                      *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
     *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1872</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1872"/>
		<updated>2007-05-10T03:13:41Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;                                                                                      *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
     *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1871</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1871"/>
		<updated>2007-05-10T03:12:13Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  . [http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  . &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
     *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1870</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1870"/>
		<updated>2007-05-10T03:10:15Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
 * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1869</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1869"/>
		<updated>2007-05-10T03:07:51Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
* &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1868</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1868"/>
		<updated>2007-05-10T03:06:54Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
 * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  *[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   *&#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1867</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1867"/>
		<updated>2007-05-10T03:06:13Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Interim Lustre 1.8 Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
 * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  * [https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   * &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1866</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1866"/>
		<updated>2007-05-10T03:05:51Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Older Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
* &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
* &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
 * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
  * [https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   * &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1865</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1865"/>
		<updated>2007-05-10T03:05:01Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Lustre 1.4.8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
 * &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
 * &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
 * &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
   * [https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   * &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
	<entry>
		<id>http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1864</id>
		<title>Lustre Documentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.old.lustre.org/index.php?title=Lustre_Documentation&amp;diff=1864"/>
		<updated>2007-05-10T03:04:02Z</updated>

		<summary type="html">&lt;p&gt;Lucy: /* Lustre 1.6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lustre Documentation =&lt;br /&gt;
== Lustre Manual ==&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.6 ===&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.html Lustre 1.6 manual V1.1]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual1_6.pdf Lustre 1.6 manual V1.1(A4)]&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual-letter1_6.pdf Lustre 1.6 manual V1.1(Letter)]&lt;br /&gt;
* &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog1_6.html Lustre Manual-Change log]&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Mount_Conf MountConf wiki]&#039;&#039;&#039; - A quick reference for those familiar with older versions of Lustre&lt;br /&gt;
&lt;br /&gt;
=== Lustre 1.4.8 ===&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - HTML &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual.html Lustre 1.4.8 manual V1.37]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual - PDF&#039;&#039;&#039;&lt;br /&gt;
  . &#039;&#039;&#039;&#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/LustreManual37.pdf Lustre 1.4.8 manual V1.37(A4)]&lt;br /&gt;
 * &#039;&#039;&#039;Lustre Manual Changelog &#039;&#039;&#039;[http://wiki.lustre.org/images/7/78/manual-changelog.html Lustre Manual-Change log]&lt;br /&gt;
&lt;br /&gt;
== Interim Lustre 1.8 Documentation ==&lt;br /&gt;
 * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Kerb_Lustre KerbLustre]&#039;&#039;&#039; - The 1.8 interim Lustre documentation (Kerberos....)&lt;br /&gt;
&lt;br /&gt;
== Older Documentation ==&lt;br /&gt;
This documentation will be incorporated into the manual. Until that is done you may find useful bits and pieces here.&lt;br /&gt;
&lt;br /&gt;
 * &#039;&#039;&#039;Frequently Asked Questions&#039;&#039;&#039;&lt;br /&gt;
  . [http://www.clusterfs.com/faq.html Lustre Faq]&lt;br /&gt;
 * &#039;&#039;&#039;Knowledge Base&#039;&#039;&#039;&lt;br /&gt;
  . [http://bugzilla.lustre.org/showdependencytree.cgi?id=2374 Lustre Knowledge Base] - questions and answers&lt;br /&gt;
 * &#039;&#039;&#039;Configuration&#039;&#039;&#039;&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Howto LustreHowto]&#039;&#039;&#039; - A guide to getting Lustre cluster started.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_LDAP LustreLDAP]&#039;&#039;&#039; - A guide for using LDAP with Lustre.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Wizard LustreWizard]&#039;&#039;&#039; - The &#039;&#039;Lustre wizard&#039;&#039; or &#039;&#039;lwizard&#039;&#039; is a utility that helps with creation of configuration file for a cluster through asking some simple questions.&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Lustre_Failover LustreFailover]&#039;&#039;&#039; - Managing failover&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Filesystem_Backup FilesystemBackup]&#039;&#039;&#039; - How to back up a Lustre filesystem&lt;br /&gt;
  * &#039;&#039;&#039;[http://wiki.lustre.org/index.php?title=Fsck_Suppor FsckSupport]&#039;&#039;&#039; - The lustre fsck tool and Lustre-patched e2fsck (extents, large inode/EA support)&lt;br /&gt;
  * &#039;&#039;&#039;Filesystem Tuning&#039;&#039;&#039;&lt;br /&gt;
   * [https://mail.clusterfs.com/wikis/attachments/LustreManual.html#Chapter_III-2._LustreProc LustreProc] - A guide on the &#039;&#039;&#039;proc&#039;&#039;&#039; tunables parameters for Lustre and their usage. It describes several of the &#039;&#039;proc&#039;&#039; tunables including those that effect the client&#039;s RPC behaviour and prepare for a substantial reorganization of proc entries.&lt;br /&gt;
   * &#039;&#039;&#039;[https://mail.clusterfs.com/wikis/attachments/LustreManual.html#3.2_DDN_Tuning LustreDdnTuning]&#039;&#039;&#039; - A brief guide on tuning DDN S2A 8500 (and maybe 9500) storage optimally for Lustre&lt;/div&gt;</summary>
		<author><name>Lucy</name></author>
	</entry>
</feed>