lustre.spec
acl.size
.git
+doxygen.*
+++ /dev/null
-#! /bin/bash
-
-#set -x
-
-OPTVAL=`getopt -o -b:l:du:v -n 'apidoc.publish' -- "$@"`
-
-# Note the quotes around `$OPTVAL': they are essential!
-eval set -- "$OPTVAL"
-
-if [ -d lustre/CVS ] ;then
- if [ -r lustre/CVS/Tag ] ;then
- branch=$(cut -c2- lustre/CVS/Tag)
- else
- branch=HEAD
- fi
-else
- branch=''
-fi
-
-verbose=0
-label=''
-user=$USER
-
-while true ;do
- case "$1" in
- -b)
- branch="$2"
- shift 2
- ;;
- -l)
- label="$label$2"
- shift 2
- ;;
- -u)
- user="$2"
- shift 2
- ;;
- -d)
- label="$label$(date '+%Y.%m.%d')"
- shift
- ;;
- -v)
- verbose=$(($verbose + 1))
- shift
- ;;
- --)
- shift
- break
- ;;
- *)
- echo "Internal error!"
- exit 1
- ;;
- esac
-done
-
-if [ x$branch = x ] ;then
- echo "No branch specified"
- exit 1
-fi
-
-echo "Updating documentation for branch \`$branch'"
-if [ x$label != x ] ;then
- echo "Label: $label"
-fi
-
-dst="$user@shell.lustre.sun.com:/home/www/apidoc/$branch$label"
-
-opt="-rltvzp --delete"
-sshopt="ssh -l $user -oPort=922"
-if [ -d apidoc.api/html ] ;then
- chmod -R a+rx apidoc.api/html
- rsync $opt --rsh="$sshopt" apidoc.api/html $dst/api
-fi
-if [ -d apidoc.ref/html ] ;then
- chmod -R a+rx apidoc.ref/html
- rsync $opt --rsh="$sshopt" apidoc.ref/html $dst/ref
-fi
-
find $(top_srcdir) -name '*.[hc]' | grep -v "\.pc" > cscope.files
cscope -bRq
+doxygen: doxygen-api doxygen-ref
+
+doxygen-%: build/doxyfile.%
+ doxygen $<
+
if MODULES
sources: all-sources
-# Doxyfile 1.5.3
+# Doxyfile 1.6.1
#---------------------------------------------------------------------------
# Project related configuration options
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Lustre
PROJECT_NUMBER = 1.10
-OUTPUT_DIRECTORY = apidoc.api
+OUTPUT_DIRECTORY = doxygen.api
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
-STRIP_FROM_PATH =
-STRIP_FROM_INC_PATH =
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
-ALIASES =
+ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING =
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
-FILE_VERSION_FILTER =
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-QUIET = NO
+QUIET = YES
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
+WARN_FORMAT = "$file:$line: $text "
+WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = lustre/ \
- lnet/ \
+ lnet/ \
libcfs/
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \
*.c
RECURSIVE = YES
-EXCLUDE =
+EXCLUDE =
EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXPORT_SYMBOL*
-EXAMPLE_PATH =
+EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
HTML_FILE_EXTENSION = .html
HTML_HEADER = build/doxygen-header.html
HTML_FOOTER = build/doxygen-footer.html
+HTML_TIMESTAMP = NO
HTML_STYLESHEET = build/doxygen-stylesheet.css
HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
HTML_DYNAMIC_SECTIONS = NO
-CHM_FILE =
-HHC_LOCATION =
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
+USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
+FORMULA_FONTSIZE = 10
+SEARCHENGINE = YES
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = YES
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
+XML_SCHEMA =
+XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
+EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = KERNEL_VERSION(a,b,c)=(((a)<<16)+((b)<<8)+(c))
+EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration::additions related to external references
#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
+TAGFILES =
+GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
-MSCGEN_PATH =
+MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
+DOT_FONTNAME = FreeSans
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
+DOT_PATH =
+DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = YES
-# Doxyfile 1.5.3
+# Doxyfile 1.6.1
#---------------------------------------------------------------------------
# Project related configuration options
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Lustre
PROJECT_NUMBER = 1.10
-OUTPUT_DIRECTORY = apidoc.ref
+OUTPUT_DIRECTORY = doxygen.ref
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF = "The $name class " \
- "The $name widget " \
- "The $name file " \
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
is \
provides \
specifies \
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
-STRIP_FROM_PATH =
-STRIP_FROM_INC_PATH =
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
-ALIASES =
+ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING =
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
-FILE_VERSION_FILTER =
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-QUIET = NO
+QUIET = YES
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text "
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = lustre/ \
- lnet/ \
+ lnet/ \
libcfs/
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \
*.c
RECURSIVE = YES
-EXCLUDE =
+EXCLUDE =
EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS = EXPORT_SYMBOL*
-EXAMPLE_PATH =
+EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
HTML_FILE_EXTENSION = .html
HTML_HEADER = build/doxygen-header.html
HTML_FOOTER = build/doxygen-footer.html
+HTML_TIMESTAMP = NO
HTML_STYLESHEET = build/doxygen-stylesheet.css
HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
HTML_DYNAMIC_SECTIONS = NO
-CHM_FILE =
-HHC_LOCATION =
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
+USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
+FORMULA_FONTSIZE = 10
+SEARCHENGINE = YES
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = YES
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
+XML_SCHEMA =
+XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
+EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = KERNEL_VERSION(a,b,c)=(((a)<<16)+((b)<<8)+(c))
+EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration::additions related to external references
#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE =
+TAGFILES =
+GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
-MSCGEN_PATH =
+MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
+DOT_FONTNAME = FreeSans
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = NO
GROUP_GRAPHS = NO
GRAPHICAL_HIERARCHY = NO
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
+DOT_PATH =
+DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = YES
--- /dev/null
+#! /bin/bash
+
+label=''
+user=$USER
+port=922
+branch=''
+
+# update for git!!!
+if [ -d lustre/CVS ] ;then
+ if [ -r lustre/CVS/Tag ] ;then
+ branch=$(cut -c2- lustre/CVS/Tag)
+ else
+ branch=HEAD
+ fi
+fi
+
+eval set -- $(getopt -o -b:l:du:p: -n 'publish_doxygen' -- "$@")
+
+while true ;do
+ case "$1" in
+ -b) branch="$2"
+ shift 2
+ ;;
+ -l) label="$label$2"
+ shift 2
+ ;;
+ -u) user="$2"
+ shift 2
+ ;;
+ -d) label="$label$(date '+%Y.%m.%d')"
+ shift
+ ;;
+ -p) port="$2"
+ shift 2
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ echo "Internal error!"
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z "$branch" ] ;then
+ echo "No branch specified"
+ exit 1
+fi
+
+if [ -z "$user" ] ; then
+ echo "No user specified"
+ exit 1
+fi
+
+dsthost="shell.lustre.sun.com"
+dstdir="/home/www/doxygen/$branch$label"
+
+echo "Publishing documentation to $dsthost:$dstdir"
+
+sshcmd="ssh -p $port -l $user"
+
+eval $sshcmd $dsthost <<EOF
+ if [ ! -d $dstdir ]; then
+ echo "Creating $dstdir"
+ mkdir $dstdir
+ fi
+EOF
+
+for doctype in api ref; do
+ srcdir=doxygen.$doctype/html
+ if [ -d $srcdir ]; then
+ chmod -R a+rx $srcdir
+ rsync -rltvzp --delete --rsh="$sshcmd" $srcdir $dsthost:$dstdir/$doctype
+ fi
+done
+
+
/* !__KERNEL__ */
#endif
-/*
- * compile-time assertions. @cond has to be constant expression.
- * ISO C Standard:
- *
- * 6.8.4.2 The switch statement
+/** Compile-time assertion.
+
+ * Check an invariant described by a constant expression at compile time by
+ * forcing a compiler error if it does not hold. \a cond must be a constant
+ * expression as defined by the ISO C Standard:
*
+ * 6.8.4.2 The switch statement
* ....
- *
* [#3] The expression of each case label shall be an integer
* constant expression and no two of the case constant
* expressions in the same switch statement shall have the same
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
-/*
+/**
* Insert a new entry between two known consecutive entries.
*
* This is only for internal list manipulation where we know
}
/**
- * list_add - add a new entry
- * @new: new entry to be added
- * @head: list head to add it after
+ * Insert an entry at the start of a list.
+ * \param new new entry to be inserted
+ * \param head list to add it to
*
* Insert a new entry after the specified head.
* This is good for implementing stacks.
}
/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
+ * Insert an entry at the end of a list.
+ * \param new new entry to be inserted
+ * \param head list to add it to
*
* Insert a new entry before the specified head.
* This is useful for implementing queues.
}
/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty on entry does not return true after this, the entry is in an undefined state.
+ * Remove an entry from the list it is currently in.
+ * \param entry the entry to remove
+ * Note: list_empty(entry) does not return true after this, the entry is in an undefined state.
*/
static inline void list_del(struct list_head *entry)
{
}
/**
- * list_del_init - deletes entry from list and reinitialize it.
- * @entry: the element to delete from the list.
+ * Remove an entry from the list it is currently in and reinitialize it.
+ * \param entry the entry to remove.
*/
static inline void list_del_init(struct list_head *entry)
{
}
/**
- * list_move - delete from one list and add as another's head
- * @list: the entry to move
- * @head: the head that will precede our entry
- *
- * This is not safe to use if @list is already on the same list as @head.
+ * Remove an entry from the list it is currently in and insert it at the start of another list.
+ * \param list the entry to move
+ * \param head the list to move it to
*/
static inline void list_move(struct list_head *list, struct list_head *head)
{
}
/**
- * list_move_tail - delete from one list and add as another's tail
- * @list: the entry to move
- * @head: the head that will follow our entry
- *
- * This is not safe to use if @list is already on the same list as @head.
+ * Remove an entry from the list it is currently in and insert it at the end of another list.
+ * \param list the entry to move
+ * \param head the list to move it to
*/
static inline void list_move_tail(struct list_head *list,
struct list_head *head)
}
/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
+ * Test whether a list is empty
+ * \param head the list to test.
*/
static inline int list_empty(struct list_head *head)
{
}
/**
- * list_empty_careful - tests whether a list is empty and not being modified
- * @head: the list to test
+ * Test whether a list is empty and not being modified
+ * \param head the list to test
*
- * Description:
- * tests whether a list is empty _and_ checks that no other CPU might be
+ * Tests whether a list is empty _and_ checks that no other CPU might be
* in the process of modifying either member (next or prev)
*
* NOTE: using list_empty_careful() without synchronization
}
/**
- * list_splice - join two lists
- * @list: the new list to add.
- * @head: the place to add it in the first list.
+ * Join two lists
+ * \param list the new list to add.
+ * \param head the place to add it in the first list.
+ *
+ * The contents of \a list are added at the start of \a head. \a list is in an
+ * undefined state on return.
*/
static inline void list_splice(struct list_head *list, struct list_head *head)
{
}
/**
- * list_splice_init - join two lists and reinitialise the emptied list.
- * @list: the new list to add.
- * @head: the place to add it in the first list.
+ * Join two lists and reinitialise the emptied list.
+ * \param list the new list to add.
+ * \param head the place to add it in the first list.
*
- * The list at @list is reinitialised
+ * The contents of \a list are added at the start of \a head. \a list is empty
+ * on return.
*/
static inline void list_splice_init(struct list_head *list,
struct list_head *head)
}
/**
- * list_entry - get the struct for this entry
- * @ptr: the &struct list_head pointer.
- * @type: the type of the struct this is embedded in.
- * @member: the name of the list_struct within the struct.
+ * Get the container of a list
+ * \param ptr the embedded list.
+ * \param type the type of the struct this is embedded in.
+ * \param member the member name of the list within the struct.
*/
#define list_entry(ptr, type, member) \
((type *)((char *)(ptr)-(char *)(&((type *)0)->member)))
/**
- * list_for_each - iterate over a list
- * @pos: the &struct list_head to use as a loop counter.
- * @head: the head for your list.
+ * Iterate over a list
+ * \param pos the iterator
+ * \param head the list to iterate over
+ *
+ * Behaviour is undefined if \a pos is removed from the list in the body of the
+ * loop.
*/
#define list_for_each(pos, head) \
for (pos = (head)->next, prefetch(pos->next); pos != (head); \
pos = pos->next, prefetch(pos->next))
/**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @pos: the &struct list_head to use as a loop counter.
- * @n: another &struct list_head to use as temporary storage
- * @head: the head for your list.
+ * iterate over a list safely
+ * \param pos the iterator
+ * \param n temporary storage
+ * \param head the list to iterate over
+ *
+ * This is safe to use if \a pos could be removed from the list in the body of
+ * the loop.
*/
#define list_for_each_safe(pos, n, head) \
for (pos = (head)->next, n = pos->next; pos != (head); \
pos = n, n = pos->next)
-/*
+/**
+ * \defgroup hlist Hash List
* Double linked lists with a single pointer list head.
- * Mostly useful for hash tables where the two pointer list head is
- * too wasteful.
- * You lose the ability to access the tail in O(1).
+ * Mostly useful for hash tables where the two pointer list head is too
+ * wasteful. You lose the ability to access the tail in O(1).
+ * @{
*/
struct hlist_head {
struct hlist_node *next, **pprev;
};
+/* @} */
+
/*
* "NULL" might not be defined at this point
*/
#define NULL_P ((void *)0)
#endif
+/**
+ * \addtogroup hlist
+ * @{
+ */
+
#define CFS_HLIST_HEAD_INIT { NULL_P }
#define CFS_HLIST_HEAD(name) struct hlist_head name = { NULL_P }
#define CFS_INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL_P)
pos = n)
/**
- * hlist_for_each_entry - iterate over list of given type
- * @tpos: the type * to use as a loop counter.
- * @pos: the &struct hlist_node to use as a loop counter.
- * @head: the head for your list.
- * @member: the name of the hlist_node within the struct.
+ * Iterate over an hlist of given type
+ * \param tpos the type * to use as a loop counter.
+ * \param pos the &struct hlist_node to use as a loop counter.
+ * \param head the head for your list.
+ * \param member the name of the hlist_node within the struct.
*/
#define hlist_for_each_entry(tpos, pos, head, member) \
for (pos = (head)->first; \
pos = pos->next)
/**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after existing point
- * @tpos: the type * to use as a loop counter.
- * @pos: the &struct hlist_node to use as a loop counter.
- * @member: the name of the hlist_node within the struct.
+ * Iterate over an hlist continuing after existing point
+ * \param tpos the type * to use as a loop counter.
+ * \param pos the &struct hlist_node to use as a loop counter.
+ * \param member the name of the hlist_node within the struct.
*/
#define hlist_for_each_entry_continue(tpos, pos, member) \
for (pos = (pos)->next; \
pos = pos->next)
/**
- * hlist_for_each_entry_from - iterate over a hlist continuing from existing point
- * @tpos: the type * to use as a loop counter.
- * @pos: the &struct hlist_node to use as a loop counter.
- * @member: the name of the hlist_node within the struct.
+ * Iterate over an hlist continuing from an existing point
+ * \param tpos the type * to use as a loop counter.
+ * \param pos the &struct hlist_node to use as a loop counter.
+ * \param member the name of the hlist_node within the struct.
*/
#define hlist_for_each_entry_from(tpos, pos, member) \
for (; pos && ({ prefetch(pos->next); 1;}) && \
pos = pos->next)
/**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @tpos: the type * to use as a loop counter.
- * @pos: the &struct hlist_node to use as a loop counter.
- * @n: another &struct hlist_node to use as temporary storage
- * @head: the head for your list.
- * @member: the name of the hlist_node within the struct.
+ * Iterate over an hlist of given type safe against removal of list entry
+ * \param tpos the type * to use as a loop counter.
+ * \param pos the &struct hlist_node to use as a loop counter.
+ * \param n another &struct hlist_node to use as temporary storage
+ * \param head the head for your list.
+ * \param member the name of the hlist_node within the struct.
*/
#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \
for (pos = (head)->first; \
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
pos = n)
+/* @} */
+
#endif /* __linux__ && __KERNEL__ */
#ifndef list_for_each_prev
/**
- * list_for_each_prev - iterate over a list in reverse order
- * @pos: the &struct list_head to use as a loop counter.
- * @head: the head for your list.
+ * Iterate over a list in reverse order
+ * \param pos the &struct list_head to use as a loop counter.
+ * \param head the head for your list.
*/
#define list_for_each_prev(pos, head) \
for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
#ifndef list_for_each_entry
/**
- * list_for_each_entry - iterate over list of given type
- * @pos: the type * to use as a loop counter.
- * @head: the head for your list.
- * @member: the name of the list_struct within the struct.
+ * Iterate over a list of given type
+ * \param pos the type * to use as a loop counter.
+ * \param head the head for your list.
+ * \param member the name of the list_struct within the struct.
*/
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member), \
#ifndef list_for_each_entry_reverse
/**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
- * @pos: the type * to use as a loop counter.
- * @head: the head for your list.
- * @member: the name of the list_struct within the struct.
+ * Iterate backwards over a list of given type.
+ * \param pos the type * to use as a loop counter.
+ * \param head the head for your list.
+ * \param member the name of the list_struct within the struct.
*/
#define list_for_each_entry_reverse(pos, head, member) \
for (pos = list_entry((head)->prev, typeof(*pos), member); \
#ifndef list_for_each_entry_safe
/**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos: the type * to use as a loop counter.
- * @n: another type * to use as temporary storage
- * @head: the head for your list.
- * @member: the name of the list_struct within the struct.
+ * Iterate over a list of given type safe against removal of list entry
+ * \param pos the type * to use as a loop counter.
+ * \param n another type * to use as temporary storage
+ * \param head the head for your list.
+ * \param member the name of the list_struct within the struct.
*/
#define list_for_each_entry_safe(pos, n, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member), \
#ifndef list_for_each_entry_safe_from
/**
- * list_for_each_entry_safe_from
- * @pos: the type * to use as a loop cursor.
- * @n: another type * to use as temporary storage
- * @head: the head for your list.
- * @member: the name of the list_struct within the struct.
+ * Iterate over a list continuing from an existing point
+ * \param pos the type * to use as a loop cursor.
+ * \param n another type * to use as temporary storage
+ * \param head the head for your list.
+ * \param member the name of the list_struct within the struct.
*
* Iterate over list of given type from current point, safe against
* removal of list entry.
/**
* Nid range list syntax.
+ * \verbatim
*
* <nidlist> :== <nidrange> [ ' ' <nidrange> ]
* <nidrange> :== <addrrange> '@' <net>
* <net> :== <netname> | <netname><number>
* <netname> :== "lo" | "tcp" | "o2ib" | "cib" | "openib" | "iib" |
* "vib" | "ra" | "elan" | "gm" | "mx" | "ptl"
+ * \endverbatim
*/
/**
};
/**
- * Structure to represent <nidrange> token of the syntax.
+ * Structure to represent \<nidrange\> token of the syntax.
*
- * One of this is created for each <net> parsed.
+ * One of this is created for each \<net\> parsed.
*/
struct nidrange {
/**
*/
struct netstrfns *nr_netstrfns;
/**
- * Number of network. E.g. 5 if <net> is "elan5".
+ * Number of network. E.g. 5 if \<net\> is "elan5".
*/
int nr_netnum;
};
/**
- * Structure to represent <addrrange> token of the syntax.
+ * Structure to represent \<addrrange\> token of the syntax.
*/
struct addrrange {
/**
};
/**
- * Structure to represent <numaddr_range> token of the syntax.
+ * Structure to represent \<numaddr_range\> token of the syntax.
*/
struct numaddr_range {
/**
};
/**
- * Structure to represent <range_expr> token of the syntax.
+ * Structure to represent \<range_expr\> token of the syntax.
*/
struct range_expr {
/**
}
/**
- * Parses <range_expr> token of the syntax.
+ * Parses \<range_expr\> token of the syntax.
*
* \retval pointer to allocated range_expr and initialized
* range_expr::re_lo, range_expr::re_hi and range_expr:re_stride if \a
- * src parses to
- * <number> |
- * <number> '-' <number> |
- * <number> '-' <number> '/' <number>
+ `* src parses to
+ * \<number\> |
+ * \<number\> '-' \<number\> |
+ * \<number\> '-' \<number\> '/' \<number\>
* \retval NULL othersize
*/
static struct range_expr *
}
/**
- * Parsed <expr_list> token of the syntax.
+ * Parses \<expr_list\> token of the syntax.
*
- * \retval 1 if \a str parses to '[' <range_expr> [ ',' <range_expr>] ']'
- * \return 0 otherwise
+ * \retval 1 if \a str parses to '[' \<range_expr\> [ ',' \<range_expr\>] ']'
+ * \retval 0 otherwise
*/
static int
parse_expr_list(struct lstr *str, struct list_head *list,
}
/**
- * Parses <numaddr_range> token of the syntax.
+ * Parses \<numaddr_range\> token of the syntax.
*
- * \retval 1 if \a str parses to <number> | <expr_list>
+ * \retval 1 if \a str parses to \<number\> | \<expr_list\>
* \retval 0 otherwise
*/
static int
}
/**
- * Parses <addrrange> token on the syntax.
+ * Parses \<addrrange\> token on the syntax.
*
* Allocates struct addrrange and links to \a nidrange via
* (nidrange::nr_addrranges)
*
- * \retval 1 if \a src parses to '*' | <ipaddr_range> | <numaddr_range>
+ * \retval 1 if \a src parses to '*' | \<ipaddr_range\> | \<numaddr_range\>
* \retval 0 otherwise
*/
static int
}
/**
- * Parses <nidrange> token of the syntax.
+ * Parses \<nidrange\> token of the syntax.
*
- * \retval 1 if \a src parses to <addrrange> '@' <net>
+ * \retval 1 if \a src parses to \<addrrange\> '@' \<net\>
* \retval 0 otherwise
*/
static int
* Parses nid range list.
*
* Parses with rigorous syntax and overflow checking \a str into
- * <nidrange> [ ' ' <nidrange> ], compiles \a str into set of
+ * \<nidrange\> [ ' ' \<nidrange\> ], compiles \a str into set of
* structures and links that structure to \a nidlist. The resulting
* list can be used to match a NID againts set of NIDS defined by \a
* str.
/**
* atomic_add_return - add integer and return
- * @v: pointer of type atomic_t
- * @i: integer value to add
+ * \param v pointer of type atomic_t
+ * \param i integer value to add
*
- * Atomically adds @i to @v and returns @i + @v
+ * Atomically adds \a i to \a v and returns \a i + \a v
*/
int FASTCALL atomic_add_return(int i, atomic_t *v)
{
/**
* atomic_sub_return - subtract integer and return
- * @v: pointer of type atomic_t
- * @i: integer value to subtract
+ * \param v pointer of type atomic_t
+ * \param i integer value to subtract
*
- * Atomically subtracts @i from @v and returns @v - @i
+ * Atomically subtracts \a i from \a v and returns \a v - \a i
*/
int FASTCALL atomic_sub_return(int i, atomic_t *v)
{
/**
* radix_tree_gang_lookup - perform multiple lookup on a radix tree
- * @root: radix tree root
- * @results: where the results of the lookup are placed
- * @first_index: start the lookup from this key
- * @max_items: place up to this many items at *results
+ * \param root radix tree root
+ * \param results where the results of the lookup are placed
+ * \param first_index start the lookup from this key
+ * \param max_items place up to this many items at *results
*
* Performs an index-ascending scan of the tree for present items. Places
- * them at *@results and returns the number of items which were placed at
- * *@results.
+ * them at * \a results and returns the number of items which were placed at
+ * *\a results.
*
*/
unsigned int
/**
* radix_tree_lookup - perform lookup operation on a radix tree
- * @root: radix tree root
- * @index: index key
+ * \param root radix tree root
+ * \param index index key
*
- * Lookup the item at the position @index in the radix tree @root.
+ * Lookup the item at the position \a index in the radix tree \a root.
*
*/
void *radix_tree_lookup(struct radix_tree_root *root, unsigned long index)
/**
* radix_tree_insert - insert into a radix tree
- * @root: radix tree root
- * @index: index key
- * @item: item to insert
+ * \param root radix tree root
+ * \param index index key
+ * \param item item to insert
*
- * Insert an item into the radix tree at position @index.
+ * Insert an item into the radix tree at position \a index.
*/
int radix_tree_insert(struct radix_tree_root *root,
unsigned long index, void *item)
/**
* radix_tree_delete - delete an item from a radix tree
- * @root: radix tree root
- * @index: index key
+ * \param root radix tree root
+ * \param index index key
*
- * Remove the item at @index from the radix tree rooted at @root.
+ * Remove the item at \a index from the radix tree rooted at \a root.
*
* Returns the address of the deleted item, or NULL if it was not present.
*/
{
RadixDeleteElement(&root->table, index);
return NULL;
-}
\ No newline at end of file
+}
kmx_data_t kmxlnd_data;
/**
- * mxlnd_ctx_free - free ctx struct
- * @ctx - a kmx_peer pointer
+ * Free ctx struct
+ * \param ctx a kmx_peer pointer
*
* The calling function should remove the ctx from the ctx list first
* then free it.
}
/**
- * mxlnd_ctx_alloc - allocate and initialize a new ctx struct
- * @ctxp - address of a kmx_ctx pointer
+ * Allocate and initialize a new ctx struct
+ * \param ctxp address of a kmx_ctx pointer
*
* Returns 0 on success and -EINVAL, -ENOMEM on failure
*/
}
/**
- * mxlnd_ctx_init - reset ctx struct to the default values
- * @ctx - a kmx_ctx pointer
+ * Reset ctx struct to the default values
+ * \param ctx a kmx_ctx pointer
*/
void
mxlnd_ctx_init(struct kmx_ctx *ctx)
}
/**
- * mxlnd_free_txs - free kmx_txs and associated pages
+ * Free kmx_txs and associated pages
*
* Called from mxlnd_shutdown()
*/
}
/**
- * mxlnd_init_txs - allocate tx descriptors then stash on txs and idle tx lists
+ * Allocate tx descriptors then stash on txs and idle tx lists
*
* Called from mxlnd_startup()
* returns 0 on success, else -ENOMEM
}
/**
- * mxlnd_free_rxs - free initial kmx_rx descriptors and associated pages
+ * Free initial kmx_rx descriptors and associated pages
*
* Called from mxlnd_shutdown()
*/
}
/**
- * mxlnd_init_rxs - allocate initial rx descriptors
+ * Allocate initial rx descriptors
*
* Called from startup(). We create MXLND_MAX_PEERS plus MXLND_NTX
* rx descriptors. We create one for each potential peer to handle
}
/**
- * mxlnd_free_peers - free peers
+ * Free peers
*
* Called from mxlnd_shutdown()
*/
}
/**
- * mxlnd_init_mx - open the endpoint, set our ID, register the EAGER callback
- * @ni - the network interface
+ * Open the endpoint, set our ID, register the EAGER callback
+ * \param ni the network interface
*
* Returns 0 on success, -1 on failure
*/
/**
- * mxlnd_thread_start - spawn a kernel thread with this function
- * @fn - function pointer
- * @arg - pointer to the parameter data
+ * Spawn a kernel thread with this function
+ * \param fn function pointer
+ * \param arg pointer to the parameter data
*
* Returns 0 on success and a negative value on failure
*/
}
/**
- * mxlnd_thread_stop - decrement thread counter
+ * Decrement thread counter
*
* The thread returns 0 when it detects shutdown.
* We are simply decrementing the thread counter.
}
/**
- * mxlnd_shutdown - stop IO, clean up state
- * @ni - LNET interface handle
+ * Stop IO, clean up state
+ * \param ni LNET interface handle
*
* No calls to the LND should be made after calling this function.
*/
}
/**
- * mxlnd_startup - initialize state, open an endpoint, start IO
- * @ni - LNET interface handle
+ * Initialize state, open an endpoint, start IO
+ * \param ni LNET interface handle
*
* Initialize state, open an endpoint, start monitoring threads.
* Should only be called once.
extern int mxlnd_connd(void *arg);
/**
- * mxlnd_nid_to_hash - hash the nid
- * @nid - LNET ID
+ * Hash the nid
+ * \param nid LNET ID
*
* Takes the u64 nid and XORs the lowest N bits by the next lowest N bits.
*/
}
/**
- * mxlnd_conn_free - free the conn
- * @conn - a kmx_conn pointer
+ * Free the conn
+ * \param conn a kmx_conn pointer
*
* The calling function should remove the conn from the conns list first
* then destroy it.
}
/**
- * mxlnd_conn_disconnect - shutdown a connection
- * @conn - a kmx_conn pointer
- * @mx_dis - call mx_disconnect()
- * @send_bye - send peer a BYE msg
+ * Shutdown a connection
+ * \param conn a kmx_conn pointer
+ * \param mx_dis call mx_disconnect()
+ * \param send_bye send peer a BYE msg
*
* This function sets the status to DISCONNECT, completes queued
* txs with failure, calls mx_disconnect, which will complete
}
/**
- * mxlnd_conn_alloc - allocate and initialize a new conn struct
- * @connp - address of a kmx_conn pointer
- * @peer - owning kmx_peer
+ * Allocate and initialize a new conn struct
+ * \param connp address of a kmx_conn pointer
+ * \param peer owning kmx_peer
*
* Returns 0 on success and -ENOMEM on failure
*/
}
/**
- * mxlnd_peer_free - free the peer
- * @peer - a kmx_peer pointer
+ * Free the peer
+ * \param peer a kmx_peer pointer
*
* The calling function should decrement the rxs, drain the tx queues and
* remove the peer from the peers list first then destroy it.
}
/**
- * mxlnd_peer_alloc - allocate and initialize a new peer struct
- * @peerp - address of a kmx_peer pointer
- * @nid - LNET node id
- *
+ * Allocate and initialize a new peer struct
+ * \param peerp address of a kmx_peer pointer
+ * \param nid LNET node id
* Returns 0 on success and -ENOMEM on failure
*/
int
}
/**
- * mxlnd_init_msg - set type and number of bytes
- * @msg - msg pointer
- * @type - of message
- * @body_nob - bytes in msg body
+ * Set type and number of bytes
+ * \param msg msg pointer
+ * \param type of message
+ * \param body_nob bytes in msg body
*/
static inline void
mxlnd_init_msg(kmx_msg_t *msg, u8 type, int body_nob)
}
/**
- * mxlnd_pack_msg - complete msg info
- * @tx - msg to send
+ * Complete msg info
+ * \param tx msg to send
*/
static inline void
mxlnd_pack_msg(struct kmx_ctx *tx)
}
/**
- * mxlnd_recv_msg
- * @lntmsg - the LNET msg that this is continuing. If EAGER, then NULL.
- * @rx
- * @msg_type
- * @cookie
- * @length - length of incoming message
- * @pending - add to kmx_pending (0 is NO and 1 is YES)
+ * Receive a message
+ * \param lntmsg the LNET msg that this is continuing. If EAGER, then NULL.
+ * \param length length of incoming message
*
* The caller gets the rx and sets nid, peer and conn if known.
*
/**
- * mxlnd_unexpected_recv - this is the callback function that will handle
- * unexpected receives
- * @context - NULL, ignore
- * @source - the peer's mx_endpoint_addr_t
- * @match_value - the msg's bit, should be MXLND_MSG_EAGER
- * @length - length of incoming message
- * @data_if_available - ignore
+ * This is the callback function that will handle unexpected receives
+ * \param context NULL, ignore
+ * \param source the peer's mx_endpoint_addr_t
+ * \param match_value the msg's bit, should be MXLND_MSG_EAGER
+ * \param length length of incoming message
+ * \param data_if_available ignore
*
* If it is an eager-sized msg, we will call recv_msg() with the actual
* length. If it is a large message, we will call recv_msg() with a
}
/**
- * mxlnd_ctl - modify MXLND parameters
- * @ni - LNET interface handle
- * @cmd - command to change
- * @arg - the ioctl data
+ * Modify MXLND parameters
+ * \param ni LNET interface handle
+ * \param cmd command to change
+ * \param arg the ioctl data
*
* Not implemented yet.
*/
}
/**
- * mxlnd_peer_queue_tx_locked - add the tx to the global tx queue
- * @tx
+ * Add the tx to the global tx queue
*
* Add the tx to the peer's msg or data queue. The caller has locked the peer.
*/
}
/**
- * mxlnd_peer_queue_tx - add the tx to the global tx queue
- * @tx
+ * Add the tx to the global tx queue
*
* Add the tx to the peer's msg or data queue
*/
}
/**
- * mxlnd_queue_tx - add the tx to the global tx queue
- * @tx
+ * Add the tx to the global tx queue
*
* Add the tx to the global queue and up the tx_queue_sem
*/
/**
- * mxlnd_send_data - get tx, map [k]iov, queue tx
- * @ni
- * @lntmsg
- * @peer
- * @msg_type
- * @cookie
+ * Get tx, map [k]iov, queue tx
*
* This setups the DATA send for PUT or GET.
*
}
/**
- * mxlnd_recv_data - map [k]iov, post rx
- * @ni
- * @lntmsg
- * @rx
- * @msg_type
- * @cookie
+ * Map [k]iov, post rx
*
* This setups the DATA receive for PUT or GET.
*
}
/**
- * mxlnd_send - the LND required send function
- * @ni
- * @private
- * @lntmsg
+ * The LND required send function
*
* This must not block. Since we may not have a peer struct for the receiver,
* it will append send messages on a global tx list. We will then up the
}
/**
- * mxlnd_recv - the LND required recv function
- * @ni
- * @private
- * @lntmsg
- * @delayed
- * @niov
- * @kiov
- * @offset
- * @mlen
- * @rlen
+ * The LND required recv function
*
* This must not block.
*/
}
/**
- * mxlnd_tx_queued - the generic send queue thread
- * @arg - thread id (as a void *)
+ * The generic send queue thread
+ * \param arg thread id (as a void *)
*
* This thread moves send messages from the global tx_queue to the owning
* peer's tx_[msg|data]_queue. If the peer does not exist, it creates one and adds
/**
- * mxlnd_handle_tx_completion - a tx completed, progress or complete the msg
- * @ctx - the tx descriptor
- *
+ * A tx completed, progress or complete the msg
+ * \param tx the tx descriptor
+ *
* Determine which type of send request it was and start the next step, if needed,
* or, if done, signal completion to LNET. After we are done, put back on the
* idle tx list.
}
/**
- * mxlnd_request_waitd - the MX request completion thread(s)
- * @arg - thread id (as a void *)
+ * The MX request completion thread(s)
+ * \param arg thread id (as a void *)
*
* This thread waits for a MX completion and then completes the request.
* We will create one thread per CPU.
}
/**
- * mxlnd_timeoutd - enforces timeouts on messages
- * @arg - thread id (as a void *)
+ * Enforces timeouts on messages
+ * \param arg thread id (as a void *)
*
* This thread queries each peer for its earliest timeout. If a peer has timed out,
* it calls mxlnd_conn_disconnect().
int fci_cache_size;
/**
- * Current number of cached entries. Protected by @fci_lock */
+ * Current number of cached entries. Protected by \a fci_lock */
int fci_cache_count;
/**
const struct cl_page_slice *slice,
struct cl_io *io);
/**
- * Announces whether the page contains valid data or not by @uptodate.
+ * Announces whether the page contains valid data or not by \a uptodate.
*
* \see cl_page_export()
* \see vvp_page_export()
cfs_task_t *pl_owner;
};
-/** \addtogroup cl_page_list cl_page_list
+/**
* A 2-queue of pages. A convenience data-type for common use case, 2-queue
* contains an incoming page list and an outgoing page list.
*/
*/
int lu_object_invariant(const struct lu_object *o);
-void lu_stack_fini(const struct lu_env *env, struct lu_device *top);
/**
- * Returns 1 iff object @o exists on the stable storage,
- * returns -1 iff object @o is on remote server.
+ * \retval 1 iff object \a o exists on stable storage,
+ * \retval -1 iff object \a o is on remote server.
*/
static inline int lu_object_exists(const struct lu_object *o)
{
ldlm_appetite_t ns_appetite;
/**
- * If more than @ns_contented_locks found, the resource considered
- * as contended.
+ * If more than \a ns_contended_locks found, the resource is considered
+ * to be contended.
*/
unsigned ns_contended_locks;
/**
- * The resource remembers contended state during @ns_contention_time,
+ * The resource remembers contended state during \a ns_contention_time,
* in seconds.
*/
unsigned ns_contention_time;
#define CRCPOLY_LE 0xedb88320
/**
* crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
- * @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for
- * other uses, or the previous crc32 value if computing incrementally.
- * @p - pointer to buffer over which CRC is run
- * @len - length of buffer @p
+ * \param crc seed value for computation. ~0 for Ethernet, sometimes 0 for
+ * other uses, or the previous crc32 value if computing incrementally.
+ * \param p - pointer to buffer over which CRC is run
+ * \param len- length of buffer \a p
*/
static inline __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len)
{
* cached lock "fits" into io.
*
* \param slice lock to be checked
- *
* \param io IO that wants a lock.
*
* \see lov_lock_fits_into().
/**
* list_for_remaining_safe - iterate over the remaining entries in a list
* and safeguard against removal of a list entry.
- * @pos: the &struct list_head to use as a loop counter. pos MUST
+ * \param pos the &struct list_head to use as a loop counter. pos MUST
* have been initialized prior to using it in this macro.
- * @n: another &struct list_head to use as temporary storage
- * @head: the head for your list.
+ * \param n another &struct list_head to use as temporary storage
+ * \param head the head for your list.
*/
#define list_for_remaining_safe(pos, n, head) \
for (n = pos->next; pos != (head); pos = n, n = pos->next)
*/
LS_FIRST_DE,
/**
- * the first hidden dirent, that is ".xxx
+ * the first hidden dirent, that is "."
*/
LS_FIRST_DOT_DE
};
*/
struct lu_fid ls_fid;
/**
- * Cached home mds number for @li_fid.
+ * Cached home mds number for \a li_fid.
*/
mdsno_t ls_mds;
/**
#include <cl_object.h>
#include "lov_internal.h"
-/** \addtogroup lov lov @{ */
-
/** \defgroup lov lov
* Logical object volume layer. This layer implements data striping (raid0).
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
static void lov_sub_enter(struct lov_io_sub *sub)
{
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
static struct cl_lock_closure *lov_closure_get(const struct lu_env *env,
struct cl_lock *parent);
* current atime, mtime, ctime to avoid regressing a more uptodate time on
* the local client.
*
- * If @kms_only is set then we do not consider the recently seen size (rss)
+ * If \a kms_only is set then we do not consider the recently seen size (rss)
* when updating the known minimum size (kms). Even when merging RSS, we will
* take the KMS value if it's larger. This prevents getattr from stomping on
* dirty cached pages which extend the file size. */
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup lov lov @{ */
-
#define DEBUG_SUBSYSTEM S_LOV
#include "lov_cl_internal.h"
+/** \addtogroup lov
+ * @{
+ */
+
/*****************************************************************************
*
* Layout operations.
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
#include "lov_cl_internal.h"
-/** \addtogroup lov lov @{ */
+/** \addtogroup lov
+ * @{
+ */
/*****************************************************************************
*
* \pre obj nlink == 0 && obj->mod_count != 0
*
* \retval 0 success
- * \retva -ve index operation error.
+ * \retval -ve index operation error.
*/
int __mdd_orphan_add(const struct lu_env *env,
* \pre obj->mod_count == 0 && ORPHAN_OBJ is set for obj.
*
* \retval 0 success
- * \retva -ve index operation error.
+ * \retval -ve index operation error.
*/
int __mdd_orphan_del(const struct lu_env *env,
*
* \param info thread info object
* \param o mdt object
- * \param h mdt lock handle referencing regular and PDO locks
+ * \param lh mdt lock handle referencing regular and PDO locks
* \param decref force immediate lock releasing
*/
void mdt_object_unlock(struct mdt_thread_info *info, struct mdt_object *o,
/**
* Submit a sync_io and wait for the IO to be finished, or error happens.
- * If @timeout is zero, it means to wait for the IO unconditionally.
+ * If \a timeout is zero, it means to wait for the IO unconditionally.
*/
int cl_io_submit_sync(const struct lu_env *env, struct cl_io *io,
enum cl_req_type iot, struct cl_2queue *queue,
* This function is called repeatedly by cl_unuse() until either lock is
* unlocked, or error occurs.
*
- * \ppre lock->cll_state <= CLS_HELD || lock->cll_state == CLS_UNLOCKING
+ * \pre lock->cll_state <= CLS_HELD || lock->cll_state == CLS_UNLOCKING
*
* \post ergo(result == 0, lock->cll_state == CLS_CACHED)
*
EXPORT_SYMBOL(cl_page_lookup);
/**
- * Returns a list of pages by a given [start, end] of @obj.
+ * Returns a list of pages by a given [start, end] of \a obj.
*
* Gang tree lookup (radix_tree_gang_lookup()) optimization is absolutely
* crucial in the face of [offset, EOF] locks.
*
* Call cl_page_operations::cpo_export() through all layers top-to-bottom. The
* layer responsible for VM interaction has to mark/clear page as up-to-date
- * by the @uptodate argument.
+ * by the \a uptodate argument.
*
* \see cl_page_operations::cpo_export()
*/
/**
* Initialize new lustre hash, where:
- * @name - Descriptive hash name
- * @cur_bits - Initial hash table size, in bits
- * @max_bits - Maximum allowed hash table resize, in bits
- * @ops - Registered hash table operations
- * @flags - LH_REHASH enable synamic hash resizing
- * - LH_SORT enable chained hash sort
+ * \param name Descriptive hash name
+ * \param cur_bits Initial hash table size, in bits
+ * \param max_bits Maximum allowed hash table resize, in bits
+ * \param ops Registered hash table operations
+ * \param flags LH_REHASH enables dynamic hash resizing
+ * LH_SORT enables chained hash sort
*/
lustre_hash_t *
lustre_hash_init(char *name, unsigned int cur_bits, unsigned int max_bits,
EXPORT_SYMBOL(lustre_hash_init);
/**
- * Cleanup lustre hash @lh.
+ * Cleanup lustre hash \a lh.
*/
void
lustre_hash_exit(lustre_hash_t *lh)
}
/**
- * Add item @hnode to lustre hash @lh using @key. The registered
+ * Add item \a hnode to lustre hash \a lh using \a key. The registered
* ops->lh_get function will be called when the item is added.
*/
void
}
/**
- * Add item @hnode to lustre hash @lh using @key. The registered
+ * Add item \a hnode to lustre hash \a lh using \a key. The registered
* ops->lh_get function will be called if the item was added.
* Returns 0 on success or -EALREADY on key collisions.
*/
EXPORT_SYMBOL(lustre_hash_add_unique);
/**
- * Add item @hnode to lustre hash @lh using @key. If this @key
+ * Add item \a hnode to lustre hash \a lh using \a key. If this \a key
* already exists in the hash then ops->lh_get will be called on the
* conflicting entry and that entry will be returned to the caller.
* Otherwise ops->lh_get is called on the item which was added.
EXPORT_SYMBOL(lustre_hash_findadd_unique);
/**
- * Delete item @hnode from the lustre hash @lh using @key. The @key
+ * Delete item \a hnode from the lustre hash \a lh using \a key. The \a key
* is required to ensure the correct hash bucket is locked since there
* is no direct linkage from the item to the bucket. The object
* removed from the hash will be returned and obs->lh_put is called
EXPORT_SYMBOL(lustre_hash_del);
/**
- * Delete item given @key in lustre hash @lh. The first @key found in
+ * Delete item given \a key in lustre hash \a lh. The first \a key found in
* the hash will be removed, if the key exists multiple times in the hash
- * @lh this function must be called once per key. The removed object
+ * \a lh this function must be called once per key. The removed object
* will be returned and ops->lh_put is called on the removed object.
*/
void *
EXPORT_SYMBOL(lustre_hash_del_key);
/**
- * Lookup an item using @key in the lustre hash @lh and return it.
- * If the @key is found in the hash lh->lh_get() is called and the
+ * Lookup an item using \a key in the lustre hash \a lh and return it.
+ * If the \a key is found in the hash lh->lh_get() is called and the
* matching objects is returned. It is the callers responsibility
* to call the counterpart ops->lh_put using the lh_put() macro
- * when when finished with the object. If the @key was not found
- * in the hash @lh NULL is returned.
+ * when when finished with the object. If the \a key was not found
+ * in the hash \a lh NULL is returned.
*/
void *
lustre_hash_lookup(lustre_hash_t *lh, void *key)
EXPORT_SYMBOL(lustre_hash_lookup);
/**
- * For each item in the lustre hash @lh call the passed callback @func
- * and pass to it as an argument each hash item and the private @data.
+ * For each item in the lustre hash \a lh call the passed callback \a func
+ * and pass to it as an argument each hash item and the private \a data.
* Before each callback ops->lh_get will be called, and after each
* callback ops->lh_put will be called. Finally, during the callback
* the bucket lock is held so the callback must never sleep.
EXPORT_SYMBOL(lustre_hash_for_each);
/**
- * For each item in the lustre hash @lh call the passed callback @func
- * and pass to it as an argument each hash item and the private @data.
+ * For each item in the lustre hash \a lh call the passed callback \a func
+ * and pass to it as an argument each hash item and the private \a data.
* Before each callback ops->lh_get will be called, and after each
* callback ops->lh_put will be called. During the callback the
* bucket lock will not be held will allows for the current item
EXPORT_SYMBOL(lustre_hash_for_each_safe);
/**
- * For each hash bucket in the lustre hash @lh call the passed callback
- * @func until all the hash buckets are empty. The passed callback @func
+ * For each hash bucket in the lustre hash \a lh call the passed callback
+ * \a func until all the hash buckets are empty. The passed callback \a func
* or the previously registered callback lh->lh_put must remove the item
* from the hash. You may either use the lustre_hash_del() or hlist_del()
- * functions. No rwlocks will be held during the callback @func it is
+ * functions. No rwlocks will be held during the callback \a func it is
* safe to sleep if needed. This function will not terminate until the
* hash is empty. Note it is still possible to concurrently add new
* items in to the hash. It is the callers responsibility to ensure
EXPORT_SYMBOL(lustre_hash_for_each_empty);
/*
- * For each item in the lustre hash @lh which matches the @key call
- * the passed callback @func and pass to it as an argument each hash
- * item and the private @data. Before each callback ops->lh_get will
+ * For each item in the lustre hash \a lh which matches the \a key call
+ * the passed callback \a func and pass to it as an argument each hash
+ * item and the private \a data. Before each callback ops->lh_get will
* be called, and after each callback ops->lh_put will be called.
* Finally, during the callback the bucket lock is held so the
* callback must never sleep.
EXPORT_SYMBOL(lustre_hash_for_each_key);
/**
- * Rehash the lustre hash @lh to the given @bits. This can be used
+ * Rehash the lustre hash \a lh to the given \a bits. This can be used
* to grow the hash size when excessive chaining is detected, or to
* shrink the hash when it is larger than needed. When the LH_REHASH
- * flag is set in @lh the lustre hash may be dynamically rehashed
+ * flag is set in \a lh the lustre hash may be dynamically rehashed
* during addition or removal if the hash's theta value exceeds
* either the lh->lh_min_theta or lh->max_theta values. By default
* these values are tuned to keep the chained hash depth small, and
* this approach assumes a reasonably uniform hashing function. The
- * theta thresholds for @lh are tunable via lustre_hash_set_theta().
+ * theta thresholds for \a lh are tunable via lustre_hash_set_theta().
*/
int
lustre_hash_rehash(lustre_hash_t *lh, int bits)
EXPORT_SYMBOL(lustre_hash_rehash);
/**
- * Rehash the object referenced by @hnode in the lustre hash @lh. The
- * @old_key must be provided to locate the objects previous location
- * in the hash, and the @new_key will be used to reinsert the object.
+ * Rehash the object referenced by \a hnode in the lustre hash \a lh. The
+ * \a old_key must be provided to locate the objects previous location
+ * in the hash, and the \a new_key will be used to reinsert the object.
* Use this function instead of a lustre_hash_add() + lustre_hash_del()
* combo when it is critical that there is no window in time where the
* object is missing from the hash. When an object is being rehashed
*
* Find an empty slot in ::obd_devs[], create a new obd device in it.
*
- * \param typename [in] obd device type string.
- * \param name [in] obd device name.
+ * \param[in] type_name obd device type string.
+ * \param[in] name obd device name.
*
* \retval NULL if create fails, otherwise return the obd device
* pointer created.
}
/**
- * to notify sptlrpc log for @fsname has changed, let every relevant OBD
+ * to notify sptlrpc log for \a fsname has changed, let every relevant OBD
* adjust sptlrpc settings accordingly.
*/
int class_notify_sptlrpc_conf(const char *fsname, int namelen)
* special index defined by \a feat in \a directory.
*
* \param md device
- * \param dir parent directory
+ * \param dirname parent directory
* \param objname file name
* \param fid object fid
* \param feat index features required for directory create
* Create md object for regular file in \a directory.
*
* \param md device
- * \param dir parent directory
+ * \param dirname parent directory
* \param objname file name
* \param fid object fid.
*/
#include "echo_internal.h"
+/** \defgroup echo_client Echo Client
+ * @{
+ */
+
struct echo_device {
struct cl_device ed_cl;
struct echo_client_obd *ed_ec;
static int echo_client_cleanup(struct obd_device *obddev);
-/** \defgroup echo_helpers
+/** \defgroup echo_helpers Helper functions
* @{
*/
static inline struct echo_device *cl2echo_dev(const struct cl_device *dev)
}
};
-/** defgroup echo_page echo_page
+/** \defgroup echo_page Page operations
*
* Echo page operations.
*
};
/** @} echo_page */
-/** \defgroup echo_lock echo_lock
+/** \defgroup echo_lock Locking
*
* echo lock operations
*
/** @} echo_lock */
-/** \defgroup echo_cl_ops echo_cl_ops
+/** \defgroup echo_cl_ops cl_object operations
*
* operations for cl_object
*
};
/** @} echo_cl_ops */
-/** \defgroup echo_lu_ops echo_lu_ops
+/** \defgroup echo_lu_ops lu_object operations
*
* operations for echo lu object.
*
};
/** @} echo_lu_ops */
-/** \defgroup echo_lu_dev_ops
+/** \defgroup echo_lu_dev_ops lu_device operations
*
* Operations for echo lu device.
*
* @{
*/
static struct lu_object *echo_object_alloc(const struct lu_env *env,
- const struct lu_object_header *hdr,
- struct lu_device *dev)
+ const struct lu_object_header *hdr,
+ struct lu_device *dev)
{
struct echo_object *eco;
struct lu_object *obj = NULL;
static struct cl_device_operations echo_device_cl_ops = {
};
-/** \defgroup echo_init echo_init
+/** \defgroup echo_init Setup and teardown
*
* Init and fini functions for echo client.
*
};
/** @} echo_init */
-/** \defgroup echo_exports
+/** \defgroup echo_exports Exported operations
*
* exporting functions to echo client
*
lu_kmem_fini(echo_caches);
}
+/** @} echo_client */
#include <cl_object.h>
#include "osc_internal.h"
-/** \addtogroup osc osc @{ */
+/** \defgroup osc osc
+ * @{
+ */
/**
* State maintained by osc layer for each IO context.
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup osc osc @{ */
-
#define DEBUG_SUBSYSTEM S_OSC
/* class_name2obd() */
#include "osc_cl_internal.h"
+/** \addtogroup osc
+ * @{
+ */
+
cfs_mem_cache_t *osc_page_kmem;
cfs_mem_cache_t *osc_lock_kmem;
cfs_mem_cache_t *osc_object_kmem;
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup osc osc @{ */
-
#define DEBUG_SUBSYSTEM S_OSC
#include "osc_cl_internal.h"
+/** \addtogroup osc
+ * @{
+ */
+
/*****************************************************************************
*
* Type conversions.
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup osc osc @{ */
-
#define DEBUG_SUBSYSTEM S_OSC
#ifdef __KERNEL__
#include "osc_cl_internal.h"
+/** \addtogroup osc
+ * @{
+ */
+
/*****************************************************************************
*
* Type conversions.
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup osc osc @{ */
-
#define DEBUG_SUBSYSTEM S_OSC
#include "osc_cl_internal.h"
+/** \addtogroup osc
+ * @{
+ */
+
/*****************************************************************************
*
* Type conversions.
* Author: Nikita Danilov <nikita.danilov@sun.com>
*/
-/** \addtogroup osc osc @{ */
-
#define DEBUG_SUBSYSTEM S_OSC
#include "osc_cl_internal.h"
+/** \addtogroup osc
+ * @{
+ */
+
/*
* Comment out osc_page_protected because it may sleep inside the
* the client_obd_list_lock.
/**
* prepare pages for ASYNC io and put pages in send queue.
*
- * \param cli -
- * \param loi -
- * \param cmd - OBD_BRW_* macroses
- * \param lop - pending pages
+ * \param cmd OBD_BRW_* macroses
+ * \param lop pending pages
*
* \return zero if pages successfully add to send queue.
* \return not zere if error occurring.
* Try to read the fid from inode ea into dt_rec, if return value
* i.e. rc is +ve, then we got fid, otherwise we will have to form igif
*
- * \param fid, object fid.
+ * \param fid object fid.
*
- * \retval 0, on success
+ * \retval 0 on success
*/
static int osd_ea_fid_get(const struct lu_env *env, struct osd_object *obj,
__u32 ino, struct lu_fid *fid)
/**
* delete a (key, value) pair from index \a dt specified by \a key
*
- * \param dt_object osd index object
+ * \param dt osd index object
* \param key key for index
* \param rec record reference
* \param handle transaction handler
/**
* Lookup index for \a key and copy record to \a rec.
*
- * \param dt_object osd index object
+ * \param dt osd index object
* \param key key for index
* \param rec record reference
*
/**
* Find the osd object for given fid.
*
- * \param fid, need to find the osd object having this fid
+ * \param fid need to find the osd object having this fid
*
- * \retval osd_object, on success
- * \retval -ve, on error
+ * \retval osd_object on success
+ * \retval -ve on error
*/
struct osd_object *osd_object_find(const struct lu_env *env,
struct dt_object *dt,
/**
* Put the osd object once done with it.
*
- * \param obj, osd object that needs to be put
+ * \param obj osd object that needs to be put
*/
static inline void osd_object_put(const struct lu_env *env,
struct osd_object *obj)
* It will add the directory entry.This entry is needed to
* maintain name->fid mapping.
*
- * \param key, it is key i.e. file entry to be inserted
- * \param rec, it is value of given key i.e. fid
+ * \param key it is key i.e. file entry to be inserted
+ * \param rec it is value of given key i.e. fid
*
* \retval 0, on success
* \retval -ve, on error
/**
* Destroy or finishes iterator context.
*
- * \param di, struct osd_it_ea, iterator structure to be destroyed
+ * \param di iterator structure to be destroyed
*/
static void osd_it_ea_fini(const struct lu_env *env, struct dt_it *di)
{
* iterator's in-memory data structure with required
* information i.e. name, namelen, rec_size etc.
*
- * \param buf, in which information to be filled in.
- * \param name, name of the file in given dir
+ * \param buf in which information to be filled in.
+ * \param name name of the file in given dir
*
- * \retval 0, on success
- * \retval 1, on buffer full
+ * \retval 0 on success
+ * \retval 1 on buffer full
*/
static int osd_ldiskfs_filldir(char *buf, const char *name, int namelen,
loff_t offset, __u64 ino,
* Calls ->readdir() to load a directory entry at a time
* and stored it in iterator's in-memory data structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di iterator's in memory structure
*
- * \retval 0, on success
- * \retval -ve, on error
+ * \retval 0 on success
+ * \retval -ve on error
*/
static int osd_ldiskfs_it_fill(const struct dt_it *di)
{
* to load a directory entry at a time and stored it in
* iterator's in-memory data structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di iterator's in memory structure
*
- * \retval +ve, iterator reached to end
- * \retval 0, iterator not reached to end
- * \retval -ve, on error
+ * \retval +ve iterator reached to end
+ * \retval 0 iterator not reached to end
+ * \retval -ve on error
*/
static int osd_it_ea_next(const struct lu_env *env, struct dt_it *di)
{
/**
* Returns the key at current position from iterator's in memory structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di iterator's in memory structure
*
* \retval key i.e. struct dt_key on success
*/
/**
* Returns the key's size at current position from iterator's in memory structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di iterator's in memory structure
*
* \retval key_size i.e. struct dt_key on success
*/
* Returns the value (i.e. fid/igif) at current position from iterator's
* in memory structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
- * \param attr, attr requested for dirent.
- * \param lde, lustre dirent
+ * \param di struct osd_it_ea, iterator's in memory structure
+ * \param attr attr requested for dirent.
+ * \param lde lustre dirent
*
- * \retval 0, no error and \param lde has correct lustre dirent.
- * \retval -ve, on error
+ * \retval 0 no error and \param lde has correct lustre dirent.
+ * \retval -ve on error
*/
static inline int osd_it_ea_rec(const struct lu_env *env,
const struct dt_it *di,
* Returns a cookie for current position of the iterator head, so that
* user can use this cookie to load/start the iterator next time.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di iterator's in memory structure
*
* \retval cookie for current position, on success
*/
* to load a directory entry at a time and stored it i inn,
* in iterator's in-memory data structure.
*
- * \param di, struct osd_it_ea, iterator's in memory structure
+ * \param di struct osd_it_ea, iterator's in memory structure
*
- * \retval +ve, on success
- * \retval -ve, on error
+ * \retval +ve on success
+ * \retval -ve on error
*/
static int osd_it_ea_load(const struct lu_env *env,
const struct dt_it *di, __u64 hash)
}
/**
- * lustre_msg_buflen - return the length of buffer @n in message @m
- * @m - lustre_msg (request or reply) to look at
- * @n - message index (base 0)
+ * lustre_msg_buflen - return the length of buffer \a n in message \a m
+ * \param m lustre_msg (request or reply) to look at
+ * \param n message index (base 0)
*
* returns zero for non-existent message indices
*/
* expect the rq_reply_off be 0, rq_nob_received is the early reply size.
*
* we allocate separate ptlrpc_request and reply buffer for early reply
- * processing, return 0 and @req_ret is a duplicated ptlrpc_request. caller
+ * processing, return 0 and \a req_ret is a duplicated ptlrpc_request. caller
* must call sptlrpc_cli_finish_early_reply() on the returned request to
- * release it. if anything goes wrong @req_ret will not be set.
+ * release it. if anything goes wrong \a req_ret will not be set.
*/
int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req,
struct ptlrpc_request **req_ret)
/**
* Get the list of pool members.
- * \param poolname string of format <fsname>.<poolname>
+ * \param poolname string of format \<fsname\>.\<poolname\>
* \param members caller-allocated array of char*
* \param list_size size of the members array
* \param buffer caller-allocated buffer for storing OST names
/** Register a copytool
* @param priv Opaque private control structure
* @param flags Open flags, currently unused (e.g. O_NONBLOCK)
+ * @param archive_num_count
* @param archive_nums Which archive numbers this copytool is responsible for
*/
int llapi_copytool_start(void **priv, int flags, int archive_num_count,