Project import generated by Copybara.
GitOrigin-RevId: 3752d22df69d0aa28abd56be39b45e5148adea60
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a890cee
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+*.5
+*.7
+*.8
+*.a
+*.d
+*.o
+*.orig
+*.pc
+*.pot
+*.pyc
+*.pyo
+*.rej
+*.so
+*.so.*
+*.sw*
+*~
+
+.export.sym
+.exported_symbols_generated
+.gdb_history
+
+Makefile
+make.tmpl
+
+/autom4te.cache/
+/autoscan.log
+/config.log
+/config.status
+/configure.scan
+/cscope.out
+/tags
+/tmp/
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..6e3a5b5
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,56 @@
+# Copyright 2016 Google Inc. All Rights Reserved.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libdm
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES:= \
+ libdm/datastruct/bitset.c \
+ libdm/datastruct/hash.c \
+ libdm/datastruct/list.c \
+ libdm/libdm-common.c \
+ libdm/libdm-config.c \
+ libdm/libdm-deptree.c \
+ libdm/libdm-file.c \
+ libdm/libdm-report.c \
+ libdm/libdm-stats.c \
+ libdm/libdm-string.c \
+ libdm/libdm-targets.c \
+ libdm/libdm-timestamp.c \
+ libdm/mm/dbg_malloc.c \
+ libdm/mm/pool.c \
+ libdm/regex/matcher.c \
+ libdm/regex/parse_rx.c \
+ libdm/regex/ttree.c \
+ libdm/ioctl/libdm-iface.c
+
+LOCAL_C_INCLUDES += \
+ $(LOCAL_PATH)/lib/misc \
+ $(LOCAL_PATH)/lib/log \
+ $(LOCAL_PATH)/libdm \
+ $(LOCAL_PATH)/libdm/ioctl \
+ $(LOCAL_PATH)/libdm/misc
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := dmsetup
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
+
+LOCAL_SRC_FILES := \
+ tools/dmsetup.c
+
+LOCAL_C_INCLUDES += \
+ $(LOCAL_PATH)/lib/misc \
+ $(LOCAL_PATH)/lib/log \
+ $(LOCAL_PATH)/libdm \
+ $(LOCAL_PATH)/libdm/misc
+
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_STATIC_LIBRARIES := libdm
+
+include $(BUILD_EXECUTABLE)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..e54f9f4
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/COPYING.LIB b/COPYING.LIB
new file mode 100644
index 0000000..5ab7695
--- /dev/null
+++ b/COPYING.LIB
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..8d0d54d
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,31 @@
+Installation
+============
+
+1) Generate custom makefiles.
+
+ Run the 'configure' script from the top directory.
+
+ If you don't want to include the LVM1 backwards-compatibility code use:
+ ./configure --with-lvm1=none
+
+ To separate the LVM1 support into a shared library loaded by lvm.conf use:
+ ./configure --with-lvm1=shared
+
+ Use ./configure --help to see other options.
+
+2) Build and install.
+
+ Run 'make' from the top directory to build everything you configured.
+ Run 'make install' to build and install everything you configured.
+
+ If you only want the device-mapper libraries and tools use
+ 'make device-mapper' or 'make install_device-mapper'.
+
+3) If using LVM2, create a configuration file.
+
+ The tools will work fine without a configuration file being
+ present, but you ought to review the example file in doc/example.conf.
+
+Please also refer to the WHATS_NEW file and the manual pages for the
+individual commands.
+
diff --git a/MODULE_LICENSE_GPL b/MODULE_LICENSE_GPL
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_GPL
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..52441f1
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,243 @@
+#
+# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
+# Copyright (C) 2004-2015 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+
+SUBDIRS = conf daemons include lib libdaemon libdm man scripts tools
+
+ifeq ("@UDEV_RULES@", "yes")
+ SUBDIRS += udev
+endif
+
+ifeq ("@INTL@", "yes")
+ SUBDIRS += po
+endif
+
+ifeq ("@APPLIB@", "yes")
+ SUBDIRS += liblvm
+endif
+
+ifeq ("@PYTHON_BINDINGS@", "yes")
+ SUBDIRS += python
+endif
+
+ifeq ($(MAKECMDGOALS),clean)
+ SUBDIRS += test
+endif
+# FIXME Should use intermediate Makefiles here!
+ifeq ($(MAKECMDGOALS),distclean)
+ SUBDIRS = conf include man test scripts \
+ libdaemon lib tools daemons libdm \
+ udev po liblvm python \
+ unit-tests/datastruct unit-tests/mm unit-tests/regex
+tools.distclean: test.distclean
+endif
+DISTCLEAN_DIRS += lcov_reports*
+DISTCLEAN_TARGETS += config.cache config.log config.status make.tmpl
+
+include make.tmpl
+
+libdm: include
+libdaemon: include
+lib: libdm libdaemon
+liblvm: lib
+daemons: lib libdaemon tools
+tools: lib libdaemon device-mapper
+po: tools daemons
+scripts: liblvm libdm
+
+lib.device-mapper: include.device-mapper
+libdm.device-mapper: include.device-mapper
+liblvm.device-mapper: include.device-mapper
+daemons.device-mapper: libdm.device-mapper
+tools.device-mapper: libdm.device-mapper
+scripts.device-mapper: include.device-mapper
+device-mapper: tools.device-mapper daemons.device-mapper man.device-mapper
+
+ifeq ("@INTL@", "yes")
+lib.pofile: include.pofile
+tools.pofile: lib.pofile
+daemons.pofile: lib.pofile
+po.pofile: tools.pofile daemons.pofile
+pofile: po.pofile
+endif
+
+ifeq ("@PYTHON_BINDINGS@", "yes")
+python: liblvm
+endif
+
+ifneq ("$(CFLOW_CMD)", "")
+tools.cflow: libdm.cflow lib.cflow
+daemons.cflow: tools.cflow
+cflow: include.cflow
+endif
+
+ifneq ("@CSCOPE_CMD@", "")
+cscope.out:
+ @CSCOPE_CMD@ -b -R -s$(top_srcdir)
+all: cscope.out
+endif
+DISTCLEAN_TARGETS += cscope.out
+CLEAN_DIRS += autom4te.cache
+
+check check_system check_cluster check_local check_lvmetad check_lvmpolld check_lvmlockd_test check_lvmlockd_dlm check_lvmlockd_sanlock unit: all
+ $(MAKE) -C test $(@)
+
+conf.generate: tools
+
+# how to use parenthesis in makefiles
+leftparen:=(
+LVM_VER := $(firstword $(subst $(leftparen), ,$(LVM_VERSION)))
+VER := LVM2.$(LVM_VER)
+# release file name
+FILE_VER := $(VER).tgz
+CLEAN_TARGETS += $(FILE_VER)
+CLEAN_DIRS += $(rpmbuilddir)
+
+dist:
+ @echo "Generating $(FILE_VER)";\
+ (cd $(top_srcdir); git ls-tree -r HEAD --name-only | xargs tar --transform "s,^,$(VER)/," -c) | gzip >$(FILE_VER)
+
+rpm: dist
+ $(RM) -r $(rpmbuilddir)/SOURCES
+ $(MKDIR_P) $(rpmbuilddir)/SOURCES
+ $(LN_S) -f $(abs_top_builddir)/$(FILE_VER) $(rpmbuilddir)/SOURCES
+ $(LN_S) -f $(abs_top_srcdir)/spec/build.inc $(rpmbuilddir)/SOURCES
+ $(LN_S) -f $(abs_top_srcdir)/spec/macros.inc $(rpmbuilddir)/SOURCES
+ $(LN_S) -f $(abs_top_srcdir)/spec/packages.inc $(rpmbuilddir)/SOURCES
+ DM_VER=$$(cut -d- -f1 $(top_srcdir)/VERSION_DM);\
+ GIT_VER=$$(cd $(top_srcdir); git describe | cut -d- --output-delimiter=. -f2,3 || echo 0);\
+ sed -e "s,\(device_mapper_version\) [0-9.]*$$,\1 $$DM_VER," \
+ -e "s,^\(Version:[^0-9%]*\)[0-9.]*$$,\1 $(LVM_VER)," \
+ -e "s,^\(Release:[^0-9%]*\)[0-9.]\+,\1 $$GIT_VER," \
+ $(top_srcdir)/spec/source.inc >$(rpmbuilddir)/SOURCES/source.inc
+ rpmbuild -v --define "_topdir $(rpmbuilddir)" -ba $(top_srcdir)/spec/lvm2.spec
+
+generate: conf.generate
+ $(MAKE) -C conf generate
+
+all_man:
+ $(MAKE) -C man all_man
+
+install_system_dirs:
+ $(INSTALL_DIR) $(DESTDIR)$(DEFAULT_SYS_DIR)
+ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_ARCHIVE_DIR)
+ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_BACKUP_DIR)
+ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_CACHE_DIR)
+ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_LOCK_DIR)
+ $(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_RUN_DIR)
+ $(INSTALL_ROOT_DATA) /dev/null $(DESTDIR)$(DEFAULT_CACHE_DIR)/.cache
+
+install_initscripts:
+ $(MAKE) -C scripts install_initscripts
+
+install_systemd_generators:
+ $(MAKE) -C scripts install_systemd_generators
+ $(MAKE) -C man install_systemd_generators
+
+install_systemd_units:
+ $(MAKE) -C scripts install_systemd_units
+
+install_all_man:
+ $(MAKE) -C man install_all_man
+
+ifeq ("@PYTHON_BINDINGS@", "yes")
+install_python_bindings:
+ $(MAKE) -C liblvm/python install_python_bindings
+endif
+
+install_tmpfiles_configuration:
+ $(MAKE) -C scripts install_tmpfiles_configuration
+
+LCOV_TRACES = libdm.info lib.info liblvm.info tools.info \
+ libdaemon/client.info libdaemon/server.info \
+ daemons/clvmd.info \
+ daemons/dmeventd.info \
+ daemons/lvmetad.info \
+ daemons/lvmlockd.info \
+ daemons/lvmpolld.info
+
+CLEAN_TARGETS += $(LCOV_TRACES)
+
+ifneq ("$(LCOV)", "")
+.PHONY: lcov-reset lcov lcov-dated $(LCOV_TRACES)
+
+ifeq ($(MAKECMDGOALS),lcov-dated)
+LCOV_REPORTS_DIR := lcov_reports-$(shell date +%Y%m%d%k%M%S)
+lcov-dated: lcov
+else
+LCOV_REPORTS_DIR := lcov_reports
+endif
+
+lcov-reset:
+ $(LCOV) --zerocounters $(addprefix -d , $(basename $(LCOV_TRACES)))
+
+# maybe use subdirs processing to create tracefiles...
+$(LCOV_TRACES):
+ $(LCOV) -b $(basename $@) -d $(basename $@) \
+ --ignore-errors source -c -o - | $(SED) \
+ -e "s/\(dmeventd_lvm.[ch]\)/plugins\/lvm2\/\1/" \
+ -e "s/dmeventd_\(mirror\|snapshot\|thin\|raid\)\.c/plugins\/\1\/dmeventd_\1\.c/" \
+ >$@
+
+ifneq ("$(GENHTML)", "")
+lcov: $(LCOV_TRACES)
+ $(RM) -r $(LCOV_REPORTS_DIR)
+ $(MKDIR_P) $(LCOV_REPORTS_DIR)
+ for i in $(LCOV_TRACES); do \
+ test -s $$i -a $$(wc -w <$$i) -ge 100 && lc="$$lc $$i"; \
+ done; \
+ test -z "$$lc" || $(GENHTML) -p @abs_top_builddir@ \
+ -o $(LCOV_REPORTS_DIR) $$lc
+endif
+
+endif
+
+ifeq ("$(TESTING)", "yes")
+# testing and report generation
+RUBY=ruby1.9 -Ireport-generators/lib -Ireport-generators/test
+
+.PHONY: unit-test ruby-test test-programs
+
+# FIXME: put dependencies on libdm and liblvm
+# FIXME: Should be handled by Makefiles in subdirs, not here at top level.
+test-programs:
+ cd unit-tests/regex && $(MAKE)
+ cd unit-tests/datastruct && $(MAKE)
+ cd unit-tests/mm && $(MAKE)
+
+unit-test: test-programs
+ $(RUBY) report-generators/unit_test.rb $(shell find . -name TESTS)
+ $(RUBY) report-generators/title_page.rb
+
+memcheck: test-programs
+ $(RUBY) report-generators/memcheck.rb $(shell find . -name TESTS)
+ $(RUBY) report-generators/title_page.rb
+
+ruby-test:
+ $(RUBY) report-generators/test/ts.rb
+endif
+
+ifneq ($(shell which ctags),)
+.PHONY: tags
+tags:
+ test -z "$(shell find $(top_srcdir) -type f -name '*.[ch]' -newer tags 2>/dev/null | head -1)" || $(RM) tags
+ test -f tags || find $(top_srcdir) -maxdepth 5 -type f -name '*.[ch]' -exec ctags -a '{}' +
+
+CLEAN_TARGETS += tags
+endif
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..e54f9f4
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/README b/README
new file mode 100644
index 0000000..a0e3c9e
--- /dev/null
+++ b/README
@@ -0,0 +1,33 @@
+This tree contains the LVM2 and device-mapper tools and libraries.
+
+For more information about LVM2 read the changelog in the WHATS_NEW file.
+Installation instructions are in INSTALL.
+
+There is no warranty - see COPYING and COPYING.LIB.
+
+Tarballs are available from:
+ ftp://sources.redhat.com/pub/lvm2/
+
+The source code is stored in git:
+ http://git.fedorahosted.org/git/lvm2.git
+ git clone git://git.fedorahosted.org/git/lvm2.git
+
+Mailing list for general discussion related to LVM2:
+ linux-lvm@redhat.com
+ Subscribe from https://www.redhat.com/mailman/listinfo/linux-lvm
+
+Mailing lists for LVM2 development, patches and commits:
+ lvm-devel@redhat.com
+ Subscribe from https://www.redhat.com/mailman/listinfo/lvm-devel
+
+ lvm2-commits@lists.fedorahosted.org (Read-only archive of commits)
+ Subscribe from https://fedorahosted.org/mailman/listinfo/lvm2-commits
+
+Mailing list for device-mapper development, including kernel patches
+and multipath-tools:
+ dm-devel@redhat.com
+ Subscribe from https://www.redhat.com/mailman/listinfo/dm-devel
+
+The source code repository used until 7th June 2012 is accessible here:
+ http://sources.redhat.com/cgi-bin/cvsweb.cgi/LVM2/?cvsroot=lvm2.
+
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..32cef62
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+2.02.163(2)-git (2016-07-28)
diff --git a/VERSION_DM b/VERSION_DM
new file mode 100644
index 0000000..41ac4ce
--- /dev/null
+++ b/VERSION_DM
@@ -0,0 +1 @@
+1.02.133-git (2016-07-28)
diff --git a/WHATS_NEW b/WHATS_NEW
new file mode 100644
index 0000000..2ef2e09
--- /dev/null
+++ b/WHATS_NEW
@@ -0,0 +1,4567 @@
+Version 2.02.163 -
+=================================
+
+Version 2.02.162 - 28th July 2016
+=================================
+ Extend vg_validate also to check raid configurations thoroughly.
+ Support lvconvert -Zn also when doing full cache pool conversion.
+ Suppress not zeroing warn when converting to thin LV for non-zeroing tpool.
+ Fix automatic updates of PV extension headers to newest version.
+ Improve lvconvert --trackchanges validation to require --splitmirrors 1.
+ Add note about lastlog built-in command to lvm man page.
+ Fix unrecognised segtype flag message.
+ lvconvert not clears cache pool metadata ONLY with -Zn.
+ Add allocation/raid_stripe_all_devices to reinstate previous behaviour.
+ Create raid stripes across fixed small numbers of PVs instead of all PVs.
+ Enabled lvconvert --uncache to work with partial VG.
+ Disallow lvconvert --replace with raid0* LVs.
+ Fix some lvmetad changed VG metadata notifications that sent uncommitted data.
+
+Version 2.02.161 - 15th July 2016
+=================================
+ Prohibit some lvchange/lvresize that were failing on raid0 volumes.
+ Fix segfaults in complex vgsplits. (2.02.159)
+ Reformat unwieldy lvconvert man page.
+ Allow --force to be passed through to pvcreate from vgcreate. (2.02.144)
+ Fix lvresize of filesystem when LV has already right size (2.02.141)
+ New LVM_LOG_FILE_MAX_LINES env var to limit max size of created logs.
+
+Version 2.02.160 - 6th July 2016
+================================
+ Minor fixes from coverity.
+
+Version 2.02.159 - 6th July 2016
+================================
+ Add raid0_meta segment type that provides metadata space for raid conversions.
+ Fix created link for a used pool for vgmknode.
+ Introduce and use is_power_of_2 macro.
+ Support conversions between striped and raid0 segment types.
+ Add infrastructure for raid takeover lvconvert options.
+
+Version 2.02.158 - 25th June 2016
+=================================
+ Add a more efficient native vgimportclone command to replace the script.
+ Make lvmlockd always attempt to connect to lvmetad if no connection exists.
+ Let lvmetad handle new connections after shutdown signal.
+ Disable lvmetad when vgcfgrestore begins and enable it again after.
+ Make pvscan do activation if lvmetad is configured but not running.
+ Fix rescanning the PVs for a single VG when using lvmetad.
+ Pool metadata lvresize uses now same code as resize of normal volume.
+ Preserve monitoring status when updating thin-pool metadata.
+ Return 0 (inactive) when status cannot be queried in _lv_active().
+ Switch to log_warn() for failing activation status query.
+ Replace vgimportclone script with binary.
+ While lvmetad is shutting down, continue handling all connections cleanly.
+ Refactor lvconvert argument handling code.
+ Notify lvmetad when vgcfgrestore changes VG metadata.
+ Add --logonly option to report only cmd log for a command, not other reports.
+ Add log/command_log_selection to configure default selection used on cmd log.
+ Use 'orphan' object type in cmd log for groups to collect PVs not yet in VGs.
+ Add lvm lastlog command for query and display of last cmd's log in lvm shell.
+ Report per-object return codes via cmd log while processing multiple objects.
+ Annotate processing code with log report hooks for per-object command log.
+ Also pass common printed messages (besides warnings and errors) to log report.
+ Log warnings and errors via report during cmd processing if this is enabled.
+ Make it possible to iterate over internal 'orphan' VGs in process_each_vg fn.
+ Make -S|--select option groupable that allows this option to be repeated.
+ Make -O|--sort option groupable that allows this option to be repeated.
+ Add --configreport option to select report for which next options are applied.
+ Add support for priorities on grouping command arguments.
+ Add report/{pvs,vgs,lvs,pvsegs,segs}_{cols,sort}_full to lvm.conf.
+ Add lvm fullreport command for joined PV, VG, LV and segment report per VG.
+ Integrate report group handling and cmd log report into cmd processing code.
+ Add log/report_command_log to lvm.conf to enable or disable cmd log report.
+ Add log/report_output_format to lvm.conf for default report output format.
+ Recognize --reportformat {basic|json} option to select report output format.
+ Add log/command_log_{sort,cols} to lvm.conf to configure command log report.
+ Add log_object_{type,name,id,group,group_id} fields to cmd log.
+ Add log_{seq_num,type,context,message,errno,ret_code} fields to cmd log.
+ Add CMDLOG report type - a separate report type for command logging.
+
+Version 2.02.157 - 17th June 2016
+=================================
+ Change pvscan --cache -aay to scan locally if lvmetad fails.
+
+Version 2.02.156 - 11th June 2016
+=================================
+ Don't allow duplicate orphan PVs to be used with vgcreate/vgextend/pvcreate.
+ Improve handling of lvmetad update failures.
+ Yes/No prompt accepts '^[ ^t]*([Yy]([Ee]([Ss]|)|)|[Nn]([Oo]|))[ ^t]*$'.
+ If available, also collect output from lsblk command when running lvmdump -s.
+
+Version 2.02.155 - 3rd June 2016
+================================
+ Reject PV tags on pvmove cmdline because only 1 PV is supported. (2.02.141)
+ Fix compilation error when building with configure --disable-devmapper.
+ Fix lvmconfig --type diff to display complete diff if config cascade used.
+ Automatically filter out partitioned loop devices with partscan (losetup -P).
+ Fix lvm devtypes internal error if -S used with field name from pvs/vgs/lvs.
+ When reporting Data%,Snap%,Meta%,Cpy%Sync use single ioctl per LV.
+ Add lvseg_percent_with_info_and_seg_status() for percent retrieval.
+ Enhance internal seg_status handling to understand snapshots better.
+ When refresh failed in suspend, call resume upon error path.
+ Support passthrough cache mode when waiting for clean cache.
+ Check cache status only for 'in-use' cache pools.
+ Extend setup_task() to preset flushing for dm_task object.
+ When checking LV is a merging COW, validate its a COW LV first.
+ Correcting value in copy_percent() for 100%.
+ Update vgreduce to use process_each_vg.
+ Update lvconvert to use process_each_lv.
+ Update pvscan to use process_each_vg for autoactivation.
+ Add basic support for --type raid0 using md.
+ Add support for lvchange --cachemode for cached LV.
+ Fix liblvm2app error handling when setting up context.
+ Delay liblvm2app init in python code until it is needed.
+ Simplify thread locking in lvmetad to fix locking problems.
+ Allow pvremove -ff to remove a duplicate PV.
+ Fix lvm2-activation-generator to read lvm.conf without full command setup.
+ Allow a minimal context to be used in lvm2app for reading lvm.conf.
+
+Version 2.02.154 - 14th May 2016
+================================
+ Fix liblvm segfault after failure initialising lvmetad connection.
+ Retry open without O_NOATIME if it fails (not file owner/CAP_FOWNER).
+ Split _report into one fn for options and arguments and one for processing.
+
+Version 2.02.153 - 7th May 2016
+===============================
+ Change warning messages related to duplicate PVs.
+ A named device is always processed itself, not switched for a duplicate.
+ Add PV attr "d" and report field "duplicate" for duplicate PVs.
+ Add config setting to disallow VG changes when duplicate PVs exist.
+ Use device size and active LVs to choose the preferred duplicate PV.
+ Disable lvmetad when duplicate PVs are seen.
+ Support --chunksize option also when caching LV when possible.
+ Add function to check for target presence and version via 1 ioctl.
+
+Version 2.02.152 - 30th April 2016
+==================================
+ Use any inherited tags when wiping metadata sub LVs to ensure activation.
+ Add str_list_wipe.
+ Improve support for interrupting procesing of volumes during lvchange.
+ Use failed command return code when lvchanging read-only volume.
+ Show creation transaction_id and zeroing state of pool with thin volume.
+ Stop checking for dm_cache_mq policy with cache target 1.9 (alias to smq).
+ Check first /sys/module/dm_* dir existance before using modprobe.
+ Remove mpath from 10-dm.rules, superseded by 11-dm-mpath.rules (mpath>=0.6.0).
+
+Version 2.02.151 - 23rd April 2016
+==================================
+ Fix error path after reusing of _setup_task (2.02.150).
+ Fix memory access for empty sysfs values (2.02.149).
+ Disable lvmetad when lvm1 metadata is seen, so commands revert to scanning.
+ Suppress errors when snapshot merge gets delayed because volume is in use.
+ Avoid internal snapshot LV names in messages.
+ Autodetect and use /run/lock dir when available instead of /var/lock.
+ lvchange --refresh for merging thin origin will retry to deactivate snapshot.
+ Recognize in-progress snapshot merge for thin volumes from dm table.
+ Avoid deciding to initiate a pending snapshot merge during resume.
+ Improve retrying lvmetad requests while lvmetad is being updated.
+ Read devices instead of using the lvmetad cache if rescan fails.
+ Move lvmetad token/filter check and device rescan to the start of commands.
+ Don't try deactivating fictional internal LV before snapshot merge. (2.02.105)
+ When not obtaining devs from udev, check they exist before caching them.
+ Detect device mismatch also when compiling without udev support.
+
+Version 2.02.150 - 9th April 2016
+=================================
+ Avoid using flushing dm status ioctl when checking for usable DM device.
+ Check for devices without LVM- uuid prefix only with kernels < 3.X.
+ Reuse %FREE size aproximation with lvcreate -l%PVS thin-pool.
+ Allow the lvmdump directory to exist already provided it is empty.
+ Show lvconverted percentage with 2 decimal digits.
+ Fix regression in suspend when repairing --type mirror (2.02.133).
+
+Version 2.02.149 - 1st April 2016
+=================================
+ Do not flush thin-pool when checking metadata fullness.
+ Remove spurious error about no value in /sys/dev/block/major:minor/dm/uuid.
+ Fix device mismatch detection for LV if persistent .cache file is used.
+ Fix holder device not being found in /dev while sysfs has it during dev scan.
+
+Version 2.02.148 - 26th March 2016
+==================================
+ Introduce TARGET_NAME and MODULE NAME macros.
+ Replace hard-coded module and target names with macros.
+ Add pv_major and pv_minor report fields.
+ Detect and warn about mismatch between devices used and assumed for an LV.
+
+Version 2.02.147 - 19th March 2016
+==================================
+ If available, use /proc/self/mountinfo to detect mounted volume in fsadm.
+ Fix resize of stacked raid thin data volume (2.02.141).
+ Fix test for lvremove failure in lvconvert --uncache (2.02.146).
+
+Version 2.02.146 - 11th March 2016
+==================================
+ More man page cleanups in lvconvert.
+ Fix makefile vpath in /udev when generating udev rules files.
+ Another attempt to improve VG name parsing for lvconvert (2.02.144).
+ Use new cache status info and skip flushing for failed cache.
+ Support --uncache with missing PVs.
+ Tidy report field names, headings and widths.
+ Add vgscan --notifydbus to send a dbus notification.
+ Add dbus notification from commands after a PV/VG/LV changes state.
+
+Version 2.02.145 - 4th March 2016
+=================================
+ Make it possible to use lvremove and lvrename on historical LVs.
+ For historical LVs, report 'none' for lv_layout and 'history' for lv_role.
+ Add full_{ancestors,descendants} fields to report LV ancestry with history.
+ Report (h)istorical state within 5th bit (State) of the lv_attr field.
+ Add lv_historical reporting field to report if LV is historical or not.
+ Add lv_time_removed reporting field to display removal time for hist. LVs.
+ Report lv_name, lv_uuid, vg_name, lv_time for historical LVs.
+ Add --nohistory switch to lvremove to disable history recording on demand.
+ Add -H|--history switch to lvs and lvdisplay to include historical LVs.
+ Create historical LVs out of removed thin snapshot LVs and record in history.
+ Add metadata/lvs_history_retention_time for automatic removal of hist. LVs.
+ Add metadata/record_lvs_history config for switching LV history recording.
+ Add support and infrastructure for tracking historical LVs.
+ Improve lvconvert man page.
+ Add kernel_cache_policy lvs field.
+ Display [unknown] instead of 'unknown device' in pvs output.
+ Fix error path when pvcreate allocation fails (2.02.144).
+ Display [unknown] instead of blank for unknown VG names in pvs output.
+
+Version 2.02.144 - 26th February 2016
+=====================================
+ Use new PV processing code in pvcreate/vgcreate/vgextend/pvremove.
+ Add new PV processing code that prompts user without locks held.
+ Prevent lvmlockd blocking with new flag requiring sanlock 3.3.0.
+ Only show (u)sed pv_attr char when PV is not (a)llocatable. (2.02.143)
+ Update makefile to generate lcov output also for lvmpolld and lvmlockd.
+ Fix SystemdService lvm2-lvmdbusd.service name.
+ Improve support for env LVM_VG_NAME for reference VG name in lvconvert.
+ Fix regression when lvresize accepted zero sizes. (2.02.141)
+ Always warn user about PV in use even when pvremove uses --force --force.
+ Use uninitialized pool header detection in all cases.
+ Fix read error detection when checking for uninitialized thin-pool header.
+ Fix error path for internal error in lvmetad VG lookup code.
+
+Version 2.02.143 - 21st February 2016
+=====================================
+ Fix error path when sending thin-pool message fails in update_pool_lv().
+ Support reporting CheckNeeded and Fail state for thin-pool and thin LV.
+ For failing thin-pool and thin volume correctly report percentage as INVALID.
+ Report -1, not 'unkown' for lv_{snapshot_invalid,merge_failed} with --binary.
+ Add configure --enable-dbus-service for an LVM D-Bus service.
+ Replace configure --enable-python_bindings with python2 and python3 versions.
+ If PV belongs to some VG and metadata missing, skip it if system ID is used.
+ Automatically change PV header extension to latest version if writing PV/VG.
+ Identify used PVs in pv_attr field by new 'u' character.
+ Add pv_in_use reporting field to report if PV is used or not.
+ Add pv_ext_vsn reporting field to report PV header extension version.
+ Add protective flag marking PVs as used even if no metadata available.
+
+Version 2.02.142 - 15th February 2016
+=====================================
+ Fix memory pool corruption in pvmove (2.02.141).
+ Support control of spare metadata creation when repairing thin-pool.
+ Fix config type of 'log/verbose' from bool to int (2.02.99).
+ Fix inverted data LV thinp watermark calc for dmeventd response (2.02.133).
+ Use use_blkid_wiping=0 if not defined in lvm.conf and support not compiled in.
+ Do not check for suspended devices if scanning for lvmetad update.
+ Clear cached bootloader areas when PV format changed.
+ Fix partn table filter with external_device_info_source="udev" and blkid<2.20.
+
+Version 2.02.141 - 25th January 2016
+====================================
+ Add metadata/check_pv_device_sizes switch to lvm.conf for device size checks.
+ Warn if device size is less than corresponding PV size in metadata.
+ Cache device sizes internally.
+ Restore support for command breaking in process_each_lv_in_vg() (2.02.118).
+ Use correct mempool when process_each_lv_in_vg() (2.02.118).
+ Fix lvm.8 man to show again prohibited suffixes.
+ Fix configure to set proper use_blkid_wiping if autodetected as disabled.
+ Initialise udev in clvmd for use in device scanning. (2.02.116)
+ Add seg_le_ranges report field for common format when displaying seg devices.
+ Honour report/list_item_separator for seg_metadata_le_ranges report field.
+ Don't mark hidden devs in -o devices,metadata_devices,seg_pe_ranges.(2.02.140)
+ Change LV sizes in seg_pe_ranges report field to match underlying devices.
+ Add kernel_cache_settings report field for cache LV settings used in kernel.
+
+Version 2.02.140 - 16th January 2016
+====================================
+ Fix lvm2app to return either 0 or 1 for lvm_vg_is_{clustered,exported}.
+ Add kernel_discards report field to display thin pool discard used in kernel.
+ Correct checking of target presence when driver access is disabled.
+ Eval poolmetadatasize arg earlier in lvresize.
+ Fix vgcfgrestore to respect allocatable attribute of PVs.
+ Add report/mark_hidden_devices to lvm.conf.
+ Use brackets consistently in report fields to mark hidden devices.
+ Restore background polling processing during auto-activation (2.02.119).
+ Fix invalid memory read when reporting cache LV policy_name (2.02.126).
+
+Version 2.02.139 - 8th January 2016
+===================================
+ Update lvmlockd with the new VG seqno before devices are suspended.
+ Rework vgrename to use the common processing code in toollib.
+ Make pvs show new devices on the system since the last .cache update.
+ Document F,D and M thin pool health status chars for lv_attr in lvs man page.
+ Also add lvm2-activation{-early,-net}.service systemd status for lvmdump -s.
+
+Version 2.02.138 - 14th December 2015
+=====================================
+ Support lvrename for hidden (used) cache pools.
+ Fix lvrename for stacked cache pools.
+
+Version 2.02.137 - 5th December 2015
+====================================
+ Restore archiving before changing metadata in vgextend (2.02.117).
+ Dropped internal usage of log_suppress(2).
+ Cleaned logging code for buffer size usage.
+ Added internal id_read_format_try() function to check and read valid UUID.
+ Change lvcreate, lvrename, lvresize to use process_each_vg.
+ Change process_each_vg to handle single VG as separate arg.
+ Issue error if ambiguous VG name is supplied in most commands.
+ Make process_each fns always work through full list of known VG names.
+ Use dm_get_status_mirror() instead of individual parsers.
+ Add mem pool arg for check_transient_status() target function.
+ Avoid misleading error with -m is omitted with lvconvert to raid types.
+ Add system_id to vginfo cache.
+
+Version 2.02.136 - 28th November 2015
+=====================================
+ Add new --sinceversion option for lvmconfig --type new.
+ Fix inactive table loaded for wrapping thin-pool when resizing it.
+ Extend the list of ignored libraries when locking memory.
+
+Version 2.02.135 - 23rd November 2015
+=====================================
+ Add a model file for Coverity.
+ Show correct error message for unsupported yet cache pool repair.
+ Allow lvconvert cache pools' data and metadata LV to raid.
+ Fix reading of old metadata with missing cache policy or mode settings.
+ Issue error if external_device_info_source=udev and udev db record incomplete.
+ Update lvmetad duplicate VG name handling to use hash function extensions.
+ Detect invalid vgrenames by vgid where the name is unchanged.
+ Fix passing of 32bit values through daemons (mostly lvmlockd).
+ Use local memory pool for whole alloc_handle manipulation.
+ Add missing pointer validation after dm_get_next_target().
+ Do not deref NULL pointer in debug message for _match_pv_tags().
+ Drop unneeded stat() call when checking for sysfs file.
+ Fix memory leak on error path of failing thin-pool percentage check.
+ Add missing test for failing node allocation in lvmetad.
+ Correct configure messages when enabling/disabling lvmlockd.
+
+Version 2.02.134 - 9th November 2015
+====================================
+ Refactor some lvmetad code and adjust some duplicate PV messages.
+ No longer repair/wipe VG/PVs if inaccessible because foreign or shared.
+ Pass correct data size to mirror log calc so log can be bigger than 1 extent.
+
+Version 2.02.133 - 30th October 2015
+====================================
+ Support repeated -o|--options for reporting commands.
+ Support -o- and -o# for reporting commands to remove and compact fields.
+ Fix missing PVs from pvs output if vgremove is run concurrently.
+ Remove unwanted error message when running pvs/vgs/lvs and vgremove at once.
+ Check newly created VG's metadata do not overlap in metadata ring buffer.
+ Check metadata area size is at least the minimum size defined for the format.
+ Thin pool targets uses low_water_mark from profile.
+ Dropping 'yet' from error of unsupported thick snapshot of snapshots.
+ Do not support unpartitioned DASD devices with CDL formatted with pvcreate.
+ For thins use flush for suspend only when volume size is reduced.
+ Enable code which detects the need of flush during suspend.
+ Ensure --use-policy will resize volume to fit below threshold.
+ Correct percentage evaluation when checking thin-pool over threshold.
+ Fix lvmcache to move PV from VG to orphans if VG is removed and lvmetad used.
+ Fix lvmcache to not cache even invalid info about PV which got removed.
+ Support checking of memlock daemon counter.
+ Allow all log levels to be used with the lvmetad -l option.
+ Add optional shutdown when idle support for lvmetad.
+ Fix missing in-sync progress info while lvconvert used with lvmpolld.
+ Add report/compact_output_cols to lvm.conf to define report cols to compact.
+ Do not change logging in lvm2 library when it's already set.
+ Check for enough space in thin-pool in command before creating new thin.
+ Make libblkid detect all copies of the same signature if use_blkid_wiping=1.
+ Fix vgimportclone with -n to not add number unnecessarily to base VG name.
+ Cleanup vgimportclone script and remove dependency on awk, grep, cut and tr.
+ Add vg_missing_pv_count report field to report number of missing PVs in a VG.
+ Properly identify internal LV holding sanlock locks within lv_role field.
+ Add metadata_devices and seg_metadata_le_ranges report fields for raid vols.
+ Fix lvm2-{activation,clvmd,cmirrord,monitor} service to exec before mounting.
+
+Version 2.02.132 - 22nd September 2015
+======================================
+ Fix lvmconf to set locking_type=2 if external locking library is requested.
+ Remove verbose message when rescanning an unchanged device. (2.02.119)
+ Add origin_uuid, mirror_log_uuid, move_pv_uuid, convert_lv_uuid report fields.
+ Add pool_lv_uuid, metadata_lv_uuid, data_lv_uuid reporting fields.
+ Fix PV label processing failure after pvcreate in lvm shell with lvmetad.
+
+Version 2.02.131 - 15th September 2015
+======================================
+ Rename 'make install_full_man' to install_all_man and add all_man target.
+ Fix vgimportclone cache_dir path name (2.02.115).
+ Swapping of LV identifiers handles more complex LVs.
+ Use passed list of PVS when allocating space in lvconvert --thinpool.
+ Disallow usage of --stripe and --stripesize when creating cache pool.
+ Warn user when caching raid or thin pool data LV.
+ When layering LV, move LV flags with segments.
+ Ignore persistent cache if configuration changed. (2.02.127)
+ Fix devices/filter to be applied before disk-accessing filters. (2.02.112)
+ Make tags only when requested via 'make tags'.
+ Configure supports --disable-dependency-tracking for one-time builds.
+ Fix usage of configure.h when building in srcdir != builddir.
+
+Version 2.02.130 - 5th September 2015
+=====================================
+ Fix use of uninitialized device status if reading outdated .cache record.
+ Restore support for --monitor option in lvcreate (2.02.112).
+ Read thin-pool data and metadata percent without flush.
+ Detect blocked thin-pool and avoid scanning their thin volumes.
+ Check if dm device is usable before checking its size (2.02.116).
+ Extend parsing of cache_check version in configure.
+ Make lvpoll error messages visible in lvmpolld's stderr and in syslog.
+ Add 'make install_full_man' to install all man pages regardless of config.
+
+Version 2.02.129 - 26th August 2015
+===================================
+ Drop error message when vgdisplay encounters an exported VG. (2.02.27)
+ Fix shared library generation to stop exporting internal functions.(2.02.120)
+ Accept --cachemode with lvconvert.
+ Fix and improve reporting properties of cache-pool.
+ Enable usage of --cachepolicy and --cachesetting with lvconvert.
+ Don't allow to reduce size of thin-pool metadata.
+ Fix debug buffer overflows in cmirrord logging.
+ Add --foreground and --help to cmirrord.
+
+Version 2.02.128 - 17th August 2015
+===================================
+ Allocation setting cache_pool_cachemode is replaced by cache_mode.
+ Don't attempt to close config file that couldn't be opened.
+ Check for valid cache mode in validation of cache segment.
+ Change internal interface handling cache mode and policy.
+ When no cache policy specified, prefer smq (if available) over mq.
+ Add demo cache-mq and cache-smq profiles.
+ Add cmd profilable allocation/cache_policy,cache_settings,cache_mode.
+ Require cache_check 0.5.4 for use of --clear-needs-check-flag.
+ Fix lvmetad udev rules to not override SYSTEMD_WANTS, add the service instead.
+
+Version 2.02.127 - 10th August 2015
+===================================
+ Do not init filters, locking, lvmetad, lvmpolld if command doesn't use it.
+ Order fields in struct cmd_context more logically.
+ Add lock_type to lvmcache VG summary and info structs.
+ Fix regression in cache causing some PVs to bypass filters (2.02.105).
+ Make configure --enable-realtime the default now.
+ Update .gitignore and configure.in files to reflect usage of current tree.
+
+Version 2.02.126 - 24th July 2015
+=================================
+ Fix long option hyphen removal. (2.02.122)
+ Fix clvmd freeze if client disappears without first releasing its locks.
+ Fix lvconvert segfaults while performing snapshots merge.
+ Ignore errors during detection if use_blkid_wiping=1 and --force is used.
+ Recognise DM_ABORT_ON_INTERNAL_ERRORS env var override in lvm logging fn.
+ Fix alloc segfault when extending LV with fewer stripes than in first seg.
+ Fix handling of cache policy name.
+ Set cache policy before with the first lvm2 cache pool metadata commit.
+ Fix detection of thin-pool overprovisioning (2.02.124).
+ Fix lvmpolld segfaults on 32 bit architectures.
+ Add lvmlockd lock_args validation to vg_validate.
+ Fix ignored --startstopservices option if running lvmconf with systemd.
+ Hide sanlock LVs when processing LVs in VG unless named or --all used.
+
+Version 2.02.125 - 7th July 2015
+================================
+ Fix getline memory usage in lvmpolld.
+ Add support --clear-needs-check-flag for cache_check of cache pool metadata.
+ Add lvmetactl for developer use only.
+ Rename global/lock_retries to lvmlockd_retries.
+ Replace --enable-lvmlockd by --enable-lockd-sanlock and --enable-lockd-dlm.
+
+Version 2.02.124 - 3rd July 2015
+================================
+ Move sending thin pool messages from resume to suspend phase.
+ Report warning when pool is overprovisioned and not auto resized.
+ Recognize free-form date/time values for lv_time field in selection criteria.
+ Added experimental lvmlockd with configure --enable-lvmlockd.
+ Fix regression in select to match string fields if using synonyms (2.02.123).
+ Fix regression when printing more lv names via display_lvname (2.02.122).
+ Add missing error logging to unlock_vg and sync_local_dev_names callers.
+
+Version 2.02.123 - 30th June 2015
+=================================
+ Add report/time_format lvm.conf option to define time format for report.
+ Fix makefile shell compare == when building lvmetad lvmpolld (2.02.120).
+ Add --type full to lvmconfig for full configuration tree view.
+ Add undocumented environment variables to lvm man page. (2.02.119)
+ Add device synchronization point before activating a new snapshot.
+ Add --withspaces to lvmconfig to add spaces in output for better readability.
+ Add custom main function to libdaemon.
+ Use lvmetad to track out-of-date metadata discovered.
+
+Version 2.02.122 - 20th June 2015
+=================================
+ Flush stdout before printing to stderr.
+ Use pre-allocated buffer for printed LV names in display_lvname.
+ Support thins with size of external origin unaligned with thin pool chunk.
+ Allow extension of reduced thin volumes with external origins.
+ Consider snapshot and origin LV as unusable if component devices suspended.
+ Fix lvmconfig segfault on settings with undefined default value (2.02.120).
+ Add explicit 's' (shared) LV activation mode.
+ Ignore hyphens in long options names (i.e. --long-option == --longoption).
+
+Version 2.02.121 - 12th June 2015
+=================================
+ Distinguish between on-disk and lvmetad versions of text metadata.
+ Remove DL_LIBS from Makefiles for daemons that don't need them.
+ Zero errno in before strtoul call in dmsetup if tested after the call.
+ Zero errno in before strtoul call in lvmpolld.
+ Fix a segfault in pvscan --cache --background command.
+ Fix test for AREA_PV when checking for failed mirrors.
+ Do not use --sysinit in lvm2-activation{-early,-net}.service if lvmpolld used.
+ Maintain outdated PV info in lvmetad till all old metadata is gone from disk.
+ Do not fail polling when poll LV not found (already finished or removed).
+ Replace poll_get_copy_vg/lv fns with vg_read() and find_lv() in polldaemon.
+ Close all device fds only in before sleep call in polldaemon.
+ Simplify Makefile targets that generate exported symbols.
+ Move various -D settings from Makefiles to configure.h.
+
+Version 2.02.120 - 15th May 2015
+================================
+ Make various adjustments to Makefile compilation flags.
+ Add lvmpolld debug message class.
+ Add lvmpolld client mode for querying running server instance for status info.
+ Fix some libdaemon socket creation and reuse error paths.
+ Daemons (libdaemon) support exit on idle also in non-systemd environment.
+ Provide make dist and make rpm targets
+ Configure lvm.conf for use_lvmetad and use_lvmpolld.
+ Add lvpoll for cmdline communication with lvmpolld.
+ Add lvmpolld acting as a free-standing version of polldaemon.
+ Avoid repeated identical lvmetad VG lookups in commands processing all VGs.
+ Handle switches to alternative duplicate PVs efficiently with lvmetad.
+ Properly validate PV size for pvcreate --restorefile.
+ Fix check if pvcreate wiped device (2.02.117).
+ Fix storing of vgid when caching metadata (2.02.118).
+ Fix recursive lvm-config man page. (2.02.119)
+ Refactor polldaemon interfaces to poll every operation by VG/LV couple
+ Skip wait after testing in _wait_for_single_lv when polling finished
+ Return 'None' in python for empty string properties instead of crashing.
+ Distinguish signed numerical property type in reports for lvm2app library.
+ Reread raid completion status immediately when progress appears to be zero.
+ lvm2app closes locking on lvm_quit().
+ Configure detects /run or /var/run.
+ Add missing newline in clvmd --help output.
+
+Version 2.02.119 - 2nd May 2015
+===============================
+ New LVM_LOG_FILE_EPOCH, LVM_EXPECTED_EXIT_STATUS env vars. Man page to follow.
+ Remove detailed content from lvm.conf man page: use lvmconfig instead.
+ Generate complete config files with lvmconfig or 'make generate'.
+ Also display info on deprecated config with lvmconfig --withcomments.
+ Display version since which config is deprecated in lvmconfig --withversions.
+ Add --showdeprecated to lvmconfig to also display deprecated settings.
+ Hide deprecated settings in lvmconfig output for all types but current,diff.
+ Introduce support for exit on idle feature in libdaemon
+ Add --showunsupported to lvmconfig to also display unsupported settings.
+ Display unsupported settings for lvmconfig --type current,diff only by default
+ Honour lvmconfig --ignoreunsupported and --ignoreadvanced for all --type.
+ Make python bindings usable with python3 (and compatible with 2.6 & 2.7).
+ Add lvmconfig -l|--list as shortcut for lvmconfig --type list --withsummary.
+ Add lvmconfig --type list to display plain list of configuration settings.
+ Introduce lvmconfig as the preferred form of 'lvm dumpconfig'.
+ Add lv_ancestors and lv_descendants reporting fields.
+ Add --ignorelocal option to dumpconfig to ignore the local section.
+ Close connection to lvmetad after fork.
+ Make lvchange able to resume background pvmove polling again.
+ Split pvmove update metadata fn in an initial one and a subsequent one.
+ Refactor shared pvmove and lvconvert code into new _poll files.
+ Add --unconfigured option to dumpconfig to print strings unconfigured.
+ Add --withsummary option to dumpconfig to print first line - summary comment.
+ Use number of device holders to help choose between duplicate PVs.
+ Try to make lvmetad and non-lvmetad duplicate PV handling as similar as poss.
+ Issue warnings about duplicate PVs discovered by lvmetad.
+ Track alternative devices with matching PVIDs in lvmetad.
+ Check for lvm binary in blkdeactivate and skip LVM processing if not present.
+ Add --enable-halvm and --disable-halvm options to lvmconf script.
+ Add --services, --mirrorservice and --startstopservices option to lvmconf.
+ Use proper default value of global/use_lvmetad when processing lvmconf script.
+ Respect allocation/cling_tag_list during intial contiguous allocation.
+ Add A_PARTITION_BY_TAGS set when allocated areas should not share tags.
+ Make changes persist with python addTag/removeTag.
+ Set correct vgid when updating cache when writing PV metadata.
+ More efficient clvmd singlenode locking emulation.
+ Reject lvcreate -m with raid4/5/6 to avoid unexpected layout.
+ Don't skip invalidation of cached orphans if vg write lck is held (2.02.118).
+ Log relevant PV tags when using cling allocation.
+ Add str_list_add_list() to combine two lists.
+ Fix LV processing with selection to always do the selection on initial state.
+ Add internal LV_REMOVED LV status flag.
+
+Version 2.02.118 - 23rd March 2015
+==================================
+ Store metadata size + checksum in lvmcache and add struct lvmcache_vgsummary.
+ Remove inaccessible clustered PVs from 'pvs -a'.
+ Don't invalidate cached orphan information while global lock is held.
+ Avoid rescan of all devices when requested pvscan for removed device.
+ Measure configuration timestamps with nanoseconds when available.
+ Disable lvchange of major and minor of pool LVs.
+ Fix pvscan --cache to not scan and read ignored metadata areas on PVs.
+ Add After=iscsi-shutdown.service to blk-availability.service systemd unit.
+ Disallow vgconvert from changing metadata format when lvmetad is used.
+ Don't do a full read of VG when creating a new VG with an existing name.
+ Reduce amount of VG metadata parsing when looking for vgname on a PV.
+ Avoid reparsing same metadata when reading same metadata from multiple PVs.
+ Save extra device open/close when scanning device for size.
+ Fix seg_monitor field to report status also for mirrors and thick snapshots.
+ Replace LVM_WRITE with LVM_WRITE_LOCKED flags in metadata if system ID is set.
+ Remove ACCESS_NEEDS_SYSTEM_ID VG status flag. (2.02.117)
+ Enable system ID features.
+
+Version 2.02.117 - 4th March 2015
+=================================
+ Add CFG_DISABLED for new system ID config settings that must not yet be used.
+ Preserve original format type field when processing backup files.
+ Implement status action for lvm2-monitor initscript to display monitored LVs.
+ Allow lvchange -p to change kernel state only if metadata state differs.
+ Fix incorrect persistent .cache after report with label fields only (2.02.106).
+ Reinstate PV tag recognition for pvs if reporting label fields only (2.02.105).
+ Rescan devices before vgimport with lvmetad so exported VG is seen.
+ Fix hang by adjusting cluster mirror regionsize, avoiding CPG msg limit.
+ Do not crash when --cachepolicy is given without --cachesettings.
+ Add NEEDS_FOREIGN_VGS flag to vgimport so --foreign is always supplied.
+ Add --foreign to the 6 display and reporting tools and vgcfgbackup.
+ Install /etc/lvm/lvmlocal.conf template with local section for systemid.
+ Record creation_host_system_id in lvm2 metadata (never set yet).
+ Reinstate recursive config file tag section processing. (2.02.99)
+ Add 'lvm systemid' to display the current system ID (never set yet).
+ Fix configure to properly recognize --with-default-raid10-segtype option.
+ Do not refresh filters/rescan if no signature is wiped during pvcreate.
+ Enforce none external dev info for wiping during pvcreate to avoid races.
+ Add global/system_id_source and system_id_file to lvm.conf (disabled).
+ Add support for VG system_id to control host access to VGs.
+ Update vgextend to use process_each_vg.
+ Add --ignoreskippedcluster to pvchange.
+ Allow pvchange to modify several properties at once.
+ Update pvchange to use process_each_pv.
+ Fix pvs -a used with lvmetad to filter out devices unsuitable for PVs.
+ Fix selection to recognize units for ba_start, vg_free and seg_start fields.
+ Add support for -S/--select to vgexport and vgimport.
+ Add support for -S/--select to vgdisplay, lvdisplay and pvdisplay without -C.
+ Add support for -S/--select to vgremove and lvremove.
+ Add support for -S/--select to vgchange,lvchange and pvchange.
+ Add infrastructure to support selection for non-reporting tools.
+ Add LVM_COMMAND_PROFILE env var to set default command profile name to use.
+ Set CLOEXEC flag on file descriptors originating in libdaemon.
+
+Version 2.02.116 - 30th January 2015
+====================================
+ Deactivate unused thin pools activated with lvm2 pre-2.02.112 versions.
+ Check lock holding LV when lvconverting stacked raid LV in cluster.
+ Support udev external dev info for filters: PV min size, mpath, md, partition.
+ Add fw_raid_component_detection lvm.conf option to enable FW raid detection.
+ Add devices/external_device_info_source lvm.conf option ("none" by default).
+ Scan pools in for_each_sub_lv() and add for_each_sub_lv_except_pools().
+ Fix lvm2app lvm_lv_get_property return value for fields with info/status ioctl.
+ Fix lvm2app regression in lvm_lv_get_attr causing unknown values (2.02.115).
+ Set default cache_mode to writehrough when missing in metadata.
+ Preserve chunk size with repair and metadata swap of a thin pool.
+ Fix raid --splitmirror 1 functionality (2.02.112).
+ Fix tree preload to handle splitting raid images.
+ Do not support unpartitioned DASD devices.
+ Improve config validation to check if setting with string value can be empty.
+
+Version 2.02.115 - 21st January 2015
+====================================
+ Report segment types without monitoring support as undefined.
+ Support lvchange --errorwhenfull for thin pools.
+ Improve the processing and reporting of duplicate PVs.
+ Report lv_health_status and health attribute also for thin pool.
+ Add lv_when_full reporting field.
+ Add support for lvcreate --errorwhenfull y|n for thin pools.
+ Fix lvconvert --repair to honour resilience requirement for segmented RAID LV.
+ Filter out partitioned device-mapper devices as unsuitable for use as PVs.
+ Also notify lvmetad about filtered device if using pvscan --cache DevicePath.
+ Use LVM's own selection instead of awk expressions in clvmd startup scripts.
+ Do not filter out snapshot origin LVs as unusable devices for an LVM stack.
+ Fix incorrect rimage names when converting from mirror to raid1 LV (2.02.112).
+ Introduce pvremove_many to avoid excessive metadata re-reading and messages.
+ Check for cmirror availability during cluster mirror creation and activation.
+ Add cache_policy and cache_settings reporting fields.
+ Add missing recognition for --binary option with {pv,vg,lv}display -C.
+ Fix vgimportclone to notify lvmetad about changes done if lvmetad is used.
+ Fix vgimportclone to properly override config if it is missing in lvm.conf.
+ Fix automatic use of configure --enable-udev-systemd-background-jobs.
+ Correctly rename active split LV with -splitmirrors for raid1.
+ Add report/compact_output to lvm.conf to enable/disable compact report output.
+ Still restrict mirror region size to power of 2 when VG extent size is not.
+
+Version 2.02.114 - 28th November 2014
+=====================================
+ Release socket in daemon_close and protocol string in daemon_open error path.
+ Add --cachepolicy and --cachesettings to lvcreate.
+ Fix regression when parsing /dev/mapper dir (2.02.112).
+ Fix missing rounding to 64KB when estimating optimal thin pool chunk size.
+ Fix typo in clvmd initscript causing CLVMD_STOP_TIMEOUT var to be ignored.
+ Fix size in pvresize "Resizing to ..." verbose msg to show proper result size.
+
+Version 2.02.113 - 24th November 2014
+=====================================
+ Add --cachepolicy and --cachesettings options to lvchange.
+ Validate that converted volume and specified pool volume differ in lvconvert.
+ Fix regression in vgscan --mknodes usage (2.02.112).
+ Respect --prefix when setting CLMVD_PATH configure (2.02.89).
+ Default to configure --enable-udev-systemd-background-jobs for systemd>=205.
+ Fix ignore_vg() to properly react on various vg_read errors (2.02.112).
+ Failed recovery returns FAILED_RECOVERY status flag for vg_read().
+ Exit with non-zero status code when pvck encounters a problem.
+ Fix clean_tree after activation/resume for cache target (2.02.112).
+
+Version 2.02.112 - 11th November 2014
+=====================================
+ Add cache_{read,write}_{hits,misses} reporting fields.
+ Add cache_{total,used,dirty}_blocks reporting fields.
+ Add _corig as reserved suffix.
+ Reduce number of VG writes and commits when creating spare volumes.
+ When remove_layer_from_lv() removes layer, restore subLV names.
+ Cache-pool in use becomes invisible LV.
+ Don't prompt for removal of _pmspare in VG without pool metadata LV.
+ Deactivation of snapshot origin detects and deactivates left-over snapshots.
+ Properly report error when taking snapshot of any cache type LV.
+ Add basic thread debugging messages to dmeventd.
+ Include threads being shutdown in dmeventd device registration responses.
+ Inital support for external users of thin pools based on transaction_id.
+ Report some basic percentage info for cache pools.
+ Introduce size_mb_arg_with_percent() for advanced size arg reading.
+ Add extra support for '.' as decimal point in size args.
+ Add configure parameters for default segment type choices.
+ Add global/sparse_segtype_default setting to use thin for --type sparse.
+ Update and correct lvcreate and lvcovert man pages.
+ Mark pools and snapshots as unzeroable volumes.
+ Check for zeroing of volume after segment type is fully detected.
+ Better support for persistent major and minor options with lvcreate.
+ Refactor lvcreate towards more complete validation of all supported options.
+ Support lvcreate --type linear.
+ Improve _should_wipe_lv() to warn with message.
+ Inform about temporarily created volumes only in verbose mode.
+ Better support for --test mode with pool creation.
+ Query lock holding LV when replacing and converting raid volumes.
+ Add extra validate for locked lv within validate_lv_cache_create().
+ Add internal lvseg_name() function.
+ Skip use of lock files for virtual internal VG names.
+ Fix selection on {vg,lv}_permissions fields to properly match selection criteria.
+ Fix lv_permissions reporting to display read-only{-override} instead of blank.
+ Fix liblvm2cmd and lvm shell to respect quotes around args in cmd line string.
+ Permit extent sizes > 128KB that are not power of 2 with lvm2 format.
+ Remove workaround for lvm2-monitor.service hang on stop if lvmetad stopped.
+ Change vgremove to use process_each_lv_in_vg.
+ Allow lvconvert --repair and --splitmirrors on internal LVs.
+ Introduce WARN_ flags to control some metadata warning messages.
+ Use process_each_pv in vgreduce.
+ Refactor process_each_pv in toollib.
+ Introduce single validation routine for pool chunk size.
+ Support --yes like --force in vg/lvremove to skip y|n prompt.
+ Support --yes with lvconvert --splitsnapshot.
+ Fix detection of unsupported thin external lvconversions.
+ Fix detection of unsupported cache and thin pool lvconversions.
+ Fix detection of unsupported lvconversion of cache to snapshot.
+ Improve code for creation of cache and cache pool volumes.
+ Check cluster-wide (not local) active status before removing LV.
+ Properly check if activation of removed cached LV really activated.
+ lvremove cached LV removes cachepool (keep with lvconvert --splitcache).
+ Always remove spare LV with last removed pool volume.
+ Support lvconvert --splitcache and --uncache of cached LV.
+ Option --cache has also shortcut -H (i.e. lvcreate -H).
+ Refactor lvcreate code and better preserve --type argument.
+ Refactor filter processing around lvmetad.
+ Refactor process_each_lv in toollib.
+ Refactor process_each_vg in toollib.
+ Pools cannot be used as external origin.
+ Use lv_update_and_reload() for snapshot reload.
+ Don't print message in adjusted_mirror_region_size() in activation.
+ Improve lv_update_and_reload() to find out proper lock holding LV.
+ Improve search of LV in lv_ondisk().
+ Do not scan sysfs in lv_check_not_in_use() when device is closed.
+ Backup final metadata after resync of mirror/raid.
+ Unify handling of --persistent option for lvcreate and lvchange.
+ Validate major and minor numbers stored in metadata.
+ Use -fPIE when linking -pie executables.
+ Support DEBUG_MEMLOCK to trap unsupported mmap usage.
+ Enable cache segment type by default.
+ Ensure only supported volume types are used with cache segments.
+ Fix inablility to specify cachemode when 'lvconvert'ing to cache-pool.
+ Grab cluster lock for active LVs when setting clustered attribute.
+ Use va_copy to properly pass va_list through functions.
+ Add function to detect rotational devices.
+ Review internal checks for mirror/raid/pvmove volumes.
+ Track mirror segment type with separate MIRROR flag.
+ Fix cmirror endian conversions.
+ Introduce lv_is_pvmove/locked/converting/merging macros.
+ Avoid leaving linear logical volume when thin pool creation fails.
+ Don't leak alloc_handle on raid target error path.
+ Properly validate raid leg names.
+ Archive metadata before starting their modification in raid target.
+ Add missing vg_revert() in suspend_lv() raid and snapshot error path.
+ Add missing backup of lvm2 metadata after some raid modifications.
+ Use vg memory pool for extent allocation.
+ Add allocation/physical_extent_size config option for default PE size of VGs.
+ Demote an error to a warning when devices known to lvmetad are filtered out.
+ Re-order filter evaluation, making component filters global.
+ Fix logic that checks for full scan before iterating through devices.
+ Introduce common code to modify metadata and reload updated LV.
+ Fix rename of active snapshot volume in cluster.
+ Make sure shared libraries are built with RELRO option.
+
+Version 2.02.111 - 1st September 2014
+=====================================
+ Pass properly sized char buffers for sscanf when initializing clvmd.
+ Reinstate nosync logic when extending mirror. (2.02.110)
+ Fix total area extent calculation when allocating cache pool. (2.02.110)
+
+Version 2.02.110 - 26th August 2014
+===================================
+ Fix manipulation with thin-pools which are excluded via volume_list.
+ Support lv/vgremove -ff to remove thin vols from broken/inactive thin pools.
+ Fix typo breaking configure --with-lvm1=shared.
+ Modify lvresize code to handle raid/mirrors and physical extents.
+ Don't allow pvcreate to proceed if scanning or filtering fails.
+ Cleanly error when creating RAID with stripe size < PAGE_SIZE.
+ Print name of LV which on activation triggers delayed snapshot merge.
+ Add lv_layout and lv_role LV reporting fields.
+ Properly display lvs lv_attr volume type and target type bit for cache origin.
+ Fix pvcreate_check() to update cache correctly after signature wiping.
+ Fix primary device lookup failure for partition when processing mpath filter.
+ If LV inactive and non-clustered, do not issue "Cannot deactivate" on -aln.
+ Remove spurious "Skipping mirror LV" message on pvmove of clustered mirror.
+
+Version 2.02.109 - 5th August 2014
+==================================
+ Remove lv_volume_type field from reports. (2.02.108)
+ Fix a segfault in lvscan --cache when devices were already missing. (2.02.108)
+ Fix incorrect persistent .cache after vgcreate with PV creation. (2.02.108)
+ Display actual size changed when resizing LV.
+ Allow approximate allocation with +%FREE in lvextend.
+ Remove possible spurious "not found" message on PV create before wiping.
+ Handle upgrade from 2.02.105 when an LV now gaining a uuid suffix is active.
+
+Version 2.02.108 - 23rd July 2014
+=================================
+ Add lvscan --cache which re-scans constituents of a particular LV.
+ Make dmeventd's RAID plugin re-scan failed PVs when lvmetad is in use.
+ Improve code sharing for lvconvert and lvcreate and pools (cache & thin).
+ Improve lvconvert --merge validation.
+ Improve lvconvert --splitsnapshot validation.
+ Add report/list_item_separator lvm.conf option.
+ Add lv_active_{locally,remotely,exclusively} LV reporting fields.
+ Comment out devices/{preferred_names,filter} in default lvm.conf file.
+ Enhance lvconvert thin, thinpool, cache and cachepool command line support.
+ Display 'C' only for cache and cache-pool target types in lvs.
+ Prompt for confirmation before change LV into a snapshot exception store.
+ Return proper error codes for some failing lvconvert funtions.
+ Add initial code to use cache tools (cache_check|dump|repair|restore).
+ Support lvdisplay --maps for raid.
+ Add --activationmode degraded to activate degraded raid volumes by default.
+ Add separate lv_active_{locally,remotely,exclusively} LV reporting fields.
+ Recognize "auto"/"unmanaged" values in selection for appropriate fields only.
+ Add report/binary_values_as_numeric lvm.conf option for binary values as 0/1.
+ Add --binary arg to pvs,vgs,lvs and {pv,vg,lv}display -C for 0/1 on reports.
+ Add separate reporting fields for each each {pv,vg,lv}_attr bit.
+ Separate LV device status reporting fields out of LV fields.
+ Fix regression causing PVs not in VGs to be marked as allocatable (2.02.59).
+ Fix VG component of lvid in vgsplit/vgmerge and check in vg_validate.
+ Add lv_full_name, lv_parent and lv_dm_path fields to reports.
+ Change lv_path field to suppress devices that never appear in /dev/vg.
+ Postpone thin pool lvconvert prompts (2.02.107).
+ Require --yes option to skip prompt to lvconvert thin pool chunksize.
+ Support lvremove -ff to remove thin volumes from broken thin pools.
+ Require --yes to skip raid repair prompt.
+ Change makefile %.d generation to handle filename changes without make clean.
+ Fix use of buildir in make pofile.
+ Enhance private volumes UUIDs with suffixed for easier detection.
+ Do not use reserved _[tc]meta volumes for temporary LVs.
+ Leave backup pool metadata with _meta%d suffix instead of reserved _tmeta%d.
+ Allow RAID repair to reuse PVs from same image that suffered a failure.
+ New RAID images now avoid allocation on any PVs in the same parent RAID LV.
+ Always reevaluate filters just before creating PV.
+
+Version 2.02.107 - 23rd June 2014
+=================================
+ Introduce LCK_ACTIVATION to avoid concurrent activation of basic LV types.
+ Fix open_count test for lvchange --refresh or mirrors and raids.
+ Update pvs,vgs,lvs and lvm man page for selection support.
+ Add -S/--select to lvm devtypes for report selection.
+ Add -S/--select to pvs,vgs,lvs and {pv,vg,lv}display -C for report selection.
+ Use dm_report_init_with_selection now, implicit "selected" field appears.
+ Make use of libdm's DM_REPORT_FIELD_TYPE{SIZE,PERCENT,STRING_LIST} for fields.
+ Support all-or-nothing pvmove --atomic.
+ Automatically add snapshot metadata size for -l %ORIGIN calculation.
+ When converting RAID origin to cache LV, properly rename sub-LVs.
+ Use RemoveOnStop for lvm2-lvmetad.socket systemd unit.
+ Add thin-generic configuration profile for generic thin settings.
+ Fix crash when reporting empty labels on pvs.
+ Use retry_deactivation also when cleaning orphan devices.
+ Wait for client threads when shutting down lvmetad.
+ Remove PV from cache on pvremove.
+ Avoid repeatedly reporting of failure to connect to lvmetad.
+ Introduce MDA_FAILED to permit metadata updates even if some mdas are missing.
+ Prompt when setting the VG cluster attr if the cluster is not setup.
+ Allow --yes to skip prompt in vgextend (worked only with -f).
+ Don't use name mangling for LVM - it never uses dm names with wrong char set.
+ Remove default.profile and add {command,metadata}_profile_template.profile.
+ Use proper umask for systemd units generated by lvm2-activation-generator.
+ Check for failing mirror_remove_missing() function.
+ Prompt before converting volumes to thin pool and thin pool metadata.
+ Add dumpconfig --type profilable-{metadata,command} to select profile type.
+ Exit immediately with error if command profile is found invalid.
+ Separate --profile cmd line arg into --commandprofile and --metadataprofile.
+ Strictly separate command profiles and per-VG/LV profiles referenced in mda.
+ Fix dumpconfig --type diff when run as second and later cmd in lvm shell.
+ Fix wrong profile reuse from previous run if another cmd is run in lvm shell.
+ Move cache description from lvm(8) to new lvmcache(7) man page.
+ Display skipped prompt in silent mode.
+ Make reporting commands show help about possible sort keys on '-O help'.
+ Add metadata_percent to lvs_cols.
+ Take account of parity areas with alloc anywhere in _calc_required_extents.
+ Use proper uint64 casting for calculation of cache metadata size.
+ Better support for nesting of blocking signals.
+ Use only sigaction handler and drop duplicate signal handler.
+ Separate signal handling and flock code out into lib/misc.
+ Don't start dmeventd checking seg_monitor and monitoring is disabled.
+ Catch CTRL-c during pvremove prompts.
+ Show correct availability status for snapshot origin in lvscan.
+ Move segment thin pool/volume info into segment display 'lvdisplay --maps'.
+ Display thin pool usage even when just thin volume is available.
+ Display monitoring status for monitorable segments in 'lvdisplay --maps'.
+ Display virtual extents for virtual LVs in 'lvdisplay --maps'.
+ Make vgsplit fail cleanly when not all PVs are specified for RAID 4/5/6.
+ Make vgsplit work on mirrors with logs that share PVs with images.
+ Use devices/ignore_suspended_devices=0 by default if not defined in lvm.conf.
+ Use proper libmem mempool for allocation of unknown segment name.
+ Add --readonly to reporting and display tools for lock-free metadata access.
+ Add locking_type 5 for dummy locking for tools that do not need any locks.
+ Fix _recover_vg() error path when lock conversion fails.
+ Use X for LV attributes that are unknown when activation disabled.
+ Only output lvdisplay 'LV Status' field when activation is enabled.
+ Use lvmetad_used() in pvscan instead of config_tree.
+ Configure --enable-udev-systemd-background-jobs if not disabled explicitly.
+ Add lvmdump -s to collect system info and context (currently systemd only).
+ Refactor allocation code to make A_POSITIONAL_FILL explicit.
+ Use thread-safe ctime_r() for clvmd debug logging.
+ Skip adding replies to already finished reply thread.
+ Use mutex to check number of replies in request_timed_out() in clvmd.
+ Drop usage of extra reply_mutex for localsock in clvmd.
+ Protect manipulation with finished flag with mutex in clvmd.
+ Shift mutex creation and destroy for localsock in clvmd to correct place.
+ Fix usage of --test option in clvmd.
+ Skip more libraries to be mlocked in memory.
+ Remove LOCKED flag for pvmove replaced with error target.
+ Return invalid command when specifying negative polling interval.
+
+Version 2.02.106 - 10th April 2014
+==================================
+ Fix ignored --dataalignment/dataalignment offset for pvcreate --restorefile.
+ Fix lost information about bootloader area when using lvmetad.
+ Don't require --major to be specified when using -My option on kernels > 2.4.
+ Add configure --disable-thin_check_needs_check to support old thin_check.
+ Use thin_check --clear-needs-check-flag by default.
+ Export lvm_even_rand() for controlled provision of random numbers.
+ Add lvmthin man page to section 7.
+ Ensure mapped device names are not too long in vg_validate and lvrename.
+ Ensure resume failure in lvrename results in command failure.
+ Add explicit error message when using lvdisplay -c -m.
+ Report error if superfluous argument (e.g. PV name) supplied to pvscan.
+ Fix error message for pvdisplay -c -m and add one for pvdisplay -c -s.
+ Use EINVALID_CMD_LINE correctly instead of ECMD_FAILED in vgimport/export.
+ Obtain list of known VGs from lvmetad for pvchange --all.
+ Add man page for lvm-dumpconfig to section 8.
+ Drop unused cmd pointer for internal function for_each_sub_lv().
+ Validate name for renamed sub LVs.
+ When lvrename fails on argument parsing return EINVALID_CMD_LINE.
+ Fix exit code regression in failing pvchange command (2.02.66).
+ Include 'lvm dumpconfig --type missing' and '--type diff' output to lvmdump.
+ Return failure when specifying negative size for pvresize.
+ Fix memory corruption in cmd context refresh if clvmd leaks opened device.
+ Reinitialise lvmcache properly on fork to fix premature polldaemon exit.
+ Add 'lvm dumpconfig --type diff' to show differences from defaults.
+ Fix swap signature detection for devices smaller then 2MB.
+ Use dm_malloc function in clvmd.c.
+ Resolve memory release order for clvmd shutdown.
+ Report error when lvm2 activation is released in critical_section.
+ Fix memory corruption when pvscan reports long pv names.
+ Do not report internal orphan VG names when reporting pvdisplay/pvscan.
+ Fix pvdisplay -c man page referencing KB instead of sectors.
+ Skip redundant synchronization calls on local clvmd.
+ Use correct PATH_MAX for locking dir path.
+ Do not check for backups when when its creation is disabled.
+ Don't allow --mergedconfig without --type current in dumpconfig. Fix memleak.
+ Make global/lvdisplay_shows_full_device_path lvm.conf setting profilable.
+ Make global/{units|si_unit_consistency|suffix} lvm.conf setting profilable.
+ Validate minimal chunk size for snapshot COW volume in lvconvert.
+ Disallow lvconvert of origin to snapshot COW volume.
+ Make report lvm.conf settings profilable.
+ Add existing report settings to lvm.conf.
+ Use VG read lock during 'pvscan --cache -aay' autoactivation.
+ Issue a VG refresh before autoactivation only if the PV has changed/is new.
+ Add flag to lvmetad protocol to indicate the PV scanned has changed/is new.
+ Also add vgname to lvmetad protocol when referencing VGs for PVs scanned.
+ Add man page for lvm2-activation-generator.
+ Don't print an error and accept empty value for global/thin_disabled_features.
+ Update API for internal function build_dm_uuid().
+ Do not try to check empty pool with scheduled messages.
+ Fix return value in pool_has_message() when quering for any message.
+ Cleanup all client resources on clvmd exit.
+ Use dm_zalloc to clear members of clvmd client struct.
+ Use BLKID_CFLAGS when compiling with blkid support.
+ Use correct rl_completion_func_t typedef for new readline.
+ Make lvm 'dumpconfig --type default' complete for it to be consumed by lvm.
+ Run pvscan --cache via systemd-run in udev if the PV label is detected lost.
+ Fix memleak when lvmetad discovers PV to appear on another device.
+ Fix calculation of maximum size of COW device for snapshot (2.02.99).
+ Do not allow stripe size to be bigger then extent size for lvresize.
+ Zero snapshot COW header when creating read-only snapshot.
+ Comment out config lines in dumpconfig output without default values defined.
+ Improve detection of clustered mirror support.
+ Enhance raid code with feature flags, for now checks for raid10.
+ Move parsing of VG metadata from vg_commit() back to vg_write() (2.02.99)
+ Avoid a PV label scan while in a critical section.
+ Remove (always 0) skip argument from lv_activation_skip().
+ Create /dev/disk/by-id/lvm-pv-uuid-<PV_UUID> symlink for each PV via udev.
+ lvcreate computes RAID4/5/6 stripes if not given from # of allocatable PVs.
+ Fix merging of old snapshot into thin volume origin.
+ Use --ignoreskippedcluster in lvm2-monitor initscript/systemd unit.
+ Do not use VG read/write state for LV read/write state.
+ Use --ignoreskippedcluster in activation systemd units if use_lvmetad=0.
+ Allow approximate allocation when specifying size in percentage terms.
+ Add basic LVM support for cache[pool] segment types.
+ Use local exclusive activation for creation of raid in cluster.
+ Use correctly signed 64b constant when selecting raid volumes.
+ Add systemd native service for clvmd, cmirrord and clustered LV activation.
+ Remove ExecReload from lvmetad systemd unit: lvmetad -R undefined. (2.02.98)
+ Do not fork lvmetad if running under systemd.
+ Wipe DM_snapshot_cow signature without prompt in new LVs with blkid wiping.
+ Avoid exposing temporary devices when initializing raid metadata volumes.
+ Add internal tags command to display any tags defined on the host.
+ Prohibit use of external origin with size incompatible with thin pool.
+ Avoid trying to convert single to thin pool and volume at the same time.
+ Add support for partitions on ZFS zvol.
+ Fix unwanted drop of hold flocks on forked children.
+ Respect LVM_LVMETAD_PIDFILE env var for lvm command.
+ Avoid exposing temporary devices when initializing thin pool volume.
+ Fix test when checking target version for available thin features.
+ Detect thin feature external_origin_extend and limit extend when missing.
+ Rename internal pool_can_resize_metadata() to thin_pool_feature_supported().
+ Issue error if libbblkid detects signature and fails to return offset/length.
+ Update autoconf config.guess/sub to 2014-01-01.
+ Online thin pool metadata resize requires 1.10 kernel thin pool target.
+
+Version 2.02.105 - 20th January 2014
+====================================
+ Fix thin LV flagging for udev to skip scanning only if the LV is wiped.
+ Replace use of xfs_check with xfs_repair in fsadm.
+ Mark lvm1 format metadata as FMT_OBSOLETE. Do not use it with lvmetad.
+ Invalidate cached VG struct after a PV in it gets orphaned. (2.02.87)
+ Mark pool format metadata as FMT_OBSOLETE.
+ Use major:minor in lvm2-pvscan@.service for proper global_filter application.
+ Syntax and spelling fixes in some man pages.
+ Dependency scan counts with snapshots and external origins.
+ Make sure VG extent size is always greater or equal to PV phys. block size.
+ Optimize double call of stat() for cached devices.
+ Enable support for thin provisioning for default configuration.
+ Improve process_each_lv_in_vg() tag processing.
+ Reordered and simplified logging code.
+ Fix SYSTEMD_READY assignment for foreign devices in lvmetad udev rules.
+ Disable online thin pool metadata resize for 1.9 kernel thin target.
+ Shortened code for initialization of raid segment types.
+ Cache global library dir in command context.
+ Return success when inserting dirs and links into device cache.
+ Test for remote exclusive activation after activation fails.
+ Support lvconvert --merge for thin snapshots.
+ Add support to read thin device id from table line entry.
+ Drop extra test for origin when testing merging origin in lv_refresh().
+ Extend lv_remove_single() to not print info about removed LV.
+ Replace open_count check with lv_check_not_in_use() for snapshot open test.
+ Add error messages with LV names for failing lv refresh.
+ Compile/link executables with new RELRO and PIE options (non-static builds).
+ Support per-object compilation cflags via CFLAGS_object.o.
+ Automatically detect support for compiler/linker options to use RELRO and PIE.
+ Add --splitsnapshot to lvconvert to separate out cow LV.
+ Reinstate origin reload to complete lvconvert -s with active LVs. (2.02.98)
+ Select only active volume groups if vgdisplay -A is used.
+ Add -p and LVM_LVMETAD_PIDFILE env var to lvmetad to change pid file.
+ Allow lvmetad to reuse stale socket.
+ Only unlink lvmetad socket on error if created by the same process.
+ Append missing newline to lvmetad missing socket path error message.
+ Check for non-zero aligment in _text_pv_add_metadata_area() to not div by 0.
+ Add allocation/use_blkid_wiping to lvm.conf to enable blkid wiping.
+ Enable blkid_wiping by default if the blkid library is present.
+ Add configure --disable-blkid_wiping to disable libblkid signature detection.
+ Add -W/--wipesignatures lvcreate option to support wiping on new LVs.
+ Add allocation/wipe_signatures_when_zeroing_new_lvs to lvm.conf.
+ Do not fail the whole autoactivation if the VG refresh done before fails.
+ Do not connect to lvmetad on vg/lvchange --sysinit -aay and socket absent.
+ Use lv_check_not_in_use() when testing device in use before merging.
+ Move test for target present from init_snapshot_merge() to lvconvert.
+ Check for failure of lvmcache_add_mda() when writing pv.
+ Check for failure of dev_get_size() when reporting device size.
+ Drop extra unneeded '/' when scanning sysfs directory.
+ Fix undef value if skipped clustered VG ignored for toollib PV seg. (2.02.103)
+ Support validation of VG/LV names in liblvm/python.
+ Allow creation of PVs with arguments to liblvm/python.
+ Ensure sufficient metadata copies retained in liblvm/python vgreduce.
+ Fix installation of profiles from conf subdir when not building in srcdir.
+ Show UUIDs for missing PVs in reports.
+ Change dev_size/name, pv_fmt/mda_free/mda_size/uuid fields from pv to label.
+ Add struct device *dev to struct label.
+ Introduce process_each_label.
+ Change void *private to struct format_type *fmt in struct labeller.
+ Remove pv_read.
+ Add reporting of thin_id device id for thin volumes.
+ Fix reporting of empty numerical values for recently-added fields.
+ Use _field_set_percent/value in reporting code.
+
+Version 2.02.104 - 13th November 2013
+=====================================
+ Workaround VG refresh race during autoactivation by retrying the refresh.
+ Handle failures in temporary mirror used when adding images to mirrors.
+ Fix and improve logic for implicitely exclusive activations.
+ Return success when LV cannot be activated because of volume_list filter.
+ Return proper error state for remote exclusive activation.
+ Fix missing lvmetad scan for PVs found on MD partitions.
+ Respect DM_UDEV_DISABLE_OTHER_RULES_FLAG in lvmetad udev rules.
+ Fix clvmd message verification to not reject REMOTE flag. (2.02.100)
+ Compare equality of double values with DBL_EPSILON predefined constant.
+ Use additional gcc warning flags by default.
+ Add ignore_lvm_mirrors to config file to read/ignore labels on mirrors.
+ Add internal flag for temporary LVs to properly direct udev to not interfere.
+ Fix endless loop in blkdeactivate <device>... if unable to umount/deactivate.
+ Add dev-block-<major>:<minor>.device systemd alias for complete PV tracking.
+ Use major:minor as short form of --major and --minor arg for pvscan --cache.
+ Remove 2>/dev/null from three lvm commands executed by vgimportclone.
+ Add configure --enable-udev-systemd-background-jobs.
+ Add lvm2-pvscan@.service to run pvscan as a service for lvmetad/autoactivation.
+ Use #ifdef __linux__ instead of linux throughout.
+ Fix lvconvert swap of poolmetadata volume for active thin pool.
+ Check for open count with a timeout before removal/deactivation of an LV.
+ Report RAID images split with tracking as out-of-sync ("I").
+ Improve parsing of snapshot lv segment.
+ Add workaround for deactivation problem of opened virtual snapshot.
+ Disable unsupported merge for virtual snapshot.
+ Move code to remove virtual snapshot from tools to lib for lvm2app.
+ Fix possible race during daemon worker thread creation (lvmetad).
+ Fix possible deadlock while clearing lvmetad cache for full rescan.
+ Recognise NVM Express devices in filter.
+ Fix failing metadata repair when lvmetad is used.
+ Fix incorrect memory handling when reading messages from lvmetad.
+ Fix locking in lvmetad when handling the PV which is gone.
+ Recognize new flag to skip udev scanning in udev rules and act appropriately.
+ Add support for flagging an LV to skip udev scanning during activation.
+ Improve message when unable to change discards setting on active thin pool.
+ Run full scan before vgrename operation to avoid any cache name collision.
+ Fix lvconvert when converting to a thin pool and thin LV at once. (2.02.99)
+
+Version 2.02.103 - 4th October 2013
+===================================
+ Ensure vgid matches before removing vgname entry from lvmetad cache.
+ Add --ignoreskippedcluster for exit status success when clustered VGs skipped.
+ Fix 3 minute udev timeout so that it is applied for all LVM volumes.
+ Fix thin/raid & activation config defaults with configure --disable-devmapper.
+ Fix RAID calculation for sufficient allocatable space.
+ lvconvert from linear to mirror or RAID1 now honors mirror_segtype_default.
+ Add thin-performance configuration profile.
+ Add lvm.conf allocation/thin_pool_chunk_size_policy option.
+ Fix contiguous & cling allocation policies for parity RAID. (2.02.100)
+ Have lvmconf --enable/disable-cluster reset/set use_lvmetad.
+ Don't install separate command symlink for 'lvm devtypes'. (2.02.101)
+ Add seg_size_pe field to reports.
+ Support start+length notation with command line PE ranges.
+ Exit cleanly with message when pvmove cannot restart because LV is inactive.
+
+Version 2.02.102 - 23rd September 2013
+======================================
+ Fix missing build dependency for scripts subdir in Makefile.
+ Extend lv_info() for more efficient lv_is_active_locally() check.
+ Fix node up/down handling in clvmd corosync module.
+
+Version 2.02.101 - 20th September 2013
+======================================
+ Fix 3-thread clvmd deadlock triggered by cleanup on EOF from client.
+ Remove VG from lvmetad before restoring it with vgcfgrestore.
+ Use strtoull instead of strtol in _get_int_arg.
+ Add devtypes report command to display built-in recognised block device types.
+ Fix CC Makefile override which had reverted to using built-in value. (2.02.75)
+ Recognise bcache block devices in filter (experimental).
+ Run lvm2-activation-net after lvm2-activation service to prevent parallel run.
+ Add man page entries for lvmdump's -u and -l options.
+ Fix lvm2app segfault while using lvm_list_pvs_free fn if there are no PVs.
+ Improve of clvmd singlenode locking simulation.
+ lvconvert no longer converts LVs of "mirror" segment type to thinpool.
+ lvconvert no longer converts thinpool sub-LVs to "mirror" segment type.
+ Direct udev to use 3min timeout for LVM devices. Recent udev has default 30s.
+ Do not scan multipath or RAID components and avoid incorrect autoactivation.
+ Fix MD/loop udev handling to fire autoactivation after setup or coldplug only.
+ Make RAID capable of single-machine exclusive operations in a cluster.
+ Drop calculation of read ahead for deactivated volume.
+ Check for exactly one lv segment in validation of thin pools and volumes.
+ Fix dmeventd unmonitoring of thin pools.
+ Fix lvresize for stacked thin pool volumes (i.e. mirrors).
+ Write Completed debug message before reinstating log defaults after command.
+ Refresh existing VG before autoactivation (event retrigger/device reappeared).
+ Use pvscan -b in udev rules to avoid a deadlock on udev process count limit.
+ Add pvscan -b/--background for the command to be processed in the background.
+ Don't assume stdin file descriptor is readable.
+ Avoid unlimited recursion when creating dtree containing inactive pvmove LV.
+ Require exactly 3 arguments for lvm2-activation-generator. Remove defaults.
+ Inform lvmetad about any lost PV label to make it in sync with system state.
+ Support most of lvchange operations on stacked thin pool meta/data LVs.
+ Enable non-clustered pvmove of snapshots and snapshot origins.
+ Add ability to pvmove non-clustered RAID, mirror, and thin volumes.
+ Make lvm2-activation-generator silent unless it's in error state.
+ Remove "mpath major is not dm major" msg for mpath component scan (2.02.94).
+ Prevent cluster mirror logs from being corrupted by redundant checkpoints.
+ Fix ignored lvmetad update on loop device configuration (2.02.99).
+ Use LVM_PATH instead of hardcoded value in lvm2 activation systemd generator.
+ Fix vgck to notice on-disk corruption even if lvmetad is used.
+ Move mpath device filter before partitioned filter (which opens devices).
+ Split partitioned filter out of lvm_type filter.
+ Merge filter*.h into a single filter.h.
+ Require confirmation for vgchange -c when no VGs listed explicitly.
+ Also skip /var and /var/log by default in blkdeactivate when unmounting.
+ Add support for bind mounts in blkdeactivate.
+ Add blkdeactivate -v/--verbose for debug output from external tools used.
+ Add blkdeactivate -e/--errors for error messages from external tools used.
+ Suppress messages from external tools called in blkdeactivate by default.
+
+Version 2.02.100 - 13th August 2013
+===================================
+ Fix inability to remove a VG's cluster flag if it contains a mirror.
+ Suppress arg: prefix in log_sys_error macro when arg is empty string.
+ Fix bug making lvchange unable to change recovery rate for RAID.
+ Prohibit conversion of thin pool to external origin.
+ Workaround gcc v4.8 -O2 bug causing failures if config/checks=1 (32bit arch).
+ Verify clvmd message validity before processing and log error if incorrect.
+ When creating PV on existing LV don't forbid reserved LV names on LVs below.
+ Split out device_is_suspended_or_blocking from device_is_usable.
+ When converting mirrors, default segtype should be the same unless specified.
+ Make "raid1" the default mirror segment type.
+ Fix clogd descriptor leak when daemonizing.
+ Fix clvmd descriptor leak on restart.
+ Add pipe_open/close() to use instead of less efficient/secure popen().
+ Fix metadata area offset/size overflow if it's >= 4g and while using lvmetad.
+ Inherit and apply any profile attached to a VG if creating new thin pool.
+ Add initial support thin pool lvconvert --repair.
+ Add --with-thin-repair and --with-thin-dump configure options.
+ Add lvm.conf thin_repair/dump_executable and thin_repair_options.
+ Require 1.9 thin pool target version for online thin pool metadata resize.
+ Ignore previous LV seg with alloc contiguous & cling when num stripes varies.
+ Fix segfault if devices/global_filter is not specified correctly.
+
+Version 2.02.99 - 24th July 2013
+================================
+ Do not zero init 4KB of thin snapshot for non-zeroing thin pool (2.02.94).
+ Issue an error msg if lvconvert --type used incorrectly with other options.
+ Use LOG_DEBUG/ERR msg severity instead default for lvm2-activation-generator.
+ Support ARG_GROUPABLE with merge_synonym (for --raidwritemostly).
+ Fix segfault when reporting raid_syncaction for older kernels.
+ Add LV report fields: raid_mismatch_count/raid_sync_action/raid_write_behind.
+ Add LV reporting fields raid_min_recovery_rate, raid_max_recovery_rate.
+ Add sync_percent as alias for copy_percent LV reporting field.
+ Add lv_ prefix to modules reporting field.
+ Use units B or b (never E) with no decimal places when displaying sizes < 1k.
+ Add support for poolmetadataspare LV, that will be used for pool recovery.
+ Improve activation order when creating thin pools in non-clustered VG.
+ List thin-pool and thin modules for thin volumes.
+ Correct thin creation error paths.
+ Use local activation for clearing snapshot COW device.
+ Add lvm2-activation-net systemd unit to activate LVs on net-attached storage.
+ Release memory allocated with _cached_info().
+ Add whole log_lv and metadata_lv sub volumes when creating partial tree.
+ Properly use snapshot layer for origin which is also thin volume.
+ Avoid generating metadata backup when calling update_pool_lv().
+ Send thin messages also for active thin pool and inactive thin volume.
+ Add activation/auto_set_activation_skip to control activation skip flagging.
+ Add 's(k)ip activation' bit to lvs -o lv_attr to indicate skip flag attached.
+ Add --ignoreactivationskip to lvcreate/vgchange/lvchange to ignore skip flag.
+ Add --setactivationskip to lvcreate/lvchange to set activation skip flag.
+ Automatically flag thin snapshots to be skipped during activation.
+ Add support for persistent flagging of LVs to be skipped during activation.
+ Add --type profilable to lvm dumpconfig to show profilable config settings.
+ Add --mergedconfig to lvm dumpconfig for merged --config/--profile/lvm.conf.
+ Relase memory and unblock signals in lock_vol error path.
+ Define LVM2_* command errors in lvm2cmd.h and use in dmeventd plugins.
+ Move errors.h to tools dir.
+ Add man page entries for profile configuration and related options.
+ Improve error loging when user tries to interrupt commands.
+ Rename _swap_lv to _swap_lv_identifiers and move to allow an additional user.
+ Rename snapshot segment returning methods from find_*_cow to find_*_snapshot.
+ liblvm/python API: Additions: PV create/removal/resize/listing
+ liblvm/python API: Additions: LV attr/origin/Thin pool/Thin LV creation
+ Add vgs/lvs -o vg_profile/lv_profile to report profiles attached to VG/LV.
+ Add default.profile configuration profile and install it on make install.
+ Create a new 'conf' subdir for configuration files including profiles.
+ Make selected thinp settings customizable by a profile.
+ Support changing VG/LV profiles: vgchange/lvchange --profile/--detachprofile.
+ Support storing profile name in metadata for both VGs and LVs.
+ Add new --profile command line arg to select a configuration profile for use.
+ Add config/profile_dir to set working directory to load profiles from.
+ Add configure --with-default-profile-subdir to select dir to keep profiles in.
+ Add support for configuration profiles.
+ Introduce config_source wrapper for identification of configuration sources.
+ Avoid creation of multiple archives for one command.
+ Use mirror_segtype_default if type not specified for linear->mirror upconvert.
+ Fix use of too big chunks of memory when communication with lvmetad.
+ Fix vgcfgrestore crash when specified incorrect vg name.
+ Refine lvm.conf and man page documentation for autoactivation feature.
+ Add support for thin volumes in vgsplit.
+ Also filter partitions on mpath components if multipath_component_detection=1.
+ Add lvresize support for online thin pool metadata volume resize.
+ Add helper functions find_pool_lv() and pool_can_resize_metadata().
+ Add detection for thin pool metadata resize kernel support.
+ Report lvs volume type 'e' with higher priority.
+ Report lvs volume type 'o' also for external origin volumes.
+ Report lvs target type 't' only for thin pools and thin volumes.
+ Fix test for active snapshot in cluster before resizing it.
+ Allow local activation to receive a locally-supplied LV struct.
+ Add vg->vg_ondisk / lv_ondisk() holding committed metadata.
+ Report backtrace from dump filter error path.
+ Do not use persistent filter with lvmetad.
+ Composable persistent filter functionality for global filter.
+ Override system's global_filter settings for vgimportclone.
+ Detect maximum usable size for snapshot for lvresize.
+ Creation of snapshot takes at most 100% origin coverage.
+ Add cow_max_extents() to calc extents for 100% origin coverage.
+ For creation of snapshot require size for at least 3 chunks.
+ Fix lvresize --use-policies of VALID but 100% full snapshot.
+ Do not accept size parameters bigger then 16EiB.
+ Fix release of PV's fid in free_pv_fid().
+ Skip monitoring of snapshots that are already bigger then origin.
+ Add lv_is_cow_covering_origin() to check if cow covers origin size.
+ Use libdm dm_get_status_snapshot() to parse snapshot status.
+ Add detection of mounted fs also for vgchange deactivation.
+ Replace 'lv_is_active' with more correct/specific variants (e.g. *_locally).
+ Refuse to init a snapshot merge in lvconvert if there's no kernel support.
+ Fix exported symbols regex for non-GNU busybox sed.
+ Accept --yes in all commands so test scripts can be simpler.
+ Fix alignment of PV data area if detected alignment less than 1 MB (2.02.74).
+ Fix memory resource leak in memlocking error path.
+ Fix premature DM version checking which caused useless mapper/control access.
+ Add "active" LV reporting field to show activation state.
+ Add "monitor" segment reporting field to show dmevent monitoring status.
+ Document lvextend --use-policies option in man.
+ Fix creation and removal of clustered snapshot.
+ Fix clvmd caching of metadata when suspending inactive volumes.
+ Find newest timestamp of merged config files.
+ Fix assignment order for vg fid for lvm1 and pool format.
+ Fix memleak in dmeventd thin plugin in device list obtaining err path.
+ Add explicit message about unsupported pvmove for thin/thinpool volumes.
+ Fix lvmetad error path in lvmetad_vg_lookup() for null vgname.
+ Fix clvmd _cluster_request() return code in memory fail path.
+ Add lvcreate/lvchange --[raid]{min|max}recoveryrate for raid LVs.
+ Add lvchange --[raid]writemostly/writebehind support for RAID1
+ Add lv_change_activate() for common activation code in vg/lvchange.
+ Add lvchange --[raid]syncaction for scrubbing of RAID LVs.
+ Improve RAID kernel status retrieval to include sync_action/mismatch_cnt.
+ Add external origin support for lvcreate.
+ Improve lvcreate, lvconvert and lvm man pages.
+ Clean up format1 PV write to remove a need for an orphan VG for it to pass.
+ Fix vgextend to not allow a PV with 0 MDAs to be used while already in a VG.
+ Move update_pool_params() from /tools to /lib for better reuse.
+ Give precedence to EMC power2 devices with duplicate PVIDs.
+ Add --validate option to lvm dumpconfig to validate current config on demand.
+ Add --ignoreadvanced and --ignoreunsupported switch to lvm dumpconfig.
+ Add --withcomments and --withversions switch to lvm dumpconfig.
+ Add --type {current|default|missing|new} and --atversion to lvm dumpconfig.
+ Support automatic config validation and add 'config' section to lvm.conf.
+ Add pvs -o pv_ba_start,pv_ba_size to report bootloader area start and size.
+ Add --bootloaderareasize to pvcreate and vgconvert to create bootloader area.
+ Add PV header extension: extension version, flags and bootloader areas.
+ Initial support for lvconvert of thin external origin.
+ Add _lv_remove_segs_using_this_lv() for removal of dependent lvs.
+ Improve activation code for better support of stacked devices.
+ Add _add_layer_target_to_dtree() for adding linear layer into dtree.
+ Extend _cached_info() to accept layer string.
+ vgimport '--force' now allows import of VGs with missing PVs.
+ Fix PV alignment to incorporate alignment offset if the PV has zero MDAs.
+ Add global/raid10_segtype_default to lvm.conf.
+ Allow removal or replacement of RAID LV components that are error segments.
+ Make 'vgreduce --removemissing' able to handle RAID LVs with missing PVs.
+ Accept activation/raid_region_size in preference to mirror_region_size config.
+ Fix pvs -o pv_free reporting for PVs with zero PE count.
+ Fix missing cleanup of flags when the LV is detached from pool.
+ Fix check for some forbidden discards conversion of thin pools.
+ Add pool_is_active() to check for any pool related active LV.
+ Report blank origin_size field if the LV doesn't have an origin instead of 0.
+ Do not take a free lv name argument for lvconvert --thinpool option.
+ Avoid flushing thin pool when just requesting transaction_id.
+ Add internal function lv_layer() to obtain layer name for LV.
+ Report partial and in-sync RAID attribute based on kernel status
+ Fix blkdeactivate to handle nested mountpoints and mangled mount paths.
+ Use LC_ALL to set locale in daemons and fsadm instead of lower priority LANG.
+ Avoid crash-inducing race in lvmetad when VG disappears during rename.
+ Add log/debug_classes to lvm.conf to control debug log messages.
+ Synchronize with udev in pvscan --cache and fix dangling udev_sync cookies.
+ Fix autoactivation to not autoactivate VG/LV on each change of the PVs used.
+ Limit RAID device replacement to repair only if LV is not in-sync.
+ Disallow RAID device replacement or repair on inactive LVs.
+ Fix possible race while removing metadata from lvmetad.
+ Fix possible deadlock when querying and updating lvmetad at the same time.
+ Check lvmcache_info_from_pvid and recall only when needed in _pv_read.
+ Check for memory failure of dm_config_write_node() in lvmetad.
+ Fix socket leak on error path in lvmetad's handle_connect.
+ Check for failing id_read_format() in _pv_populate_lvmcache.
+ Fix memleak on error path for lvmetad's pv_found.
+ Unlock vg mutex in error path when lvmetad tries to lock_vg.
+ Detect key string duplication failure in config_make_nodes_v in libdaemon.
+ Detect fid creation failure in _scan_file in format_text.
+ Log output also to syslog when abort_on_internal_error is set.
+ Add LV snapshot support to liblvm and python-lvm.
+ Avoid a global lock in pvs when lvmetad is in use.
+ Fix crash in pvscan --cache -aay triggered by non-mda PV.
+ Allow lvconvert --stripes/stripesize only with --mirrors/--repair/--thinpool.
+ Fix memleak in device_is_usable mirror testing function.
+ Do not ignore -f in lvconvert --repair -y -f for mirror and raid volumes.
+ Disallow pvmove on RAID LVs until they are addressed properly
+ Allow empty activation/{auto_activation|read_only|}_volume_list config option.
+ Add lvm.conf option global/thin_disabled_features.
+ Add lvconvert support to swap thin pool metadata volume.
+ Implement internal function detach_pool_metadata_lv().
+ Fix lvm2app to return all property sizes in bytes (not sectors).
+ Recognize DM_DISABLE_UDEV environment variable for a complete fallback.
+ Do not verify udev operations if --noudevsync command option is used.
+ Fix lvm2app and return lvseg discards property as string.
+ Allow vgcfgrestore of lvm2 metadata with thin volumes if --force is used.
+ Recognise Storage Class Memory (IBM S/390) devices in filter.
+ Recognise STEC skd devices in filter.
+ Recognise Violin Memory vtms devices in filter.
+ Add lvm.conf thin pool allocation settings thin_pool_{chunk_size|discards|zero}.
+ Support discards for non-power-of-2 thin pool chunks.
+ Automatically restore MISSING PVs with no MDAs.
+ When no --stripes argument is given when creating a RAID10 volume, default to 2 stripes.
+ Do not allow lvconvert --splitmirrors on RAID10 logical volumes.
+ Skip mlocking [vectors] on arm architecture.
+ Support allocation of pool metadata with lvconvert command.
+ Move common functionality for thin lvcreate and lvconvert to toollib.
+ Repair a mirrored log before the mirror itself when both fail.
+ Add python-lvm unit test case
+ Exit pvscan --cache immediately if cluster locking used or lvmetad not used.
+ Don't use lvmetad in lvm2-monitor.service ExecStop to avoid a systemd issue.
+ Remove dependency on fedora-storage-init.service in lvm2 systemd units.
+ Depend on lvm2-lvmetad.socket in lvm2-monitor.service systemd unit.
+ Hardcode use_lvmetad=0 if cluster locking used and issue a warning msg.
+ Avoid trying to read a mirror that has a failed device in its mirrored log.
+ Relax ignore_suspended_devices to read from mirrors that don't have a device marked failed.
+ Change lvs heading Copy% to Cpy%Sync and print RAID4/5/6 sync% there too.
+ Fix clvmd support for option -d and properly use its argument.
+ Support use of option --yes for lvchange --persistent.
+ Fix memory leak on error path for pvcreate with invalid uuid.
+ Implement ref-counting for parents in python lib.
+ Add lv_is_active_locally and use instead of most local lv_info calls.
+ Reduce some log_error messages to log_warn where we don't fail.
+ Remove python liblvm object. systemdir can only be changed using env var now.
+
+Version 2.02.98 - 15th October 2012
+===================================
+ Switch from DEBUG() to DEBUGLOG() in lvmetad as -DDEBUG is already used.
+ Prohibit not yet supported change of thin-pool to read-only.
+ Support creation of read-only thin volumes (lvcreate -p r).
+ Using autoextend percent 0 for thin pool fails 'lvextend --use-policies'.
+ Introduce blkdeactivate script to deactivate block devs with dependencies.
+ Implement devices/global_filter to hide devices from lvmetad.
+ Make vgscan --cache an alias for pvscan --cache.
+ Clear lvmetad metadata/PV cache before a rescan.
+ Fix a segmentation fault upon receiving a corrupt lvmetad response.
+ Give inconsistent metadata warnings in pvscan --cache.
+ Make lvremove ask before discarding data areas.
+ Avoid overlapping locks that could cause a deadlock in lvmetad.
+ Fix memory leaks in libdaemon and lvmetad.
+ Optimize libdaemon logging for a fast no-output path.
+ Only create lvmetad pidfile when running as a daemon (no -f).
+ Warn if lvmetad is running but disabled.
+ Warn about running lvmetad with use_lvmetad = 0 in example.conf.
+ Update lvmetad help output (flags and their meaning).
+ Make pvscan --cache read metadata from LVM1 PVs.
+ Make libdaemon buffer handling asymptotically more efficient.
+ Add lvmdump -l, to collect a state dump from lvmetad.
+ Make --sysinit suppress lvmetad connection failure warnings.
+ Prohibit usage of lvcreate --thinpool with --mirrors.
+ Fix lvm2api origin reporting for thin snapshot volume.
+ Add configure --enable-python_bindings for liblvm2app to new python subdir.
+ Add implementation of lvm2api function lvm_percent_to_float.
+ Allow non power of 2 thin chunk sizes if thin pool driver supports that.
+ Allow limited metadata changes when PVs are missing via [vg|lv]change.
+ Do not start dmeventd for lvchange --resync when monitoring is off.
+ Remove pvscan --cache from lvm2-lvmetad init script.
+ Remove ExecStartPost with pvscan --cache from lvm2-lvmetad.service.
+ Report invalid percentage for property snap_percent of non-snaphot LVs.
+ Disallow conversion of thin LVs to mirrors.
+ Fix lvm2api data_percent reporting for thin volumes.
+ Do not allow RAID LVs in a clustered volume group.
+ Add --discards to lvconvert.
+ Add --poolmetadata to lvconvert and support thin meta/data dev stacking.
+ Support changes of permissions for thin snapshot volumes.
+ Enhance insert_layer_for_lv() with recursive rename for _tdata LVs.
+ Skip building dm tree for thin pool when called with origin_only flag.
+ Add internal lv_rename_update() to rename LV without updating mda.
+ Ensure descriptors 0,1,2 are always available, using /dev/null if necessary.
+ Use /proc/self/fd when available for closing opened descriptors efficiently.
+ Add missing pkg init with --enable-testing in configure.in (2.02.71).
+ Fix inability to create, extend or convert to a large (> 1TiB) RAID LV.
+ Split out daemon-io from daemon-shared and always build libdaemonclient.
+ Update lvmetad communications to cope with clients using different filters.
+ Add (p)artial attribute to lvs.
+ Don't try to issue discards to a missing PV to avoid segfault.
+ Clear LV_NOSYNCED flag when a RAID1 LV is converted to a linear LV.
+ Disallow RAID1 upconvert if the LV was created with --nosync.
+ Depend on systemd-udev-settle in units generated by activation generator.
+ Fix vgchange -aay not to activate non-matching LVs that follow a matching LV.
+ Fix lvchange --resync for RAID LVs which had no effect.
+ Restructure mirror resync code.
+ Disallow addition of RAID images until the array is in-sync.
+ Fix RAID LV creation with '--test' so valid commands do not fail.
+ Add lvm_lv_rename() to lvm2api.
+ Fix setvbuf code by closing and reopening stream before changing buffer.
+ Disable private buffering when using liblvm.
+ When private stdin/stdout buffering is not used always use silent mode.
+ Add log/silent to lvm.conf equivalent to -qq.
+ Suppress non-essential stdout with -qq.
+ Switch non-essential log_print messages to log_print_unless_silent.
+ Use -q as short form of --quiet.
+ Add RAID10 support (--type raid10).
+ Reuse _reload_lv() in more lvconvert functions.
+ Fix 32-bit device size arithmetic needing 64-bit casting throughout tree.
+ Remove numerous unnecessary #includes and the empty util.c.
+ Fix dereference of NULL in lvmetad error path logging.
+ Fix buffer memory leak in lvmetad logging.
+ Add support for lvcreate --discards.
+ Correct the discards field in the lvs manpage (2.02.97).
+ Use proper condition to check for discards settings unsupported by kernel.
+ Reinstate correct default to ignore discards for thin metadata from old tools.
+ Issue error message when -i and -m args do not match specified RAID type.
+ Change lvmetad logging syntax from -ddd to -l {all|wire|debug}.
+ Add new libdaemon logging infrastructure.
+
+Version 2.02.97 - 7th August 2012
+=================================
+ Improve documention of allocation policies in lvm.8.
+ Increase limit for major:minor to 4095:1048575 when using -My option.
+ Add make install_systemd_generators.
+ Add generator for lvm2 activation systemd units.
+ Add lvm_config_find_bool lvm2app fn to retrieve bool value from config tree.
+ Respect --test when using lvmetad.
+ No longer capitalise first LV attribute char for invalid snapshots.
+ Allow vgextend to add PVs to a VG that is missing PVs.
+ Recognise Micron PCIe SSDs in filter and move array out to device-types.h.
+ Fix dumpconfig <node> to print only <node> without its siblings. (2.02.89)
+ Do not issue "Failed to handle a client connection" error if lvmetad killed.
+ Support lvchange --discards and -Z with thin pools.
+ Add discard LV segment field to reports.
+ Add --discards to lvcreate --thin.
+ Set discard and external snapshot features if thin pool target is vsn 1.1+.
+ Count percentage of completeness upwards not downwards when merging snapshot.
+ Skip activation when using vg/lvchange --sysinit -a ay and lvmetad is active.
+ Fix extending RAID 4/5/6 logical volumes
+ Fix test for PV with unknown VG in process_each_pv to ignore ignored mdas.
+ Update man pages with --activate ay option and auto_activation_volume_list.
+ Fix _alloc_parallel_area to avoid picking already-full areas for raid devices.
+ Use vgchange -aay instead of vgchange -ay in clmvd init script.
+ Add activation/auto_activation_volume_list to lvm.conf.
+ Add --activate ay to lvcreate, lvchange, pvscan and vgchange.
+ Add support for volume autoactivation using lvmetad.
+ Add --activate synonym for --available arg and prefer --activate.
+ Never issue discards when LV extents are being reconfigured, not deleted.
+ Allow release_lv_segment_area to fail as functions it calls can fail.
+ Open device read-only instead of read-write when obtaining readahead value.
+ Fix lvconvert thin pool error path NULL pointer dereference.
+ Detect create_instance() failure in pvscan_lvmetad_single().
+ Use 64-bit calculations for reserved memory and stack.
+ Fix missing sync of filesystem when creating thin volume snapshot.
+
+Version 2.02.96 - 8th June 2012
+===============================
+ Upstream source repo now fedorahosted.org git not sources.redhat.com CVS.
+ Fix error paths for regex filter initialization.
+ Re-enable partial activation of non-thin LVs until it can be fixed. (2.02.90)
+ Fix alloc cling to cling to PVs already found with contiguous policy.
+ Fix cling policy not to behave like normal policy if no previous LV seg.
+ Fix allocation loop not to use later policies when --alloc cling without tags.
+ Append _TO_LVSEG to names of internal A_CONTIGUOUS and A_CLING flags.
+ Add missing pkg init --with-systemdsystemunitdir in configure.in (2.02.92).
+ Fix division by zero if PV with zero PE count is used during vgcfgrestore.
+ Add initial support for thin pool lvconvert.
+ Fix lvrename for thin volumes (regression in for_each_sub_lv). (2.02.89)
+ Fix up-convert when mirror activation is controlled by volume_list and tags.
+ Warn of deadlock risk when using snapshots of mirror segment type.
+ Fix bug in cmirror that caused incorrect status info to print on some nodes.
+ Remove statement that snapshots cannot be tagged from lvm man page.
+ Disallow changing cluster attribute of VG while RAID LVs are active.
+ Fix lvconvert error message for non-mergeable volumes.
+ Allow subset of failed devices to be replaced in RAID LVs.
+ Prevent resume from creating error devices that already exist from suspend.
+ Improve clmvd singlenode locking for better testing.
+ Update and correct lvs man page with supported column names.
+ Handle replacement of an active device that goes missing with an error device.
+ Change change raid1 segtype always to request a flush when suspending.
+ Add udev info and context to lvmdump.
+ Add lvmetad man page.
+ Fix RAID device replacement code so that it works under snapshot.
+ Fix inability to split RAID1 image while specifying a particular PV.
+ Update man pages to give them all the same look&feel.
+ Fix lvresize of thin pool for striped devices.
+ For lvresize round upward when specifying number of extents.
+ For lvcreate with %FREE support rounding downward stripe alignment.
+ Change message severity to log_very_verbose for missing dev info in udev db.
+ Fix lvconvert when specifying removal of a RAID device other than last one.
+ Fix ability to handle failures in mirrored log in dmeventd plugin. (2.02.89)
+ Fix unlocking volume group in vgreduce in error path.
+ Cope when VG name is part of the supplied name in lvconvert --splitmirrors -n.
+ Fix exclusive lvchange running from other node. (2.02.89)
+ Add 'vgscan --cache' functionality for consistency with 'pvscan --cache'.
+ Keep exclusive activation in pvmove if LV is already active.
+ Disallow exclusive pvmove if some affected LVs are not exclusively activated.
+ Remove unused and wrongly set cluster VG flag from clvmd lock query command.
+ Fix pvmove for exclusively activated LV pvmove in clustered VG. (2.02.86)
+ Always free hash table on update_pvid_to_vgid() in lvmetad.
+ Update and fix monitoring of thin pool devices.
+ Check hash insert success in lock_vg in clvmd.
+ Check for buffer overwrite in get_cluster_type() in clvmd.
+ Fix global/detect_internal_vg_cache_corruption config check.
+ Update lcov Makefile target to support all dmeventd plugins.
+ Fix initializiation of thin monitoring. (2.02.92)
+ Cope with improperly formatted device numbers in /proc/devices. (2.02.91)
+ Exit if LISTEN_PID environment variable incorrect in lvmetad systemd handover.
+ Use pvscan --cache instead of vgscan in lvmetad scripts.
+ Fix fsadm propagation of -e option.
+ Fix fsadm parsing of /proc/mounts files (don't check for substrings).
+ Fix fsadm usage of arguments with space.
+ Fix arg_int_value alongside ARG_GROUPABLE --major/--minor for lvcreate/change.
+ Fix name conflicts that prevent down-converting RAID1 when specifying a device
+ Improve thin_check option passing and use configured path.
+ Add --with-thin-check configure option for path to thin_check.
+ Fix error message when pvmove LV activation fails with name already in use.
+ Better structure layout for device_info in dev_subsystem_name().
+ Change message severity for creation of VG over uninitialised devices.
+ Fix error path for failed toolcontext creation.
+ Detect lvm binary path in lvmetad udev rules.
+ Don't unlink socket on lvmetad shutdown if instantiated from systemd.
+ Restart lvmetad automatically from systemd if it exits from uncaught signal.
+ Fix warn msg for thin pool chunk size and update man for chunksize. (2.02.89)
+
+Version 2.02.95 - 6th March 2012
+================================
+ If unspecified, adjust thin pool metadata and chunk size to fit into 128MB.
+ Print just warning on thin pool check callback path for failing check.
+ Always use 64bit arithmetic with VG extent_size expression.
+ Validate udev structures in _insert_udev_dir().
+ Take repeatable --major --minor with pvscan --cache instead of major:minor.
+ Scan all devices for lvmetad if 'pvscan --cache' used without device list.
+ Populate lvmcache from lvmetad before displaying PVs in pvscan. (2.02.94)
+ Suppress incorrect -n pvscan warning now always displayed. (2.02.94)
+
+Version 2.02.94 - 3rd March 2012
+================================
+ Add support to execute thin_check with each de/active of thin pool.
+ Fix automatic estimation of metadata device size for thin pool.
+ Test for alloc fail from _alloc_pv_segment() in _extend_pv().
+ Check for alloc fail from get_segtype_from_string() in _lvcreate_params().
+ Add _rimage as reserved suffix to lvm.8 man page.
+ Improve error logging from mpath filter.
+ Check for allocation failure in hold_lock() in clvmd.
+ Use set_lv() (wipe initial 4KiB) for non zeroed thin volume.
+ Allow cluster mirrors to handle the absence of the checkpoint lib (libSaCkpt).
+ Revert free of allocated segtype in init segment error path (2.02.89).
+ Test dm_hash_insert() failures in filter-persistent.c and fid_add_mda().
+ Ensure clvmd message is always NUL-terminated after read.
+ Add some close() and dev_close() error path backtraces.
+ Set stdin/stdout/stderr to /dev/null for polldaemon.
+ Limit the max size of processed clvmd message to ~8KB.
+ Do not send uninitialised bytes in cluster error reply messages.
+ Use unsigned type for bitmask instead of enum type for lvm properties.
+ Add missing cleanup of excl_uuid hash on some exit paths of clvmd.
+ Check for existence of vg_name in _format1/_pool_vg_read().
+ Fix missing break in _format_pvsegs (2.02.92).
+ Test seg pointer for non-null it in raid_target_percent error path.
+ Check for errors in _init_tags() during config loading.
+ Always check result of _set_vg_name() in lvcreate.
+ Drop unused call to uname() during clvmd initialization.
+ Test allocation result in sysfs filter creation.
+ Limit sscanf parameters with buffer size in clvmd get_initial_state().
+ Use const lv pointer for lv_is_active...() functions.
+ Use same signed numbers in _mirrored_transient_status().
+ Support 'pvscan --cache' to update lvmetad state from specific PVs.
+ Provide new metadata daemon for testing with configure --enable-lvmetad .
+ Integrate client-side lvmetad into build.
+
+Version 2.02.93 - 23rd February 2012
+====================================
+ Require number of stripes to be greater than parity devices in higher RAID.
+ Fix allocation code to allow replacement of single RAID 4/5/6 device.
+ Check all tags and LV names are in a valid form in vg_validate.
+ Add tmpfiles.d style configuration for lvm2 lock and run directory.
+ Add configure --with-tmpfilesdir for dir holding volatile-file configuration.
+ Allow 'lvconvert --repair' to operate on RAID 4/5/6.
+ Fix build_parallel_areas_from_lv to account correctly for raid parity devices.
+ Print message when faulty raid devices have been replaced.
+
+Version 2.02.92 - 20th February 2012
+====================================
+ Read dmeventd monitoring config settings for every lvm command.
+ For thin devices, initialize monitoring only for thin pools not thin volumes.
+ Make conversion from a synced 'mirror' to 'raid1' not cause a full resync.
+ Properly test buffer for unit check in units_to_bytes().
+ Add configure --with-systemdsystemunitdir.
+ Add check for allocation failure in _build_matcher().
+ Add check for rimage name allocation failure in _raid_add_images().
+ Add check for mda_copy failure in _text_pv_setup().
+ Add check for _mirrored_init_target failure.
+ Add free_orphan_vg.
+ Skip pv/vg_set_fid processing if the fid is same.
+ Check for foreach loop errors in _vg_read_orphans() (2.02.91).
+ Clean error paths for format instance creation (2.02.91).
+ Release vg in error path of _format1_vg_read() instead of just free().
+ Report allocation failure for allocation of PV structure.
+ Add clvmd init dependency on dlm service when running with new corosync.
+
+Version 2.02.91 - 12th February 2012
+====================================
+ Remove PV-based format instances (which are no longer needed).
+ Link all orphan PVs directly to a per-format global orphan VG.
+ Refactor lvmcache around an internal API.
+ Stop processing lvextend if trying to extend a mirror that is being recovered.
+ Add pool_below_threshold() function to check thin pool percent status.
+ Fix test for snap percent for failing merge when removing LV.
+ Switch int to void return for str_list_del().
+ Fix error path handling in _build_desc().
+ Add range test for device number in _scan_proc_dev().
+ Use signed long for sysconf() call in cmirrord.
+ Do not write in front of log buffer in print_log().
+ Add boundary test for number of mirror devs and logs.
+ Check that whole locking_dir fits _lock_dir buffer in init_file_locking().
+ Use list functions for label_exit().
+ Ensure strncpy() function always ends with '\0'.
+ Set status in _fsadm_cmd() for error path.
+ Add missing deps for lvm2api for rebuild when lvm-internal is changed.
+ Fix resource leaks for failing allocation of formats (lvm1/2,pool).
+ Release allocated resources in error path for composite_filter_create().
+ Do not use lstat() results when failed in _rm_link().
+ Remove a "waiting for another thread" log message from dmeventd plugins.
+
+Version 2.02.90 - 1st February 2012
+===================================
+ sync_local_dev_names before (re)activating mirror log for initialisation.
+ Disable partial activation for thin LVs and LVs with all missing segments.
+ Do not print warning for pv_min_size between 512KB and 2MB.
+ Clean up systemd unit ordering and requirements.
+ Fix lcov reports when srcdir != builddir.
+ Allow ALLOC_NORMAL to track reserved extents for log and data on same PV.
+ Automatically detect whether corosync clvmd needs to use confdb or cmap.
+ Fix data% report for thin volume used as origin for non-thin snapshot.
+
+Version 2.02.89 - 26th January 2012
+===================================
+ Add missing check for uname result in clvmd TEST processing.
+ Fix memleak in target_version() error path (unsupported LIST_VERSIONS).
+ Limit data_alignment and data_alignment_offset to 32bit values.
+ Check for correctness of uint64 dev_size value in format_text.
+ Thin pools have segment fields thin_count, zero, transaction_id.
+ Add data_percent and metadata_percent for thin pools to lvs -v.
+ Add data_lv & metadata_lv fields to lvs for thin pools.
+ Add data_percent & pool_lv fields to lvs for thin volumes.
+ Rename origin_only parm to use_layer for lv_info and use with thin LVs.
+ Add lv_thin_pool_transaction_id to read the transaction_id value.
+ Use {suspend,resume}_origin_only when up-converting RAID, as mirrors do.
+ Always add RAID metadata LVs to deptree (even when origin_only is set).
+ Change exclusive LV activation logic to try local node before remote nodes.
+ Add CLVMD_FLAG_REMOTE to skip processing on local node.
+ Prompt if request is made to remove a snapshot whose "Merge failed".
+ Allow removal of an invalid snapshot that was to be merged on next activation.
+ Don't allow a user to merge an invalid snapshot.
+ Use m and M lv_attr to indicate that a snapshot merge failed in lvs.
+ Differentiate between snapshot status of "Invalid" and "Merge failed".
+ Report snapshot usage percent of origin volume when a snapshot is merging.
+ Require global/lvdisplay_shows_full_device_path for (bogus) lvm1-style paths.
+ Do not report linear segtype for non-striped targets.
+ Record creation host & time for each LV and report as lv_time & lv_host.
+ Make error message hit when preallocated memlock memory exceeded clearer.
+ Use R lv_attr to indicate read-only activation of non-read-only device in lvs.
+ Show read-only activation override in lvdisplay & add 4 to perms in -c.
+ Add activation/read_only_volume_list to override LV permission in metadata.
+ Give priority to emcpower devices with duplicate PVIDs.
+ Add check for error in _adjust_policy_params() (lvextend --use-policies).
+ Round specified percentages upwards (%LV, %VG...) when resizing LVs.
+ Use dmeventd_lvm2_command in dmeventd plugins snapshot, raid, mirror.
+ Add helper dmeventd_lvm2_command() to libdevmapper-event-lvm2 library.
+ Update documentation for dmeventd.
+ Remove unnecessary stat before opening device in dev_open_flags.
+ Reduce number of lstat calls when selecting device alias.
+ Add _dev_init to initialize common struct device members.
+ Always zalloc struct device during initialization.
+ Fix missing thread list manipulation protection in dmeventd.
+ Do not derefence lv pointer in _percent_run() function before NULL check.
+ Allow empty strings for description and creation_host config fields.
+ Issue deprecation warning when removing last lvm1-format snapshot.
+ Reinstate support for snapshot removal with lvm1 format. (2.02.86)
+ Add policy-based automated repair of RAID logical volumes.
+ Don't allow two images to be split and tracked from a RAID LV at one time.
+ Don't allow size change of RAID LV that is tracking changes for a split image.
+ Don't allow size change of RAID sub-LVs independently.
+ Don't allow name change of RAID LV that is tracking changes for a split image.
+ Do not allow users to change the name of RAID sub-LVs independently.
+ Do not allow users to change permissions on RAID sub-LVs.
+ Allow lvconvert to replace specified devices in a RAID array.
+ Add activation/use_linear_target enabled by default.
+ Use gcc warning options only with .c to .o compilation.
+ Move y/n prompts to stderr and repeat if response has both 'n' and 'y'.
+ Replace the unit testing framework with CUnit (--enable-testing).
+ Fix dmeventd snapshot monitoring when multiple extensions were involved.
+ Don't ignore configure --mandir and --infodir.
+ Drop pool memory allocated within lv_has_target_type().
+ Reduce stack allocation of some PATH_MAX sized char buffers.
+ Unlock memory before writing metadata.
+ Add query before removing snapshots when inactive snapshot origin is removed.
+ Allow changing availability state of snapshots.
+ Skip non-virtual snapshots for availability change for lvchange with vg name.
+ Skip adjusting mirror region size unless mirror or raid.
+ Reorder prompt conditions for removal of active volumes.
+ Avoid 'mda inconsistency' by properly registering UNLABELLED_PV flag.(2.02.86)
+ Fix --enable-static_link unless using --enable-dmeventd / --enable-udev_sync.
+ Move gentoo MAKEDEV to /sbin in lvm2create_initrd.
+ Add filter to avoid scan of device if it is part of active multipath.
+ Add missing default $LVM_VG_NAME usage for snapshots.
+ Avoid extent_count overflow with lvextend.
+ Add missing lvrename mirrored log recursion in for_each_sub_lv.
+ Improve lv_extend stack reporting.
+ Increase virtual segment size instead of creating multiple segment list.
+ Add last_seg(lv) internal function.
+ Support empty string for log/prefix.
+ Disallow mirrored logs for cluster mirrors. (2.02.72)
+ Don't print char type[8] as a plain string in pvck PV type.
+ Use vg memory pool implicitly for vg read.
+ Always use vg memory pool for allocated lv segment.
+ Remove extra 4kB buffer allocated on stack in print_log().
+ Make move_lv_segment non-static function and use dm_list function.
+ Pass exclusive LV locks to all nodes in the cluster.
+ Improve lvcreate chunksize man page description.
+ Improve man page style for lvcreate & lvs.
+ Avoid recursive calls to dmeventd in its LVM plugins.
+ Log dev name now returned to kernel for registering during cmirror CTR.
+ Fix lv_info open_count test for disabled verify_udev_operations. (2.02.86)
+ Simplify code for lvm worker thread in clvmd.
+ Use pthread_barrier to synchronize clvmd threads at startup.
+ Limit clvmd's thread size to 128KiB and ignore activation/reserved_stack.
+ Reduce default preallocated stack size to 64KiB.
+ Add check for access through NULL pointer when refresh_filter() fails.
+ Use pthread condition for SINGLENODE lock implementation.
+ Improve backtrace reporting for some dev_manager_ functions.
+ Change message severity to log_warn when symlink creation fails.
+ Add ability to convert mirror segtype to RAID1 segtype.
+ Add ability to convert from linear to RAID1.
+ Add ability to extend mirrors with '--nosync' option.
+ Fix splitmirror LV names to maintain consistent state in a cluster.
+ Apply appropriate udev flags when suspending/resuming mirror sub-LVs.
+ Fix vgsplit to handle mirrored logs.
+ Clarify multi-name device filter pattern matching explanation in lvm.conf.
+ Introduce revert_lv for better pvmove cleanup.
+ Replace incomplete pvmove activation failure recovery code with a message.
+ Abort if _finish_pvmove suspend_lvs fails instead of cleaning up incompletely.
+ Change suspend_lvs to call vg_revert internally.
+ Change vg_revert to void and remove superfluous calls after failed vg_commit.
+ Use execvp for CLVMD restart to preserve environment settings.
+ Restart CLVMD with same cluster manager.
+ Fix log_error() usage in raid and unknown segtype initialisation.
+ Improve testing Makefile.
+ Fix install_ocf make target when srcdir != builddir. (2.02.80)
+ Support env vars LVM_CLVMD_BINARY and LVM_BINARY in clvmd.
+ Fix restart of clvmd (preserve exlusive locks). (2.02.64)
+ Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE.
+ Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV.
+ Replace open_count check with holders/mounted_fs check on lvremove path.
+ Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg.
+ Cleanup restart clvmd code (no memory allocation, debug print passed args).
+ Add all exclusive locks to clvmd restart option args.
+ Always send the whole clvmd packet header in refresh commands.
+ Add missing error checks for some system calls in cmirrord.
+ Add missing log_error() to lvresize command when fsadm tool fails.
+ Add support for DM_DEV_DIR device path into fsadm script.
+ Support different PATH setting for fsadm script testing.
+ Surround all executed commands with quotes in fsadm script.
+ Fix missing '$' in test for content of "$LVM" in fsadm script.
+ Move debug message in exec_cmd after sync_local_dev_names.
+ Fix clvmd processing of invalid request on local socket.
+ Fix command line option decoding.
+ Reset LV status when unlinking LV from VG.
+ Fix overly-strict extent-count divisibility requirements for striped mirrors.
+ Fix rounding direction in lvresize when reducing volume size.
+ Fix possible overflow of size if %FREE or %VG is used.
+ Fix vgchange activation of snapshot with virtual origin.
+ Activate virtual snapshot origin exclusively (only on local node in cluster).
+ Fix lv_mirror_count to handle mirrored stripes properly.
+ Fix failure to down-convert a mirror to linear due to udev "dev open" conflict
+ Fix mirrored log creation when PE size is small: use log_size >= region_size.
+ Fix log size calculation when only a log is being added to a mirror.
+ Add 7th lv_attr char to show the related kernel target.
+ Terminate pv_attr field correctly. (2.02.86)
+ Fix 'not not' typo in pvcreate man page.
+ Improve man page style for fsadm, lvreduce, lvremove, lvrename & lvresize.
+ Support break for vgchange and vgrefresh operation.
+ Switch int to unsigned type for pvmetadatacopies for pv_create().
+ Replace :space: with [\t ] for awk in vgimportclone (not widely supported).
+ Begin using 64-bit status field flags.
+ Detect sscanf recovering_region input error in cmirrord pull_state().
+ Fix error path bitmap leak in cmirrord import_checkpoint().
+ Log unlink() error in cmirrord remove_lockfile().
+ Remove incorrect requirement for -j or -m from lvchange error message.
+ Fix unsafe table load when splitting off smaller mirror from a larger one.
+ Use size_t return type for text_vg_export_raw() and export_vg_to_buffer().
+ Add configure --enable-lvmetad for building the (experimental) LVMetaD.
+ Fix resource leak when strdup fails in _get_device_status() (2.02.85).
+ Directly allocate buffer memory in a pvck scan instead of using a mempool.
+ Add configure --with-thin for segtypes "thin" and "thin_pool".
+ Fix raid shared lib segtype registration (2.02.87).
+
+Version 2.02.88 - 19th August 2011
+==================================
+ Remove incorrect 'Breaking' error message from allocation code. (2.02.87)
+ Add lvconvert --merge support for raid1 devices split with --trackchanges.
+ Support lvconvert of -m1 raid1 devices to a higher number.
+ Add --trackchanges support to lvconvert --splitmirrors option for raid1.
+ Support splitting off a single raid1 rimage in lvconvert --splitmirrors.
+ Use sync_local_dev_names when reducing number of raid rimages in lvconvert.
+ Add -V as short form of --virtualsize in lvcreate.
+ Fix make clean not to remove Makefile. (2.02.87)
+
+Version 2.02.87 - 12th August 2011
+==================================
+ Fix make distclean to remove stray dmeventd and exported symbols files.
+ Add global/detect_internal_vg_cache_corruption to lvm.conf.
+ Use memory pool locking to check for corruption of internal VG structs.
+ Cache and share generated VG structs.
+ Fix possible format instance memory leaks and premature releases in _vg_read.
+ Suppress locking error messages in monitoring init scripts.
+ If pipe in clvmd fails return busy instead of using uninitialised descriptors.
+ Add ability to reduce the number of mirrors in raid1 arrays to lvconvert.
+ Add dmeventd plugin for raid.
+ Replace free_vg with release_vg and move it to vg.c.
+ Remove INCONSISTENT_VG flag from the code.
+ Remove lock from cache in _lock_vol even if unlock fails.
+ Initialise clvmd locks before lvm context to avoid open descriptor leaks.
+ Remove obsolete gulm clvmd cluster locking support.
+ Suppress low-level locking errors and warnings while using --sysinit.
+ Remove unused inconsistent_seqno variable in _vg_read().
+ Remove meaningless const type qualifiers on cast type.
+ Add test for fcntl error in singlenode client code.
+ Remove --force option from lvrename manpage.
+ Add global/mirror_segtype_default to pick md raid or dm mirror as default.
+ Add configure --with-raid for new segtype 'raid' for MD RAID 1/4/5/6 support.
+ Change DEFAULT_UDEV_SYNC to 1 so udev_sync is used if there is no config file.
+ Add systemd unit file to provide lvm2 monitoring.
+ Compare file size (as well as timestamp) to detect changed config file.
+
+Version 2.02.86 - 8th July 2011
+===============================
+ Remove unnecessary warning in pvcreate for MD linear devices.
+ Move snapshot removal activation logic into lib/activate.
+ Cope with a PV only discovered missing when creating deptree.
+ Abort operation if dm_tree_node_add_target_area fails.
+ Add activation/checks to lvm.conf to perform additional ioctl validation.
+ Always preload on suspend, even if no metadata changed (lvchange --refresh).
+ When suspending, automatically preload newly-visible existing LVs.
+ Teardown any stray devices with $COMMON_PREFIX during test runs.
+ Reinstate correct permissions when creating mirrors. [2.02.85]
+ Append 'm' attribute to pv_attr for missing PVs.
+ Annotate CLVMD_CMD_SYNC_NAMES in decode_cmd.
+ Remove enforcement of udev verification when using non-standard /dev location.
+ Keep an exclusive mirror non-clustered if reloaded e.g. during conversion.
+ Reject allocation if number of extents is not divisible by area count.
+ Fix cluster mirror creation to work with new mirror allocation algorithm.
+ Ignore activation/verify_udev_operations if dm kernel driver vsn < 4.18.
+ Add activation/verify_udev_operations to lvm.conf, disabled by default.
+ Call vg_mark_partial_lvs() before VG structure is returned from the cache.
+ Remove unused internal flag ACTIVATE_EXCL from the code.
+ Remove useless test of ACTIVATE_EXCL in lv_add_mirrors() clustered code path.
+ Add lv_activate_opts structure for activation (replacing activation flags).
+ Ignore inconsistent pre-commit metadata on MISSING_PV devs while activating.
+ Add proper udev library context initialization and finalization to liblvm.
+ Fix last snapshot removal to avoid table reload while a device is suspended.
+ Use dm_get_suspended_counter in replacement critical_section logic.
+ Downgrade critical_section errors to debug level until it is moved to libdm.
+ Fix ignored background polling default in vgchange -ay.
+ Fix pvmove activation sequences to avoid trapped I/O with multiple LVs.
+ Annotate critical section debug messages.
+ Fix reduction of mirrors with striped segments to always align to stripe size.
+ Validate mirror segments size.
+ Include lvmetad development code in tree.
+ Fix extent rounding for striped volumes never to reduce more than requested.
+ Fix create_temp_name to replace any '/' found in the hostname with '?'.
+ Always use append to file in lvmdump. selinux policy may ban file truncation.
+ Propagate test mode to clvmd to skip activation and changes to held locks.
+ Defer writing PV labels until vg_write.
+ Store label_sector only in struct physical_volume.
+ Permit --available with lvcreate so non-snapshot LVs need not be activated.
+ Report sector containing label in verbose message.
+ Clarify error message when unable to convert an LV into a snapshot of an LV.
+ Add and use dev_open_readonly and variations.
+ Do not log a superfluous stack message when the lv is properly processed.
+ Do not issue an error message when unable to remove .cache on read-only fs.
+ Avoid memlock size mismatch by preallocating stdio line buffers.
+ Rewrite vgreduce --removemissing --force to share lvconvert code.
+ Reorganize lvconvert --repair code to allow reuse.
+
+Version 2.02.85 - 29th April 2011
+=================================
+ Add new obtain_device_list_from_udev setting to lvm.conf.
+ Obtain device list from udev by default if LVM2 is compiled with udev support.
+ Add test for vgimportclone and querying of vgnames with duplicate pvs.
+ Avoid use of released memory when duplicate PV is found.
+ Add "devices/issue_discards" to lvm.conf.
+ Issue discards on lvremove and lvreduce etc. if enabled and supported.
+ Add seg_pe_ranges and devices fields to liblvm.
+ Fix incorrect tests for dm_snprintf() failure.
+ Fix some unmatching sign comparation gcc warnings in the code.
+ Support lv_extend() on empty LVs.
+ Avoid regenerating cache content when exported VG buffer is unchanged.
+ Extend the set of memory regions that are not locked to memory.
+ Workaround some problems when compiled for valgrind memcheck.
+ Support controlled quit of the lvm_thread_fn function in clvmd.
+ Fix reading of unallocated memory in lvm1 format import function.
+ Replace several strncmp() calls with id_equal().
+ Fix lvmcache_info transfer to orphan_vginfo in _lvmcache_update_vgname().
+ Fix -Wold-style-definition gcc warnings.
+ Rename MIRROR_NOTSYNCED to LV_NOTSYNCED.
+ Fix _move_lv_segments to handle empty LVs.
+ Fixes for lvconvert (including --repair) of temporary mirror stacks.
+ Avoid potential loop when removing mirror images.
+ Fix mirror removal always to take account of preferences as to which.
+ Fix MIRRORED flag usage.
+ Remove error messages issued by device_is_usable when run as non-root.
+ Add missing \0 for grown debug object in _bitset_with_random_bits().
+ Fix allocation of system_id buffer in volume_group structure.
+ Fix readlink usage inside get_primary_dev().
+ Use format instance mempool where possible and adequate.
+ Call destroy_instance for any PVs found in VG structure during vg_free call.
+ Add new free_pv_fid fn and use it throughout to free all attached fids.
+ Use only vg_set_fid and new pv_set_fid fn to assign the format instance.
+ Make create_text_context fn static and move it inside create_instance fn.
+ Add mem and ref_count fields to struct format_instance for own mempool use.
+ Use new alloc_fid fn for common format instance initialisation.
+ Optimise _get_token() and _eat_space().
+ Add _lv_postorder_vg() to improve efficiency for all LVs in VG.
+ Add gdbinit script for debugging.
+ Use hash tables to speedup string search in vg_validate().
+ Refactor allocation of VG structure adding alloc_vg().
+ Avoid possible endless loop in _free_vginfo when 4 or more VGs have same name.
+ Use empty string instead of /dev// for LV path when there's no VG.
+ Don't allocate unused VG mempool in _pvsegs_sub_single.
+ Do not send uninitialised bytes in local clvmd messages.
+ Support --help option for clvmd and return error for unknown option.
+ Avoid reading freed memory when printing LV segment type.
+ Fix syslog initialisation in clvmd to respect lvm.conf setting.
+ Fix possible overflow in maximum stripe size and physical extent size.
+ Improve pvremove error message when PV belongs to a VG.
+ Extend normal policy to allow mirror logs on same PVs as images if necessary.
+ Improve cling policy to recognise PVs already used during the transaction.
+ Improve normal allocation algorithm to include clinging to existing areas.
+ Add allocation/maximise_cling & mirror_logs_require_separate_pvs to lvm.conf.
+ Adapt metadata balancing code to work with metadata handling changes.
+ Add old_id field to physical_volume and fix pvchange -u for recent changes.
+ Allow pvresize on a PV with two metadata areas.
+ Change pvcreate to use new metadata handling interface.
+ Restructure existing pv_setup and pv_write and add pv_initialise.
+ Add internal interface to support adding and removing metadata areas.
+ Allow internal indexing of metadata areas (PV id + mda order).
+ Generalise internal format_instance infrastrusture for PV and VG use.
+ Handle decimal digits with --units instead of ignoring them silently.
+ Fix remaining warnings and compile with -Wpointer-arith.
+ Fix gcc warnings for unused variables and const casts.
+ Add stack backtraces for error paths in process_each_lv().
+ Temporarily suppress error from calling yes_no_prompt while locks are held.
+ Replace void* with char* arithmetic in _text_write, _text_read & send_message.
+ Fix compilation without DEVMAPPER_SUPPORT.
+ Remove fs_unlock() from lv_suspend error path.
+ Allow memory to stay locked between leaving and re-entering critical sections.
+ Rename memlock to critical_section throughout.
+ Make pv_min_size configurable and increase to 2048KB to exclude floppy drives.
+ Add find_config_tree_int64 to read 64-bit ints from config.
+ Ensure resuming exclusive cluster mirror continues to use local mirror target.
+ Clear temporary postorder LV status flags to allow re-use with same LV struct.
+ Remove invalid snapshot umount mesg which floods syslog from dmeventd plugin.
+ Add extended examples to pvmove man page.
+ Support LVM_TEST_DEVDIR env var for private /dev during testing.
+
+Version 2.02.84 - 9th February 2011
+===================================
+ Fix CRC32 calculation on big endian CPU (2.02.75).
+
+Version 2.02.83 - 4th February 2011
+===================================
+ Allow exclusive activation of snapshots in a cluster.
+ Leave EX lock unchanged when suspending a device in clvmd.
+ Use sync_dev_names in unlock_vg macro for cluster-wide dev name sync.
+ Fix fs operation stack handling when multiple operations on same device.
+ Increase hash table size to 1024 lv names and 64 pv uuids.
+ Remove fs_unlock() from lv_resume path.
+ Fix wipe size when setting up mda.
+ Remove unneeded checks for open_count in lv_info().
+ Synchronize with udev before checking open_count in lv_info().
+ Allow CLVMD_CMD_SYNC_NAMES to be propagated around the cluster if requested.
+ Add "dmsetup ls --tree" output to lvmdump.
+ Fix udev synchronization with no-locking --sysinit (2.02.80).
+ Improve man page style consistency for pvcreate, pvremove, pvresize, pvscan.
+ Avoid rebuilding of uuid validation table.
+ Improve lvcreate error text from insufficient "extents" to "free space".
+ Always use O_DIRECT when opening block devices to check for partitioning.
+
+Version 2.02.82 - 24th January 2011
+===================================
+ Bring lvscan man page up-to-date.
+ Fix lvchange --test to exit cleanly.
+ Add change_tag to toollib.
+ Allow multiple pvchange command line options to be specified together.
+ Do not fail pvmove polling if another process cleaned up first.
+ Avoid clvmd incrementing dlm lockspace reference count more than once.
+ Add -f (don't fork) option to clvmd and fix clvmd -d<num> description.
+
+Version 2.02.81 - 17th January 2011
+===================================
+ Do not scan devices in dev_reset_error_count().
+ Skip unnecessary LOCK_NULL unlock call during volume deactivation.
+ Skip fs_unlock when calling exec_cmd within activation code (for modprobe).
+ Extend exec_cmd params to specify when device sync (fs_unlock) is needed.
+ Replace fs_unlock by sync_local_dev_names to notify local clvmd. (2.02.80)
+ Introduce sync_local_dev_names and CLVMD_CMD_SYNC_NAMES to issue fs_unlock.
+ Accept fusion fio in device type filter.
+ Add ability to convert mirror log type from disk to mirrored.
+
+Version 2.02.80 - 10th January 2011
+===================================
+ Use same dm cookie for consecutive dm ops in same VG to reduce udev waits.
+ Speed up command processing by caching resolved config tree.
+ Pass config_tree to renamed function import_vg_from_config_tree().
+ Detect NULL handle in get_property().
+ Fix superfluous /usr in ocf_scriptdir instalation path.
+ Add --with-ocfdir configurable option.
+ Add aclocal.m4 (for pkgconfig).
+ Fix memory leak in persistent filter creation error path.
+ Check for errors setting up dm_task struct in _setup_task().
+ Fail polldaemon creation when lvmcache_init() fails.
+ Return PERCENT_INVALID for errors in _copy_percent() and _snap_percent().
+ Remove some unused variables.
+ Improve general lvconvert man page description.
+ Return 0 from cmirrord initscript 'start' if daemon is already running.
+ Fix wrongly paired unlocking of VG_GLOBAL in pvchange. (2.02.66)
+ Add backtraces for backup and backup_remove fail paths.
+ Detect errors from dm_task_set calls in _get_device_info (dmeventd).
+ Add backtraces for archive and backup_locally in check_current_backup().
+ Fix memory leak in debug mode of restart_clvmd() error path.
+ Log error message for pthread_join() failure in clvmd.
+
+Version 2.02.79 - 20th December 2010
+====================================
+ Remove some unused variables.
+ Add missing test for reallocation error in _find_parallel_space().
+ Add checks for allocation errors in config node cloning.
+ Fix error path if regex engine cannot be created in _build_matcher().
+ Use char* arithmetic in target_version(), _process_all() & _targets().
+ Fixing const cast gcc warnings in the code.
+ Check read() and close() results in _get_cmdline().
+ Add const for struct config_node usage.
+ Fix NULL pointer check in error path in clvmd do_command(). (2.02.78)
+ Fix device.c #include to ensure 64-bit fopen64 use. (2.02.51)
+ Add copy_percent and snap_percent to liblvm.
+ Enhance vg_validate to ensure integrity of LV and PV structs referenced.
+ Enhance vg_validate to check composition of pvmove LVs.
+ Create /var/run/lvm directory during clvmd initialisation if missing.
+ Use new dm_prepare_selinux_context instead of dm_set_selinux_context.
+ Avoid revalidating the label cache immediately after scanning.
+ Support scanning for a single VG in independent mdas.
+ Don't skip full scan when independent mdas are present even if memlock is set.
+ Set cmd->independent_metadata_areas if metadata/dirs or disk_areas in use.
+ Cope better with an undefined target_percent operation in _percent_run.
+ Avoid writing to freed memory in vg_release and rename to free_vg. (2.02.78)
+
+Version 2.02.78 - 6th December 2010
+===================================
+ Abort if segment tag allocation fails in pool format _add_stripe_seg.
+ Abort in _mirrored_transient_status if referenced log/image LV is not active.
+ Add backtraces for dev_set() and dev_close_immediate() errors in set_lv().
+ Log any unlink() error in clvmd remove_lockfile().
+ Log any pipe write() or close() errors in clvmd child_init_signal().
+ Detect if orphan vginfo was lost from cache before _lvmcache_update_vgname().
+ Do a full rescan if some device is missing in lvm1 format read_pvs_in_vg.
+ Add missing check that dm_pool_create succeeded in write_config_node().
+ Use dm_snprintf in clvmd-command.c to ensure an overlong buffer is truncated.
+ Don't write to buffer if its reallocation failed in clvmd do_command().
+ Switch from float to fixed point percentage handling.
+ Avoid misleading missing PV warnings in vgextend --restoremissing.
+ Fix memory leak when VG allocation policy in metadata is invalid.
+ Ignore unrecognised allocation policy found in metadata instead of aborting.
+ Factor out tag printing into _out_tags and avoid leaking string buffer.
+ Remove some unused variables & assignments.
+ Add missing vg_release calls in _vg_read_by_vgid.
+ Fix debug logging of derived flag LCK_CACHE in clvmd.
+ Fix test for no system_dir in _init_backup().
+ Disallow lvconvert ops that both allocate & free supplied PEs in a single cmd.
+ Fix liblvm seg_size to give bytes not sectors.
+ Add functions to look up LV/PV by name/uuid to liblvm.
+ Free cmd_context if fallback to LVM1 fails in lvm2_main().
+ Free device name buffer in dmsetup parse_loop_device_name() error paths.
+ Close format lib if init_format_fn fails in _init_formats().
+ Don't leave /proc/mounts open after dmeventd snapshot event processing.
+ Fix out-of-scope arg_vgnames use in process_each_lv().
+ Remove incorrect dm_task_destroy(NULL) from _node_clear_table() error path.
+ Add missing closedir in _rm_blks after removing stray LVM1 VG files.
+ Suppress 'No PV label' message when removing several PVs without mdas.
+ Fix default /etc/lvm permissions to be 0755. (2.02.66)
+
+Version 2.02.77 - 22nd November 2010
+====================================
+ Allocate a pool for dummy VG in _pvsegs_sub_single.
+ Add PV and LV segment types and functions to liblvm.
+ Add set_property functions to liblvm.
+ Remove tag length restriction and allow / = ! : # & characters.
+ Support repetition of --addtag and --deltag arguments.
+ Add infrastructure for specific cmdline arguments to be repeated in groups.
+ Split the_args cmdline arguments and values into arg_props and arg_values.
+ Fix fsadm no longer to require '-f' to resize an unmounted filesystem.
+ Fix fsadm to detect mounted filesystems on older systems. (2.0.75)
+ Extend cling allocation policy to recognise PV tags (cling_by_tags).
+ Add allocation/cling_tag_list to lvm.conf.
+ Regenerate configure with 'autoreconf' for --enable-ocf. (2.02.76)
+
+Version 2.02.76 - 8th November 2010
+===================================
+ Clarify error messages when activation fails due to activation filter use.
+ Add pacemaker script VolumeGroup.ocf with configure --enable-ocf.
+ Import make.tmpl into include/ Makefile.
+ Fix handling of online filesystem resize (using new fsadm return code).
+ Add DIAGNOSTICS section to fsadm man page.
+ Modify fsadm to return different status code for check of mounted filesystem.
+ Update VG metadata only once in vgchange when making multiple changes.
+ Allow independent vgchange arguments to be used together.
+ Automatically unmount invalidated snapshots in dmeventd.
+ Suppress some superfluous messages from clang static analysis.
+ Fix a deadlock caused by double close in clvmd.
+ Fix NULL pointer dereference on too-large MDA error path in _vg_read_raw_area.
+ Use static for internal _align_chunk() and _new_chunk() from pool-fast.c.
+ Fix vgchange to process -a, --refresh, --monitor and --poll like lvchange.
+ Add lvm2app functions to query any pv, vg, or lv property / report field.
+
+Version 2.02.75 - 25th October 2010
+===================================
+ Annotate more variables and parameters as const.
+ Fix missing variable initialization in cluster_send() function from cmirrord.
+ Fix pointer for VG name in _pv_resize_single error code path.
+ Fix warning for changed alignment requirements for dmeventd read/write func.
+ Add global/metadata_read_only to use unrepaired metadata in read-only cmds.
+ Don't take write lock in vgchange --refresh, --poll or --monitor.
+ Skip dm devices in scan if they contain only error targets or are empty.
+ Fix strict-aliasing compile warning in partition table scanning.
+ Fix pthread mutex usage deadlock in clvmd.
+ Automatically extend snapshots with dmeventd according to policy in lvm.conf.
+ Add activation/snapshot_autoextend_threshold/percent to lvm.conf.
+ Fix liblvm2cmd link order to support --as-needed.
+ Remove dependency on libm by replacing floor() by an integer-based algorithm.
+ Fix hang when repairing a mirrored-log that had both devs fail.
+ Convey need for snapshot-merge target in lvconvert error message and man page.
+ Add devices/disable_after_error_count config to limit access to failing devs.
+ Give correct error message when creating a too-small snapshot.
+ Implement vgextend --restoremissing to reinstate missing devs that return.
+ Make lvconvert respect --yes and --force when converting an inactive log.
+ Refactor and add 'get' functions for lv properties/fields.
+ Update script for fsadm testing.
+ Better support of noninteractive shell execution of fsadm.
+ Fix usage of --yes flag for ReiserFS resize in fsadm.
+ Fix detection of mounted filesystems for fsadm when udev is used.
+ Fix assignment of default value to LVM variable in fsadm.
+ Fix support for --yes flag for fsadm.
+ Do not execute lvresize from fsadm --dry-run.
+ Fix fsadm return error code from user's break action.
+ Allow CC to be overridden at build time (for 'scan-build make').
+ Rename 'flags' to 'status' in struct metadata_area.
+ Avoid segfault by limiting partial mode for lvm1 metadata. (2.02.74)
+ Use dm_zalloc and dm_pool_zalloc throughout.
+ Add pv_get_property and create generic internal _get_property function.
+ Add 'get' functions for pv and vg properties/fields.
+ Make generic GET_*_PROPERTY_FN macros with secondary macro for vg, pv & lv.
+ Add tags_format_and_copy() common function and call from _tags_disp.
+ Add id_format_and_copy() common function and call from _uuid_disp.
+ Refactor report.c '*_disp' functions to call supporting functions.
+ Move parts of metadata*.[ch] into new {pv|vg|lv}.[ch] files.
+ Fix vg_read memory leak with directory-based metadata.
+ Fix memory leak of config_tree in reinitialization code path.
+ Fix pool destruction order in dmeventd_lvm2_exit() to avoid leak debug mesg.
+ Read whole /proc/self/maps file before working with maps entries.
+ Speed up unquoting of quoted double quotes and backslashes.
+ Speed up CRC32 calculations by using a larger lookup table.
+
+Version 2.02.74 - 24th September 2010
+=====================================
+ Allow : and @ to be escaped with \ in device names of PVs.
+ Replace alloca with dm_malloc in _aligned_io to avoid stack corruption.
+ Fix partial mode operations for lvm1 metadata format.
+ Track recursive filter iteration to avoid refreshing while in use. (2.02.56)
+ Revert to old glibc vsnprintf behaviour in emit_to_buffer() to catch overflow.
+ Allocate buffer for metadata tags dynamically to remove 4k limit.
+ Add random suffix to archive file names to prevent races when being created.
+ Reinitialize archive and backup handling on toolcontext refresh.
+ Make poll_mirror_progress report PROGRESS_CHECK_FAILED if LV is not a mirror.
+ Like mirrors, don't scan origins if ignore_suspended_devices() is set.
+ Fix return type qualifier to avoid compiler warning. (2.02.69)
+ Automatically generate LSB Requires-Start for clvmd init script.
+ Fix return code of pvmove --abort PV.
+ Fix pvmove --abort to remove even for empty pvmove LV.
+ Add configure --with-default-data-alignment.
+ Update heuristic used for default and detected data alignment.
+ Add "devices/default_data_alignment" to lvm.conf.
+ Add implementation for simple numeric 'get' property functions.
+ Define GET_NUM_PROPERTY_FN macro to simplify numeric property 'get' function
+ Add properties.[ch] to lib/report using columns.h.
+ Add macro definitions to report infrastructure for character array length.
+ Remove explicit double quotes from columns.h 'id' entries.
+ Add 'flags' field to columns.h and define FIELD_MODIFIABLE.
+ Add vg_mda_size and vg_mda_free functions.
+ Simplify MD/swap signature detection in pvcreate and allow aborting.
+ Allow --yes to be used without --force mode.
+ Fix file descriptor leak in swap signature detection error path.
+ Detect and allow abort in pvcreate if LUKS signature is detected.
+ Always mask lock flags correctly when checking for LCK_WRITE.
+
+Version 2.02.73 - 18th August 2010
+==================================
+ Fix potential for corruption during cluster mirror device failure.
+ Use 'SINGLENODE' instead of 'dead' in clvmd singlenode messages.
+ Ignore snapshots when performing mirror recovery beneath an origin.
+ Pass LCK_ORIGIN_ONLY flag around cluster.
+ Add suspend_lv_origin and resume_lv_origin using LCK_ORIGIN_ONLY.
+ Allow internal suspend and resume of origin without its snapshots.
+ Fix dev_manager_transient to access -real device not snapshot-origin.
+ Monitor origin -real device below snapshot instead of overlay device.
+ Don't really change monitoring status when in test mode.
+ Fix some exit statuses when starting/stopping monitoring fails.
+ Enable snapshot monitoring by default when dmeventd is enabled.
+ Move cloned libdevmapper-event client code from segments into lib/activate.
+ Fix 'lvconvert --splitmirrors' in cluster operation.
+ Fix clvmd init script exit code to return 4 when executed as non-root user.
+ Change default alignment of pe_start to 1MB.
+ Add --norestorefile option to pvcreate.
+ Require --restorefile when using pvcreate --uuid.
+ Recognise and give preference to md device partitions (blkext major).
+ Never scan internal LVM devices.
+ Don't ignore user-specified PVs in split-mirror operations. (2.02.71)
+ Fix data corruption bug in cluster mirrors.
+ Require logical volume(s) to be explicitly named for lvconvert --merge.
+ Avoid changing aligned pe_start as a side-effect of very verbose logging.
+ Use built-in rule for device aliases: block/ < dm- < disk/ < mapper/ < other.
+ Fix const warning in dev_manager_info() and _dev_manager_lv_rmnodes().
+ Fix const warning in archive_file structure from archive.c.
+ Clean generated files .exported_symbols_generated, example.conf for distclean.
+ Handle failure of all mirrored log devices and all but one mirror leg.
+ Disallow 'mirrored' log type for cluster mirrors.
+ Do not use VPATH in include/Makefile.
+ Fix exported_symbols generation to use standard compiler arguments.
+ Use #include <> not "" in lvm2app.h which gets installed on the system.
+ Make lib and liblvm.device-mapper wait for include file generation.
+ Fix configure to supply DEFAULT_RUN_DIR to Makefiles.
+ Fix allocation of wrong number of mirror logs with 'remove' fault policy.
+
+Version 2.02.72 - 28th July 2010 [CVE-2010-2526]
+=================================================
+ Change clvmd to communicate with lvm2 via a socket in /var/run/lvm.
+ Return controlled error if clvmd is run by non-root user.
+ Add configure --default-run-dir for /var/run/lvm.
+ Never use clvmd singlenode unless explicitly requested with -Isinglenode.
+
+Version 2.02.71 - 28th July 2010
+================================
+ Document LVM fault handling in doc/lvm_fault_handling.txt.
+ Make vgck warn about missing PVs.
+ Clarify help text for vg_mda_count.
+ Check if cluster log daemon is running before allowing cmirror create.
+ Add unit-tests dir.
+ Add configure --enable-testing and reports and report-generators dirs.
+ Correct LV list order used by lvconvert when splitting a mirror.
+ Check if LV with specified name already exists when splitting a mirror.
+ Fix suspend/resume logic for LVs resulting from splitting a mirror.
+ Update pvcreate, {pv|vg}change, and lvm.conf man pages about metadataignore.
+ Switch cmirrord and clvmd to use dm_create_lockfile.
+ Allow clvmd pidfile to be configurable.
+ Update comments about memory handling in lvm2app.h.
+ Add more verbose messages while checking volume_list and hosttags settings.
+ Add log_error when strdup fails in {vg|lv}_change_tag().
+ Remove unnecessary includes in liblvm files.
+ Use __attribute__ consistently throughout.
+ Fix redundant declarations and always compile with -Wredundant-decls.
+ Fix possible hang when all mirror images of a mirrored log fail.
+ Pass metadataignore to pv_create, pv_setup, _mda_setup, and add_mda.
+ Init mda->list in mda_copy.
+ Do not log backtrace in valid _lv_resume() code path.
+ Cleanup help strings in configure.in.
+ Prompt if metadataignore with vgextend or pvchange would adjust vg_mda_copies.
+ Adjust vg_mda_copies if metadataignore given with vgextend or pvchange.
+ Adjust auto-metadata repair and caching logic to try to cope with empty mdas.
+
+Version 2.02.70 - 6th July 2010
+===============================
+ Remove log directly if all mirror images of a mirrored log fail.
+ Randomly select which mdas to use or ignore.
+ Add some missing standard configure.in checks.
+ Add printf format attributes to yes_no_prompt and fix a caller.
+ Always pass unsuspended dm devices through persistent filter to other filters.
+ Move test for suspended dm devices ahead of other filters.
+ Fix another segfault in clvmd -R if no response from daemon. (2.02.68)
+ Remove superfluous suspended device counter from clvmd.
+ Fix lvm shell crash when input is entirely whitespace.
+ Update partial mode warning message.
+ Preserve memlock balance in clvmd when activation triggers a resume.
+ Restore the removemissing behaviour of lvconvert --repair --use-policies.
+
+Version 2.02.69 - 30th June 2010
+================================
+ Fix vgremove to allow removal of VG with missing PVs. (2.02.52)
+ Add metadata/vgmetadatacopies to lvm.conf.
+ Add --metadataignore to pvcreate and vgextend.
+ Add vg_mda_copies, pv_mda_used_count and vg_mda_used_count to reports.
+ Describe --vgmetadatacopies in lvm.conf and other man pages.
+ Add --[vg]metadatacopies to select number of mdas to use in a VG.
+ Make the metadata ignore bit control read/write metadata areas in a PV.
+ Add pvchange --metadataignore to set or clear a metadata ignore bit.
+ Refactor metadata code to prepare for --metadataignore / --vgmetadatacopies.
+ Ensure region_size of mirrored log does not exceed its full size.
+ Generate liblvm2app exported symbols from header file.
+ Preload libc locale messages to prevent reading it in memory locked state.
+ Fix handling of simultaneous mirror image and mirrored log image failure.
+
+Version 2.02.68 - 23rd June 2010
+================================
+ Fix clvmd initscript status to print only active clustered LVs.
+ Add lv_path to reports to offer full /dev pathname.
+ Fix typo in warning message about missing device with allocated data areas.
+ Add device name and offset to raw_read_mda_header error messages.
+ Honour log argument when down-converting stacked mirror.
+ Sleep to workaround clvmd -S race: socket closed early and server drops cmd.
+ Use early udev synchronisation and update of dev nodes for clustered mirrors.
+ Remove incorrect inclusion of kdev_t.h from cmirrord/functions.h.
+ Add man pages for lvmconf and non-existent lvmsadc and lvmsar tools.
+ Exit successfully when using -o help (but not -o +help) with LVM reports.
+ Do not use internal DLM lock definitions in generic LVM2 clvmd code.
+ Add --force, --nofsck and --resizefs to lvresize/extend/reduce man pages.
+ Fix lvm2cmd example in documentation.
+ Allow use of lvm2app and lvm2cmd headers in C++ code.
+ Remove unused #includes from clvmd files and introduce clvmd-common.h.
+ Move common inclusions to clvmd-common.h.
+ Use #include "" for libdevmapper.h and configure.h throughout tree.
+ Fix LVM_PATH expansion when exec_prefix=NONE. (2.02.67)
+ Fix segfault in clvmd -R if no response from daemon received.
+
+Version 2.02.67 - 4th June 2010
+===============================
+ Handle failed restart of clvmd using -S switch properly.
+ Fix clvmd initscript restart command to start clvmd if not yet running.
+ Use built-in absolute paths in clvmd (clvmd restart and PV and LV queries).
+ Require partial option in lvchange --refresh for partial LVs.
+ Do not fail lvm_init() if init_logging() or _init_rand() generates an errno.
+ Don't merge unchanged persistent cache file before dumping if tool scanned.
+ Fix incorrect memory pool deallocation while using vg_read for files.
+ Add --type parameter description to the lvcreate man page.
+ Replace strncmp kernel version number checks with proper ones.
+ Avoid selecting names under /dev/block if there is an alternative.
+ Update clustered log kernel module name to log-userspace for 2.6.31 onwards.
+ Add replicators' LVs to dtree for activation.
+ Supress activation message if there is a missing replicator VG.
+ Fix scripts/relpath.awk to work in mawk
+ Extend lock_vol to check for missing replicator VGs first.
+ Update _process_one_vg and process_each_lv_in_vg to populate cmd_vg.
+ Add cmd_vg structure and associated functions for replicator.
+ Extend _lv_each_dependency() to handle replicator dependencies.
+ Add check_replicator_segment() to catch internal replicator errors.
+ Initial support for replicator metadata.
+ Extend process_each_lv_in_vg() to provide list of failed lvnames.
+ Consistently return ECMD_FAILED if process_each_*lv() is interrupted.
+
+Version 2.02.66 - 20th May 2010
+===============================
+ If unable to obtain snapshot percentage leave value blank on reports.
+ Add install_system_dirs and install_initscripts makefile targets.
+ Add configure options for system and locking directories.
+ Generate example.conf so default lvm.conf contents can be configured.
+ Install lvmconf script by default.
+ Remove unnecessary versioned dmeventd plugin symlinks.
+ Add tests for lvm_vgname_from_{pvid|device}.
+ Add lvm2app interfaces to lookup a vgname from a pvid and pvname.
+ Update pvchange to always obtain a vg handle for each pv to process.
+ Add find_vgname_from_{pvname|pvid} functions.
+ Add pvid_from_devname and lvmcache_vgname_from_pvid lvmcache functions.
+ Validate orphan and VG_GLOBAL lock order too.
+ Accept orphan VG names as parameters to lock_vol() and related functions.
+ Use is_orphan_vg in place of hard-coded prefix tests and add is_global_vg.
+
+Version 2.02.65 - 17th May 2010
+===============================
+ Fix clvmd init script never to deactivate non-clustered volume groups.
+ Disallow vgchange --clustered if there are active mirrors or snapshots.
+ Introduce lv_is_mirrored.
+ Use /bin/bash for scripts with bashisms.
+ Skip internal lvm devices in scan if ignore_suspended_devices is set.
+ Do not merge old device cache after we run full scan. (2.02.56)
+ Add pkgconfigdir Makefile variable for make install override.
+ Configure pkgconfig udev and selinux dependencies.
+ Switch Libs.private to Requires.private in devmapper.pc and lvm2app.pc.
+ Use pkgconfig Requires.private for devmapper-event.pc.
+ Add libdevmapper to linked libdevmapper-event.so.
+ Link liblvm2cmd.so with libdevmapper-event and libdevmapper.
+ Fix truncated total size displayed by pvscan.
+ Add new --sysinit compound option to vgchange and lvchange.
+ Drop duplicate errors for read failures and missing devices to verbose level.
+ Use $(libdir)/lvm2 with make install_lvm2_plugin.
+ Use $(libdir)/device-mapper with make install_dm_plugin.
+ Add dm_list_splice() function to join two lists together.
+
+Version 2.02.64 - 30th April 2010
+=================================
+ Avoid pointless initialisation when the 'version' command is run directly.
+ Fix memory leak for invalid regex pattern input.
+ Display invalid regex pattern for filter configuration in case of error.
+ Remove no-longer-used arg_ptr_value.
+ Fix -M and --type to use strings, not pointers that change on config refresh.
+ Fix lvconvert error message when existing mirrored LV is not found.
+ Set appropriate udev flags for reserved LVs.
+ Disallow the direct removal of a merging snapshot.
+ Don't preload the origin when removing a snapshot whose merge is pending.
+ Disallow the addition of mirror images while a conversion is happening.
+ Disallow primary mirror image removal when mirror is not in-sync.
+ Remove obsolete --name parameter from vgcfgrestore.
+ Add -S command to clvmd to restart the daemon preserving exclusive locks.
+ Increment lvm2app version from 1 to 2 (memory allocation changes).
+ Change lvm2app memory alloc/free for pv/vg/lv properties.
+ Change daemon lock filename from lvm2_monitor to lvm2-monitor for consistency.
+ Install symbolic .so links with relative paths between usrlibdir and libdir.
+ Add awk script relpath.awk to calculate paths for relative symlinks.
+ Use @AWK@ in makefiles.
+ Fix double DESTDIR usage for infodir and mandir.
+
+Version 2.02.63 - 14th April 2010
+=================================
+ Rename lvm_dump.sh to lvmdump.sh.
+ Allow incomplete mirror restore in lvconvert --repair upon insufficient space.
+ Do not reset position in metadata ring buffer on vgrename and vgcfgrestore.
+ Allow VGs with active LVs to be renamed.
+ Use UUIDs instead of names while processing event handlers.
+ Only pass visible LVs to tools in cmdline VG name/tag expansions without -a.
+ Use typedefs for toollib process_each functions.
+ Use C locales and use_mlockall for clvmd.
+ Refactor code related to vg->pvs list and add pv->vg link.
+ Mask LCK_HOLD flag in cluster VG locks for backwards compatibility.
+ Add activation/polling_interval to lvm.conf as --interval default.
+ Don't ignore error if resuming any LV fails in resume_lvs.
+ Skip closing persistent filter cache file if open failed.
+ Install .a and .so links into $(usrlibdir).
+ Add --enable-write_install options to install user-writable files.
+ Use INSTALL_PROGRAM/DATA/WDATA target.
+ Switch from using VPATH to vpath in Makefiles.
+ Permit mimage LVs to be striped in lvcreate, lvresize and lvconvert.
+ Fix pvmove allocation to take existing parallel stripes into account.
+ Add pvmove_source_seg to struct lv_segment.
+ Fix incorrect removal of symlinks after LV deactivation fails.
+ Fix is_partitioned_dev not to attempt to reopen device.
+ Fix another thread race in clvmd.
+ Refactor management of vg->pvs list.
+ Fix lcov rules and generate better coverage report.
+ Improve vg_validate to detect some loops in lists.
+ Change most remaining log_error WARNING messages to log_warn.
+ Always use blocking lock for VGs and orphan locks.
+ Allocate all memory for segments from private VG mempool.
+ Return newly allocated PV segment after segment split.
+ Optimise searching PV segments for seeking the most recently-added.
+ Remove vg_validate call when parsing cached metadata.
+ Use hash table of LVs to speed up parsing of text metadata with many LVs.
+ Fix two vg_validate messages, adding whitespace and parentheses.
+ When dmeventd is not forking because of -d flag, don't kill parent process.
+ Fix 'make install' when $(builddir) is different from $(srcdir).
+ Fix dso resource leak in error path of dmeventd.
+ Use C locales and use_mlockall for dmeventd.
+ Fix --alloc contiguous policy only to allocate one set of parallel areas.
+ Do not allow {vg|lv}change --ignoremonitoring if on clustered VG.
+ Improved dependency tracking for dmeventd and liblvm2cmd sources.
+ Improved Makefile rules for distclean and cflow targets.
+ Add ability to create mirrored logs for mirror LVs.
+ Fix clvmd cluster propagation of dmeventd monitoring mode.
+ Allow ALLOC_ANYWHERE to split contiguous areas.
+ Use INTERNAL_ERROR for internal errors throughout tree.
+ Add some assertions to allocation code.
+ Introduce pv_area_used into allocation algorithm and add debug messages.
+ Add activation/monitoring to lvm.conf.
+ Add --monitor and --ignoremonitoring to lvcreate.
+ Allow dynamic extension of array of areas selected as allocation candidates.
+ Export and use only valid cookie value in test suite.
+ Remove const modifier for struct volume_group* from process_each_lv_in_vg().
+ Don't allow resizing of internal logical volumes.
+ Fix libdevmapper-event pkgconfig version string to match libdevmapper.
+ Avoid scanning all pvs in the system if operating on a device with mdas.
+ Add configure --with-clvmd=singlenode to use clvmd w/o cluster infrastructure.
+ Get stacktrace if testsuite test drops core and lvm was built with debugging.
+ Disable long living process flag in lvm2app.
+ Fix pvcreate device md filter check.
+ Suppress repeated errors about the same missing PV uuids.
+ Bypass full device scans when using internally-cached VG metadata.
+ Only do one full device scan during each read of text format metadata.
+ Remove unnecessary full_scan parameter from get_vgids and get_vgnames calls.
+ Look up missing PVs by uuid not dev_name in _pvs_single to avoid invalid stat.
+ Make find_pv_in_vg_by_uuid() return same type as related functions.
+ Introduce is_missing_pv().
+ Fix clvmd Makefile to not overwrite LIBS from template definition.
+
+Version 2.02.62 - 9th March 2010
+================================
+ Add use_mlockall and mlock_filter to activation section of lvm.conf.
+ Add default alternative to mlockall using mlock to reduce pinned memory size.
+ Remove -rdynamic from static builds.
+ Update checks for pthread, readline & selinux libs and link only when needed.
+ Introduce makefile vars UDEV_LIBS, DL_LIBS, SELINUX_LIBS, STATIC_LIBS.
+ Introduce makefile vars LVMINTERNAL_LIBS, READLINE_LIBS, PTHREAD_LIBS.
+ Toggle configure help to print --disable-fsadm.
+ Use $() instead of ${} consistently for all Makefile variables.
+ Replace CFLOW_CMD only in make.tmpl and use it as variable elsewhere.
+ Use $(top_builddir) for inclusion of make.tmpl in Makefiles.
+ Fix autoconf warning about ignored datarootdir.
+ Increase AC_PREREQ version to 2.61 (for AC_PROC_SED, AC_PROG_MKDIR_P).
+ Handle misaligned devices that report alignment_offset of -1.
+ Extend core allocation code in preparation for mirrored log areas.
+ Rewrite clvmd init script.
+ Remove lvs_in_vg_activated_by_uuid_only call.
+ No longer fall back to looking up active devices by name if uuid not found.
+ Don't touch /dev in vgmknodes if activation is disabled.
+ Update lvm2app.h Doxygen comments and add lvm2app Doxygen config file.
+ Update nightly tests and lvm2app unit tests to cover tags.
+ Add lvm2app functions lvm_{vg|lv}_{get|add|remove}_tag() functions.
+ Add dm_pool_strdup to allocate and copy memory in tag library function.
+ Refactor vgcreate, vgchange, and lvchange for tag library function.
+ Refactor snapshot-merge deptree and device removal to support info-by-uuid.
+
+Version 2.02.61 - 15th February 2010
+====================================
+ Fix some consts and floating point gcc warnings.
+ Fix dm_report_field_uint64 function to accept 64-bit ints.
+ Change readhead display to use 32-bit -1 const instead of 64-bit.
+ Add LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES environment variable.
+ Remove hard-coding that skipped _mimage devices from 11-dm-lvm.rules.
+ Use udev transactions in test suite.
+ Set udev state automatically instead of using LVM_UDEV_DISABLE_CHECKING.
+ Add lvm_pv_get_size, lvm_pv_get_free and lvm_pv_get_dev_size to lvm2app.
+ Change lvm2app to return all sizes in bytes as documented (not sectors).
+ Add 'fail_if_percent_unsupported' arg to _percent and _percent_run.
+ Remove false "failed to find tree node" error when activating merging origin.
+ Exit with success when lvconvert --repair --use-policies performs no action.
+ Accept a list of LVs with 'lvconvert --merge @tag' using process_each_lv.
+ Avoid unnecessary second resync when adding mimage to core-logged mirror.
+ Exclude internal VG names and uuids from lists returned through lvm2app.
+ Add %ORIGIN support to lv{create,extend,reduce,resize} --extents.
+ Add _mda_copy to clone a struct metadata_area.
+ Remove pointless versioned symlinks to dmeventd plugin libraries.
+ Fix dmeventd snapshot plugin build dependency.
+ Make clvmd -V return status zero.
+ Remove unnecessary 'dmsetup resume' following 'dmsetup create' in tests.
+ Fix cmirrord segfault in clog_cpg list processing when converting mirror log.
+ Deactivate temporary pvmove mirror cluster-wide when activating it fails.
+ Always query device by uuid and not name in clvmd.
+ Add missing metadata vg_reverts in pvmove error paths.
+ Unlock shared lock in clvmd if activation calls fail.
+ Return success from dev_manager_info with non-existent uuid if ioctl succeeds.
+
+Version 2.02.60 - 23rd January 2010
+===================================
+ Extend cmirrord man page.
+ Sleep before first progress check if pvmove/lvconvert interval has prefix '+'.
+ Default to checking progress before waiting in _wait_for_single_lv.
+ Fix cmirror initscript (including syntax error).
+ Eliminate avoidable ioctls for checking open_count in _add_new_lv_to_dtree.
+ Disable memory debugging if dmeventd is configured. (Not thread-safe.)
+ Fix first log message prefix in syslog for dmeventd plugins.
+ Fix exported symbols names for dmeventd lvm2 wrapper plugin.
+ Make failed locking initialisation messages more descriptive.
+
+Version 2.02.59 - 21st January 2010
+===================================
+ Add libdevmapper-event-lvm2.so to serialise dmeventd plugin liblvm2cmd use.
+ Cleanup memory initialization and freeing in pv_read() and pv_create().
+ Clear pointer and counters after their release in _fin_commands().
+ Stop dmeventd trying to access already-removed snapshots.
+ Remove (fallback) /dev mknod from cmirrord.
+ Add t-topology-support.sh and t-snapshot-merge.sh tests.
+ Fix clvmd to never scan suspended devices.
+ Fix dmeventd build outside source tree.
+ Assorted cmirror code changes to remove various compiler warnings.
+ Fix detection of completed snapshot merge.
+ Add Red Hat cmirror initscript (unfinished).
+ Add cmirrord man page (incomplete).
+ Make cluster log communication structures architecture independant.
+ Fix cluster log in-memory bitmap handling.
+ Improve snapshot merge metadata import validation.
+ Improve target type compatibility checking in _percent_run().
+ Add 'target_status_compatible' method to 'struct segtype_handler'.
+ Change underscore to hyphen in table line for clustered log type.
+
+Version 2.02.58 - 14th January 2010
+===================================
+ Cleanup some minor gcc warnings.
+ Add --merge to lvconvert to merge a snapshot into its origin.
+ Fix clvmd automatic target module loading crash (no reset_locking fn).
+ Fix allocation code not to stop at the first area of a PV that fits.
+
+Version 2.02.57 - 12th January 2010
+===================================
+ Ensure exactly one process returns from poll_daemon(), never two.
+ Reset _vgs_locked in lvmcache_init() in child after forking.
+ Define {DM, LVM}_UDEV_DISABLE_CHECKING=1 environment variables during tests.
+ Enable udev_sync and udev_rules in lvm.conf by default while running tests.
+ If LVM_UDEV_DISABLE_CHECKING in set in environment, disable udev warnings.
+ Add --splitmirrors to lvconvert to split off part of a mirror.
+ Change background polldaemon's process name to "(lvm2)".
+ Allow vgremove to remove a VG with PVs missing after a prompt.
+ Return success in lvconvert --repair --use-policies on failed allocation.
+ Keep log type consistent when changing mirror image count.
+ Always set environment variables for an LVM2 device in 11-dm-lvm.rules.
+ Add activation/udev_rules config option in lvm.conf.
+ Add consts to text metadata flag structs.
+ Add macros outfc, outsize, outhint and function out_text_with_comment.
+ Reimplement report FIELD macro using offsetof instead of static structs.
+ Fix fsadm man page typo (fsdam).
+ Rename mirror_device_fault_policy to mirror_image_fault policy.
+ Remove empty PV devices if lvconvert --repair is using defined policies.
+ Use fixed buffer to prevent stack overflow in persistent filter dump.
+ Use extended status of new kernel snapshot target 1.8.0 to detect when empty.
+ Insert stack macros in suspend_lv, resume_lv & (de)activate_lv callers.
+ Add --poll flag to vgchange and lvchange to control background daemon launch.
+ Propagate metadata commit and revert notifications to other cluster nodes.
+ Use proper mask for VG lock mode in clvmd.
+ Allow precommitted metadata to be dropped from lvmcache.
+ Move processing of VG locks to separate function in clvmd.
+ Properly decode all flags in clvmd messages including VG locks.
+ Properly handle precommitted cache flag when only committed metadata present.
+ Resume renamed volumes in reverse order to preserve memlock pairing.
+ Drop cached metadata after device was auto-repaired and removed from VG.
+ Clear MISSING_PV flag if PV reappeared and is empty.
+ Fix removal of multiple devices from a mirror.
+ Also clean up PVs flagged as missing in vgreduce --removemissing --force.
+ Introduce INTERNAL_ERROR macro for error messages and use throughout.
+ Remove superfluous returns from void functions.
+ Destroy allocated mempool in _vg_read_orphans() error path.
+ Fix some pvresize and toollib error paths with missing VG releases/unlocks.
+ Explicitly call suspend for temporary mirror layer.
+ Allow use of precommitted metadata when a PV is missing.
+ Add memlock information to do_lock_lv debug output.
+ Always bypass calls to remote cluster nodes for non-clustered VGs.
+ Permit implicit cluster lock conversion in pre/post callbacks on local node.
+ Permit implicit cluster lock conversion to the lock mode already held.
+ Fix lock flag masking in clvmd so intended code paths get invoked.
+ Replace magic masks in cluster locking code by defined masks.
+ Remove newly-created mirror log from metadata if initial deactivation fails.
+ Correct activated or deactivated text in vgchange summary message.
+ Improve pvmove error message when all source LVs are skipped.
+ Fix memlock imbalance in lv_suspend if already suspended.
+ Fix pvmove test mode not to poll (and fail).
+ Fix vgcreate error message if VG already exists.
+ Fix tools to use log_error when aborted due to user response to prompt.
+ Fix ignored readahead setting in lvcreate --readahead.
+ Fix clvmd memory leak in lv_info_by_lvid by calling release_vg.
+ If aborting due to internal error, always send that message to stderr.
+ Add global/abort_on_internal_errors to lvm.conf to assist testing.
+ Fix test Makefiles when builddir and srcdir differ.
+ Impose limit of 8 mirror images to match the in-kernel kcopyd restriction.
+ Use locking_type 3 (compiled in) for lvmconf --enable-cluster.
+ Remove list.c and list.h with no-longer-used dm_list macros and functions.
+ Log failure type and recognise type 'F' (flush) in dmeventd mirror plugin.
+ Extend internal PV/VG/LV/segment status variables from 32-bit to 64-bit.
+
+Version 2.02.56 - 24th November 2009
+====================================
+ Add missing vg_release to pvs and pvdisplay to fix memory leak.
+ Do not try to unlock VG which is not locked in _process_one_vg.
+ Move is_long_lived persistent_filter_dump to happen after every full scan.
+ Refresh device filters before full device rescan in lvmcache.
+ Return error status if vgchange fails to activate some volume.
+ Fix suspend/resume lock type test causing unbalanced memory locking.
+ Revert vg_read_internal change as clvmd was not ready for vg_read. (2.02.55)
+
+Version 2.02.55 - 19th November 2009
+====================================
+ Fix deadlock when changing mirrors due to unpaired memlock refcount changes.
+ Use separate memlock counter for dmeventd handlers to permit device scanning.
+ Directly restrict vgchange to activating visible LVs.
+ Fix pvmove region_size overflow for very large PVs.
+ Fix lvcreate and lvresize %PVS argument always to use sensible total size.
+ Tidy some uses of arg_count and introduce arg_is_set.
+ Export outnl and indent functions for modules.
+ Flush stdout after yes/no prompt.
+ Update vgsplit and vgcreate to use vg_set_clustered.
+ Add vg_mda_count and vg_set_clustered library functions.
+ Add more vgcreate and vgsplit nightly tests.
+ Insert some missing stack macros into activation code.
+ Recognise DRBD devices and handle them like md devices.
+
+Version 2.02.54 - 26th October 2009
+===================================
+ Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter.
+ Document --all option in man pages, cleanup {pv|vg|lv}{s|display} man pages.
+ Permit snapshots of mirrors.
+ Cleanup mimagetmp LV if allocation fails for new lvconvert mimage.
+ Fix clvmd segfault when refresh_toolcontext fails.
+ Remember to clear 'global lock held during cache refresh' state after use.
+ Use udev flags support in LVM and apply various fixes to udev rules.
+ Delay announcing mirror monitoring to syslog until initialisation succeeded.
+ Handle metadata with unknown segment types more gracefully.
+ Set default owner and group to null.
+ Add dmeventd.static to the build.
+ Disable realtime support code by default.
+ Make clvmd return 0 on success rather than 1.
+ Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert.
+ Add implict pvcreate support to vgcreate and vgextend.
+ Correct example.conf to indicate that lvm2 not lvm1 is the default format.
+ Remove an unused stray LVM1_SUPPORT ifdef.
+ Only include selinux libs in libdevmapper.pc when selinux build enabled.
+ Allow for a build directory separate from the source.
+ Update distclean target for rename clogd to cmirrord. (2.02.52)
+ Only do lock conversions in clvmd if we are explicitly asked for one.
+ Introduce percent_range_t and centralise snapshot full/mirror in-sync checks.
+ Factor out poll_mirror_progress and introduce progress_t.
+ Distinguish between powers of 1000 and powers of 1024 in unit suffixes.
+ Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
+ Generalise polldaemon code by changing mirror-specific variable names.
+ Don't attempt to deactivate an LV if any of its snapshots are in use.
+ Return error if lv_deactivate fails to remove device from kernel.
+ Provide alternative implementation of obsolete siginterrupt().
+ Consolidate LV allocation into alloc_lv().
+ Treat input units of both 's' and 'S' as 512-byte sectors. (2.02.49)
+ Use standard output units for 'PE Size' and 'Stripe size' in pv/lvdisplay.
+ Add configure --enable-units-compat to set si_unit_consistency off by default.
+ Add global/si_unit_consistency to enable cleaned-up use of units in output.
+
+Version 2.02.53 - 25th September 2009
+=====================================
+ Create any directories in /dev with DM_DEV_DIR_UMASK (022).
+ Enable dmeventd monitoring section of config file by default.
+ Update lvm2 monitoring script to lvm2_monitoring_init_red_hat.in.
+ Fix lvm2app test to run under test/api subdirectory only when configured.
+ Add vg_is_resizeable() and cleanup reference to VG_RESIZEABLE.
+
+Version 2.02.52 - 15th September 2009
+=====================================
+ Update _process_one_vg to cleanup properly after vg_read_error.
+ Add lots of missing stack debug messages to tools.
+ Make readonly locking available as locking type 4.
+ Fix readonly locking to permit writeable global locks (for vgscan). (2.02.49)
+ Add DM_UDEV_RULES_VSN environment variable to udev rules.
+ Update vgsplit, vgmerge, and vgrename to obey new vgname ordering rules.
+ Make lvm2app pv_t, lv_t, vg_t handle definitions consistent with lvm_t.
+ Enforce an alphabetical lock ordering on vgname locking.
+ Prioritise write locks over read locks by default for file locking.
+ Add local lock files with suffix ':aux' to serialise locking requests.
+ Fix global locking in PV reporting commands (2.02.49).
+ Fix pvcreate string termination in duplicate uuid warning message.
+ Don't loop reading sysfs with pvcreate on a non-blkext partition (2.02.51).
+ Fix vgcfgrestore error paths when locking fails (2.02.49).
+ Update Makefile distclean target.
+ Add libudev configuration check.
+ Make clvmd check corosync to see what cluster interface it should use.
+ Add clvmd autodetection check and cleanup related configure messages.
+ Rewrite clvmd configuration code to cope with all combinations of libs.
+ Added configure --enable-cmirrord to build the cluster mirror log daemon.
+ Rename clogd to cmirrord.
+ Make lvchange --refresh only take a read lock on volume group.
+ Fix race where non-blocking file locks could be granted in error.
+ Fix vgextend error path - if ORPHAN lock fails, unlock / release vg (2.02.49).
+ Fix compile warning in clvmd.
+ Clarify use of PE ranges in lv{convert|create|extend|resize} man pages.
+ Remove useless _pv_write wrapper.
+ Add lvm2app.sh to tests conditional upon configure --enable-applib.
+ Add lvm_vg_is_clustered, lvm_vg_is_exported, and lvm_vg_is_partial.
+ Update lvm_vg_remove to require lvm_vg_write to commit remove to disk.
+ Update test/api/test.c to call lvm_vg_create and lvm_vg_remove.
+
+Version 2.02.51 - 6th August 2009
+=================================
+ Fix locking in clvmd (2.02.50).
+ Add --noudevsync option for relevant LVM tools.
+ Add activation/udev_sync to lvm.conf.
+ Only change LV symlinks on ACTIVATE not PRELOAD.
+ Make lvconvert honour log mirror options combined with downconversion.
+ Allow LV suspend while --ignorelockingfailure is in force.
+ Update synopsis in lvconvert manpage to mention --repair.
+ Set cookies in activation code and wait for udev to complete processing.
+ Added configure --enable-udev_rules --enable-udev_sync.
+ Added configure --with-udev-prefix --with-udevdir.
+ Added udev dir to hold udev rules.
+ Add devices/data_alignment_detection to lvm.conf.
+ Add devices/data_alignment_offset_detection to lvm.conf.
+ Add --dataalignmentoffset to pvcreate to shift start of aligned data area.
+ Fix _mda_setup() to not check first mda's size before pe_align rounding.
+ Document -I option of clvmd in the man page.
+ Fix configure script to handle multiple clvmd selections.
+ Fix lvm2app.pc installation filename.
+ Remove pv_t, vg_t & lv_t handles from lib. Only liblvm uses them.
+ Rename lvm.h to lvm2app.h for now.
+
+Version 2.02.50 - 28th July 2009
+================================
+ Change test/api/test.c prompt so it's not confused with the main lvm prompt.
+ Update liblvm unit tests in test/api to cover latest liblvm changes.
+ Add unimplemented lvm_lv_resize and lvm_pv_resize skeletons to liblvm.
+ Add lvm_library_get_version to liblvm.
+ Add lvm_config_override to liblvm to allow caller to override LVM config.
+ Add lvm_lv_is_active and lvm_lv_is_suspended to liblvm.
+ Add lvm_lv_activate and lvm_lv_deactivate to liblvm.
+ Add lvm_scan, lvm_vg_reduce and lvm_vg_remove_lv to liblvm.
+ Add functions to get numeric properties to liblvm.
+ Add lvm_{pv|vg|lv}_get_{name|uuid} to liblvm.
+ Add lvm_vg_list_pvs and lvm_vg_list_lvs to liblvm.
+ Add lvm_vg_open and lvm_vg_create_lv_linear to liblvm.
+ Add lvm_list_vg_names/uuids to liblvm.
+ Add lvm_errno and lvm_errmsg to liblvm to obtain failure information.
+ Rename lvm_create/destroy to lvm_init/quit.
+ Rename lvm_reload_config to lvm_config_reload.
+ Refactor _override_settings to use new override_config_tree_from_string.
+ Add vg_reduce to metadata.c and metadata-exported.h.
+ Update lvm.h to clarify API behavior and return codes.
+ Update lvm_vg_extend to do an implicit pvcreate on the device.
+ Update display.c to use vg_free(vg) instead of duplicating the calculation.
+ Refactor vg_size, vg_free, and pv_mda_count field calculations for liblvm.
+ Refactor pvcreate and lvcreate for liblvm.
+ Add global/wait_for_locks to lvm.conf so blocking for locks can be disabled.
+ All LV locks are non-blocking so remove LCK_NONBLOCK from separate macros.
+ Fix race condition with vgcreate and vgextend on same device (2.02.49).
+ Remove redundant validate_name call from vgreduce.
+ Remove unused handles lvseg, pvseg inside liblvm/lvm.h.
+ Add liblvm2app Makefile installation targets.
+ Add liblvm pkgconfig file.
+ Use newly-independent LVM_LIBAPI in liblvm soname. E.g. liblvm2app.so.2.1.
+ Add an API version number, LVM_LIBAPI, to the VERSION string for liblvm.
+ Pass a pointer to struct cmd_context to init_multiple_segtypes
+ Return EINVALID_CMD_LINE not success when invalid VG name format is used.
+ Remove unnecessary messages after vgcreate/vgsplit refactor (2.02.49).
+ Add log_errno to set a specific errno and replace log_error in due course.
+ Change create_toolcontext to still return an object if it fails part-way.
+ Add EUNCLASSIFIED (-1) as the default LVM errno code.
+ Store any errno and error messages issued while processing each command.
+ Use log_error macro consistently throughout in place of log_err.
+
+Version 2.02.49 - 15th July 2009
+================================
+ Add readonly locking type to replace implementation of --ignorelockingfailure.
+ Exclude VG_GLOBAL from vg_write_lock_held so scans open devs read-only again.
+ Add unit test case for liblvm VG create/delete APIs.
+ Add liblvm APIs to implement creation and deletion of VGs.
+ Initialize cmd->cmd_line to "liblvm" in new liblvm library.
+ Place handles to liblvm objects for pv, vg, lv, lvseg, pvseg inside lvm.h.
+ Refactor vgsplit and vgextend to remove READ_REQUIRE_RESIZEABLE flag.
+ Use _exit() not exit() after forking to avoid flushing libc buffers twice.
+ Add cast to log_info arg in _find_labeller to avoid Sparc64 warning.
+ Make cmd->cmd_line const.
+ Fix dev name mismatch in vgcreate man page example.
+ Refactor vg_remove_single for use in liblvm.
+ Make all tools use consistent lock ordering obtaining VG_ORPHAN lock second.
+ Check md devices for a partition table during device scan.
+ Add extended device (blkext) and md partition (mdp) types to filters.
+ Make text metadata read errors for segment areas more precise.
+ Fix text segment metadata read errors to mention correct segment name.
+ Include segment and LV names in text segment import error messages.
+ Add parent node to config_node structure.
+ Update vgsplit and vgcreate to call new vg_create and 'set' functions.
+ Change vg_create to take minimal parameters, obtain a lock, and return vg_t.
+ Refactor vgchange extent_size, max_lv, max_pv, and alloc_policy for liblvm.
+ Update t-vgcreate-usage.sh to test for default vg properties.
+ Fix memory leak in vgsplit when re-reading the vg.
+ Make various exit/cleanup paths more robust after lvm init failures.
+ Use LCK_NONBLOCK implicitly instead of explicit vg_read() flag.
+ Remove unnecessary locking and existence tests from new vg_read() interface.
+ Permit several segment types to be registered by a single shared object.
+ Update the man pages to document size units uniformly.
+ Allow commandline sizes to be specified in terms of bytes and sectors.
+ Update 'md_chunk_alignment' to use stripe-width to align PV data area.
+ Update test/t-inconsistent-metadata.sh to match new vg_read interface.
+ Add lvmcache_init() to polldaemon initialization.
+ Convert tools to use new vg_read / vg_read_for_update.
+ Fix segfault in vg_release when vg->cmd is NULL.
+
+Version 2.02.48 - 30th June 2009
+================================
+ Abort if automatic metadata correction fails when reading VG to update it.
+ Explicitly request fallback to default major number in device mapper.
+ Ignore suspended devices during repair.
+ Call vgreduce --removemissing automatically to fix missing PVs in dmeventd.
+ Suggest using lvchange --resync when adding leg to not-yet-synced mirror.
+ Destroy toolcontext on clvmd exit to avoid memory pool leaks.
+ Fix lvconvert not to poll mirror if no conversion in progress.
+ Fix memory leaks in toolcontext error path.
+ Reinstate partial activation support in clustered mode. (2.02.40)
+ Allow metadata correction even when PVs are missing.
+ Use 'lvm lvresize' instead of 'lvresize' in fsadm.
+ Do not use '-n' realine option in fsadm for busybox compatiblity.
+ Add vg_lock_newname() library function for vgrename, vgsplit and vgcreate.
+ Round up requested readahead to at least one page and print warning.
+ Try to repair vg before actual vgremove when force flag provided.
+ Fix possible double release of VG after recovery.
+ Add parameter to process_each_vg specifying what to do with inconsistent VG.
+ Unify error messages when processing inconsistent volume group.
+ Use lvconvert --repair instead of vgreduce in mirror dmeventd DSO.
+ Introduce lvconvert --use_policies (repair policy according to lvm.conf).
+ Update clvmd-corosync to match new corosync API.
+ Fix lib Makefile to include any shared libraries in default target.
+ Fix rename of active snapshot with virtual origin.
+ Fix convert polling to ignore LV with different UUID.
+ Cache underlying device readahead only before activation calls.
+ Fix segfault when calculating readahead on missing device in vgreduce.
+ Remove verbose 'visited' messages.
+ Handle multi-extent mirror log allocation when smallest PV has only 1 extent.
+ Add LSB standard headers and functions (incl. reload) to clvmd initscript.
+ When creating new LV, double-check that name is not already in use.
+ Remove /dev/vgname/lvname symlink automatically if LV is no longer visible.
+ Rename internal vorigin LV to match visible LV.
+ Suppress 'removed' messages displayed when internal LVs are removed.
+ Fix lvchange -a and -p for sparse LVs.
+ Fix lvcreate --virtualsize to activate the new device immediately.
+ Make --snapshot optional with lvcreate --virtualsize.
+ Generalise --virtualoriginsize to --virtualsize.
+ Skip virtual origins in process_each_lv_in_vg() without --all.
+ Fix counting of virtual origin LVs in vg_validate.
+ Attempt to load dm-zero module if zero target needed but not present.
+
+Version 2.02.47 - 22nd May 2009
+===============================
+ Rename liblvm.so to liblvm2app.so and use configure --enable-applib.
+ Reinstate version in liblvm2cmd.so soname. (2.02.44)
+
+Version 2.02.46 - 21st May 2009
+===============================
+ Inherit readahead setting from underlying devices during activation.
+ Detect LVs active on remote nodes by querying locks if supported.
+ Enable online resizing of mirrors.
+ Use suspend with flush when device size was changed during table preload.
+ Implement query_resource_fn for cluster_locking.
+ Support query_resource_fn in locking modules.
+ Introduce CLVMD_CMD_LOCK_QUERY command for clvmd.
+ Fix pvmove to revert operation if temporary mirror creation fails.
+ Fix metadata export for VG with missing PVs.
+ Add vgimportclone and install it and the man page by default.
+ Force max_lv restriction only for newly created LV.
+ Remove unneeded import parameter from lv_create_empty.
+ Merge lv_is_displayable and lv_is_visible functions.
+ Introduce lv_set_visible & lv_set_hidden functions.
+ Fix lv_is_visible to handle virtual origin.
+ Introduce link_lv_to_vg and unlink_lv_from_vg functions.
+ Remove lv_count from VG and use counter function instead.
+ Fix snapshot segment import to not use duplicate segments & replace.
+ Do not query nonexistent devices for readahead.
+ Remove NON_BLOCKING lock flag from tools and set a policy to auto-set.
+ Remove snapshot_count from VG and use function instead.
+ Fix first_seg() call for empty segment list.
+ Add install_lvm2 makefile target to install only the LVM2 components.
+ Reject missing PVs from allocation in toollib.
+ Fix PV datalignment for values starting prior to MDA area. (2.02.45)
+ Add sparse devices: lvcreate -s --virtualoriginsize (hidden zero origin).
+ Fix minimum width of devices column in reports.
+ Add lvs origin_size field.
+ Fix linux configure --enable-debug to exclude -O2.
+ Implement lvconvert --repair for repairing partially-failed mirrors.
+ Fix vgreduce --removemissing failure exit code.
+ Fix remote metadata backup for clvmd.
+ Introduce unlock_and_release_vg macro.
+ Introduce vg_release() to be called to free every struct volume_group.
+ Alloc PV internal structure from VG mempool if possible.
+ Fix metadata backup to run after vg_commit always.
+ Tidy clvmd volume lock cache functions.
+ Fix pvs report for orphan PVs when segment attributes are requested.
+ Fix pvs -a output to not read volume groups from non-PV devices.
+ Add MMC (mmcblk) device type to filters.
+ Introduce memory pools per volume group (to reduce memory for large VGs).
+ Use copy of PV structure when manipulating global PV lists.
+ Always return exit error status when locking of volume group fails.
+ Fix mirror log convert validation question.
+ Avoid referencing files from DESTDIR during build process.
+ Avoid creating some static libraries unless configured --enable-static_link.
+ Enable use of cached metadata for pvs and pvdisplay commands.
+ Add missing 'device-mapper' internal subdir build dependency.
+ Fix memory leak in mirror allocation code.
+ Save and restore the previous logging level when log level is changed.
+ Fix error message when archive initialization fails.
+ Make sure clvmd-corosync releases the lockspace when it exits.
+ Fix segfault for vgcfgrestore on VG with missing PVs.
+ Block SIGTERM & SIGINT in clvmd subthreads.
+ Detect and conditionally wipe swapspace signatures in pvcreate.
+ Fix maximal volume count check for snapshots if max_lv set for volume group.
+ Fix lvcreate to remove unused cow volume if the snapshot creation fails.
+ Fix error messages when PV uuid or pe_start reading fails.
+ Build new liblvm application-level library.
+ Rename liblvm.a to liblvm-internal.a.
+ Flush memory pool and fix locking in clvmd refresh and backup command.
+ Fix unlocks in clvmd-corosync. (2.02.45)
+ Fix error message when adding metadata directory to internal list fails.
+ Fix size and error message of memory allocation at backup initialization.
+ Remove old metadata backup file after renaming VG.
+ Restore log_suppress state when metadata backup file is up-to-date.
+
+Version 2.02.45 - 3rd March 2009
+================================
+ Avoid scanning empty metadata areas for VG names.
+ Attempt proper clean up in child before executing new binary in exec_cmd().
+ Do not scan devices if reporting only attributes from PV label.
+ Use pkgconfig to obtain corosync library details during configuration.
+ Fix error returns in clvmd-corosync interface to DLM.
+ Add --refresh to vgchange and vgmknodes man pages.
+ Pass --test from lvresize to fsadm as --dry-run.
+ Supply argv[] list to exec_cmd() to allow for variable number of parameters.
+ Prevent fsadm from checking mounted filesystems.
+ No longer treats any other key as 'no' when prompting in fsadm.
+ Tidy fsadm command line processing.
+ Add lib/lvm.h and lib/lvm_base.c for the new library interface.
+ Move tools/version.h to lib/misc/lvm-version.h.
+ Split LVM_VERSION into MAJOR, MINOR, PATCHLEVEL, RELEASE and RELEASE_DATE.
+ Add system_dir parameter to create_toolcontext().
+ Add --dataalignment to pvcreate to specify alignment of data area.
+ Exclude LCK_CACHE locks from _vg_lock_count, fixing interrupt unblocking.
+ Provide da and mda locations in debug message when writing text format label.
+ Mention the restriction on file descriptors at invocation on the lvm man page.
+ Index cached vgmetadata by vgid not vgname to cope with duplicate vgnames.
+ No longer require kernel and metadata major numbers to match.
+ Add a fully-functional get_cluster_name() to clvmd corosync interface.
+ Remove duplicate cpg_initialize from clvmd startup.
+ Add option to /etc/sysconfig/cluster to select cluster type for clvmd.
+ Allow clvmd to start up if its lockspace already exists.
+ Separate PV label attributes which do not need parse metadata when reporting.
+ Remove external dependency on the 'cut' command from fsadm.
+ Fix pvs segfault when pv mda attributes requested for not available PV.
+ Add fsadm support for reszing ext4 filesysystems.
+ Move locking_type reading inside init_locking().
+ Rename get_vgs() to get_vgnames() and clarify related error messages.
+ Allow clvmd to be built with all cluster managers & select one on cmdline.
+ Mention --with-clvmd=corosync in ./configure.
+ Replace internal vg_check_status() implementation.
+ Rename vg_read() to vg_read_internal().
+
+Version 2.02.44 - 26th January 2009
+===================================
+ Fix --enable-static_link after the recent repository changes.
+ Add corosync/DLM cluster interface to clvmd.
+ Add --nameprefixes, --unquoted, --rows to pvs, vgs, lvs man pages.
+ Fix lvresize size conversion for fsadm when block size is not 1K.
+ Fix pvs segfault when run with orphan PV and some VG fields.
+ Display a 'dev_size' of zero for missing devices in reports.
+ Add pv_mda_size to pvs and vg_mda_size to vgs.
+ Fix lvmdump /sys listing to include virtual devices directory.
+ Add "--refresh" functionality to vgchange and vgmknodes.
+ Avoid exceeding LV size when wiping device.
+ Calculate mirror log size instead of using 1 extent.
+ Ensure requested device number is available before activating with it.
+ Fix incorrect exit status from 'help <command>'.
+ Fix vgrename using UUID if there are VGs with identical names.
+ Fix segfault when invalid field given in reporting commands.
+ Move is_static from cmd to global is_static().
+ Refactor init_lvm() for lvmcmdline and clvmd.
+ Add liblvm interactive test infrastructure to build.
+ Add skeleton lvm2.h file in preparation for a shared library interface.
+ Use better random seed value in temp file creation.
+ Add read_urandom to read /dev/urandom. Use in uuid calculation.
+ Use displayable_lvs_in_vg and lv_is_displayable for consistency throughout.
+ Fix race in vgcreate that would result in second caller overwriting first.
+ Fix uninitialised lv_count in vgdisplay -c.
+ Don't skip updating pvid hash when lvmcache_info struct got swapped.
+ Add tinfo to termcap search path for pld-linux.
+ Fix startup race in clvmd.
+ Generate Red Hat clvmd startup script at config time with correct paths.
+ Fix clvmd & dmeventd builds after tree restructuring.
+ Cope with snapshot dependencies when removing a whole VG with lvremove.
+ Make man pages and tool help text consistent using | for alternative options.
+
+Version 2.02.43 - 10th November 2008
+====================================
+ Merge device-mapper into the lvm2 tree.
+ Correct prototype for --permission on lvchange and lvcreate man pages.
+ Exit with non-zero status from vgdisplay if couldn't show any requested VG.
+ Move list.c into libdevmapper and rename functions.
+ Rename a couple of variables that matched function names.
+ Use simplified x.y.z version number in libdevmapper.pc.
+ Remove ancient debian directory.
+ Split out lvm-logging.h from log.h and lvm-globals.[ch] from log.[ch].
+
+Version 2.02.42 - 26th October 2008
+===================================
+ Accept locking fallback_to_* options in the global section as documented.
+ Fix temp table activation in mirror conversions not to happen in other cmds.
+ Fix temp table in mirror conversions to use always-present error not zero.
+
+Version 2.02.41 - 17th October 2008
+===================================
+ Use temp table to set device size when converting mirrors.
+ In resume_mirror_images replace activate_lv with resume_lv as workaround.
+ Avoid overwriting in-use on-disk text metadata by forgetting MDA_HEADER_SIZE.
+ Fix snapshot monitoring library to not cancel monitoring invalid snapshot.
+ Generate man pages from templates and include version.
+ Add usrlibdir and usrsbindir to configure.
+ Fix conversion of md chunk size into sectors.
+ Free text metadata buffer after a failure writing it.
+ Fix misleading error message when there are no allocatable extents in VG.
+ Fix handling of PVs which reappeared with old metadata version.
+ Fix mirror DSO to call vgreduce with proper parameters.
+ Fix validation of --minor and --major in lvcreate to require -My always.
+ Fix release: clvmd build, vgreduce consolidate & tests, /dev/ioerror warning.
+
+Version 2.02.40 - 19th September 2008
+=====================================
+ Allow lvremove to remove LVs from VGs with missing PVs.
+ In VG with PVs missing, by default allow activation of LVs that are complete.
+ Track PARTIAL_LV and MISSING_PV flags internally.
+ Require --force with --removemissing in vgreduce to remove partial LVs.
+ No longer write out PARTIAL flag into metadata backups.
+ Treat new default activation/missing_stripe_filler "error" as an error target.
+ Remove internal partial_mode.
+ Add devices/md_chunk_alignment to lvm.conf.
+ Pass struct physical_volume to pe_align and adjust for md chunk size.
+ Store sysfs location in struct cmd_context.
+ Avoid shuffling remaining mirror images when removing one, retaining primary.
+ Add missing LV error target activation in _remove_mirror_images.
+ Prevent resizing an LV while lvconvert is using it.
+ Avoid repeatedly wiping cache while VG_GLOBAL is held in vgscan & pvscan.
+ Fix pvresize to not allow resize if PV has two metadata areas.
+ Fix setting of volume limit count if converting to lvm1 format.
+ Fix vgconvert logical volume id metadata validation.
+ Fix lvmdump metadata gather option (-m) to work correctly.
+ Fix allocation bug in text metadata format write error path.
+ Fix vgcfgbackup to properly check filename if template is used.
+ configure aborts if lcov or genhtml are missing with --enable-profiling
+ vgremove tries to remove lv snapshot first.
+ Added function lv_remove_with_dependencies().
+ Improve file descriptor leak detection to display likely culprit and filename.
+ Change clustered mirror kernel module name from cmirror to dm-log-clustered.
+ Avoid looping forever in _pv_analyze_mda_raw used by pvck.
+ Change lvchange exit status to indicate if any part of the operation failed.
+ Fix pvchange and pvremove to handle PVs without mdas.
+ Refactor _text_pv_read and always return mda list if requested.
+ Fix configure to work w/o readline unless --enable-readline used. (2.02.39)
+ Remove is_lvm_partition template which has not yet been coded.
+ Refactor pvcreate to separate parameter parsing from validation logic.
+ Check for label_write() failure in _text_pv_write().
+ Add pvcreate tests and update vgsplit tests to handle lvm1 and lvm2 metadata.
+ Fix pvchange -M1 -u to preserve existing extent locations when there's a VG.
+ Cease recognising snapshot-in-use percentages returned by early devt kernels.
+ Add backward-compatible flags field to on-disk format_text metadata.
+ Fix dmeventd monitoring libraries to link against liblvm2cmd again. (2.02.39)
+
+Version 2.02.39 - 27th June 2008
+================================
+ Enable readline by default if available.
+ Update autoconf to 2008-01-16.
+ Add $DISTCLEAN_DIRS to make.tmpl.in.
+ Create coverage reports with --enable-profiling and make lcov or lcov-dated.
+ Fix up cache for PVs without mdas after consistent VG metadata is processed.
+ Update validation of safe mirror log type conversions in lvconvert.
+ Fix lvconvert to disallow snapshot and mirror combinations.
+ Fix reporting of LV fields alongside unallocated PV segments.
+ Add --unquoted and --rows to reporting tools.
+ Add and use uninitialized_var() macro to suppress invalid compiler warnings.
+ Introduce enum for md minor sb version to suppress compiler warning.
+ Avoid undefined return value after _memlock manipulation in lvm2_run.
+ Avoid link failure if configured without --enable-cmdlib or --enable-readline.
+ Make clvmd return at once if other nodes down in a gulm or openais cluster.
+ Fix and improve readahead 'auto' calculation for stripe_size.
+ Fix lvchange output for -r auto setting if auto is already set.
+ Add test case for readahead.
+ Avoid ambiguous use of identifier error_message_produced.
+ Begin syncing configure.in for merge/unification with device-mapper.
+ Fix add_mirror_images not to dereference uninitialized log_lv upon failure.
+ Don't call openlog for every debug line output by clvmd.
+ Add --force to lvextend and lvresize.
+ Fix vgchange not to activate component mirror volumes directly.
+ Fix test directory clean up in make distclean.
+
+Version 2.02.38 - 11th June 2008
+================================
+ Fix tracking of validity of PVs with no mdas in lvmcache.
+ Fix return values for reporting commands when run with no PVs, LVs, or VGs.
+ Add omitted unlock_vg() call when sigint_caught() during vg processing.
+ Fix free_count when reading pool metadata.
+ Fix segfault when using pvcreate on a device containing pool metadata.
+ Fix segfault after _free_vginfo by remembering to remove vginfo from list.
+ Tweak detection of invalid fid after changes to PVs in VG in _vg_read.
+ Revert assuming precommitted metadata is live when activating (unnecessary).
+ Drop cached metadata for disappearing VG in vgmerge.
+ In script-processing mode, stop if any command fails.
+ Warn if command exits with non-zero status code without a prior log_error.
+ Check lv_count in vg_validate.
+ Add --nameprefixes to reporting tools for field name prefix output format.
+
+Version 2.02.37 - 6th June 2008
+===============================
+ Make clvmd-cman use a hash rather than an array for node updown info.
+ Correct config file line numbers in messages when parsing comments.
+ Drop cached metadata when renaming a VG.
+ Allow for vginfo changing during _vg_read.
+ Decode numbers in clvmd debugging output.
+ Add missing deactivation after activation failure in lvcreate -Zy.
+ When activating, if precommitted metadata is still cached, assume it's live.
+ When removing LV symlinks, skip any where the VG name is not determined.
+ Drop metadata cache if update fails in vg_revert or vg_commit.
+ Avoid spurious duplicate VG messages referring to VGs that are gone.
+ Drop dev_name_confirmed error message to debug level.
+ Fix setpriority error message to signed int.
+ Temporarily disable dmeventd mirror monitoring during lvchange --resync.
+ Refactor some vginfo manipulation code.
+ Add assertions to trap deprecated P_ and V_ lock usage.
+ Add missing mutex around clvmd lvmcache_drop_metadata library call.
+ Fix uninitialised mutex in clvmd if all daemons are not running at startup.
+ Avoid using DLM locks with LCK_CACHE type P_ lock requests.
+ When asked to drop cached committed VG metadata, invalidate cached PV labels.
+ Drop metadata cache before writing precommitted metadata instead of after.
+ Don't touch /dev in vgrename if activation is disabled.
+
+Version 2.02.36 - 29th April 2008
+=================================
+ Fix fsadm.sh to work with older blockdev, blkid & readlink binaries.
+ Fix lvresize to pass new size to fsadm when extending device.
+ Remove unused struct in clvmd-openais, and use correct node count.
+ Fix nodes list in clvmd-openais, and allow for broadcast messages.
+ Exclude VG_GLOBAL from internal concurrent VG lock counter.
+ Fix vgsplit internal counting of snapshot LVs.
+ Fix vgmerge snapshot_count when source VG contains snapshots.
+ Simplify clvmd-openais by using non-async saLckResourceLock.
+ Fix internal LV counter when a snapshot is removed.
+ Fix metadata corruption writing lvm1-formatted metadata with snapshots.
+ Fix lvconvert -m0 allocatable space check.
+
+Version 2.02.35 - 15th April 2008
+=================================
+ Drop cached VG metadata before and after committing changes to it.
+ Rename P_global to P_#global.
+ Don't attempt remote metadata backups of non-clustered VGs. (2.02.29)
+ Don't store fid in VG metadata cache to avoid clvmd segfault. (2.02.34)
+ Update vgsplit tests to verify loosening of active LV restriction.
+ Update vgsplit to only restrict split with active LVs involved in split.
+ Add lv_is_active() to determine whether an lv is active.
+
+Version 2.02.34 - 10th April 2008
+=================================
+ Improve preferred_names lvm.conf example.
+ Fix vgdisplay 'Cur LV' field to match lvdisplay output.
+ Fix lv_count report field to exclude hidden LVs.
+ Add vg_is_clustered() helper function.
+ Fix vgsplit to only move hidden 'snapshotN' LVs when necessary.
+ Update vgsplit tests for lvnames on the cmdline.
+ Update vgsplit man page to reflect lvnames on the cmdline.
+ Update vgsplit to take "-n LogicalVolumeName" on the cmdline.
+ Use clustered mirror log with pvmove in clustered VGs, if available.
+ Fix some pvmove error status codes.
+ Fix vgsplit error paths to release vg_to lock.
+ Indicate whether or not VG is clustered in vgcreate log message.
+ Mention default --clustered setting in vgcreate man page.
+ Add config file overrides to clvmd when it reads the active LVs list.
+ Fix vgreduce to use vg_split_mdas to check sufficient mdas remain.
+ Add (empty) orphan VGs to lvmcache during initialisation.
+ Fix orphan VG name used for format_pool.
+ Create a fid for internal orphan VGs.
+ Update lvmcache VG lock state for all locking types now.
+ Fix output if overriding command_names on cmdline.
+ Add detection of clustered mirror log capability.
+ Add check to vg_commit() ensuring VG lock held before writing new VG metadata.
+ Add validation of LV name to pvmove -n.
+ Make clvmd refresh the context correctly when lvm.conf is updated.
+ Add some basic internal VG lock validation.
+ Add per-command flags to control which commands use the VG metadata cache.
+ Fix vgsplit locking of new VG (2.02.30).
+ Avoid erroneous vgsplit error message for new VG. (2.02.29)
+ Suppress duplicate message when lvresize fails because of invalid vgname.
+ Cache VG metadata internally while VG lock is held.
+ Fix redundant lvresize message if vg doesn't exist.
+ Fix another allocation bug with clvmd and large node IDs.
+ Add find_lv_in_lv_list() and find_pv_in_pv_list().
+ Fix uninitialised variable in clvmd that could cause odd hangs.
+ Add vgmerge tests.
+ Add pvseg_is_allocated() for identifying a PV segment allocated to a LV.
+ Add list_move() for moving elements from one list to another.
+ Add 'is_reserved_lvname()' for identifying hidden LVs.
+ Correct command name in lvmdiskscan man page.
+ clvmd no longer crashes if it sees nodeids over 50.
+ Fix potential deadlock in clvmd thread handling.
+ Refactor text format initialisation into _init_text_import.
+ Escape double quotes and backslashes in external metadata and config data.
+ Add functions for escaping double quotes in strings.
+ Rename count_chars_len to count_chars.
+ Use return_0 in a couple more places.
+ Correct a function name typo in _line_append error message.
+ Include limits.h in clvmd so it compiles with newer headers.
+ Add VirtIO disks (virtblk) to filters.
+ Fix resetting of MIRROR_IMAGE and VISIBLE_LV after removal of LV. (2.02.30)
+ Fix remove_layer_from_lv to empty the LV before removing it. (2.02.30)
+ Add missing no-longer-used segs_using_this_lv test to check_lv_segments.
+ Remove redundant non-NULL tests before calling free in clvmd.c.
+ Avoid a compiler warning: make is_orphan's parameter const.
+ Fix lvconvert detection of mirror conversion in progress. (2.02.30)
+ Avoid automatic lvconvert polldaemon invocation when -R specified. (2.02.30)
+ Fix 'pvs -a' to detect VGs of PVs without metadata areas.
+ Divide up internal orphan volume group by format type.
+ Update usage message for clvmd.
+ Fix clvmd man page not to print <br> and clarified debug options.
+ Fix lvresize to support /dev/mapper prefix in the LV name.
+ Fix unfilled parameter passed to fsadm from lvresize.
+ Update fsadm to call lvresize if the partition size differs (with option -l).
+ Fix fsadm to support VG/LV names.
+
+Version 2.02.33 - 31st January 2008
+===================================
+ Fix mirror log name construction during lvconvert. (2.02.30)
+ Make monitor_dev_for_events recurse through the stack of LVs.
+ Clean up some more compiler warnings.
+ Some whitespace tidy-ups.
+ Use stack return macros throughout.
+ Rely upon internally-cached PV labels while corresponding VG lock is held.
+
+Version 2.02.32 - 29th January 2008
+===================================
+ Fix two check_lv_segments error messages to show whole segment.
+ Refactor mirror log attachment code.
+ Fix internal metadata corruption in lvchange --resync. (2.02.30)
+ Fix new parameter validation in vgsplit and test mode. (2.02.30)
+ Remove redundant cnxman-socket.h file from clvmd directory.
+ Fix pvs, vgs, lvs error exit status on some error paths.
+
+Version 2.02.31 - 19th January 2008
+===================================
+ Fix lvcreate --nosync not to wait for non-happening sync. (2.02.30)
+ Add very_verbose lvconvert messages.
+ Avoid readahead error message with default setting of lvcreate -M1. (2.02.29)
+
+Version 2.02.30 - 17th January 2008
+===================================
+ Set default readahead to twice maximium stripe size.
+ Reinstate VG extent size and stripe size defaults (halved). (2.02.29)
+ Add lists of stacked LV segments using each LV to the internal metadata.
+ Change vgsplit -l (for unimplemented --list) into --maxlogicalvolumes.
+ Fix process_all_pvs to detect non-orphans with no MDAs correctly.
+ Don't use block_on_error with mirror targets version 1.12 and above.
+ Update vgsplit to accept vgcreate options when new VG is destination.
+ Update vgsplit to accept existing VG as destination.
+ lvconvert waits for completion of initial sync by default.
+ Refactor vgcreate for parameter validation and add tests.
+ Add new convert_lv field to lvs output.
+ Print warning when lvm tools are running as non-root.
+ Add snapshot dmeventd library (enables dmeventd snapshot monitoring).
+ Prevent pvcreate from overwriting MDA-less PVs belonging to active VGs.
+ Fix a segfault if using pvs with --all argument. (2.02.29)
+ Update --uuid argument description in man pages.
+ Fix vgreduce PV list processing not to process every PV in the VG. (2.02.29)
+ Extend lvconvert to use polldaemon.
+ Add support for stacked mirrors.
+ Major restructuring of pvmove and lvconvert layer manipulation code.
+ Replace tools/fsadm with scripts/fsadm.sh.
+ Append fields to report/pvsegs_cols_verbose.
+ Permit LV segment fields with PV segment reports.
+ Add seg_start_pe and seg_pe_ranges to reports.
+
+Version 2.02.29 - 5th December 2007
+===================================
+ Make clvmd backup vg metadata on remote nodes.
+ Refactor pvmove allocation code.
+ Decode cluster locking state in log message.
+ Change file locking state messages from debug to very verbose.
+ Fix --addtag to drop @ prefix from name.
+ Stop clvmd going haywire if a pre_function fails.
+ Convert some vg_reads into vg_lock_and_reads.
+ Avoid nested vg_reads when processing PVs in VGs and fix associated locking.
+ Accept sizes with --readahead argument.
+ Store size arguments as sectors internally.
+ Attempt to remove incomplete LVs with lvcreate zeroing/activation problems.
+ Add read_ahead activation code.
+ Add activation/readahead configuration option and FMT_RESTRICTED_READAHEAD.
+ Extend readahead arg to accept "auto" and "none".
+ Add lv_read_ahead and lv_kernel_read_ahead fields to reports and lvdisplay.
+ Prevent lvconvert -s from using same LV as origin and snapshot.
+ Fix human-readable output of odd numbers of sectors.
+ Add pv_mda_free and vg_mda_free fields to reports for raw text format.
+ Add LVM2 version to 'Generated by' comment in metadata.
+ Show 'not usable' space when PV is too large for device in pvdisplay.
+ Ignore and fix up any excessive device size found in metadata.
+ Fix error message when fixing up PV size in lvm2 metadata (2.02.11).
+ Fix orphan-related locking in pvdisplay and pvs.
+ Fix missing VG unlocks in some pvchange error paths.
+ Add some missing validation of VG names.
+ Rename validate_vg_name() to validate_new_vg_name().
+ Change orphan lock to VG_ORPHANS.
+ Change format1 to use ORPHAN as orphan VG name.
+ Convert pvchange, pvdisplay, pvscan to use is_orphan()
+ Add is_orphan_vg() and change all hard-coded checks to use it.
+ Detect md superblocks version 1.0, 1.1 and 1.2.
+ Add _alloc_pv() and _free_pv() from _pv_create() code and fix error paths.
+ Add pv_dev_name() to access PV device name.
+ Add const attributes to pv accessor functions.
+ Refactor vg_add_snapshot() and lv_create_empty().
+ Handle new sysfs subsystem/block/devices directory structure.
+ Run test with LVM_SYSTEM_DIR pointing to private root and /dev dirs.
+ Fix a bug in lvm_dump.sh checks for lvm/dmsetup binaries.
+ Fix underquotations in lvm_dump.sh.
+ Refactor lvcreate stripe and mirror parameter validation.
+ Print --help output to stdout, not stderr.
+ After a cmdline processing error, don't print help text but suggest --help.
+ Add %PVS extents option to lvresize, lvextend, and lvcreate.
+ Add 'make check' to run tests in new subdirectory 'test'.
+ Moved the obsolete test subdirectory to old-tests.
+ Cope with relative paths in configure --with-dmdir.
+ Remove no-longer-correct restrictions on PV arg count with stripes/mirrors.
+ Fix strdup memory leak in str_list_dup().
+ Link with -lpthread when static SELinux libraries require that.
+ Detect command line PE values that exceed their 32-bit range.
+ Include strerror string in dev_open_flags' stat failure message.
+ Move guts of pvresize into library.
+ Avoid error when --corelog is provided without --mirrorlog. (2.02.28)
+ Correct --mirrorlog argument name in man pages (not --log).
+ Clear MIRROR_NOTSYNCED LV flag when converting from mirror to linear.
+ Modify lvremove to prompt for removal if LV active on other cluster nodes.
+ Add '-f' to vgremove to force removal of VG even if LVs exist.
+
+Version 2.02.28 - 24th August 2007
+==================================
+ Fix clvmd logging so you can get lvm-level debugging out of it.
+ Introduce VG_GLOBAL lock type for vgscan/pvscan to trigger clvmd -R.
+ Change locking_flags from int to uint32_t.
+ Fix clvmd -R, so it fully refreshes the caches.
+ Change lvconvert_mirrors to use mirror segtype not striped.
+ Fix lvconvert_mirrors detection of number of existing mirrors.
+ Clean up numerous compiler warnings that appeared in recent releases.
+ Remove several unused parameters from _allocate().
+ Only permit --force, --verbose and --debug arguments to be repeated.
+ Fix inconsistent licence notices: executables are GPLv2; libraries LGPLv2.1.
+ Move guts of vgremove and lvremove into library, including yes_no_prompt.
+ Allow clvmd debug to be turned on in a running daemon using clvmd -d [-C].
+ Update to use autoconf 2.61, while still supporting 2.57.
+ Add more cluster info to lvmdump.
+ Add further const attributes throughout.
+ Add support for renaming mirrored LVs.
+ Factor out core of lvrename() to library function.
+ Add --mirrorlog argument to specify log type for mirrors.
+ Don't attempt to monitor devices if their creation failed in _lv_activate.
+ Don't leak a file descriptor in fcntl_lock_file() when fcntl fails.
+ Replace create_dir with dm_create_dir.
+ Detect stream write failure reliably with lvm_fclose using dm_fclose.
+ Fix clvmd if compiled with gulm support. (2.02.26)
+ Fix lvdisplay man page to say LV size is reported in sectors, not KB.
+ Add vg_lock_and_read() external library function.
+ Fix loading of persistent cache if cache_dir is used. (2.02.23)
+ Reduce _compare_paths lstat error message from log_error to log_very_verbose.
+ Create util.h with last_path_component replacing strdup + basename.
+ Use gcc's printf attribute wherever possible.
+ In _line_append, use "sizeof buf - 1" rather than equivalent "4095".
+ Introduce is_same_inode macro, now including a comparison of st_dev.
+ Don't leak a file descriptor in _lock_file() when flock fails.
+ Add SUN's LDOM virtual block device (vdisk) and ps3disk to filters.
+ Split metadata-external.h out from metadata.h for the tools to use.
+
+Version 2.02.27 - 17th July 2007
+================================
+ Fix snapshot cow area deactivation if origin is not active. (2.02.13)
+ Fix configure libdevmapper.h check when --with-dmdir is used.
+ Turn _add_pv_to_vg() into external library function add_pv_to_vg().
+ Add pv_by_path() external library function.
+ Tidy clvmd-openais of redundant bits, and improve an error report.
+ Cope with find_seg_by_le() failure in check_lv_segments().
+ Call dev_iter_destroy() if _process_all_devs() is interrupted by sigint.
+ Add vg_mda_count and pv_mda_count columns to reports.
+ Fix dumpconfig to use log_print instead of stdout directly.
+ Remove unused parameter 'fid' from _add_pv_to_vg.
+ Add kernel and device-mapper targets versions to lvmdump.
+ Replace BSD (r)index with C89 str(r)chr.
+ Handle vgsplit of an entire VG as a vgrename.
+ Reinitialise internal lvmdiskscan variables when called repeatedly.
+ Fix missing lvm_shell symbol in lvm2cmd library. (2.02.23)
+ Add vg_status function and clean up vg->status in tools directory.
+ Add --ignoremonitoring to disable all dmeventd interaction.
+ Remove get_ prefix from get_pv_* functions.
+ clvmd-openais now uses cpg_local_get() to get nodeid, rather than Clm.
+ Print warnings to stderr instead of stdout.
+
+Version 2.02.26 - 15th June 2007
+================================
+ Update vgcfgrestore man page.
+ Allow keyboard interrupt during user prompts when appropriate.
+ Remove unused clvmd system-lv code.
+ Replace many physical_volume struct dereferences with new get_pv_* functions.
+ Suppress a benign compile-time warning.
+ Convert find_pv_in_vg_by_uuid and pv_create to use PV handles.
+ Add wrappers to some functions in preparation for external LVM library.
+ Add -f to vgcfgrestore to list metadata backup files.
+ Add vg_check_status to consolidate vg status checks and error messages.
+ Add pvdisplay --maps implementation.
+ Remove unsupported LVM1 options from vgcfgrestore man page.
+ Update vgcfgrestore man page to show mandatory VG name.
+ Update vgrename man page to include UUID and be consistent with lvrename.
+ Add (experimental) OpenAIS support to clvmd.
+ Fix deactivation code to follow dependencies and remove symlinks.
+ Fix and clarify vgsplit error messages.
+ Fix a segfault in device_is_usable() if a device has no table.
+ Add some more debug messages to clvmd startup.
+ Misc clvmd cleanups.
+
+Version 2.02.25 - 27th April 2007
+=================================
+ Fix get_config_uint64() to read a 64-bit value not a 32-bit one.
+ Add -Wformat-security and change one fprintf() to fputs().
+ Move regex functions into libdevmapper.
+ Change some #include lines to search only standard system directories.
+ Add devices/preferred_names config regex list for displayed device names.
+ Free a temporary dir string in fcntl_lock_file() after use.
+ Fix a dm_pool_destroy() in matcher_create().
+ Introduce goto_bad macro.
+ Fix warnings on x86_64 involving ptrdiff_t in log_error messages.
+ Update pvck to include text metadata area and record detection.
+ Add support functions for token counting in config file extracts.
+ Update pvck to read labels on disk, with --labelsector parameter.
+ Add count_chars and count_chars_len functions.
+ Add /sys/block listings to lvm_dump.sh.
+ Make lvm_dump.sh list /dev recursively.
+ Fix thread race in clvmd.
+ Add scan_sector param to label_read and _find_labeller.
+ Make clvmd cope with quorum devices.
+ Add extra internal error checking to clvmd.
+ Add dev_read_circular.
+ Add pvck command stub.
+ Update lists of attribute characters in man pages.
+ Change cling alloc policy attribute character from 'C' to l'.
+ Fix creation and conversion of mirrors with tags.
+ Fix vgsplit for lvm1 format (set and validate VG name in PVs metadata).
+ Split metadata areas in vgsplit properly.
+
+Version 2.02.24 - 19th March 2007
+=================================
+ Fix processing of exit status in init scripts
+ Fix vgremove to require at least one vg argument.
+ Fix reading of striped LVs in LVM1 format.
+ Flag nolocking as clustered so clvmd startup sees clustered LVs. (2.02.10)
+ Add a few missing pieces of vgname command line validation.
+ Support the /dev/mapper prefix on most command lines.
+
+Version 2.02.23 - 8th March 2007
+================================
+ Fix vgrename active LV check to ignore differing vgids.
+ Remove no-longer-used uuid_out parameter from activation info functions.
+ Fix two more segfaults if an empty config file section encountered.
+ Move .cache file into a new /etc/lvm/cache directory by default.
+ Add devices/cache_dir & devices/cache_file_prefix, deprecating devices/cache.
+ Create directory in fcntl_lock_file() if required.
+ Exclude readline support from lvm.static.
+ Fix a leak in a reporting error path (2.02.19).
+
+Version 2.02.22 - 13th February 2007
+====================================
+ Correct -b and -P on a couple of man pages.
+ Add global/units to example.conf.
+ Fix loading of segment_libraries.
+ If a PV reappears after it was removed from its VG, make it an orphan.
+ Don't update metadata automatically if VGIDs don't match.
+ Fix some vgreduce --removemissing command line validation.
+
+Version 2.02.21 - 30th January 2007
+===================================
+ Add warning to lvm2_monitoring_init_rhel4 if attempting to stop monitoring.
+ Fix vgsplit to handle mirrors.
+ Reorder fields in reporting field definitions.
+ Fix vgs to treat args as VGs even when PV fields are displayed.
+ Fix md signature check to handle both endiannesses.
+
+Version 2.02.20 - 25th January 2007
+===================================
+ dmeventd mirror sets ignore_suspended_devices and avoids scanning mirrors.
+ Add devices/ignore_suspended_devices to ignore suspended dm devices.
+ Add some missing close() and fclose() return code checks.
+ Fix exit statuses of reporting tools (2.02.19).
+ Add init script for dmeventd monitoring.
+ lvm.static no longer interacts with dmeventd unless explicitly asked to.
+ Add field definitions to report help text.
+ Remove unnecessary cmd arg from target_*monitor_events().
+ Add private variable to dmeventd shared library interface.
+ Long-lived processes write out persistent dev cache in refresh_toolcontext().
+ Fix refresh_toolcontext() always to wipe persistent device filter cache.
+ Add is_long_lived to toolcontext.
+ Add --clustered to man pages.
+ Streamline dm_report_field_* interface.
+ Change remaining dmeventd terminology 'register' to 'monitor'.
+ Update reporting man pages.
+ No longer necessary to specify alignment type for report fields.
+
+Version 2.02.19 - 17th January 2007
+===================================
+ Fix a segfault if an empty config file section encountered.
+ Move basic reporting functions into libdevmapper.
+ Fix partition table processing after sparc changes (2.02.16).
+ Fix cmdline PE range processing segfault (2.02.13).
+ Some libdevmapper-event interface changes.
+ Report dmeventd mirror monitoring status.
+ Fix dmeventd mirror status line processing.
+
+Version 2.02.18 - 11th January 2007
+===================================
+ Revised libdevmapper-event interface for dmeventd.
+ Remove dmeventd mirror status line word limit.
+ Use CFLAGS when linking so mixed sparc builds can supply -m64.
+ Prevent permission changes on active mirrors.
+ Print warning instead of error message if lvconvert cannot zero volume.
+ Add snapshot options to lvconvert man page.
+ dumpconfig accepts a list of configuration variables to display.
+ Change dumpconfig to use --file to redirect output to a file.
+ Avoid vgreduce error when mirror code removes the log LV.
+ Remove 3 redundant AC_MSG_RESULTs from configure.in.
+ Free memory in _raw_read_mda_header() error paths.
+ Fix ambiguous vgsplit error message for split LV.
+ Fix lvextend man page typo.
+ Add configure --with-dmdir to compile against a device-mapper source tree.
+ Use no flush suspending for mirrors.
+ Add dmeventd_mirror register_mutex, tidy initialisation & add memlock.
+ Fix create mirror with name longer than 22 chars.
+ Fix some activate.c prototypes when compiled without devmapper.
+ Fix dmeventd mirror to cope if monitored device disappears.
+
+Version 2.02.17 - 14th December 2006
+====================================
+ Add missing pvremove error message when device doesn't exist.
+ When lvconvert allocates a mirror log, respect parallel area constraints.
+ Use loop to iterate through the now-ordered policy list in _allocate().
+ Check for failure to allocate just the mirror log.
+ Introduce calc_area_multiple().
+ Support mirror log allocation when there is only one PV: area_count now 0.
+ Fix detection of smallest area in _alloc_parallel_area() for cling policy.
+ Add manpage entry for clvmd -T
+ Fix gulm operation of clvmd, including a hang when doing lvchange -aey
+ Fix hang in clvmd if a pre-command failed.
+
+Version 2.02.16 - 1st December 2006
+===================================
+ Fix VG clustered read locks to use PR not CR.
+ Adjust some alignments for ia64/sparc.
+ Fix mirror segment removal to use temporary error segment.
+ Always compile debug logging into clvmd.
+ Add startup timeout to RHEL4 clvmd startup script.
+ Add -T (startup timeout) switch to clvmd.
+ Improve lvm_dump.sh robustness.
+ Update lvm2create_initrd to support gentoo.
+
+Version 2.02.15 - 21st November 2006
+====================================
+ Fix clvmd_init_rhel4 line truncation (2.02.14).
+ Install lvmdump by default.
+ Fix check for snapshot module when activating snapshot.
+ Fix pvremove error path for case when PV is in use.
+ Warn if certain duplicate config file entries are seen.
+ Enhance lvm_dump.sh for sysreport integration and add man page.
+ Fix --autobackup argument which could never disable backups.
+ Fix a label_verify error path.
+
+Version 2.02.14 - 10th November 2006
+====================================
+ Fix adjusted_mirror_region_size() to handle 64-bit size.
+ Add some missing bounds checks on 32-bit extent counters.
+ Add Petabyte and Exabyte support.
+ Fix lvcreate error message when 0 extents requested.
+ lvremove man page: volumes must be cluster inactive before being removed.
+ Protect .cache manipulations with fcntl locking.
+ Change .cache timestamp comparisons to use ctime.
+ Fix mirror log LV writing to set all bits in whole LV.
+ Fix clustered VG detection and default runlevels in clvmd_init_rhel4.
+ Fix high-level free space check for partial allocations.
+
+Version 2.02.13 - 27th October 2006
+===================================
+ Add couple of missing files to tools/Makefile CLEAN_TARGETS.
+ When adding snapshot leave cow LV mapped device active after zeroing.
+ Fix a clvmd debug message.
+ Add dev_flush() to set_lv().
+ Add lvchange --resync.
+ Perform high-level free space check before each allocation attempt.
+ Don't allow a node to remove an LV that's exclusively active on anther node.
+ Cope if same PV is included more than once in cmdline PE range list.
+ Set PV size to current device size if it is found to be zero.
+ Add segment parameter to target_present functions.
+
+Version 2.02.12 - 16th October 2006
+===================================
+ Fix pvdisplay to use vg_read() for non-orphans.
+ Fall back to internal locking if external locking lib is missing or fails.
+ Retain activation state after changing LV minor number with --force.
+ Propagate clustered flag in vgsplit and require resizeable flag.
+
+Version 2.02.11 - 12th October 2006
+===================================
+ Add clvmd function to return the cluster name. not used by LVM yet.
+ Add cling allocation policy.
+ Change _check_contiguous() to use _for_each_pv().
+ Extend _for_each_pv() to allow termination without error.
+ Abstract _is_contiguous().
+ Remove duplicated pv arg from _check_contiguous().
+ Accept regionsize with lvconvert.
+ Add report columns with underscore before field names ending 'size'.
+ Correct regionsize default on lvcreate man page (MB).
+ Fix clvmd bug that could cause it to die when a node with a long name crashed.
+ Add device size to text metadata.
+ Fix format_text mda_setup pv->size and pv_setup pe_count calculations.
+ Fix _for_each_pv() for mirror with core log.
+ Add lvm_dump.sh script to create a tarball of debugging info from a system.
+ Capture error messages in clvmd and pass them back to the user.
+ Remove unused #defines from filter-md.c.
+ Make clvmd restart init script wait until clvmd has died before starting it.
+ Add -R to clvmd which tells running clvmds to reload their device cache.
+ Add LV column to reports listing kernel modules needed for activation.
+ Show available fields if report given invalid field. (e.g. lvs -o list)
+ Add timestamp functions with --disable-realtime configure option.
+ Add %VG, %LV and %FREE suffices to lvcreate/lvresize --extents arg.
+ Fix two potential NULL pointer derefs in error cases in vg_read().
+ Separate --enable-cluster from locking lib options in lvmconf.sh.
+ Add a missing comma in lvcreate man page.
+
+Version 2.02.10 - 19th September 2006
+=====================================
+ Fix lvconvert mirror change case detection logic.
+ Fix mirror log detachment so it correctly becomes a standalone LV.
+ Extend _check_contiguous() to detect single-area LVs.
+ Include mirror log (untested) in _for_each_pv() processing.
+ Use MIRROR_LOG_SIZE constant.
+ Remove struct seg_pvs from _for_each_pv() to generalise.
+ Avoid adding duplicates to list of parallel PVs to avoid.
+ Fix several incorrect comparisons in parallel area avoidance code.
+ Fix segment lengths when flattening existing parallel areas.
+ Log existing parallel areas prior to allocation.
+ Fix mirror log creation when activation disabled.
+ Don't attempt automatic recovery without proper locking.
+ When using local file locking, skip clustered VGs.
+ Add fallback_to_clustered_locking and fallback_to_local_locking parameters.
+ lvm.static uses built-in cluster locking instead of external locking.
+ Don't attempt to load shared libraries if built statically.
+ Change default locking_lib to liblvm2clusterlock.so.
+ Add skip_dev_dir() to process command line VGs.
+ Stop clvmd complaining about nodes that have left the cluster.
+ Move lvm_snprintf(), split_words() and split_dm_name() into libdevmapper.
+ Add lvconvert man page.
+ Add mirror options to man pages.
+ Prevent mirror renames.
+ Move CMDLIB code into separate file and record whether static build.
+
+Version 2.02.09 - 17th August 2006
+==================================
+ Fix PE_ALIGN for pagesize over 32KB.
+ Separate out LVM1_PE_ALIGN and pe_align().
+ Add lvm_getpagesize wrapper.
+ Add --maxphysicalvolumes to vgchange.
+
+Version 2.02.08 - 15th August 2006
+==================================
+ Add checks for duplicate LV name, lvid and PV id before writing metadata.
+ Report all sanity check failures, not just the first.
+ Fix missing lockfs on first snapshot creation.
+ Add unreliable --trustcache option to reporting commands.
+ Fix locking for mimage removal.
+ Fix clvmd_init_rhel4 'status' exit code.
+
+Version 2.02.07 - 17th July 2006
+================================
+ Fix activation logic in lvchange --persistent.
+ Don't ignore persistent minor numbers when activating.
+ Use RTLD_GLOBAL when loading shared libraries.
+ Add some forgotten memlock checks to _vg_read to protect against full scans.
+ Add mutex to dmeventd_mirror to avoid concurrent execution.
+ Fix vgreduce --removemissing to return success if VG is already consistent.
+ Fix return code if VG specified on command line is not found.
+ Fix PV tools to include orphaned PVs in default output again.
+ Fixed unaligned access when using clvm.
+ Fix an extra dev_close in a label_read error path.
+ Append patches to commit emails.
+ Fix target_register_events args.
+ Prevent snapshots of mirrors.
+ Add DISTCLEAN_TARGETS to make template for configure.h.
+ More fixes to error paths.
+ Fix lvcreate corelog validation.
+ Add --config for overriding most config file settings from cmdline.
+ Quote arguments when printing command line.
+ Remove linefeed from 'initialising logging' message.
+ Add 'Completed' debug message.
+ Don't attempt library exit after reloading config files.
+ Always compile with libdevmapper, even if device-mapper is disabled.
+
+Version 2.02.06 - 12th May 2006
+===============================
+ Propagate --monitor around cluster.
+ Add --monitor to vgcreate and lvcreate to control dmeventd registration.
+ Filter LCK_NONBLOCK in clvmd lock_vg.
+ Add --nosync to lvcreate with LV flag NOTSYNCED.
+ Use mirror's uuid for a core log.
+ Add mirror log fault-handling policy.
+ Improve mirror warning messages and tidy dmeventd syslog output.
+ Propagate nosync flag around cluster.
+ Allow vgreduce to handle mirror log failures.
+ Add --corelog to lvcreate and lvconvert.
+ Create a log header for replacement in-sync mirror log.
+ Use set_lv() and dev_set() to wipe sections of devices.
+ Add mirror_in_sync() flag to avoid unnecessary resync on activation.
+ Add mirror_library description to example.conf.
+ Fix uuid_from_num() buffer overrun.
+ Make SIZE_SHORT the default for display_size().
+ Fix some memory leaks in error paths found by coverity.
+ Use C99 struct initialisers.
+ Move DEFS into configure.h.
+ Clean-ups to remove miscellaneous compiler warnings.
+ Improve stripe size validation.
+ Increase maximum stripe size limit to physical extent size for lvm2 metadata.
+ Fix activation code to check for pre-existing mirror logs.
+ Tighten region size validation.
+ Ignore empty strings in config files.
+ Require non-zero regionsize and document parameter on lvcreate man page.
+ Invalidate cache if composition of VG changed externally.
+
+Version 2.02.05 - 21st April 2006
+=================================
+ Fix vgid string termination in recent cache code.
+
+Version 2.02.04 - 19th April 2006
+=================================
+ Check for libsepol.
+ Add some cflow & scope support.
+ Separate out DEFS from CFLAGS.
+ Remove inlines and use unique function names.
+
+Version 2.02.03 - 14th April 2006
+=================================
+ vgrename accepts vgid and exported VG.
+ Add --partial to pvs.
+ When choosing between identically-named VGs, also consider creation_host.
+ Provide total log suppression with 2.
+ Fix vgexport/vgimport to set/reset PV exported flag so pv_attr is correct.
+ Add vgid to struct physical_volume and pass with vg_name to some functions.
+ If two or more VGs are found with the same name, use one that is not exported.
+ Whenever vgname is captured, also capture vgid and whether exported.
+ Remove an incorrect unlock_vg() from process_each_lv().
+ Update extent size information in vgchange and vgcreate man pages.
+ Introduce origin_from_cow() and lv_is_visible().
+ pvremove without -f now fails if there's no PV label.
+ Support lvconvert -s.
+ Suppress locking library load failure message if --ignorelockingfailure.
+ Propagate partial mode around cluster.
+ Fix archive file expiration.
+ Fix dmeventd build.
+ clvmd now uses libcman rather than cman ioctls.
+ clvmd will allow new cman to shutdown on request.
+
+Version 2.02.02 - 7th February 2006
+===================================
+ Add %.so: %.a make template rule.
+ Switchover library building to use LIB_SUFFIX.
+ Only do lockfs filesystem sync when suspending snapshots.
+ Always print warning if activation is disabled.
+ vgreduce removes mirror images.
+ Add --mirrorsonly to vgreduce.
+ vgreduce replaces active LVs with error segment before removing them.
+ Set block_on_error parameter if available.
+ Add target_version.
+ Add details to format1 'Invalid LV in extent map' error message.
+ Fix lvscan snapshot full display.
+ Bring lvdisplay man page example into line.
+ Add mirror dmeventd library.
+ Add some activation logic to remove_mirror_images().
+ lvconvert can remove specified PVs from a mirror.
+ lvconvert turns an existing LV into a mirror.
+ Allow signed mirrors arguments.
+ Move create_mirror_log() into toollib.
+ Determine parallel PVs to avoid with ALLOC_NORMAL allocation.
+ Fix lv_empty.
+
+Version 2.02.01 - 23rd November 2005
+====================================
+ Fix lvdisplay cmdline to accept snapshots.
+ Fix open RO->RW promotion.
+ Fix missing vg_revert in lvcreate error path.
+
+Version 2.02.00 - 10th November 2005
+====================================
+ Extend allocation areas to avoid overflow with contiguous with other PVs.
+ Stop lvcreate attempting to wipe zero or error segments.
+ Added new lvs table attributes.
+ Separated out activation preload.
+ Moved activation functions into libdevmapper.
+ Fixed build_dm_name.
+ Add return macros.
+ Added xen xvd devices.
+ Clear up precommitted metadata better.
+ A pvresize implementation.
+ Fix contiguous allocation when there are no preceding segments.
+ Add mirror_seg pointer to lv_segment struct.
+ Only keep a device open if it's known to belong to a locked VG.
+ Fix lvdisplay to show all mirror destinations.
+ Replacement suspend code using libdevmapper dependency tree.
+ Add DEFS to make.tmpl.
+ Use dm_is_dm_major instead of local copy.
+ Allow mapped devices to be used as PVs.
+ Move set_selinux_context into libdevmapper.
+ Fix automatic text metadata buffer expansion (using macro).
+ Cache formatted text metadata buffer between metadata area writes.
+ Add pe_start field to pvs.
+ Add 'LVM-' prefix to uuids.
+ Split lv_segment_area from lv_segment to permit extension.
+ Replacement deactivation code using libdevmapper dependency tree.
+ Simplify dev_manager_info().
+ Attempt to load missing targets using modprobe.
+ Add -a to lvscan.
+ Move mknodes into libdevmapper.
+ Move bitset, hash, pool and dbg_malloc into libdevmapper.
+
+Version 2.01.15 - 16th October 2005
+===================================
+ Refuse to run pvcreate/pvremove on devices we can't open exclusively.
+ Use ORPHAN lock definition throughout.
+ Validate chunksize in lvcreate.
+ Reduce chunksize limit to 512k.
+ Fix chunksize field in reports.
+ Don't hide snapshots from default 'lvs' output.
+ Add is_dm_major() for use in duplicate device detection in lvmcache_add().
+ Really switch device number in lvmcache when it says it is doing so.
+ Option for bitset memory allocation using malloc as well as pool.
+ Don't assume exactly two mirrors when parsing mirror status.
+ Suppress fsync() error message on filesystems that don't support it.
+ Fix yes_no_prompt() error handling.
+ Add lvm.conf comment warning against multiple filter lines.
+ Tidy lvmconf.sh.
+ Add format1 dev_write debug messages.
+ Add clustered VG attribute to report.
+ Move lvconvert parameters into struct lvconvert_params.
+ Add clustered VG flag to LV lock requests.
+ Change LV locking macros to take lv instead of lvid.
+ Prepend 'cluster' activation parameter to mirror log when appropriate.
+ Pass exclusive flag to lv_activate and on to target activation code.
+ Prevent snapshot creation in a clustered VG for now.
+ Factor out adjusted_mirror_region_size() and generate_log_name_format().
+ Move compose_log_line() into mirror directory.
+ Factor out _get_library_path().
+ Don't kill idling clvmd threads.
+ clvmd no longer takes out locks for non-clustered LVs.
+ Recognise ATA over Ethernet (aoe) devices.
+
+Version 2.01.14 - 4th August 2005
+=================================
+ Fix lvconvert PV parameter in help string.
+ Prevent snapshots getting activated in a clustered VG.
+ Separate out _build_dev_string.
+ Move zero_lv to toollib.
+ Fix pool format handler to work with pv segment code.
+
+Version 2.01.13 - 13th July 2005
+================================
+ Fix pvmove segment splitting.
+ Abstract vg_validate.
+ Only make one attempt at contiguous allocation.
+ Fix lvm1 format metadata read.
+ Fix lvm1 format non-mirror lvcreate.
+
+Version 2.01.12 - 14th June 2005
+================================
+ Various allocation-related pvmove fixes.
+ Log an error if clvmd can't resolve a host name got from CCS.
+ Fix potential spin loop in clvmd.
+
+Version 2.01.11 - 13th June 2005
+================================
+ Added lvmconf.sh.
+ Use matchpathcon mode parameter.
+ Don't defer closing dead FDs in clvmd.
+ Remove hard-coded 64k text metadata writing restriction.
+ Make VG name restrictions consistent.
+ Introduce lvconvert. So far only removes mirror images.
+ Allow mirror images to be resized.
+ Allow mirror images to have more than one segment.
+ Centralise restrictions on LV names.
+ Always insert an intermediate layer for mirrors.
+ Suppress hidden LVs from reports unless --all is given.
+ Use square brackets for hidden LVs in reports.
+ Allow the creation of mirrors with contiguous extents.
+ Always perform sanity checks against metadata before committing it to disk.
+ Split lv_extend into two steps: choosing extents + allocation to LV(s).
+ Add mirror log region size to metadata.
+ Use list_iterate_items throughout and add list*back macros.
+ Introduce seg_ macros to access areas.
+ Add segtype_is_ macros.
+ Support tiny metadata areas for pool conversions.
+ Mirror activation handles disk log as well as core.
+ Activation code recognises mirror log dependency.
+ Add mirror_log and regionsize fields to report.
+ Fix non-orphan pvchange -u.
+ Fix vgmerge to handle duplicate LVIDs.
+ Move archiver code from tools into library.
+ vgscan/change/display/vgs automatically create metadata backups if needed.
+ Merge cloned allocation functions.
+ Fix contiguous allocation policy with linear.
+ Cope with missing format1 PVs again.
+ Remove lists of free PV segments.
+ Simplify pv_maps code and remove slow bitset algorithm.
+ Red-Hat-ify the clvmd rhel4 initscript.
+ %Zu->%zu
+ Fix loopfiles alias alloc & mem debugging.
+ Un-inline dbg_strdup.
+ lv_reduce tidying.
+ Remove some unnecessary parameters.
+ Introduce seg_is macros.
+
+Version 2.01.10 - 3rd May 2005
+==============================
+ Don't create backup and archive dirs till needed.
+ Reinstate full PV size when removing from VG.
+ Support loopfiles for testing.
+ Tidy lv_segment interface.
+ pv_segment support.
+ vgchange --physicalextentsize
+ Internal snapshot restructuring.
+ Remove unused internal non-persistent snapshot option.
+ Allow offline extension of snapshot volumes.
+ Move from 2-step to 3-step on-disk metadata commit.
+ Scan ramdisks too and allow non-O_DIRECT fallback.
+ Annotate, tidy and extend list.h.
+ Alignment tidying.
+ Make clvmd work around some "bugs" in gulm's node state notifications.
+ Tidy clvmd's SIGHUP handler
+
+Version 2.01.09 - 4th April 2005
+================================
+ Add --ignorelockingfailure to vgmknodes.
+ clvmd: Don't allow user operations to start until the lvm thread is fully up.
+ clvmd-gulm: set KEEPALIVE on sockets.
+
+Version 2.01.08 - 22nd March 2005
+=================================
+ Add clustered attribute so vgchange can identify clustered VGs w/o locking.
+ Improve detection of external changes affecting internal cache.
+ Add 'already in device cache' debug message.
+ Add -a to pvdisplay -C.
+ Avoid rmdir opendir error messsages when dir was already removed.
+ Tighten signal handlers.
+ Avoid some compiler warnings.
+ Additional rename failure error message.
+ read/write may be macros.
+ clvmd: don't take out lvm thread lock at startup, it only protects jobs list.
+
+Version 2.01.07 - 8th March 2005
+================================
+ Cope with new devices appearing by rescanning /dev if a uuid can't be found.
+ Remove DESTDIR from LVM_SHARED_PATH.
+ clvmd fixes: make FDs close-on-exec
+ gulm unlocks VG & orphan locks at startup in case they are stale
+ gulm now unlocks VG & orphan locks if client dies.
+
+Version 2.01.06 - 1st March 2005
+================================
+ Suppress 'open failed' error messages during scanning.
+ Option to suppress warnings of file descriptors left open.
+ Fix default value of metadatacopies in documentation (2->1).
+ Fix clvmd-gulm locking.
+ ./configure --enable-debug now enables debugging code in clvmd.
+ Fix clvmd-gulm node up/down code so it actually works.
+ clvmd-gulm now releases locks when shut down.
+
+Version 2.01.05 - 18th February 2005
+====================================
+ Static binary invokes dynamic binary if appropriate.
+ Make clvmd config check a little more tolerant.
+ gulm clvmd can now cope with >1 message arriving in a TCP message.
+
+Version 2.01.04 - 9th February 2005
+===================================
+ Add fixed offset to imported pool minor numbers.
+ Update binary pathnames in clvmd_init_rhel4.
+ lvm2cmd.so should skip the check for open fds.
+ Remove unused -f from pvmove.
+ Gulm clvmd doesn't report "connection refused" errors.
+ clvmd does a basic config file sanity check at startup.
+ Fix potential thread shutdown race in clvmd.
+
+Version 2.01.03 - 1st February 2005
+===================================
+ More 64-bit display/report fixes.
+ More informative startup mesg if can't create /etc/lvm.
+ Fix snapshot device size bug (since 2.01.01).
+ clvmd announces startup and cluster connection in syslog.
+ Gulm clvmd doesn't hang trying to talk to a rebooted node.
+ Gulm clvmd doesn't print cman error on startup.
+
+Version 2.01.02 - 21st January 2005
+===================================
+ Update clvmd_init_rhel4: use lvm.static and don't load dlm.
+ Fix some size_t printing.
+ Fix 64 bit xlate consts.
+ Split out pool sptype_names to avoid unused const.
+ Always fail if random id generation fails.
+ Recognise gnbd devices.
+ Fix clvmd startup bug introduced in cman/gulm amalgamation.
+ Improve reporting of node-specific locking errors.
+
+Version 2.01.01 - 19th January 2005
+===================================
+ Fix clvmd lv_info_by_lvid open_count.
+ Store snapshot and origin sizes separately.
+ Update vgcreate man page.
+
+Version 2.01.00 - 17th January 2005
+===================================
+ Fix vgscan metadata auto-correction.
+ Only ask libdevmapper for open_count when we need it.
+ Adjust RHEL4 clvmd init script priority.
+ Enable building of CMAN & GULM versions of clvmd into a single binary
+
+Version 2.00.33 - 7th January 2005
+==================================
+ pvcreate wipes first 4 sectors unless given --zero n.
+ gulm clvmd now uses new ccsd key names.
+ gulm clvmd now doesn't ignore the first node in cluster.conf
+ Improve clvmd failure message if it's already running.
+ Allow user to kill clvmd during initialisation.
+ Fix off-by-one error in cluster_locking that could cause read hangs.
+
+Version 2.00.32 - 22nd December 2004
+====================================
+ Drop static/dl restriction for now.
+ Fix an error fprintf.
+ Fix vgdisplay -s. Breaks (undocumented) lvs/pvs/vgs -s instead for now.
+ Fix device reference counting on re-opens.
+ Ignore sysfs symlinks when DT_UNKNOWN.
+ Add clvmd init script for RHEL4.
+ Skip devices that are too small to be PVs.
+ Fix pvchange -x segfault with lvm2-format orphan.
+ Cope with empty msdos partition tables.
+ Add CONTRIBUTORS file.
+
+Version 2.00.31 - 12th December 2004
+====================================
+ Reopen RO file descriptors RW if necessary.
+
+Version 2.00.30 - 10th December 2004
+====================================
+ Additional device-handling debug messages.
+ Additional verbosity level -vvvv includes line numbers and backtraces.
+ Verbose messages now go to stderr not stdout.
+ Close any stray file descriptors before starting.
+ Refine partitionable checks for certain device types.
+ Allow devices/types to override built-ins.
+ Fix lvreduce man page .i->.I
+ Fix vgsplit man page title.
+ Fix clvmd man makefile.
+ Extend dev_open logging.
+ Make clvmd_fix_conf.sh UNDOable.
+
+Version 2.00.29 - 27th November 2004
+====================================
+ xlate compilation fix.
+
+Version 2.00.28 - 27th November 2004
+====================================
+ Fix partition table & md signature detection.
+ Minor configure/makefile tidy.
+ Export version.h from tools for clvmd.
+
+Version 2.00.27 - 24th November 2004
+====================================
+ Trap large memory allocation requests.
+ Fix to partition table detection code.
+ Improve filter debug mesgs.
+ Make clvmd_fix_conf.sh UNDOable
+
+Version 2.00.26 - 23rd November 2004
+====================================
+ Improve pool debugging stats.
+ Detect partition table signature.
+ pvcreate wipes md superblocks. (With --uuid or --restorefile it prompts.)
+ Separate out md superblock detection code.
+ Prevent snapshot origin resizing.
+ Improve a vgremove error message.
+ Update some man pages.
+ Allow y/n with -ae args (exclusive activation).
+ Fixes to lvcreate vgname parsing.
+ Fix dm_name string size calculation.
+ Improve clvmd error reporting during startup.
+ Make clvmd cope with large gaps in node numbers IDs.
+ Make clvmd initialisation cope better with debugging output.
+ Tidy clvmd socket callbacks so all work happens outside main loop.
+ clvmd -V now displays lvm version too.
+ Add optional gulm build for clvmd
+
+Version 2.00.25 - 29th September 2004
+=====================================
+ Fix return code from rm_link for vgmknodes.
+ Make clvmd LV hash table thread-safe.
+ Fix clvmd locking so it will lock out multiple users on the same node.
+ Fix clvmd VG locking to it can cope with multiple VG locks.
+ Remove spurious trailing dot in lvreduce man page.
+ Fix vgremove locking.
+
+Version 2.00.24 - 16th September 2004
+=====================================
+ Fix pool_empty so it really does empty the memory pool.
+ Rename old segtypes files to segtype.
+ Some fixes to memory debugging code.
+ Exclude internal commands formats & segtypes from install.
+
+Version 2.00.23 - 15th September 2004
+=====================================
+ Export dm name build & split functions.
+ Use O_NOATIME on devices if available.
+ Write log message when each segtype/format gets initialised.
+ New commands 'segtypes' and 'formats'.
+ Suppress pvmove abort message in test mode.
+ Improve pvcreate/remove device not found error message.
+ Allow pvmove to move data within the same PV.
+ Describe how pvmove works on man page.
+ Test for incompatible format/segtype combinations in lv_extend.
+ Fix lvchange example on man page.
+
+Version 2.00.22 - 3rd September 2004
+====================================
+ Fix /dev/vgname perms.
+ Restructure xlate.h.
+ Add clvmd man page.
+
+Version 2.00.21 - 19th August 2004
+==================================
+ Update cnxman-socket.h from cman.
+ Recognise iseries/vd devices.
+ Use 'make install_cluster' to install cluster extensions only.
+ Cope with DT_UNKNOWN in sysfs.
+ Fix extents_moved metadata size comment.
+ Remove duplicate line in pvremove help text.
+ Support variable mirror region size.
+ Support PE ranges in pvmove source PV.
+ Fixes to as-yet-unused LV segment splitting code.
+ Change alloc_areas to pe_ranges and allow suppression of availability checks.
+ Add dev_size column to pvs.
+ Add report columns for in-kernel device number.
+
+Version 2.00.20 - 3 July 2004
+=============================
+ More autoconf fixes.
+ Fix device number handling for 2.6 kernels.
+
+Version 2.00.19 - 29 June 2004
+==============================
+ Reduce severity of setlocale failure message.
+ Recognise argv[0] "initrd-lvm" (pld-linux).
+ Make -O2 configurable.
+ Added --disable-selinux to configure script.
+ LD_FLAGS->LDFLAGS & LD_DEPS->LDDEPS in configure script.
+ Add init_debug to clvmd.
+
+Version 2.00.18 - 24 June 2004
+==============================
+ Fix vgchange activation.
+ Add cluster support.
+
+Version 2.00.17 - 20 June 2004
+==============================
+ configure --enable-fsadm to try out fsadm. fsadm is not tested yet.
+ Display all filtered devices, not just PVs, with pvs -a.
+ Fix sync_dir() when no / in filename
+ vgcfgbackup -f accepts template with %s for VG name.
+ Extend hash functions to handle non-null-terminated data.
+ Add local activation support.
+ Tidy relative paths in makefile includes.
+ fsadm support for fsck and resizing - needs testing.
+ Add read-only GFS pool support.
+ Add lvm2create_initrd script from http://poochiereds.net/svn/lvm2/
+ Fix rounding of large diplayed sizes.
+ Suppress decimal point when using units of sectors/bytes.
+ Additional kernel target checks before pvmove & snapshot creation.
+ Add i2o_block.
+
+Version 2.00.16 - 24 May 2004
+=============================
+ Set area_count within alloc_lv_segment.
+ Remove error labels from lvresize.
+ Fix a pvs error path.
+ xxchange -ae for exclusive activation.
+ Don't return non-zero status if there aren't any volume groups.
+ Add --alloc argument to tools.
+ Rename allocation policies to contiguous, normal, anywhere, inherit.
+ nextfree becomes normal; anywhere isn't implemented yet.
+ LV inherits allocation policy from VG. Defaults: LV - inherit; VG - normal
+ Additional status character added to vgs to indicate allocation policy.
+ Add reset_fn to external_locking.
+ Ensure presence of virtual targets before attempting activating.
+ Attempt to fix resizing of snapshot origins.
+ Restructure lvresize, bringing it closer to lvcreate.
+ A quick sanity check on vg_disk struct when read in. More checks needed.
+ Only include visible LVs in active/open counts.
+ Add virtual segment types, zero and error. A large sparse device can be
+constructed as a writeable snapshot of a large zero segment.
+ Add --type to lvcreate/resize.
+ Push lv_create & alloc policy up to tool level.
+ Fix pvdisplay return code.
+ Detect invalid LV names in arg lists.
+ Reporting uses line-at-a-time output.
+ lvm2 format sets unlimited_vols format flag.
+ Internal-only metadata flag support.
+ Basic checking for presence of device-mapper targets.
+ Separate out polldaemon.
+ Revise internal locking semantics.
+ Move find_pv_by_name to library.
+ Rename move->copy.
+ Add devices to segments report.
+ Begin separating out segment code. There's a lot of change here.
+ Compress any (obsolete) long LVM1 pvids encountered.
+ Support for tagged config files.
+ Don't abort operations if selinux present but disabled.
+ Fix typo in configure which left HAVE_LIBDL unset.
+
+Version 2.00.15 - 19 Apr 2004
+=============================
+ configure --with-owner= --with-group= to avoid -o and -g args to 'install'
+
+Version 2.00.14 - 16 Apr 2004
+=============================
+ Use 64-bit file functions by default.
+
+Version 2.00.13 - 16 Apr 2004
+=============================
+ Set devices/md_component_detection = 1 to ignore devices containing md
+ superblocks. [Luca Berra]
+ Ignore error setting selinux file context if fs doesn't support it.
+
+Version 2.00.12 - 14 Apr 2004
+=============================
+ Install a default lvm.conf into /etc/lvm if there isn't one already.
+ Allow different installation dir for lvm.static (configure --staticdir=)
+ Fix inverted selinux error check.
+ Recognise power2 in /proc/devices.
+ Fix counting in lvs_in_vg_opened. [It ignored devices open more than once.]
+
+Version 2.00.11 - 8 Apr 2004
+============================
+ Set fallback_to_lvm1 in lvm.conf (or configure --enable-lvm1_fallback)
+ to run lvm1 binaries if running a 2.4 kernel without device-mapper.
+
+Version 2.00.10 - 7 Apr 2004
+============================
+ More fixes for static build.
+ Add basic selinux support.
+ Fix sysfs detection.
+
+Version 2.00.09 - 31 Mar 2004
+=============================
+ Update copyright notices for Red Hat.
+ Fix vgmknodes to remove dud /dev/mapper entries. (libdevmapper update reqd).
+ Add LVM1-style colon output to vgdisplay.
+ lvchange --refresh to reload active LVs.
+ Add string display to memory leak dump.
+ Add locking flags & memlock option.
+ Add list_versions to library.
+ Ignore open hidden LVs when checking if deactivation is OK.
+ Suppress move percentage when device inactive.
+ Add lv_info_by_lvid.
+ Various tidy-ups to the build process.
+ Rebaseline internal verbose level.
+ Add --nolocking option for read operations if locking is failing.
+ Add option to compile into a library.
+ When compiled without libdevmapper, only print warning message once.
+ Fix lvreduce PV extent calculations.
+ Fix DESTDIR to work with configure path overrides.
+ Always use / as config file separator & rename internal config file variables.
+ Add support for tagging PV/VG/LVs and hosts.
+ Fix rare bug in recognition of long cmdline argument forms.
+ Add basic internationalisation infrastructure.
+ Don't recurse symlinked dirs such as /dev/fd on 2.6 kernels.
+ Update autoconf files.
+ Add sysfs block device filtering for 2.6 kernels.
+ Update refs for move to sources.redhat.com.
+
+Friday 14th November 2003
+=========================
+Some bug fixes & minor enhancements, including:
+ Backwards compatibility with LVM1 metadata improved.
+ Missing man pages written.
+ Tool error codes made more consistent.
+ vgmknodes written.
+ O_DIRECT can be turned off if it doesn't work in your kernel.
+ dumpconfig to display the active configuration file
+
+You need to update libdevmapper before using 'vgmknodes' or 'vgscan --mknodes'.
+If your root filesystem is on an LV, you should run one of those two
+commands to fix up the special files in /dev in your real root filesystem
+after finishing with your initrd. Also, remember you can use
+'vgchange --ignorelockingfailure' on your initrd if the tool fails because
+it can't write a lock file to a read-only filesystem.
+
+Wednesday 30th April 2003
+=========================
+A pvmove implementation is now available for the new metadata format.
+
+When running a command that allocates space (e.g. lvcreate), you can now
+restrict not only which disk(s) may be used but also the Physical Extents
+on those disks. e.g. lvcreate -L 10 vg1 /dev/hda6:1000-2000:3000-4000
+
+
+Monday 18th November 2002
+========================
+
+The new format of LVM metadata is ready for you to test!
+ We expect it to be more efficient and more robust than the original format.
+ It's more compact and supports transactional changes and replication.
+ Should things go wrong on a system, it's human-readable (and editable).
+
+Please report any problems you find to the mailing list,
+linux-lvm@sistina.com. The software has NOT yet been thoroughly
+tested and so quite possibly there'll still be some bugs in it.
+Be aware of the disclaimer in the COPYING file.
+
+While testing, we recommend turning logging on in the configuration file
+to provide us with diagnostic information:
+ log {
+ file="/tmp/lvm2.log"
+ level=7
+ activation=1
+ }
+
+You should schedule regular backups of your configuration file and
+metadata backups and archives (normally kept under /etc/lvm).
+
+Please read docs/example.conf and "man lvm.conf" to find out more about
+the configuration file.
+
+To convert an existing volume group called vg1 to the new format using
+the default settings, use "vgconvert -M2 vg1". See "man vgconvert".
+
+-M (or --metadatatype in its long form) is a new flag to indicate which
+format of metadata the command should use for anything it creates.
+Currently, the valid types are "lvm1" and "lvm2" and they can be
+abbreviated to "1" and "2" respectively. The default value for this
+flag can be changed in the global section in the config file.
+
+Backwards-compatible support for the original LVM1 metadata format is
+maintained, but it can be moved into a shared library or removed
+completely with configure's --with-lvm1 option.
+
+Under LVM2, the basic unit of metadata is the volume group. Different
+volume groups can use different formats of metadata - vg1 could use
+the original LVM1 format while vg2 used the new format - but you can't
+mix formats within a volume group. So to add a PV to an LVM2-format
+volume group you must run "pvcreate -M2" on it, followed by "vgextend".
+
+With LVM2-format metadata, lvextend will let you specify striping
+parameters. So an LV could consist of two or more "segments" - the
+first segment could have 3 stripes while the second segment has just 2.
+
+LVM2 maintains a backup of the current metadata for each volume group
+in /etc/lvm/backup, and puts copies of previous versions in
+/etc/lvm/archive. "vgcfgbackup" and "vgcfgrestore" can be used to
+create and restore from these files. If you fully understand what
+you're doing, metadata can be changed by editing a copy of a current
+backup file and using vgcfgrestore to reload it.
+
+Please read the pvcreate man page for more information on the new
+format for metadata.
+
+All tools that can change things have a --test flag which can be used
+to check the effect of a set of cmdline args without really making the
+changes.
+
+
+What's not finished?
+====================
+The internal cache. If you turn on debugging output you'll see lots of
+repeated messages, many of which will eventually get optimised out.
+
+--test sometimes causes a command to fail (e.g. vgconvert --test) even
+though the real command would work: again, fixing this is waiting for
+the work on the cache.
+
+Several of the tools do not yet contain the logic to handle full
+recovery: combinations of pvcreate and vgcfgrestore may sometimes be
+needed to restore metadata if a tool gets interrupted or crashes or
+finds something unexpected. This applies particularly to tools that
+work on more than one volume group at once (e.g. vgsplit).
+
+Display output. Some metadata information cannot yet be displayed.
+
+Recovery tools to salvage "lost" metadata directly from the disks:
+but we hope the new format will mean such tools are hardly ever needed!
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
new file mode 100644
index 0000000..74722c5
--- /dev/null
+++ b/WHATS_NEW_DM
@@ -0,0 +1,1291 @@
+Version 1.02.133 -
+=================================
+
+Version 1.02.132 - 28th July 2016
+=================================
+ Fix json reporting to escape '"' character that may appear in reported string.
+
+Version 1.02.131 - 15th July 2016
+=================================
+ Disable queueing on mpath devs in blk-availability systemd service/initscript.
+ Add new -m|--mpathoption disablequeueing to blkdeactivate.
+ Automatically group regions with 'create --segments' unless --nogroup.
+ Fix resource leak when deleting the first member of a group.
+ Allow --bounds with 'create --filemap' for dmstats.
+ Enable creation of filemap regions with histograms.
+ Enable histogram aggregation for regions with more than one area.
+ Enable histogram aggregation for groups of regions.
+ Add a --filemap option to 'dmstats create' to allow mapping of files.
+ Add dm_stats_create_regions_from_fd() to map file extents to regions.
+
+Version 1.02.130 - 6th July 2016
+================================
+ Minor fixes from coverity.
+
+Version 1.02.129 - 6th July 2016
+================================
+ Update default dmstats field selections for groups.
+ Add 'obj_type', 'group_id', and 'statsname' fields to dmstats reports.
+ Add --area, --region, and --group to dmstats to control object selection.
+ Add --alias, --groupid, --regions to dmstats for group creation and deletion.
+ Add 'group' and 'ungroup' commands to dmstats.
+ Allow dm_stats_delete_group() to optionally delete all group members.
+ Add dm_stats_get_object_type() to return the type of object present.
+ Add dm_stats_walk_init() allowing control of objects visited by walks.
+ Add dm_stats_get_group_descriptor() to return the member list as a string.
+ Introduce dm_stats_get_nr_groups() and dm_stats_group_present().
+ Add dm_stats_{get,set}_alias() to set and retrieve alias names for groups.
+ Add dm_stats_get_group_id() to return the group ID for a given region.
+ Add dm_stats_{create,delete}_group() to allow grouping of stats regions.
+ Add enum-driven dm_stats_get_{metric,counter}() interfaces.
+ Add dm_bitset_parse_list() to parse a string representation of a bitset.
+ Thin dmeventd plugin umounts lvm2 volume only when pool is 95% or more.
+
+Version 1.02.128 - 25th June 2016
+=================================
+ Recognize 'all' keyword used in selection as synonym for "" (no selection).
+ Add dm_report_set_selection to set selection for multiple output of report.
+ Add DM_REPORT_OUTPUT_MULTIPLE_TIMES flag for multiple output of same report.
+ Move field width handling/sort init from dm_report_object to dm_report_output.
+ Add _LOG_BYPASS_REPORT flag for bypassing any log report currently set.
+ Introduce DM_REPORT_GROUP_JSON for report group with JSON output format.
+ Introduce DM_REPORT_GROUP_BASIC for report group with basic report output.
+ Introduce DM_REPORT_GROUP_SINGLE for report group having single report only.
+ Add dm_report_group_{create,push,pop,destroy} to support report grouping.
+
+Version 1.02.127 - 11th June 2016
+=================================
+ Fix blkdeactivate regression causing skipping of dm + md devices. (1.02.126)
+
+Version 1.02.126 - 3rd June 2016
+================================
+ Report passthrough caching mode when parsing cache mode.
+
+Version 1.02.125 - 14th May 2016
+================================
+ Show library version in message even if dm driver version is unavailable.
+
+Version 1.02.124 - 30th April 2016
+==================================
+ Add dm_udev_wait_immediate to libdevmapper for waiting outside the library.
+
+Version 1.02.123 - 23rd April 2016
+==================================
+ Do not strip LVM- when debug reporting not found uuid.
+
+Version 1.02.122 - 9th April 2016
+=================================
+ Change log_debug ioctl flags from single characters into words.
+
+Version 1.02.121 - 26th March 2016
+==================================
+ Adjust raid status function.
+
+Version 1.02.120 - 11th March 2016
+==================================
+ Improve parsing of cache status and report Fail, Error, needs_check, ro.
+
+Version 1.02.119 - 4th March 2016
+=================================
+ Fix dm_config_write_node and variants to return error on subsection failures.
+ Remove 4096 char limit due to buffer size if writing dm_config_node.
+
+Version 1.02.118 - 26th February 2016
+=====================================
+ Fix string boundary check in _get_canonical_field_name().
+ Always initialized hist struct in _stats_parse_histogram().
+
+Version 1.02.117 - 21st February 2016
+=====================================
+ Improve status parsing for thin-pool and thin devices.
+
+Version 1.02.116 - 15th February 2016
+=====================================
+ Use fully aligned allocations for dm_pool_strdup/strndup() (1.02.64).
+ Fix thin-pool table parameter feature order to match kernel output.
+
+Version 1.02.115 - 25th January 2016
+====================================
+ Fix man page for dmsetup udevcreatecookie.
+
+Version 1.02.114 - 14th December 2015
+=====================================
+ Better support for dmsetup static linkage.
+ Extend validity checks on dmeventd client socket.
+
+Version 1.02.113 - 5th December 2015
+====================================
+ Mirror plugin in dmeventd uses dm_get_status_mirror().
+ Add dm_get_status_mirror() for parsing mirror status line.
+
+Version 1.02.112 - 28th November 2015
+=====================================
+ Show error message when trying to create unsupported raid type.
+ Improve preloading sequence of an active thin-pool target.
+ Drop extra space from cache target line to fix unneded table reloads.
+
+Version 1.02.111 - 23rd November 2015
+=====================================
+ Extend dm_hash to support multiple values with the same key.
+ Add missing check for allocation inside dm_split_lvm_name().
+ Test dm_task_get_message_response for !NULL in dm_stats_print_region().
+ Add checks for failing dm_stats_create() in dmsetup.
+ Add missing fifo close when failed to initialize client connection.
+
+Version 1.02.110 - 30th October 2015
+====================================
+ Disable thin monitoring plugin when it fails too often (>10 times).
+ Fix/restore parsing of empty field '-' when processing dmeventd event.
+ Enhance dm_tree_node_size_changed() to recognize size reduction.
+ Support exit on idle for dmenventd (1 hour).
+ Add support to allow unmonitor device from plugin itself.
+ New design for thread co-operation in dmeventd.
+ Dmeventd read device status with 'noflush'.
+ Dmeventd closes control device when no device is monitored.
+ Thin plugin for dmeventd improved percentage usage.
+ Snapshot plugin for dmeventd improved percentage usage.
+ Add dm_hold_control_dev to allow holding of control device open.
+ Add dm_report_compact_given_fields to remove given empty fields from report.
+ Use libdm status parsing and local mem raid dmeventd plugin.
+ Use local mem pool and lock only lvm2 execution for mirror dmeventd plugin.
+ Lock protect only lvm2 execution for snapshot and thin dmeventd plugin.
+ Use local mempool for raid and mirror plugins.
+ Reworked thread initialization for dmeventd plugins.
+ Dmeventd handles snapshot overflow for now equally as invalid.
+ Convert dmeventd to use common logging macro system from libdm.
+ Return -ENOMEM when device registration fails instead of 0 (=success).
+ Enforce writethrough mode for cleaner policy.
+ Add support for recognition and deactivation of MD devices to blkdeactivate.
+ Move target status functions out of libdm-deptree.
+ Correct use of max_write_behind parameter when generating raid target line.
+ Fix dm-event systemd service to make sure it is executed before mounting.
+
+Version 1.02.109 - 22nd September 2015
+======================================
+ Update man pages for dmsetup and dmstats.
+ Improve help text for dmsetup.
+ Use --noflush and --nolockfs when removing device with --force.
+ Parse new Overflow status string for snapshot target.
+ Check dir path components are valid if using dm_create_dir, error out if not.
+ Fix /dev/mapper handling to remove dangling entries if symlinks are found.
+ Make it possible to use blank value as selection for string list report field.
+
+Version 1.02.108 - 15th September 2015
+======================================
+ Do not check for full thin pool when activating without messages (1.02.107).
+
+Version 1.02.107 - 5th September 2015
+=====================================
+ Parse thin-pool status with one single routine internally.
+ Add --histogram to select default histogram fields for list and report.
+ Add report fields for displaying latency histogram configuration and data.
+ Add dmstats --bounds to specify histogram boundaries for a new region.
+ Add dm_histogram_to_string() to format histogram data in string form.
+ Add public methods to libdm to access numerical histogram config and data.
+ Parse and store histogram data in dm_stats_list() and dm_stats_populate().
+ Add an argument to specify histogram bounds to dm_stats_create_region().
+ Add dm_histogram_bounds_from_{string,uint64_t}() to parse histogram bounds.
+ Add dm_histogram handle type to represent a latency histogram and its bounds.
+ Fix devmapper.pc pkgconfig file to not reference non-existent rt.pc file.
+ Reinstate dm_task_get_info@Base to libdevmapper exports. (1.02.106)
+
+Version 1.02.106 - 26th August 2015
+===================================
+ Add 'precise' column to statistics reports.
+ Add --precise switch to 'dmstats create' to request nanosecond counters.
+ Add precise argument to dm_stats_create_region().
+ Add support to libdm-stats for precise_timestamps
+
+Version 1.02.105 - 17th August 2015
+===================================
+ Fix 'dmstats list -o all' segfault.
+ Separate dmstats statistics fields from region information fields.
+ Add interval and interval_ns fields to dmstats reports.
+ Do not include internal glibc headers in libdm-timestamp.c (1.02.104)
+ Exit immediately if no device is supplied to dmsetup wipe_table.
+ Suppress dmsetup report headings when no data is output. (1.02.104)
+ Adjust dmsetup usage/help output selection to match command invoked.
+ Fix dmsetup -o all to select correct fields in splitname report.
+ Restructure internal dmsetup argument handling across all commands.
+ Add dm_report_is_empty() to indicate there is no data awaiting output.
+ Add more arg validation for dm_tree_node_add_cache_target().
+ Add --alldevices switch to replace use of --force for stats create / delete.
+
+Version 1.02.104 - 10th August 2015
+===================================
+ Add dmstats.8 man page
+ Add dmstats --segments switch to create one region per device segment.
+ Add dmstats --regionid, --allregions to specify a single / all stats regions.
+ Add dmstats --allprograms for stats commands that filter by program ID.
+ Add dmstats --auxdata and --programid args to specify aux data and program ID.
+ Add report stats sub-command to provide repeating stats reports.
+ Add clear, delete, list, and print stats sub-commands.
+ Add create stats sub-command and --start, --length, --areas and --areasize.
+ Recognize 'dmstats' as an alias for 'dmsetup stats' when run with this name.
+ Add a 'stats' command to dmsetup to configure, manage and report stats data.
+ Add statistics fields to dmsetup -o.
+ Add libdm-stats library to allow management of device-mapper statistics.
+ Add --nosuffix to suppress dmsetup unit suffixes in report output.
+ Add --units to control dmsetup report field output units.
+ Add support to redisplay column headings for repeating column reports.
+ Fix report header and row resource leaks.
+ Report timestamps of ioctls with dmsetup -vvv.
+ Recognize report field name variants without any underscores too.
+ Add dmsetup --interval and --count to repeat reports at specified intervals.
+ Add dm_timestamp functions to libdevmapper.
+ Recognise vg/lv name format in dmsetup.
+ Move size display code to libdevmapper as dm_size_to_string.
+
+Version 1.02.103 - 24th July 2015
+=================================
+ Introduce libdevmapper wrappers for all malloc-related functions.
+
+Version 1.02.102 - 7th July 2015
+================================
+ Include tool.h for default non-library use.
+ Introduce format macros with embedded % such as FMTu64.
+
+Version 1.02.101 - 3rd July 2015
+================================
+ Add experimental support to passing messages in suspend tree.
+ Add dm_report_value_cache_{set,get} to support caching during report/select.
+ Add dm_report_reserved_handler to handle report reserved value actions.
+ Support dynamic value in select: DM_REPORT_FIELD_RESERVED_VALUE_DYNAMIC_VALUE.
+ Support fuzzy names in select: DM_REPORT_FIELD_RESERVED_VALUE_FUZZY_NAMES.
+ Thin pool trace messages show a device name and major:minor.
+
+Version 1.02.100 - 30th June 2015
+=================================
+ Add since, after, until and before time operators to be used in selection.
+ Add support for time in reports and selection: DM_REPORT_FIELD_TYPE_TIME.
+ Support report reserved value ranges: DM_REPORT_FIELD_RESERVED_VALUE_RANGE.
+ Support report reserved value names: DM_REPORT_FIELD_RESERVED_VALUE_NAMED.
+ Add DM_CONFIG_VALUE_FMT_{INT_OCTAL,STRING_NO_QUOTES} config value format flag.
+ Add DM_CONFIG_VALUE_FMT_COMMON_{ARRAY,EXTRA_SPACE} config value format flag.
+ Add dm_config_value_{get,set}_format_flags to get and set config value format.
+
+Version 1.02.99 - 20th June 2015
+================================
+ New dm_tree_node_set_thin_pool_read_only(DM_1_02_99) for read-only thin pool.
+ Enhance error message when thin-pool message fails.
+ Fix dmeventd logging to avoid threaded use of static variable.
+ Remove redundant dmeventd SIGALRM coded.
+
+Version 1.02.98 - 12th June 2015
+================================
+ Add dm_task_get_errno() to return any unexpected errno from a dm ioctl call.
+ Use copy of errno made after each dm ioctl call in case errno changes later.
+
+Version 1.02.97 - 15th May 2015
+===============================
+ New dm_task_get_info(DM_1_02_97) supports internal_suspend state.
+ New symbols are versioned and comes with versioned symbol name (DM_1_02_97).
+
+Version 1.02.96 - 2nd May 2015
+==============================
+ Fix selection to not match if using reserved value in criteria with >,<,>=,<.
+ Fix selection to not match reserved values for size fields if using >,<,>=,<.
+ Include uuid or device number in log message after ioctl failure.
+ Add DM_INTERNAL_SUSPEND_FLAG to dm-ioctl.h.
+ Install blkdeactivate script and its man page with make install_device-mapper.
+
+Version 1.02.95 - 15th March 2015
+=================================
+ Makefile regenerated.
+
+Version 1.02.94 - 4th March 2015
+================================
+ Add dm_report_object_is_selected for generalized interface for report/select.
+
+Version 1.02.93 - 21st January 2015
+===================================
+ Reduce severity of ioctl error message when dmeventd waitevent is interrupted.
+ Report 'unknown version' when incompatible version numbers were not obtained.
+ Report more info from thin pool status (out of data, metadata-ro, fail).
+ Support error_if_no_space for thin pool target.
+ Fix segfault while using selection with regex and unbuffered reporting.
+ Add dm_report_compact_fields to remove empty fields from report output.
+ Remove unimplemented dm_report_set_output_selection from libdevmapper.h.
+
+Version 1.02.92 - 24th November 2014
+====================================
+ Fix memory corruption with sorting empty string lists (1.02.86).
+ Fix man dmsetup.8 syntax warning of Groff
+ Accept unquoted strings and / in place of {} when parsing configs.
+
+Version 1.02.91 - 11th November 2014
+====================================
+ Update cache creation and dm_config_node to pass policy.
+ Allow activation of any thin-pool if transaction_id supplied is 0.
+ Don't print uninitialized stack bytes when non-root uses dm_check_version().
+ Fix selection criteria to not match reserved values when using >, <, >=, <.
+ Add DM_LIST_HEAD_INIT macro to libdevmapper.h.
+ Fix dm_is_dm_major to not issue error about missing /proc lines for dm module.
+
+Version 1.02.90 - 1st September 2014
+====================================
+ Restore proper buffer size for parsing mountinfo line (1.02.89)
+
+Version 1.02.89 - 26th August 2014
+==================================
+ Improve libdevmapper-event select() error handling.
+ Add extra check for matching transation_id after message submitting.
+ Add dm_report_field_string_list_unsorted for str. list report without sorting.
+ Support --deferred with dmsetup remove to defer removal of open devices.
+ Update dm-ioctl.h to include DM_DEFERRED_REMOVE flag.
+ Add support for selection to match string list subset, recognize { } operator.
+ Fix string list selection with '[value]' to not match list that's superset.
+ Fix string list selection to match whole words only, not prefixes.
+
+Version 1.02.88 - 5th August 2014
+=================================
+ Add dm_tree_set_optional_uuid_suffixes to handle upgrades.
+
+Version 1.02.87 - 23rd July 2014
+================================
+ Fix dm_report_field_string_list to handle delimiter with multiple chars.
+ Add dm_report_field_reserved_value for per-field reserved value definition.
+
+Version 1.02.86 - 23rd June 2014
+================================
+ Make "help" and "?" reporting fields implicit.
+ Recognize implicit "selected" field if using dm_report_init_with_selection.
+ Add support for implicit reporting fields which are predefined in libdm.
+ Add DM_REPORT_FIELD_TYPE_PERCENT: separate number and percent fields.
+ Add dm_percent_range_t,dm_percent_to_float,dm_make_percent to libdm for reuse.
+ Add dm_report_reserved_value to libdevmapper for reserved value definition.
+ Also display field types when listing all fields in selection help.
+ Recognize "help" keyword in selection string to show brief help for selection.
+ Always order items reported as string list field lexicographically.
+ Add dm_report_field_string_list to libdevmapper for direct string list report.
+ Add DM_REPORT_FIELD_TYPE_STRING_LIST: separate string and string list fields.
+ Add dm_str_list to libdevmapper for string list type definition and its reuse.
+ Add dmsetup -S/--select to define selection criteria for dmsetup reports.
+ Add dm_report_init_with_selection to intialize report with selection criteria.
+ Add DM_REPORT_FIELD_TYPE_SIZE: separate number and size reporting fields.
+ Use RemoveOnStop for dm-event.socket systemd unit.
+ Document env var 'DM_DEFAULT_NAME_MANGLING_MODE' in dmsetup man page.
+ Warn user about incorrect use of cookie with 'dmsetup remove --force'.
+ Also recognize 'help'/'?' as reserved sort key name to show help.
+ Add dm_units_to_factor for size unit parsing.
+ Increase bitset size for minors for thin dmeventd plugin.
+
+Version 1.02.85 - 10th April 2014
+=================================
+ Check for sprintf error when building internal device path.
+ Check for sprintf error when creating path for dm control node.
+ When buffer for dm_get_library_version() is too small, return error code.
+ Always reinitialize _name_mangling_mode in dm_lib_init().
+ Add tracking flag about implicitly added devices into dm_tree.
+ Stop timeout thread immediately when the last worker thread is finished.
+ Fix dmeventd logging with parallel wait event processing.
+ Reuse _node_send_messages() for validation of transaction_id in preload.
+ Transaction_id could be lower by one only when messages are prepared.
+ Do not call callback when preload fails.
+ Wrap is_selinux_enabled() to be called just once.
+ Use correctly signed 64b constant when working with raid volumes.
+ Exit dmeventd with pidfile cleanup instead of raising SIGKILL on DIE request.
+ Add new DM_EVENT_GET_PARAMETERS request to dmeventd protocol.
+ Do not use systemd's reload for dmeventd restart, use dmeventd -R instead.
+ Drop cryptsetup rules from 10-dm.rules - cryptsetup >= 1.1.3 sets them.
+
+Version 1.02.84 - 20th January 2014
+===================================
+ Revert activation of activated nodes if a node preload callback fails.
+ Avoid busy looping on CPU when dmeventd reads event DM_WAIT_RETRY.
+ Ensure global mutex is held when working with dmeventd thread.
+ Drop taking timeout mutex for un/registering dmeventd monitor.
+ Allow section names in config file data to be quoted strings.
+ Close fifos before exiting in dmeventd restart() error path.
+ Move printf format string directly into dm_asprintf args list.
+ Catch invalid use of string sort values when reporting numerical fields.
+
+Version 1.02.83 - 13th November 2013
+====================================
+ Consistently report on stderr when device is not found for dmsetup info.
+ Skip race errors when non-udev dmsetup build runs on udev-enabled system.
+ Skip error message when holders are not present in sysfs.
+ Use __linux__ instead of linux define to make libdevmapper.h C compliant.
+ Use mutex to avoid possible race while creating/destroying memory pools.
+ Require libpthread to build now.
+
+Version 1.02.82 - 4th October 2013
+==================================
+ Define symbolic names for subsystem udev flags in libdevmapper for easier use.
+ Make subsystem udev rules responsible for importing DM_SUBSYSTEM_UDEV_FLAG*.
+
+Version 1.02.81 - 23rd September 2013
+=====================================
+ Tidy dmeventd fifo initialisation.
+
+Version 1.02.80 - 20th September 2013
+=====================================
+ Detect invalid sector supplied to 'dmsetup message'.
+ Free any previously-set string if a dm_task_set_* function is called again.
+ Do not allow passing empty new name for dmsetup rename.
+ Display any output returned by 'dmsetup message'.
+ Add dm_task_get_message_response to libdevmapper.
+
+Version 1.02.79 - 13th August 2013
+==================================
+ Create dmeventd timeout threads as "detached" so exit status is freed.
+ Add DM_ABORT_ON_INTERNAL_ERRORS env var support to abort on internal errors.
+
+Version 1.02.78 - 24th July 2013
+================================
+ Process thin messages once to active thin pool target for dm_tree.
+ Optimize out setting the same value or read_ahead.
+ Add DM_ARRAY_SIZE public macro.
+ Move syslog code out of signal handle in dmeventd.
+ Add DM_TO_STRING public macro.
+ Always return success on dmeventd -V command call.
+ Fix parsing of 64bit snapshot status in dmeventd snapshot plugin.
+ Add dm_get_status_snapshot() for parsing snapshot status.
+ Detecte mounted fs also via reading /proc/self/mountinfo.
+ Add dm_mountinfo_read() for parsing /proc/self/mountinfo.
+ Report error for nonexisting devices in dmeventd communication.
+ Prevent double free error after dmeventd call of _fill_device_data().
+ Update dmevent structure message_data to simplify/fix error path handling.
+ Validate passed params to dm_get_status_raid/thin/thin_pool().
+ Fix 'dmsetup splitname -o' to not fail if used without '-c' switch (1.02.68).
+ Add dm_config_write_{node_out/one_node_out} for enhanced config output.
+ Add dm_config_value_is_bool to check for boolean value in supported formats.
+ Fix config node lookup inside empty sections to not return the section itself.
+ Append discards and read-only fields to exported struct dm_status_thin_pool.
+ Fix segfault for truncated string token in config file after the first '"'.
+ Close open dmeventd FIFO file descriptors on exec (FD_CLOEXEC).
+ Fix resource leak in error path of dmeventd's umount of thin volume.
+ Automatically deactivate failed preloaded dm tree node.
+ Add DM_DISABLE_UDEV environment variable to manage dev nodes by libdm only.
+ Fix dm_task_set_cookie to properly process udev flags if udev_sync disabled.
+
+Version 1.02.77 - 15th October 2012
+===================================
+ Support unmount of thin volumes from pool above thin pool threshold.
+ Update man page to reflect that dm UUIDs are being mangled as well.
+ Apply 'dmsetup mangle' for dm UUIDs besides dm names.
+ Add 'mangled_uuid' and 'unmangled_uuid' fields to dmsetup info -c -o.
+ Mangle device UUID on dm_task_set_uuid/newuuid call if necessary.
+ Add dm_task_get_uuid_mangled/unmangled to libdevmapper.
+ Always reset delay_resume_if_new flag when stacking thin pool over anything.
+ Don't create value for dm_config_node and require dm_config_create_value call.
+ Check for existing new_name for dmsetup rename.
+ Fix memory leak in dmsetup _get_split_name() error path.
+
+Version 1.02.76 - 7th August 2012
+=================================
+ Add dm_vasprintf to libdevmapper.
+ Allow --noflush with dmsetup status and wait (for thin target).
+ Add dm_config_write_one_node to libdevmapper.
+ Support thin pool message release/reserve_metadata_snap in libdevmapper.
+ Support thin pool discards and external origin features in libdevmapper.
+ Add configure --enable-udev-rule-exec-detection to detect exec path in rules.
+ Use sbindir in udev rules by default and remove executable path detection.
+ Remove hard-coded paths for dmeventd fifos and use default-dm-run-dir.
+ Add configure --with-lvmetad-pidfile to remove hard-coded value.
+ Add configure --with-default-pid-dir for common directory with pid files.
+ Add configure --with-default-dm-run-dir to set run directory for dm tools.
+ Detect kernel_send() errors in cmirrord.
+ Add __attribute__ instrumentation to libdevmapper.h.
+ Print clean_bits instead of sync_bits in pull_state in cmirrord.
+ Add tests for errors from closedir(), close() in cmirrord.
+ Add documentation references in systemd units.
+ Remove veritysetup. Now maintained with cryptsetup.
+
+Version 1.02.75 - 8th June 2012
+===============================
+ Upstream source repo now fedorahosted.org git not sources.redhat.com CVS.
+ Remove unsupported udev_get_dev_path libudev call used for checking udev dir.
+ Set delay_resume_if_new on deptree snapshot origin.
+ Log value chosen in _find_config_bool like other variable types do.
+ Wait for dmeventd to exit after sending it DM_EVENT_CMD_DIE when restarting.
+ Append 'Used' to {Blk}DevNames/DevNos dmsetup report headers for clarity.
+ Add configure --with-veritysetup for independent veritysetup tool.
+ Properly support supplied dmevent path in dm_event_register_handler().
+ Remove dmeventd fifos on exit if they are not managed by systemd.
+ Use SD_ACTIVATION environment variable in systemd units to detect systemd.
+ Only start a new dmeventd instance on restart if one was already running.
+ Extend the time waited for input from dmeventd fifo to 5 secs. (1.02.73)
+
+Version 1.02.74 - 6th March 2012
+================================
+ Check for multiply-mangled names in auto mangling mode.
+ Fix dm_task_get_name_unmangled to not unmangle already unmangled name.
+ Check whether device names are properly mangled on ioctl return.
+ Deactivation of failed thin check on thin pool returns success.
+
+Version 1.02.73 - 3rd March 2012
+================================
+ Test _thread_registry list with holding mutex in dmeventd.
+ Add dm_tree_node_set_callback() for preload and deactivation hooks.
+ Drop unsupported TRIM message for thin pool.
+ Improve logging for fifo startup in dmeventd.
+ Better detection of missing dmeventd fifo connection (1.02.71).
+ Add a few pointer validations in dmsetup.
+ Support dm_task_get_driver_version() query without version string.
+ Log failure of pthread_join when cleaning unused threads in dmeventd.
+ Fix empty string warning logic in _find_config_str. (1.02.68)
+ Fix dm_task_set_name to properly resolve path to dm name (1.02.71).
+ Add dm_strncpy() function as a faster strncpy() replacement.
+
+Version 1.02.72 - 23rd February 2012
+====================================
+ Avoid memory reallocation for dm_asprintf.
+
+Version 1.02.71 - 20th February 2012
+====================================
+ Switch to using built-in blkid in 13-dm-disk.rules.
+ Add "watch" rule to 13-dm-disk.rules.
+ Detect failing fifo and skip 20s retry communication period.
+ Add DM_DEFAULT_NAME_MANGLING_MODE environment variable as an override.
+ Add dm_lib_init to automatically initialise device-mapper library on load.
+ Replace any '\' char with '\\' in dm table specification on input.
+ Add mangle command to dmsetup to provide renaming to correct mangled form.
+ Add 'mangled_name' and 'unmangled_name' fields to dmsetup info -c -o.
+ Add --manglename option to dmsetup to select the name mangling mode.
+ Add dm_task_get_name_mangled/unmangled to libdevmapper.
+ Mangle device name on dm_task_set_name/newname call if necessary.
+ Add dm_set/get_name_mangling_mode to set/get name mangling in libdevmapper.
+ Add configure --with-default-name-mangling for udev-friendly dev name charset.
+ Test for parsed words in _umount() dmeventd snapshot plugin.
+ Fix memory leak in fail path of parse_loop_device_name() in dmsetup.
+ Check for missing reply_uuid in dm_event_get_registered_device().
+ Check for allocation failure in dmeventd restart().
+ Add few missing allocation failures tests in dmsetup.
+ Fix potential risk of writing in front of buffer in _sysfs_get_dm_name().
+
+Version 1.02.70 - 12th February 2012
+====================================
+ Fix dm_event_get_version() check.
+ Add pointer test for dependency check in _add_dev().
+ Validate name and uuid params of dm_tree_add_new_dev_with_udev_flags().
+ Do not crash for dm_report_init() sort_key == NULL and behave like "".
+ Return error for failing allocation in dm_asprintf().
+ Add missing test for failing allocation in dm_realloc() code.
+ Add test for memory allocation failures in regex matcher code.
+ Simplify dm_task_set_geometry() and use dm_asprintf().
+ Set all parameters to 0 for dm_get_next_target() for NULL return.
+ Fix fd resource leak in error path for _udev_notify_sem_create().
+ Leave space for '\0' for readline() call in _sysfs_get_kernel_name().
+
+Version 1.02.69 - 1st February 2012
+===================================
+ Clean up dmeventd systemd unit ordering and requirements.
+
+Version 1.02.68 - 26th January 2012
+===================================
+ Reset all members of info struct in dm_tree_add_new_dev_with_udev_flags.
+ Add dmsetup wipe_table to replace table with one that uses error target.
+ Add 'blkdevname' and 'blkdevs_used' fields to dmsetup info -c -o.
+ Add 'blkdevname' option to dmsetup ls --tree to see block device names.
+ Add -o devno/blkdevname/devname to dmsetup deps and ls.
+ Add dm_device_get_name to get map name or block device name for given devno.
+ Remove empty devices when clearing left-over inactive tables in deptree.
+ Add dm_uuid_prefix/dm_set_uuid_prefix to override hard-coded LVM- prefix.
+ Improve dmsetup man page description of readahead parameter.
+ Use sysfs to set/get readahead if possible.
+ Fix lvm2-monitor init script to use normalized output when using vgs.
+ Add test for max length (DM_MAX_TYPE_NAME) of target type name.
+ Include a copy of kernel DM documentation in doc/kernel.
+ Improve man page style for dmsetup and mention more targets.
+ Fix _get_proc_number to be tolerant of malformed /proc/misc entries.
+ Fix missing thread list manipulation protection in dmeventd.
+ Add ExecReload to dm-event.service for systemd to reload dmeventd properly.
+ Add dm_config_tree_find_str_allow_empty and dm_config_find_str_allow_empty.
+ Fix compile-time pool memory locking with DEBUG_MEM.
+ Fix valgrind error reports in free of pool chunks with DEBUG_MEM.
+ Align size of structure chunk for fast pool allocator to 8 bytes.
+ Simplify some pointer operations in dm_free_aux() debug code.
+ Remove unused dbg_malloc.h file from source tree.
+ Cleanup backtraces for _create_and_load_v4().
+ Fix alignment warning in bitcount calculation for raid segment.
+ Allocate dm_tree structure from dm_tree pool.
+ Update debug logging for _resume_node.
+ Add functions to support thin provisioning target.
+ Improve libdm-config error path reporting.
+ Update dmsetup resume man with --addnodeonresume/create options.
+ Add dependency for dm man pages to man subdirectory make all target.
+ Add dm_tree_retry_remove to use retry logic for device removal in a dm_tree.
+ Add dm_device_has_mounted_fs fn to check mounted filesystem on a device.
+ Add dm_device_has_holders fn to to check use of the device by another device.
+ Add dm_sysfs_dir to libdevmapper to retrieve sysfs location set.
+ Add dm_set_sysfs_dir to libdevmapper to set sysfs location.
+ Add --retry option for dmsetup remove to retry removal if not successful.
+ Add dm_task_retry_remove fn to use retry logic for device removal.
+ Remove unused passed parameters for _mirror_emit_segment_line().
+ Add dm_config and string character escaping functions to libdevmapper.
+ Mark unreleased memory pools as internal error.
+
+Version 1.02.67 - 19th August 2011
+==================================
+ Add dm_tree_node_add_null_area for temporarily-missing raid devs tracked.
+
+Version 1.02.66 - 12th August 2011
+==================================
+ Release geometry buffer in dm_task_destroy.
+ Update udev rules to skip DM flags decoding for removed devices.
+ Add compile-time pool memory locking options (to debug shared VG structs).
+ Remove device name prefix from dmsetup line output if -j & -m or -u supplied.
+ Remove support for the original version 1 dm ioctls.
+ Add missing check for allocation failure _create_dir_recursive().
+ Add support for systemd file descriptor handover in dmeventd.
+ Fix memory leak in dmsetup _message() memory allocation error path.
+ Use new oom killer adjustment interface (oom_score_adj) when available.
+ Add systemd unit files for dmeventd.
+ Fix read-only identical table reload supression.
+
+Version 1.02.65 - 8th July 2011
+===============================
+ Remove dev name prefix from dmsetup line output if exactly one dev requested.
+ Report internal error if suspending a device using an already-suspended dev.
+ Report error if a table load requiring target parameters has none supplied.
+ Add dmsetup --checks and dm_task_enable_checks framework to validate ioctls.
+ Add age_in_minutes parameter to dmsetup udevcomplete_all.
+ Return immediately from dm_lib_exit() if called more than once.
+ Disable udev fallback by default and add --verifyudev option to dmsetup.
+ Report internal error if any table is loaded while any dev is known suspended.
+ Add dm_get_suspended_counter() for number of devs in suspended state by lib.
+ Fix "all" report field prefix matching to include label fields with pv_all.
+ Delay resuming new preloaded mirror devices with core logs in deptree code.
+ Accept new kernel version 3 uname formats in initialisation.
+
+Version 1.02.64 - 29th April 2011
+==================================
+ Require libudev >= 143 when compiling with udev support.
+ Use word alignment for dm_pool_strdup() and dm_pool_strndup().
+ Use dm_snprintf() to fix signedness warning in dm_set_dev_dir().
+ Use unsigned loop counter to fix signedness warning in _other_node_ops().
+ Fix const cast in dmsetup calls of dm_report_field_string().
+ Streamline /dev/mapper/control node code for common cases.
+ Use hard-coded dm control node device number for 2.6.36 kernels and above.
+ Improve stack debug reporting in dm_task_create().
+ Fallback to control node creation only if node doesn't exist yet.
+ Change dm_hash binary functions to take void *key instead of char *.
+ Fix uninitialised memory use with empty params in _reload_with_suppression_v4.
+ Lower severity of selabel_lookup and matchpathcon failure to log_debug.
+ Add test for failed allocation from dm_task_set_uuid() in dmeventd.
+ Add dm_event_get_version to dmeventd for use with -R.
+ Avoid dmeventd core dumps when handling request with unknown command ID.
+ Have dmeventd -R start up even when no existing copy is running.
+ Accept multiple mapped device names on many dmsetup command lines.
+ Fix dm_udev_wait calls in dmsetup to occur before readahead display not after.
+ Include an implicit dm_task_update_nodes() within dm_udev_wait().
+ Fix _create_and_load_v4 not to lose the --addnodeoncreate setting (1.02.62).
+ Add inactive table query support for kernel driver >= 4.11.6 (RHEL 5.7).
+ Log debug open_count in _node_has_closed_parents().
+ Add a const to dm_report_field_string() data parameter.
+
+Version 1.02.63 - 9th February 2011
+===================================
+ Reinstate DEBUG_MEM as it's part of the API. (1.02.62)
+
+Version 1.02.62 - 4th February 2011
+===================================
+ Add configure --with-device-nodes-on=create for previous behaviour.
+ Move creation of device nodes from 'create' to 'resume'.
+ Add --addnodeonresume and --addnodeoncreate options to dmsetup.
+ Add dm_task_set_add_node to libdevmapper to control dev node creation time.
+ Add dm_task_secure_data to libdevmapper to wipe ioctl buffers in kernel.
+ Log debug message when expected uevent is not generated.
+ Only compile memory debugging code when DEBUG_MEM is set.
+ Set DM_UDEV_DISABLE_OTHER_RULES_FLAG for suspended DM devices in udev rules.
+ Begin a new pool object for each row in _output_as_rows() correctly.
+
+Version 1.02.61 - 10th January 2011
+===================================
+ Add DM_COOKIE_AUTO_CREATE to libdevmapper.h.
+ Export DM_CONTROL_NODE_UMASK and use it while creating /dev/mapper/control.
+
+Version 1.02.60 - 20th December 2010
+====================================
+ Check for unlink failure in remove_lockfile() in dmeventd.
+ Use dm_free for dm_malloc-ed areas in _clog_ctr/_clog_dtr in cmirrord.
+ Use char* arithmetic in _process_all() & _targets() in dmsetup.
+ Change dm_regex_create() API to accept const char * const *patterns.
+ Add new dm_prepare_selinux_context fn to libdevmapper and use it throughout.
+ Detect existence of new SELinux selabel interface during configure.
+
+Version 1.02.59 - 6th December 2010
+===================================
+ Add backtraces to _process_mapper_dir and _create_and_load_v4 error paths.
+ Remove superfluous checks for NULL before calling dm_free.
+
+Version 1.02.58 - 22nd November 2010
+====================================
+ Fix _output_field crash from field_id free with DEBUG_MEM. (1.02.57)
+
+Version 1.02.57 - 8th November 2010
+===================================
+ Fix regex optimiser not to ignore RHS of OR nodes in _find_leftmost_common.
+ Add dmeventd -R to restart dmeventd without losing monitoring state. (1.02.56)
+ Fix memory leak of field_id in _output_field function.
+ Allocate buffer for reporting functions dynamically to support long outputs.
+
+Version 1.02.56 - 25th October 2010
+===================================
+ Return const pointer from dm_basename() in libdevmapper.
+ Implement dmeventd -R to restart without state loss.
+ Add dm_zalloc and use it and dm_pool_zalloc throughout.
+ Add --setuuid to dmsetup rename.
+ Add dm_task_set_newuuid to set uuid of mapped device post-creation.
+
+Version 1.02.55 - 24th September 2010
+=====================================
+ Fix the way regions are marked complete to avoid slow --nosync cmirror I/O.
+ Add DM_REPORT_FIELD_TYPE_ID_LEN to libdevmapper.h.
+
+Version 1.02.54 - 18th August 2010
+==================================
+ Fix dm-mod autoloading logic to not assume control node is set correctly.
+ Add dmeventd/executable to lvm.conf to test alternative dmeventd.
+ Export dm_event_handler_set_dmeventd_path to override built-in dmeventd path.
+ Generate libdevmapper-event exported symbols.
+ Remove superfluous NULL pointer tests before dm_free from dmeventd.
+ Assume dm-mod autoloading support is in kernel 2.6.36 and higher, not 2.6.35.
+ Fix udev rules to support udev database content generated by older rules.
+ Reinstate detection of inappropriate uevent with DISK_RO set and suppress it.
+ Fix regex ttree off-by-one error.
+ Add --enable-valgrind-pool to configure.
+ Fix segfault in regex matcher with characters of ordinal value > 127.
+ Fix 'void*' arithmetic warnings in dbg_malloc.c and libdm-iface.c.
+ Wait for node creation before displaying debug info in dmsetup.
+ Fix return status 0 for "dmsetup info -c -o help".
+ Add check for kernel semaphore support and disable udev_sync if not available.
+
+Version 1.02.53 - 28th July 2010
+================================
+ Revert failed table load preparation after "create, load and resume".
+ Switch dmeventd to use dm_create_lockfile and drop duplicate code.
+ Add dm_create_lockfile to libdm to handle pidfiles for all daemons.
+ Replace lookup with next in struct dfa_state & calculate states on demand.
+ Improve the regex matcher, reducing the number of charset nodes used.
+ Add dm_regex_fingerprint to facilitate regex testing.
+ Skip ffs(0) in _test_word in bitset functions.
+ Use "nowatch" udev rule for inappropriate devices.
+
+Version 1.02.52 - 6th July 2010
+===============================
+ Fix dmlosetup snprintf %llu compiler warning.
+ Add parentheses to some libdevmapper.h macro arguments.
+ Add printf format attributes to dm_{sn,as}printf and fix a caller.
+ Move dmeventd man page from install_lvm2 to install_device-mapper. (1.02.50)
+
+Version 1.02.51 - 30th June 2010
+================================
+ Generate libdevmapper exported symbols from header file.
+
+Version 1.02.50 - 23rd June 2010
+================================
+ Fix INTERNAL_ERROR typo in ioctl iface unknown task message.
+ Fix udev rules to handle spurious events properly.
+ Use C99 [] not [0] in dm_ulog_request struct to avoid abort when fortified.
+ Allow use of devmapper header file in C++ mode (extern "C" and __typeof__).
+ Add dmeventd man page.
+
+Version 1.02.49 - 4th June 2010
+===============================
+ Support autoloading of dm-mod module for kernels from 2.6.35.
+ Document 'clear' in dmsetup man page.
+ Fix semctl parameter (union) to avoid misaligned parameter on some arches.
+ Add dm_tree_node_set_presuspend_node() to presuspend child when deactivating.
+ Initial support for replicator target.
+
+Version 1.02.48 - 17th May 2010
+================================
+ Use -d to control level of messages sent to syslog by dmeventd.
+ Change -d to -f to run dmeventd in foreground.
+ Do not print encryption key in message debug output (cryptsetup luksResume).
+ Fix dmeventd static build library dependencies.
+ Fix udev flags on remove in create_and_load error path.
+
+Version 1.02.47 - 30th April 2010
+=================================
+ Add support for new IMPORT{db} udev rule.
+ Add DM_UDEV_PRIMARY_SOURCE_FLAG udev flag to recognize proper DM events.
+ Also include udev libs in libdevmapper.pc when udev_sync is enabled.
+ Cache bitset locations to speed up _calc_states.
+ Add a regex optimisation pass for shared prefixes and suffixes.
+ Add dm_bit_and and dm_bitset_equal to libdevmapper.
+ Simplify dm_bitset_create.
+ Speed up dm_bit_get_next with ffs().
+
+Version 1.02.46 - 14th April 2010
+=================================
+ Change dm_tree_deactivate_children to fail if device is open.
+ Wipe memory buffers for dm-ioctl parameters before releasing.
+ Strictly require libudev if udev_sync is used.
+ Add support for ioctl's DM_UEVENT_GENERATED_FLAG.
+
+Version 1.02.45 - 9th March 2010
+================================
+ Add --showkeys parameter description to dmsetup man page.
+ Add --help option as synonym for help command.
+
+Version 1.02.44 - 15th February 2010
+====================================
+ Add DM_UDEV_DISABLE_LIBRARY_FALLBACK udev flag to rely on udev only.
+ Export dm_udev_create_cookie function to create new cookies on demand.
+ Add --udevcookie, udevcreatecookie and udevreleasecookie to dmsetup.
+ Set udev state automatically instead of using DM_UDEV_DISABLE_CHECKING.
+
+Version 1.02.43 - 21st January 2010
+===================================
+ Remove bitset, hash and pool headers superceded by libdevmapper.h.
+ Fix off-by-one error causing bad cluster mirror table construction.
+
+Version 1.02.42 - 14th January 2010
+===================================
+ Add support for the "snapshot-merge" kernel target (2.6.33-rc1).
+ Introduce a third activation_priority level in dm_tree_activate_children.
+
+Version 1.02.41 - 12th January 2010
+===================================
+ If DM_UDEV_DISABLE_CHECKING is set in environment, disable udev warnings.
+ Add dm_tree_add_dev_with_udev_flags to provide wider support for udev flags.
+ Add --noudevrules option for dmsetup to disable /dev node management by udev.
+ Fix 'dmsetup info -c -o all' to show all fields.
+ Return errors if dm_tree_*_children functions fail.
+ Fix coredump and memory leak for 'dmsetup help -c'.
+ Disable udev rules for change events with DISK_RO set.
+
+Version 1.02.40 - 19th November 2009
+====================================
+ Fix install_device-mapper Makefile target to not build dmeventd plugins.
+ Support udev flags even when udev_sync is disabled or not compiled in.
+ Remove 'last_rule' from udev rules: honour DM_UDEV_DISABLE_OTHER_RULES_FLAG.
+ Add dmsetup --inactive support.
+ Add dm_task_query_inactive_table to libdevmapper for kernel driver >= 4.16.
+ Fix hash lookup segfault when keys compared are different lengths.
+
+Version 1.02.39 - 26th October 2009
+===================================
+ Remove strict default permissions for DM devices from 95-dm-notify.rules.
+ Add dmsetup udevflags command to decode udev flags in given cookie value.
+ Support udev flags in libdevmapper incl. dm_tree_add_new_dev_with_udev_flags.
+ Make libdm ABI consistent when built with/without selinux support.
+
+Version 1.02.38 - 25th September 2009
+=====================================
+ Export DM_DEV_DIR_UMASK, the default umask for /dev directories created.
+ Handle any path supplied to dm_task_set_name by looking up in /dev/mapper.
+ Add several examples to 12-dm-permissions.rules.
+ Add splitname and --yes to dmsetup man page.
+ Fix _mirror_emit_segment_line return code.
+ Fix dmeventd _temporary_log_fn parameters. (2.02.50)
+
+Version 1.02.37 - 15th September 2009
+=====================================
+ Add dmsetup manpage entries for udevcomplete_all and udevcookies.
+ Check udev is running when processing cookies and retain state internally.
+ Add y|--yes option to dmsetup for default 'yes' answer to prompts.
+ Fix tools Makefile to process dmsetup sources separately.
+ Restore umask when device node creation fails.
+ Check kernel vsn to use 'block_on_error' or 'handle_errors' in mirror table.
+ Add dm-log-userspace.h to tree for cmirrord builds.
+
+Version 1.02.36 - 6th August 2009
+=================================
+ Add udevcookies, udevcomplete, udevcomplete_all and --noudevwait to dmsetup.
+ Add libdevmapper functions to support synchronisation with udev.
+
+Version 1.02.35 - 28th July 2009
+================================
+ Add LOG_LINE_WITH_ERRNO macro.
+ Use log_error macro consistently throughout in place of log_err.
+
+Version 1.02.34 - 15th July 2009
+================================
+ Use _exit() not exit() after forking to avoid flushing libc buffers twice.
+ Rename plog macro to LOG_LINE & add LOG_MESG variant for dm_dump_memory_debug.
+ Change plog to use dm_log_with_errno unless deprecated dm_log_init was used.
+ Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old fns.
+ Fix whitespace in linear target line to fix identical table line detection.
+ Add device number to more log messages during activation.
+
+Version 1.02.33 - 30th June 2009
+================================
+ Don't fallback to default major number: use dm_task_set_major_minor. (1.02.31)
+ Do not fork daemon when dmeventd cannot be found.
+ Add crypt target handling to libdevmapper tree nodes.
+ Add splitname command to dmsetup.
+ Add subsystem, vg_name, lv_name, lv_layer fields to dmsetup reports.
+ Make mempool optional in dm_split_lvm_name().
+
+Version 1.02.32 - 21st May 2009
+===============================
+ Only generate libdevmapper.a when configured to link statically.
+ Export dm_tree_node_size_changed() from libdevmapper.
+ Propagate the table size_changed property up the dm device tree.
+ Detect failure to free memory pools when releasing the library.
+ Fix segfault when getopt processes dmsetup -U, -G and -M options.
+
+Version 1.02.31 - 3rd March 2009
+================================
+ If kernel supports only one dm major number, use in place of any supplied.
+
+Version 1.02.30 - 26th January 2009
+====================================
+ Add "all" field to reports expanding to all fields of report type.
+ Enforce device name length and character limitations in libdm.
+ Replace _dm_snprintf with EMIT_PARAMS macro for creating target lines.
+
+Version 1.02.29 - 10th November 2008
+====================================
+ Merge device-mapper into the LVM2 tree.
+ Split out dm-logging.h from log.h.
+ Use lvm-types.h.
+ Add usrsbindir to configure.
+
+Version 1.02.28 - 18th September 2008
+=====================================
+ Only resume devices in dm_tree_preload_children if size changes.
+ Extend deptree buffers so the largest possible device numbers fit.
+ Generate versioned libdevmapper-event.so.
+ Underline longer report help text headings.
+
+Version 1.02.27 - 25th June 2008
+================================
+ Align struct memblock in dbg_malloc for sparc.
+ Add --unquoted and --rows to dmsetup.
+ Avoid compiler warning about cast in dmsetup.c's OFFSET_OF macro.
+ Fix inverted no_flush debug message.
+ Remove --enable-jobs from configure. (Set at runtime instead.)
+ Bring configure.in and list.h into line with the lvm2 versions.
+
+Version 1.02.26 - 6th June 2008
+===============================
+ Initialise params buffer to empty string in _emit_segment.
+ Skip add_dev_node when ioctls disabled.
+ Make dm_hash_iter safe against deletion.
+ Accept a NULL pointer to dm_free silently.
+ Add tables_loaded, readonly and suspended columns to reports.
+ Add --nameprefixes to dmsetup.
+ Add field name prefix option to reporting functions.
+ Calculate string size within dm_pool_grow_object.
+
+Version 1.02.25 - 10th April 2008
+=================================
+ Remove redundant if-before-free tests.
+ Use log_warn for reporting field help text instead of log_print.
+ Change cluster mirror log type name (s/clustered_/clustered-/)
+
+Version 1.02.24 - 20th December 2007
+====================================
+ Fix deptree to pass new name to _resume_node after a rename.
+ Suppress other node operations if node is deleted.
+ Add node operation stack debug messages.
+ Report error when empty device name passed to readahead functions.
+ Fix minimum readahead debug message.
+
+Version 1.02.23 - 5th December 2007
+===================================
+ Update dm-ioctl.h after removal of compat code.
+ Add readahead support to libdevmapper and dmsetup.
+ Fix double free in a libdevmapper-event error path.
+ Fix configure --with-dmeventd-path substitution.
+ Allow a DM_DEV_DIR environment variable to override /dev in dmsetup.
+ Create a libdevmapper.so.$LIB_VERSION symlink within the build tree.
+ Avoid static link failure with some SELinux libraries that require libpthread.
+ Remove obsolete dmfs code from tree and update INSTALL.
+
+Version 1.02.22 - 21st August 2007
+==================================
+ Fix inconsistent licence notices: executables are GPLv2; libraries LGPLv2.1.
+ Update to use autoconf 2.61, while still supporting 2.57.
+ Avoid repeated dm_task free on some dm_event_get_registered_device errors.
+ Introduce log_sys_* macros from LVM2.
+ Export dm_fclose and dm_create_dir; remove libdm-file.h.
+ Don't log EROFS mkdir failures in _create_dir_recursive (for LVM2).
+ Add fclose wrapper dm_fclose that catches write failures (using ferror).
+
+Version 1.02.21 - 13th July 2007
+================================
+ Introduce _LOG_STDERR to send log_warn() messages to stderr not stdout.
+ Fix dmsetup -o devno string termination. (1.02.20)
+
+Version 1.02.20 - 15th June 2007
+================================
+ Fix default dmsetup report buffering and add --unbuffered.
+ Add tree-based and dependency fields to dmsetup reports.
+
+Version 1.02.19 - 27th April 2007
+=================================
+ Standardise protective include file #defines.
+ Add regex functions to library.
+ Avoid trailing separator in reports when there are hidden sort fields.
+ Fix segfault in 'dmsetup status' without --showkeys against crypt target.
+ Deal with some more compiler warnings.
+ Introduce _add_field() and _is_same_field() to libdm-report.c.
+ Fix some libdevmapper-event and dmeventd memory leaks.
+ Remove unnecessary memset() return value checks.
+ Fix a few leaks in reporting error paths. [1.02.15+]
+
+Version 1.02.18 - 13th February 2007
+====================================
+ Improve dmeventd messaging protocol: drain pipe and tag messages.
+
+Version 1.02.17 - 29th January 2007
+===================================
+ Add recent reporting options to dmsetup man page.
+ Revise some report fields names.
+ Add dmsetup 'help' command and update usage text.
+ Use fixed-size fields in report interface and reorder.
+
+Version 1.02.16 - 25th January 2007
+===================================
+ Add some missing close() and fclose() return value checks.
+ Migrate dmsetup column-based output over to new libdevmapper report framework.
+ Add descriptions to reporting field definitions.
+ Add a dso-private variable to dmeventd dso interface.
+ Add dm_event_handler_[gs]et_timeout functions.
+ Streamline dm_report_field_* interface.
+ Add cmdline debug & version options to dmeventd.
+ Add DM_LIB_VERSION definition to configure.h.
+ Suppress 'Unrecognised field' error if report field is 'help'.
+ Add --separator and --sort to dmsetup (unused).
+ Make alignment flag optional when specifying report fields.
+
+Version 1.02.15 - 17th January 2007
+===================================
+ Add basic reporting functions to libdevmapper.
+ Fix a malloc error path in dmsetup message.
+ More libdevmapper-event interface changes and fixes.
+ Rename dm_saprintf() to dm_asprintf().
+ Report error if NULL pointer is supplied to dm_strdup_aux().
+ Reinstate dm_event_get_registered_device.
+
+Version 1.02.14 - 11th January 2007
+===================================
+ Add dm_saprintf().
+ Use CFLAGS when linking so mixed sparc builds can supply -m64.
+ Add dm_tree_use_no_flush_suspend().
+ Lots of dmevent changes including revised interface.
+ Export dm_basename().
+ Cope with a trailing space when comparing tables prior to possible reload.
+ Fix dmeventd to cope if monitored device disappears.
+
+Version 1.02.13 - 28 Nov 2006
+=============================
+ Update dmsetup man page (setgeometry & message).
+ Fix dmsetup free after getline with debug.
+ Suppress encryption key in 'dmsetup table' output unless --showkeys supplied.
+
+Version 1.02.12 - 13 Oct 2006
+=============================
+ Avoid deptree attempting to suspend a device that's already suspended.
+
+Version 1.02.11 - 12 Oct 2006
+==============================
+ Add suspend noflush support.
+ Add basic dmsetup loop support.
+ Switch dmsetup to use dm_malloc and dm_free.
+
+Version 1.02.10 - 19 Sep 2006
+=============================
+ Add dm_snprintf(), dm_split_words() and dm_split_lvm_name() to libdevmapper.
+ Reorder mm bounds_check code to reduce window for a dmeventd race.
+
+Version 1.02.09 - 15 Aug 2006
+=============================
+ Add --table argument to dmsetup for a one-line table.
+ Abort if errors are found during cmdline option processing.
+ Add lockfs indicator to debug output.
+
+Version 1.02.08 - 17 July 2006
+==============================
+ Append full patch to check in emails.
+ Avoid duplicate dmeventd subdir with 'make distclean'.
+ Update dmsetup man page.
+ Add --force to dmsetup remove* to load error target.
+ dmsetup remove_all also performs mknodes.
+ Don't suppress identical table reloads if permission changes.
+ Fix corelog segment line.
+ Suppress some compiler warnings.
+
+Version 1.02.07 - 11 May 2006
+=============================
+ Add DM_CORELOG flag to dm_tree_node_add_mirror_target().
+ Avoid a dmeventd compiler warning.
+
+Version 1.02.06 - 10 May 2006
+=============================
+ Move DEFS into configure.h.
+ Fix leaks in error paths found by coverity.
+ Remove dmsetup line buffer limitation.
+
+Version 1.02.05 - 19 Apr 2006
+=============================
+ Separate install_include target in makefiles.
+ Separate out DEFS from CFLAGS.
+ Support pkg-config.
+ Check for libsepol.
+
+Version 1.02.04 - 14 Apr 2006
+=============================
+ Bring dmsetup man page up-to-date.
+ Use name-based device refs if kernel doesn't support device number refs.
+ Fix memory leak (struct dm_ioctl) when struct dm_task is reused.
+ If _create_and_load_v4 fails part way through, revert the creation.
+ dmeventd thread/fifo fixes.
+ Add file & line to dm_strdup_aux().
+ Add setgeometry.
+
+Version 1.02.03 - 7 Feb 2006
+============================
+ Add exported functions to set uid, gid and mode.
+ Rename _log to dm_log and export.
+ Add dm_tree_skip_lockfs.
+ Fix dm_strdup debug definition.
+ Fix hash function to avoid using a negative array offset.
+ Don't inline _find in hash.c and tidy signed/unsigned etc.
+ Fix libdevmapper.h #endif.
+ Fix dmsetup version driver version.
+ Add sync, nosync and block_on_error mirror log parameters.
+ Add hweight32.
+ Fix dmeventd build.
+
+Version 1.02.02 - 2 Dec 2005
+============================
+ dmeventd added.
+ Export dm_task_update_nodes.
+ Use names instead of numbers in messages when ioctls fail.
+
+Version 1.02.01 - 23 Nov 2005
+=============================
+ Resume snapshot-origins last.
+ Drop leading zeros from dm_format_dev.
+ Suppress attempt to reload identical table.
+ Additional LVM- prefix matching for transitional period.
+
+Version 1.02.00 - 10 Nov 2005
+=============================
+ Added activation functions to library.
+ Added return macros.
+ Also suppress error if device doesn't exist with DM_DEVICE_STATUS.
+ Export dm_set_selinux_context().
+ Add dm_driver_version().
+ Added dependency tree functions to library.
+ Added hash, bitset, pool, dbg_malloc to library.
+ Added ls --tree to dmsetup.
+ Added dmsetup --nolockfs support for suspend/reload.
+
+Version 1.01.05 - 26 Sep 2005
+=============================
+ Resync list.h with LVM2.
+ Remember increased buffer size and use for subsequent calls.
+ On 'buffer full' condition, double buffer size and repeat ioctl.
+ Fix termination of getopt_long() option array.
+ Report 'buffer full' condition with v4 ioctl as well as with v1.
+
+Version 1.01.04 - 2 Aug 2005
+============================
+ Fix dmsetup ls -j and status --target with empty table.
+
+Version 1.01.03 - 13 Jun 2005
+=============================
+ Use matchpathcon mode parameter.
+ Fix configure script to re-enable selinux.
+
+Version 1.01.02 - 17 May 2005
+=============================
+ Call dm_lib_exit() and dm_lib_release() automatically now.
+ Add --target <target_type> filter to dmsetup table/status/ls.
+ Add --exec <command> to dmsetup ls.
+ Fix dmsetup getopt_long usage.
+
+Version 1.01.01 - 29 Mar 2005
+=============================
+ Update dmsetup man page.
+ Drop-in devmap_name replacement.
+ Add option to compile without ioctl for testing.
+ Fix DM_LIB_VERSION sed.
+
+Version 1.01.00 - 17 Jan 2005
+=============================
+ Add dm_task_no_open_count() to skip getting open_count.
+
+Version 1.00.21 - 7 Jan 2005
+============================
+ Fix /proc/devices parsing.
+
+Version 1.00.20 - 6 Jan 2005
+============================
+ Attempt to fix /dev/mapper/control transparently if it's wrong.
+ Configuration-time option for setting uid/gid/mode for /dev/mapper nodes.
+ Update kernel patches for 2.4.27/2.4.28-pre-4 (includes minor fixes).
+ Add --noheadings columns option for colon-separated dmsetup output.
+ Support device referencing by uuid or major/minor.
+ Warn if kernel data didn't fit in buffer.
+ Fix a printf.
+
+Version 1.00.19 - 3 July 2004
+=============================
+ More autoconf fixes.
+ Fix a dmsetup newline.
+ Fix device number handling for 2.6 kernels.
+
+Version 1.00.18 - 20 Jun 2004
+=============================
+ Fix a uuid free in libdm-iface.
+ Fix a targets string size calc in driver.
+ Add -c to dmsetup for column-based output.
+ Add target message-passing ioctl.
+
+Version 1.00.17 - 17 Apr 2004
+=============================
+ configure --with-owner= --with-group= to avoid -o and -g args to 'install'
+ Fix library selinux linking.
+
+Version 1.00.16 - 16 Apr 2004
+=============================
+ Ignore error setting selinux file context if fs doesn't support it.
+
+Version 1.00.15 - 7 Apr 2004
+============================
+ Fix status overflow check in kernel patches.
+
+Version 1.00.14 - 6 Apr 2004
+============================
+ Fix static selinux build.
+
+Version 1.00.13 - 6 Apr 2004
+============================
+ Add some basic selinux support.
+
+Version 1.00.12 - 6 Apr 2004
+============================
+ Fix dmsetup.static install.
+
+Version 1.00.11 - 5 Apr 2004
+============================
+ configure --enable-static_link does static build in addition to dynamic.
+ Moved Makefile library targets definition into template.
+
+Version 1.00.10 - 2 Apr 2004
+============================
+ Fix DESTDIR handling.
+ Static build installs to dmsetup.static.
+ Basic support for internationalisation.
+ Minor Makefile tidy-ups/fixes.
+
+Version 1.00.09 - 31 Mar 2004
+=============================
+ Update copyright notices to Red Hat.
+ Move full mknodes functionality from dmsetup into libdevmapper.
+ Avoid sscanf %as for uClibc compatibility.
+ Cope if DM_LIST_VERSIONS is not defined.
+ Add DM_LIST_VERSIONS functionality to kernel patches.
+ Generate new kernel patches for 2.4.26-rc1.
+
+Version 1.00.08 - 27 Feb 2004
+=============================
+ Added 'dmsetup targets'.
+ Added event_nr support to 'dmsetup wait'.
+ Updated dmsetup man page.
+ Allow logging function to be reset to use internal one.
+ Bring log macros in line with LVM2 ones.
+ Added 'make install_static_lib' which installs libdevmapper.a.
+ Made configure/makefiles closer to LVM2 versions.
+ Fixed DESTDIR for make install/install_static_lib.
+ Updated README/INSTALL to reflect move to sources.redhat.com.
+ Updated autoconf files to 2003-06-17.
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..b6c9b18
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,63 @@
+dnl AC_GCC_VERSION
+dnl check for compiler version
+dnl sets COMPILER_VERSION and GCC_VERSION
+
+AC_DEFUN([AC_CC_VERSION],
+[
+ AC_MSG_CHECKING([C compiler version])
+ COMPILER_VERSION=`$CC -v 2>&1 | grep version`
+ case "$COMPILER_VERSION" in
+ *gcc*)
+ dnl Ok, how to turn $3 into the real $3
+ GCC_VERSION=`echo $COMPILER_VERSION | \
+ sed -e 's/[[^ ]]*\ [[^ ]]*\ \([[^ ]]*\)\ .*/\1/'` ;;
+ *) GCC_VERSION=unknown ;;
+ esac
+ AC_MSG_RESULT($GCC_VERSION)
+])
+
+dnl AC_TRY_CCFLAG([CCFLAG], [VAR], [ACTION-IF-WORKS], [ACTION-IF-FAILS])
+dnl check if $CC supports a given flag
+
+AC_DEFUN([AC_TRY_CCFLAG],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ ac_save_CFLAGS=$CFLAGS
+ CFLAGS=$1
+ AC_CACHE_CHECK([whether $CC accepts $1 flag], [ac_cv_flag_$2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [AS_VAR_SET([ac_cv_flag_$2], [yes])],
+ [AS_VAR_SET([ac_cv_flag_$2], [no])])])
+ CFLAGS=$ac_save_CFLAGS
+ $2=AS_VAR_GET([ac_cv_flag_$2])
+ if test "$2" = yes; then
+ ifelse([$3], [], [:], [$3])
+ else
+ ifelse([$4], [], [:], [$4])
+ fi
+])
+
+dnl AC_IF_YES([TEST-FOR-YES], [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+dnl AS_IF() abstraction, checks shell variable for 'yes'
+AC_DEFUN([AC_IF_YES], [AS_IF([test $$1 = yes], [$2], [$3])])
+
+dnl AC_TRY_LDFLAGS([LDFLAGS], [VAR], [ACTION-IF-WORKS], [ACTION-IF-FAILS])
+dnl check if $CC supports given ld flags
+
+AC_DEFUN([AC_TRY_LDFLAGS],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ ac_save_LDFLAGS=$LDFLAGS
+ LDFLAGS=$1
+ AC_CACHE_CHECK([whether $CC accepts $1 ld flags], [ac_cv_flag_$2],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+ [AS_VAR_SET([ac_cv_flag_$2], [yes])],
+ [AS_VAR_SET([ac_cv_flag_$2], [no])])])
+ LDFLAGS=$ac_save_LDFLAGS
+ $2=AS_VAR_GET([ac_cv_flag_$2])
+ if test "$2" = yes; then
+ ifelse([$3], [], [:], [$3])
+ else
+ ifelse([$4], [], [:], [$4])
+ fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..35107ac
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,539 @@
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_python_module.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PYTHON_MODULE(modname[, fatal, python])
+#
+# DESCRIPTION
+#
+# Checks for Python module.
+#
+# If fatal is non-empty then absence of a module will trigger an error.
+# The third parameter can either be "python" for Python 2 or "python3" for
+# Python 3; defaults to Python 3.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Andrew Collier
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 8
+
+AU_ALIAS([AC_PYTHON_MODULE], [AX_PYTHON_MODULE])
+AC_DEFUN([AX_PYTHON_MODULE],[
+ if test -z $PYTHON;
+ then
+ if test -z "$3";
+ then
+ PYTHON="python3"
+ else
+ PYTHON="$3"
+ fi
+ fi
+ PYTHON_NAME=`basename $PYTHON`
+ AC_MSG_CHECKING($PYTHON_NAME module: $1)
+ $PYTHON -c "import $1" 2>/dev/null
+ if test $? -eq 0;
+ then
+ AC_MSG_RESULT(yes)
+ eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
+ else
+ AC_MSG_RESULT(no)
+ eval AS_TR_CPP(HAVE_PYMOD_$1)=no
+ #
+ if test -n "$2"
+ then
+ AC_MSG_ERROR(failed to find required module $1)
+ exit 1
+ fi
+ fi
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+
+# PKG_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable pkgconfigdir as the location where a module
+# should install pkg-config .pc files. By default the directory is
+# $libdir/pkgconfig, but the default can be changed by passing
+# DIRECTORY. The user can override through the --with-pkgconfigdir
+# parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_INSTALLDIR
+
+
+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable noarch_pkgconfigdir as the location where a
+# module should install arch-independent pkg-config .pc files. By
+# default the directory is $datadir/pkgconfig, but the default can be
+# changed by passing DIRECTORY. The user can override through the
+# --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_NOARCH_INSTALLDIR
+
+
+# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------
+# Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])# PKG_CHECK_VAR
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+# Adds support for distributing Python modules and packages. To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable. To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+#
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+#
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+#
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement. MINIMUM-VERSION should consist of
+# numbers and dots only.
+AC_DEFUN([AM_PATH_PYTHON],
+ [
+ dnl Find a Python interpreter. Python versions prior to 2.0 are not
+ dnl supported. (2.0 was released on October 16, 2000).
+ m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+[python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl
+ python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0])
+
+ AC_ARG_VAR([PYTHON], [the Python interpreter])
+
+ m4_if([$1],[],[
+ dnl No version check is needed.
+ # Find any Python interpreter.
+ if test -z "$PYTHON"; then
+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
+ fi
+ am_display_PYTHON=python
+ ], [
+ dnl A version check is needed.
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+ AC_MSG_CHECKING([whether $PYTHON version is >= $1])
+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([Python interpreter is too old])])
+ am_display_PYTHON=$PYTHON
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+ [am_cv_pathless_PYTHON],[
+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+ done])
+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+ if test "$am_cv_pathless_PYTHON" = none; then
+ PYTHON=:
+ else
+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+ fi
+ am_display_PYTHON=$am_cv_pathless_PYTHON
+ fi
+ ])
+
+ if test "$PYTHON" = :; then
+ dnl Run any user-specified action, or abort.
+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+ else
+
+ dnl Query Python for its version number. Getting [:3] seems to be
+ dnl the best way to do this; it's what "site.py" does in the standard
+ dnl library.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+ [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
+ dnl distinct variables so they can be overridden if need be. However,
+ dnl general consensus is that you shouldn't need this ability.
+
+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl At times (like when building shared libraries) you may want
+ dnl to know which OS platform Python thinks this is.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+ [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+ # Just factor out some code duplication.
+ am_python_setup_sysconfig="\
+import sys
+# Prefer sysconfig over distutils.sysconfig, for better compatibility
+# with python 3.x. See automake bug#10227.
+try:
+ import sysconfig
+except ImportError:
+ can_use_sysconfig = 0
+else:
+ can_use_sysconfig = 1
+# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
+# <https://github.com/pypa/virtualenv/issues/118>
+try:
+ from platform import python_implementation
+ if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7':
+ can_use_sysconfig = 0
+except ImportError:
+ pass"
+
+ dnl Set up 4 directories:
+
+ dnl pythondir -- where to install python scripts. This is the
+ dnl site-packages directory, not the python standard library
+ dnl directory like in previous automake betas. This behavior
+ dnl is more consistent with lispdir.m4 for example.
+ dnl Query distutils for this directory.
+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+ [am_cv_python_pythondir],
+ [if test "x$prefix" = xNONE
+ then
+ am_py_prefix=$ac_default_prefix
+ else
+ am_py_prefix=$prefix
+ fi
+ am_cv_python_pythondir=`$PYTHON -c "
+$am_python_setup_sysconfig
+if can_use_sysconfig:
+ sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
+else:
+ from distutils import sysconfig
+ sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
+sys.stdout.write(sitedir)"`
+ case $am_cv_python_pythondir in
+ $am_py_prefix*)
+ am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
+ am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
+ ;;
+ *)
+ case $am_py_prefix in
+ /usr|/System*) ;;
+ *)
+ am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+ esac
+ ])
+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
+ dnl more consistent with the rest of automake.
+
+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+ dnl pyexecdir -- directory for installing python extension modules
+ dnl (shared libraries)
+ dnl Query distutils for this directory.
+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+ [am_cv_python_pyexecdir],
+ [if test "x$exec_prefix" = xNONE
+ then
+ am_py_exec_prefix=$am_py_prefix
+ else
+ am_py_exec_prefix=$exec_prefix
+ fi
+ am_cv_python_pyexecdir=`$PYTHON -c "
+$am_python_setup_sysconfig
+if can_use_sysconfig:
+ sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
+else:
+ from distutils import sysconfig
+ sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
+sys.stdout.write(sitedir)"`
+ case $am_cv_python_pyexecdir in
+ $am_py_exec_prefix*)
+ am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
+ am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
+ ;;
+ *)
+ case $am_py_exec_prefix in
+ /usr|/System*) ;;
+ *)
+ am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+ esac
+ ])
+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+ dnl Run any user-specified action.
+ $2
+ fi
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
+ [prog="import sys
+# split strings by '.' and convert to numeric. Append some zeros
+# because we need at least 4 digits for the hex conversion.
+# map returns an iterator in Python 3.0 and a list in 2.x
+minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
+minverhex = 0
+# xrange is not present in Python 3.0 and range returns an iterator
+for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+ AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+m4_include([acinclude.m4])
diff --git a/autoconf/config.guess b/autoconf/config.guess
new file mode 100755
index 0000000..4438cd7
--- /dev/null
+++ b/autoconf/config.guess
@@ -0,0 +1,1568 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2014 Free Software Foundation, Inc.
+
+timestamp='2014-01-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2014 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/autoconf/config.sub b/autoconf/config.sub
new file mode 100755
index 0000000..092cff0
--- /dev/null
+++ b/autoconf/config.sub
@@ -0,0 +1,1793 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2014 Free Software Foundation, Inc.
+
+timestamp='2014-01-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2014 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 \
+ | or1k | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or1k-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/autoconf/install-sh b/autoconf/install-sh
new file mode 100755
index 0000000..4fbbae7
--- /dev/null
+++ b/autoconf/install-sh
@@ -0,0 +1,507 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-10-14.15
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c (ignored)
+-d create directories instead of installing files.
+-g GROUP $chgrpprog installed files to GROUP.
+-m MODE $chmodprog installed files to MODE.
+-o USER $chownprog installed files to USER.
+-s $stripprog installed files.
+-t DIRECTORY install into DIRECTORY.
+-T report an error if DSTFILE is a directory.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ shift
+ shift
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix=/ ;;
+ -*) prefix=./ ;;
+ *) prefix= ;;
+ esac
+
+ case $posix_glob in
+ '')
+ if (set -f) 2>/dev/null; then
+ posix_glob=true
+ else
+ posix_glob=false
+ fi ;;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob && set -f
+ set fnord $dstdir
+ shift
+ $posix_glob && set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ if test -f "$dst"; then
+ $doit $rmcmd -f "$dst" 2>/dev/null \
+ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+ || {
+ echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ } || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/autoconf/py-compile b/autoconf/py-compile
new file mode 100755
index 0000000..bc20391
--- /dev/null
+++ b/autoconf/py-compile
@@ -0,0 +1,170 @@
+#!/bin/sh
+# py-compile - Compile a Python program
+
+scriptversion=2011-06-08.12; # UTC
+
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if [ -z "$PYTHON" ]; then
+ PYTHON=python
+fi
+
+me=py-compile
+
+usage_error ()
+{
+ echo "$me: $*" >&2
+ echo "Try '$me --help' for more information." >&2
+ exit 1
+}
+
+basedir=
+destdir=
+while test $# -ne 0; do
+ case "$1" in
+ --basedir)
+ if test $# -lt 2; then
+ usage_error "option '--basedir' requires an argument"
+ else
+ basedir=$2
+ fi
+ shift
+ ;;
+ --destdir)
+ if test $# -lt 2; then
+ usage_error "option '--destdir' requires an argument"
+ else
+ destdir=$2
+ fi
+ shift
+ ;;
+ -h|--help)
+ cat <<\EOF
+Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
+
+Byte compile some python scripts FILES. Use --destdir to specify any
+leading directory path to the FILES that you don't want to include in the
+byte compiled file. Specify --basedir for any additional path information you
+do want to be shown in the byte compiled file.
+
+Example:
+ py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--version)
+ echo "$me $scriptversion"
+ exit $?
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ usage_error "unrecognized option '$1'"
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+files=$*
+if test -z "$files"; then
+ usage_error "no files given"
+fi
+
+# if basedir was given, then it should be prepended to filenames before
+# byte compilation.
+if [ -z "$basedir" ]; then
+ pathtrans="path = file"
+else
+ pathtrans="path = os.path.join('$basedir', file)"
+fi
+
+# if destdir was given, then it needs to be prepended to the filename to
+# byte compile but not go into the compiled file.
+if [ -z "$destdir" ]; then
+ filetrans="filepath = path"
+else
+ filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
+fi
+
+$PYTHON -c "
+import sys, os, py_compile, imp
+
+files = '''$files'''
+
+sys.stdout.write('Byte-compiling python modules...\n')
+for file in files.split():
+ $pathtrans
+ $filetrans
+ if not os.path.exists(filepath) or not (len(filepath) >= 3
+ and filepath[-3:] == '.py'):
+ continue
+ sys.stdout.write(file)
+ sys.stdout.flush()
+ if hasattr(imp, 'get_tag'):
+ py_compile.compile(filepath, imp.cache_from_source(filepath), path)
+ else:
+ py_compile.compile(filepath, filepath + 'c', path)
+sys.stdout.write('\n')" || exit $?
+
+# this will fail for python < 1.5, but that doesn't matter ...
+$PYTHON -O -c "
+import sys, os, py_compile, imp
+
+# pypy does not use .pyo optimization
+if hasattr(sys, 'pypy_translation_info'):
+ sys.exit(0)
+
+files = '''$files'''
+sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
+for file in files.split():
+ $pathtrans
+ $filetrans
+ if not os.path.exists(filepath) or not (len(filepath) >= 3
+ and filepath[-3:] == '.py'):
+ continue
+ sys.stdout.write(file)
+ sys.stdout.flush()
+ if hasattr(imp, 'get_tag'):
+ py_compile.compile(filepath, imp.cache_from_source(filepath, False), path)
+ else:
+ py_compile.compile(filepath, filepath + 'o', path)
+sys.stdout.write('\n')" 2>/dev/null || :
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/conf/.gitignore b/conf/.gitignore
new file mode 100644
index 0000000..4bfc4d3
--- /dev/null
+++ b/conf/.gitignore
@@ -0,0 +1,6 @@
+command_profile_template.profile
+example.conf
+lvmlocal.conf
+metadata_profile_template.profile
+configure.h
+lvm-version.h
diff --git a/conf/Makefile.in b/conf/Makefile.in
new file mode 100644
index 0000000..c88045c
--- /dev/null
+++ b/conf/Makefile.in
@@ -0,0 +1,57 @@
+#
+# Copyright (C) 2004-2015 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+
+CONFSRC=example.conf
+CONFDEST=lvm.conf
+CONFLOCAL=lvmlocal.conf
+
+PROFILE_TEMPLATES=command_profile_template.profile metadata_profile_template.profile
+PROFILES=$(PROFILE_TEMPLATES) \
+ $(srcdir)/cache-mq.profile \
+ $(srcdir)/cache-smq.profile \
+ $(srcdir)/thin-generic.profile \
+ $(srcdir)/thin-performance.profile
+
+include $(top_builddir)/make.tmpl
+
+.PHONY: install_conf install_localconf install_profiles
+
+generate:
+ (cat $(top_srcdir)/conf/example.conf.base && LD_LIBRARY_PATH=$(top_builddir)/libdm:$(LD_LIBRARY_PATH) $(top_builddir)/tools/lvm dumpconfig --type default --unconfigured --withcomments --ignorelocal --withspaces) > example.conf.in
+ (cat $(top_srcdir)/conf/lvmlocal.conf.base && LD_LIBRARY_PATH=$(top_builddir)/libdm:$(LD_LIBRARY_PATH) $(top_builddir)/tools/lvm dumpconfig --type default --unconfigured --withcomments --withspaces local) > lvmlocal.conf.in
+
+install_conf: $(CONFSRC)
+ @if [ ! -e $(confdir)/$(CONFDEST) ]; then \
+ echo "$(INSTALL_WDATA) -D $< $(confdir)/$(CONFDEST)"; \
+ $(INSTALL_WDATA) -D $< $(confdir)/$(CONFDEST); \
+ fi
+
+install_localconf: $(CONFLOCAL)
+ @if [ ! -e $(confdir)/$(CONFLOCAL) ]; then \
+ echo "$(INSTALL_WDATA) -D $< $(confdir)/$(CONFLOCAL)"; \
+ $(INSTALL_WDATA) -D $< $(confdir)/$(CONFLOCAL); \
+ fi
+
+install_profiles: $(PROFILES)
+ $(INSTALL_DIR) $(DESTDIR)$(DEFAULT_PROFILE_DIR)
+ $(INSTALL_DATA) $(PROFILES) $(DESTDIR)$(DEFAULT_PROFILE_DIR)/
+
+install_lvm2: install_conf install_localconf install_profiles
+
+install: install_lvm2
+
+DISTCLEAN_TARGETS += $(CONFSRC) $(CONFLOCAL) $(PROFILE_TEMPLATES)
diff --git a/conf/cache-mq.profile b/conf/cache-mq.profile
new file mode 100644
index 0000000..3c90331
--- /dev/null
+++ b/conf/cache-mq.profile
@@ -0,0 +1,20 @@
+# Demo configuration 'mq' cache policy
+#
+# Note: This policy has been deprecated in favor of the smq policy
+# keyword "default" means, setting is left with kernel defaults.
+#
+
+allocation {
+ cache_pool_chunk_size = 64
+ cache_mode = "writethrough"
+ cache_policy = "mq"
+ cache_settings {
+ mq {
+ sequential_threshold = "default" # #nr_sequential_ios
+ random_threshold = "default" # #nr_random_ios
+ read_promote_adjustment = "default"
+ write_promote_adjustment = "default"
+ discard_promote_adjustment = "default"
+ }
+ }
+}
diff --git a/conf/cache-smq.profile b/conf/cache-smq.profile
new file mode 100644
index 0000000..c0d6266
--- /dev/null
+++ b/conf/cache-smq.profile
@@ -0,0 +1,14 @@
+# Demo configuration 'smq' cache policy
+#
+# The stochastic multi-queue (smq) policy addresses some of the problems
+# with the multiqueue (mq) policy and uses less memory.
+#
+
+allocation {
+ cache_pool_chunk_size = 64
+ cache_mode = "writethrough"
+ cache_policy = "smq"
+ cache_settings {
+ # currently no settins for "smq" policy
+ }
+}
diff --git a/conf/command_profile_template.profile.in b/conf/command_profile_template.profile.in
new file mode 100644
index 0000000..156dc0d
--- /dev/null
+++ b/conf/command_profile_template.profile.in
@@ -0,0 +1,74 @@
+# This is a command profile template for the LVM2 system.
+#
+# It contains all configuration settings that are customizable by command
+# profiles. To create a new command profile, select the settings you want
+# to customize and add them in a new file named <profile_name>.profile.
+# Then install the new profile in a directory as defined by config/profile_dir
+# setting found in @DEFAULT_SYS_DIR@/lvm.conf file.
+#
+# Command profiles can be referenced by using the --commandprofile option then.
+#
+# Refer to 'man lvm.conf' for further information about profiles and
+# general configuration file layout.
+#
+allocation {
+ cache_mode="writethrough"
+ cache_settings {
+ }
+}
+log {
+ report_command_log=0
+ command_log_sort="log_seq_num"
+ command_log_cols="log_seq_num,log_type,log_context,log_object_type,log_object_name,log_object_id,log_object_group,log_object_group_id,log_message,log_errno,log_ret_code"
+ command_log_selection="!(log_type=status && message=success)"
+}
+global {
+ units="h"
+ si_unit_consistency=1
+ suffix=1
+ lvdisplay_shows_full_device_path=0
+}
+report {
+ output_format="basic"
+ compact_output=0
+ compact_output_cols=""
+ aligned=1
+ buffered=1
+ headings=1
+ separator=" "
+ list_item_separator=","
+ prefixes=0
+ quoted=1
+ colums_as_rows=0
+ binary_values_as_numeric=0
+ time_format="%Y-%m-%d %T %z"
+ devtypes_sort="devtype_name"
+ devtypes_cols="devtype_name,devtype_max_partitions,devtype_description"
+ devtypes_cols_verbose="devtype_name,devtype_max_partitions,devtype_description"
+ lvs_sort="vg_name,lv_name"
+ lvs_cols="lv_name,vg_name,lv_attr,lv_size,pool_lv,origin,data_percent,metadata_percent,move_pv,mirror_log,copy_percent,convert_lv"
+ lvs_cols_verbose="lv_name,vg_name,seg_count,lv_attr,lv_size,lv_major,lv_minor,lv_kernel_major,lv_kernel_minor,pool_lv,origin,data_percent,metadata_percent,move_pv,copy_percent,mirror_log,convert_lv,lv_uuid,lv_profile"
+ vgs_sort="vg_name"
+ vgs_cols="vg_name,pv_count,lv_count,snap_count,vg_attr,vg_size,vg_free"
+ vgs_cols_verbose="vg_name,vg_attr,vg_extent_size,pv_count,lv_count,snap_count,vg_size,vg_free,vg_uuid,vg_profile"
+ pvs_sort="pv_name"
+ pvs_cols="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free"
+ pvs_cols_verbose="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,dev_size,pv_uuid"
+ segs_sort="vg_name,lv_name,seg_start"
+ segs_cols="lv_name,vg_name,lv_attr,stripes,segtype,seg_size"
+ segs_cols_verbose="lv_name,vg_name,lv_attr,seg_start,seg_size,stripes,segtype,stripesize,chunksize"
+ pvsegs_sort="pv_name,pvseg_start"
+ pvsegs_cols="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size"
+ pvsegs_cols_verbose="pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size,lv_name,seg_start_pe,segtype,seg_pe_ranges"
+ vgs_cols_full="vg_all"
+ pvs_cols_full="pv_all"
+ lvs_cols_full="lv_all"
+ pvsegs_cols_full="pvseg_all,pv_uuid,lv_uuid"
+ segs_cols_full="seg_all,lv_uuid"
+ vgs_sort_full="vg_name"
+ pvs_sort_full="pv_name"
+ lvs_sort_full="vg_name,lv_name"
+ pvsegs_sort_full="pv_uuid,pvseg_start"
+ segs_sort_full="lv_uuid,seg_start"
+ mark_hidden_devices=1
+}
diff --git a/conf/example.conf.base b/conf/example.conf.base
new file mode 100644
index 0000000..5c49899
--- /dev/null
+++ b/conf/example.conf.base
@@ -0,0 +1,23 @@
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# @DEFAULT_SYS_DIR@/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# Refer to 'man lvm.conf' for information about how settings configured in
+# this file are combined with built-in values and command line options to
+# arrive at the final values used by LVM.
+#
+# Refer to 'man lvmconfig' for information about displaying the built-in
+# and configured values used by LVM.
+#
+# If a default value is set in this file (not commented out), then a
+# new version of LVM using this file will continue using that value,
+# even if the new version of LVM changes the built-in default value.
+#
+# To put this file in a different directory and override @DEFAULT_SYS_DIR@ set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+#
+# N.B. Take care that each setting only appears once if uncommenting
+# example settings in this file.
+
diff --git a/conf/example.conf.in b/conf/example.conf.in
new file mode 100644
index 0000000..b98a19f
--- /dev/null
+++ b/conf/example.conf.in
@@ -0,0 +1,2089 @@
+# This is an example configuration file for the LVM2 system.
+# It contains the default settings that would be used if there was no
+# @DEFAULT_SYS_DIR@/lvm.conf file.
+#
+# Refer to 'man lvm.conf' for further information including the file layout.
+#
+# Refer to 'man lvm.conf' for information about how settings configured in
+# this file are combined with built-in values and command line options to
+# arrive at the final values used by LVM.
+#
+# Refer to 'man lvmconfig' for information about displaying the built-in
+# and configured values used by LVM.
+#
+# If a default value is set in this file (not commented out), then a
+# new version of LVM using this file will continue using that value,
+# even if the new version of LVM changes the built-in default value.
+#
+# To put this file in a different directory and override @DEFAULT_SYS_DIR@ set
+# the environment variable LVM_SYSTEM_DIR before running the tools.
+#
+# N.B. Take care that each setting only appears once if uncommenting
+# example settings in this file.
+
+
+# Configuration section config.
+# How LVM configuration settings are handled.
+config {
+
+ # Configuration option config/checks.
+ # If enabled, any LVM configuration mismatch is reported.
+ # This implies checking that the configuration key is understood by
+ # LVM and that the value of the key is the proper type. If disabled,
+ # any configuration mismatch is ignored and the default value is used
+ # without any warning (a message about the configuration key not being
+ # found is issued in verbose mode only).
+ checks = 1
+
+ # Configuration option config/abort_on_errors.
+ # Abort the LVM process if a configuration mismatch is found.
+ abort_on_errors = 0
+
+ # Configuration option config/profile_dir.
+ # Directory where LVM looks for configuration profiles.
+ profile_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_PROFILE_SUBDIR@"
+}
+
+# Configuration section devices.
+# How LVM uses block devices.
+devices {
+
+ # Configuration option devices/dir.
+ # Directory in which to create volume group device nodes.
+ # Commands also accept this as a prefix on volume group names.
+ # This configuration option is advanced.
+ dir = "/dev"
+
+ # Configuration option devices/scan.
+ # Directories containing device nodes to use with LVM.
+ # This configuration option is advanced.
+ scan = [ "/dev" ]
+
+ # Configuration option devices/obtain_device_list_from_udev.
+ # Obtain the list of available devices from udev.
+ # This avoids opening or using any inapplicable non-block devices or
+ # subdirectories found in the udev directory. Any device node or
+ # symlink not managed by udev in the udev directory is ignored. This
+ # setting applies only to the udev-managed device directory; other
+ # directories will be scanned fully. LVM needs to be compiled with
+ # udev support for this setting to apply.
+ obtain_device_list_from_udev = 1
+
+ # Configuration option devices/external_device_info_source.
+ # Select an external device information source.
+ # Some information may already be available in the system and LVM can
+ # use this information to determine the exact type or use of devices it
+ # processes. Using an existing external device information source can
+ # speed up device processing as LVM does not need to run its own native
+ # routines to acquire this information. For example, this information
+ # is used to drive LVM filtering like MD component detection, multipath
+ # component detection, partition detection and others.
+ #
+ # Accepted values:
+ # none
+ # No external device information source is used.
+ # udev
+ # Reuse existing udev database records. Applicable only if LVM is
+ # compiled with udev support.
+ #
+ external_device_info_source = "none"
+
+ # Configuration option devices/preferred_names.
+ # Select which path name to display for a block device.
+ # If multiple path names exist for a block device, and LVM needs to
+ # display a name for the device, the path names are matched against
+ # each item in this list of regular expressions. The first match is
+ # used. Try to avoid using undescriptive /dev/dm-N names, if present.
+ # If no preferred name matches, or if preferred_names are not defined,
+ # the following built-in preferences are applied in order until one
+ # produces a preferred name:
+ # Prefer names with path prefixes in the order of:
+ # /dev/mapper, /dev/disk, /dev/dm-*, /dev/block.
+ # Prefer the name with the least number of slashes.
+ # Prefer a name that is a symlink.
+ # Prefer the path with least value in lexicographical order.
+ #
+ # Example
+ # preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option devices/filter.
+ # Limit the block devices that are used by LVM commands.
+ # This is a list of regular expressions used to accept or reject block
+ # device path names. Each regex is delimited by a vertical bar '|'
+ # (or any character) and is preceded by 'a' to accept the path, or
+ # by 'r' to reject the path. The first regex in the list to match the
+ # path is used, producing the 'a' or 'r' result for the device.
+ # When multiple path names exist for a block device, if any path name
+ # matches an 'a' pattern before an 'r' pattern, then the device is
+ # accepted. If all the path names match an 'r' pattern first, then the
+ # device is rejected. Unmatching path names do not affect the accept
+ # or reject decision. If no path names for a device match a pattern,
+ # then the device is accepted. Be careful mixing 'a' and 'r' patterns,
+ # as the combination might produce unexpected results (test changes.)
+ # Run vgscan after changing the filter to regenerate the cache.
+ # See the use_lvmetad comment for a special case regarding filters.
+ #
+ # Example
+ # Accept every block device:
+ # filter = [ "a|.*/|" ]
+ # Reject the cdrom drive:
+ # filter = [ "r|/dev/cdrom|" ]
+ # Work with just loopback devices, e.g. for testing:
+ # filter = [ "a|loop|", "r|.*|" ]
+ # Accept all loop devices and ide drives except hdc:
+ # filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
+ # Use anchors to be very specific:
+ # filter = [ "a|^/dev/hda8$|", "r|.*/|" ]
+ #
+ # This configuration option has an automatic default value.
+ # filter = [ "a|.*/|" ]
+
+ # Configuration option devices/global_filter.
+ # Limit the block devices that are used by LVM system components.
+ # Because devices/filter may be overridden from the command line, it is
+ # not suitable for system-wide device filtering, e.g. udev and lvmetad.
+ # Use global_filter to hide devices from these LVM system components.
+ # The syntax is the same as devices/filter. Devices rejected by
+ # global_filter are not opened by LVM.
+ # This configuration option has an automatic default value.
+ # global_filter = [ "a|.*/|" ]
+
+ # Configuration option devices/cache_dir.
+ # Directory in which to store the device cache file.
+ # The results of filtering are cached on disk to avoid rescanning dud
+ # devices (which can take a very long time). By default this cache is
+ # stored in a file named .cache. It is safe to delete this file; the
+ # tools regenerate it. If obtain_device_list_from_udev is enabled, the
+ # list of devices is obtained from udev and any existing .cache file
+ # is removed.
+ cache_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_CACHE_SUBDIR@"
+
+ # Configuration option devices/cache_file_prefix.
+ # A prefix used before the .cache file name. See devices/cache_dir.
+ cache_file_prefix = ""
+
+ # Configuration option devices/write_cache_state.
+ # Enable/disable writing the cache file. See devices/cache_dir.
+ write_cache_state = 1
+
+ # Configuration option devices/types.
+ # List of additional acceptable block device types.
+ # These are of device type names from /proc/devices, followed by the
+ # maximum number of partitions.
+ #
+ # Example
+ # types = [ "fd", 16 ]
+ #
+ # This configuration option is advanced.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option devices/sysfs_scan.
+ # Restrict device scanning to block devices appearing in sysfs.
+ # This is a quick way of filtering out block devices that are not
+ # present on the system. sysfs must be part of the kernel and mounted.)
+ sysfs_scan = 1
+
+ # Configuration option devices/multipath_component_detection.
+ # Ignore devices that are components of DM multipath devices.
+ multipath_component_detection = 1
+
+ # Configuration option devices/md_component_detection.
+ # Ignore devices that are components of software RAID (md) devices.
+ md_component_detection = 1
+
+ # Configuration option devices/fw_raid_component_detection.
+ # Ignore devices that are components of firmware RAID devices.
+ # LVM must use an external_device_info_source other than none for this
+ # detection to execute.
+ fw_raid_component_detection = 0
+
+ # Configuration option devices/md_chunk_alignment.
+ # Align PV data blocks with md device's stripe-width.
+ # This applies if a PV is placed directly on an md device.
+ md_chunk_alignment = 1
+
+ # Configuration option devices/default_data_alignment.
+ # Default alignment of the start of a PV data area in MB.
+ # If set to 0, a value of 64KiB will be used.
+ # Set to 1 for 1MiB, 2 for 2MiB, etc.
+ # This configuration option has an automatic default value.
+ # default_data_alignment = 1
+
+ # Configuration option devices/data_alignment_detection.
+ # Detect PV data alignment based on sysfs device information.
+ # The start of a PV data area will be a multiple of minimum_io_size or
+ # optimal_io_size exposed in sysfs. minimum_io_size is the smallest
+ # request the device can perform without incurring a read-modify-write
+ # penalty, e.g. MD chunk size. optimal_io_size is the device's
+ # preferred unit of receiving I/O, e.g. MD stripe width.
+ # minimum_io_size is used if optimal_io_size is undefined (0).
+ # If md_chunk_alignment is enabled, that detects the optimal_io_size.
+ # This setting takes precedence over md_chunk_alignment.
+ data_alignment_detection = 1
+
+ # Configuration option devices/data_alignment.
+ # Alignment of the start of a PV data area in KiB.
+ # If a PV is placed directly on an md device and md_chunk_alignment or
+ # data_alignment_detection are enabled, then this setting is ignored.
+ # Otherwise, md_chunk_alignment and data_alignment_detection are
+ # disabled if this is set. Set to 0 to use the default alignment or the
+ # page size, if larger.
+ data_alignment = 0
+
+ # Configuration option devices/data_alignment_offset_detection.
+ # Detect PV data alignment offset based on sysfs device information.
+ # The start of a PV aligned data area will be shifted by the
+ # alignment_offset exposed in sysfs. This offset is often 0, but may
+ # be non-zero. Certain 4KiB sector drives that compensate for windows
+ # partitioning will have an alignment_offset of 3584 bytes (sector 7
+ # is the lowest aligned logical block, the 4KiB sectors start at
+ # LBA -1, and consequently sector 63 is aligned on a 4KiB boundary).
+ # pvcreate --dataalignmentoffset will skip this detection.
+ data_alignment_offset_detection = 1
+
+ # Configuration option devices/ignore_suspended_devices.
+ # Ignore DM devices that have I/O suspended while scanning devices.
+ # Otherwise, LVM waits for a suspended device to become accessible.
+ # This should only be needed in recovery situations.
+ ignore_suspended_devices = 0
+
+ # Configuration option devices/ignore_lvm_mirrors.
+ # Do not scan 'mirror' LVs to avoid possible deadlocks.
+ # This avoids possible deadlocks when using the 'mirror' segment type.
+ # This setting determines whether LVs using the 'mirror' segment type
+ # are scanned for LVM labels. This affects the ability of mirrors to
+ # be used as physical volumes. If this setting is enabled, it is
+ # impossible to create VGs on top of mirror LVs, i.e. to stack VGs on
+ # mirror LVs. If this setting is disabled, allowing mirror LVs to be
+ # scanned, it may cause LVM processes and I/O to the mirror to become
+ # blocked. This is due to the way that the mirror segment type handles
+ # failures. In order for the hang to occur, an LVM command must be run
+ # just after a failure and before the automatic LVM repair process
+ # takes place, or there must be failures in multiple mirrors in the
+ # same VG at the same time with write failures occurring moments before
+ # a scan of the mirror's labels. The 'mirror' scanning problems do not
+ # apply to LVM RAID types like 'raid1' which handle failures in a
+ # different way, making them a better choice for VG stacking.
+ ignore_lvm_mirrors = 1
+
+ # Configuration option devices/disable_after_error_count.
+ # Number of I/O errors after which a device is skipped.
+ # During each LVM operation, errors received from each device are
+ # counted. If the counter of a device exceeds the limit set here,
+ # no further I/O is sent to that device for the remainder of the
+ # operation. Setting this to 0 disables the counters altogether.
+ disable_after_error_count = 0
+
+ # Configuration option devices/require_restorefile_with_uuid.
+ # Allow use of pvcreate --uuid without requiring --restorefile.
+ require_restorefile_with_uuid = 1
+
+ # Configuration option devices/pv_min_size.
+ # Minimum size in KiB of block devices which can be used as PVs.
+ # In a clustered environment all nodes must use the same value.
+ # Any value smaller than 512KiB is ignored. The previous built-in
+ # value was 512.
+ pv_min_size = 2048
+
+ # Configuration option devices/issue_discards.
+ # Issue discards to PVs that are no longer used by an LV.
+ # Discards are sent to an LV's underlying physical volumes when the LV
+ # is no longer using the physical volumes' space, e.g. lvremove,
+ # lvreduce. Discards inform the storage that a region is no longer
+ # used. Storage that supports discards advertise the protocol-specific
+ # way discards should be issued by the kernel (TRIM, UNMAP, or
+ # WRITE SAME with UNMAP bit set). Not all storage will support or
+ # benefit from discards, but SSDs and thinly provisioned LUNs
+ # generally do. If enabled, discards will only be issued if both the
+ # storage and kernel provide support.
+ issue_discards = 0
+
+ # Configuration option devices/allow_changes_with_duplicate_pvs.
+ # Allow VG modification while a PV appears on multiple devices.
+ # When a PV appears on multiple devices, LVM attempts to choose the
+ # best device to use for the PV. If the devices represent the same
+ # underlying storage, the choice has minimal consequence. If the
+ # devices represent different underlying storage, the wrong choice
+ # can result in data loss if the VG is modified. Disabling this
+ # setting is the safest option because it prevents modifying a VG
+ # or activating LVs in it while a PV appears on multiple devices.
+ # Enabling this setting allows the VG to be used as usual even with
+ # uncertain devices.
+ allow_changes_with_duplicate_pvs = 0
+}
+
+# Configuration section allocation.
+# How LVM selects space and applies properties to LVs.
+allocation {
+
+ # Configuration option allocation/cling_tag_list.
+ # Advise LVM which PVs to use when searching for new space.
+ # When searching for free space to extend an LV, the 'cling' allocation
+ # policy will choose space on the same PVs as the last segment of the
+ # existing LV. If there is insufficient space and a list of tags is
+ # defined here, it will check whether any of them are attached to the
+ # PVs concerned and then seek to match those PV tags between existing
+ # extents and new extents.
+ #
+ # Example
+ # Use the special tag "@*" as a wildcard to match any PV tag:
+ # cling_tag_list = [ "@*" ]
+ # LVs are mirrored between two sites within a single VG, and
+ # PVs are tagged with either @site1 or @site2 to indicate where
+ # they are situated:
+ # cling_tag_list = [ "@site1", "@site2" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/maximise_cling.
+ # Use a previous allocation algorithm.
+ # Changes made in version 2.02.85 extended the reach of the 'cling'
+ # policies to detect more situations where data can be grouped onto
+ # the same disks. This setting can be used to disable the changes
+ # and revert to the previous algorithm.
+ maximise_cling = 1
+
+ # Configuration option allocation/use_blkid_wiping.
+ # Use blkid to detect existing signatures on new PVs and LVs.
+ # The blkid library can detect more signatures than the native LVM
+ # detection code, but may take longer. LVM needs to be compiled with
+ # blkid wiping support for this setting to apply. LVM native detection
+ # code is currently able to recognize: MD device signatures,
+ # swap signature, and LUKS signatures. To see the list of signatures
+ # recognized by blkid, check the output of the 'blkid -k' command.
+ use_blkid_wiping = @DEFAULT_USE_BLKID_WIPING@
+
+ # Configuration option allocation/wipe_signatures_when_zeroing_new_lvs.
+ # Look for and erase any signatures while zeroing a new LV.
+ # The --wipesignatures option overrides this setting.
+ # Zeroing is controlled by the -Z/--zero option, and if not specified,
+ # zeroing is used by default if possible. Zeroing simply overwrites the
+ # first 4KiB of a new LV with zeroes and does no signature detection or
+ # wiping. Signature wiping goes beyond zeroing and detects exact types
+ # and positions of signatures within the whole LV. It provides a
+ # cleaner LV after creation as all known signatures are wiped. The LV
+ # is not claimed incorrectly by other tools because of old signatures
+ # from previous use. The number of signatures that LVM can detect
+ # depends on the detection code that is selected (see
+ # use_blkid_wiping.) Wiping each detected signature must be confirmed.
+ # When this setting is disabled, signatures on new LVs are not detected
+ # or erased unless the --wipesignatures option is used directly.
+ wipe_signatures_when_zeroing_new_lvs = 1
+
+ # Configuration option allocation/mirror_logs_require_separate_pvs.
+ # Mirror logs and images will always use different PVs.
+ # The default setting changed in version 2.02.85.
+ mirror_logs_require_separate_pvs = 0
+
+ # Configuration option allocation/raid_stripe_all_devices.
+ # Stripe across all PVs when RAID stripes are not specified.
+ # If enabled, all PVs in the VG or on the command line are used for raid0/4/5/6/10
+ # when the command does not specify the number of stripes to use.
+ # This was the default behaviour until release 2.02.162.
+ # This configuration option has an automatic default value.
+ # raid_stripe_all_devices = 0
+
+ # Configuration option allocation/cache_pool_metadata_require_separate_pvs.
+ # Cache pool metadata and data will always use different PVs.
+ cache_pool_metadata_require_separate_pvs = 0
+
+ # Configuration option allocation/cache_mode.
+ # The default cache mode used for new cache.
+ #
+ # Accepted values:
+ # writethrough
+ # Data blocks are immediately written from the cache to disk.
+ # writeback
+ # Data blocks are written from the cache back to disk after some
+ # delay to improve performance.
+ #
+ # This setting replaces allocation/cache_pool_cachemode.
+ # This configuration option has an automatic default value.
+ # cache_mode = "writethrough"
+
+ # Configuration option allocation/cache_policy.
+ # The default cache policy used for new cache volume.
+ # Since kernel 4.2 the default policy is smq (Stochastic multique),
+ # otherwise the older mq (Multiqueue) policy is selected.
+ # This configuration option does not have a default value defined.
+
+ # Configuration section allocation/cache_settings.
+ # Settings for the cache policy.
+ # See documentation for individual cache policies for more info.
+ # This configuration section has an automatic default value.
+ # cache_settings {
+ # }
+
+ # Configuration option allocation/cache_pool_chunk_size.
+ # The minimal chunk size in KiB for cache pool volumes.
+ # Using a chunk_size that is too large can result in wasteful use of
+ # the cache, where small reads and writes can cause large sections of
+ # an LV to be mapped into the cache. However, choosing a chunk_size
+ # that is too small can result in more overhead trying to manage the
+ # numerous chunks that become mapped into the cache. The former is
+ # more of a problem than the latter in most cases, so the default is
+ # on the smaller end of the spectrum. Supported values range from
+ # 32KiB to 1GiB in multiples of 32.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/thin_pool_metadata_require_separate_pvs.
+ # Thin pool metdata and data will always use different PVs.
+ thin_pool_metadata_require_separate_pvs = 0
+
+ # Configuration option allocation/thin_pool_zero.
+ # Thin pool data chunks are zeroed before they are first used.
+ # Zeroing with a larger thin pool chunk size reduces performance.
+ # This configuration option has an automatic default value.
+ # thin_pool_zero = 1
+
+ # Configuration option allocation/thin_pool_discards.
+ # The discards behaviour of thin pool volumes.
+ #
+ # Accepted values:
+ # ignore
+ # nopassdown
+ # passdown
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_discards = "passdown"
+
+ # Configuration option allocation/thin_pool_chunk_size_policy.
+ # The chunk size calculation policy for thin pool volumes.
+ #
+ # Accepted values:
+ # generic
+ # If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+ # the chunk size based on estimation and device hints exposed in
+ # sysfs - the minimum_io_size. The chunk size is always at least
+ # 64KiB.
+ # performance
+ # If thin_pool_chunk_size is defined, use it. Otherwise, calculate
+ # the chunk size for performance based on device hints exposed in
+ # sysfs - the optimal_io_size. The chunk size is always at least
+ # 512KiB.
+ #
+ # This configuration option has an automatic default value.
+ # thin_pool_chunk_size_policy = "generic"
+
+ # Configuration option allocation/thin_pool_chunk_size.
+ # The minimal chunk size in KiB for thin pool volumes.
+ # Larger chunk sizes may improve performance for plain thin volumes,
+ # however using them for snapshot volumes is less efficient, as it
+ # consumes more space and takes extra time for copying. When unset,
+ # lvm tries to estimate chunk size starting from 64KiB. Supported
+ # values are in the range 64KiB to 1GiB.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option allocation/physical_extent_size.
+ # Default physical extent size in KiB to use for new VGs.
+ # This configuration option has an automatic default value.
+ # physical_extent_size = 4096
+}
+
+# Configuration section log.
+# How LVM log information is reported.
+log {
+
+ # Configuration option log/report_command_log.
+ # Enable or disable LVM log reporting.
+ # If enabled, LVM will collect a log of operations, messages,
+ # per-object return codes with object identification and associated
+ # error numbers (errnos) during LVM command processing. Then the
+ # log is either reported solely or in addition to any existing
+ # reports, depending on LVM command used. If it is a reporting command
+ # (e.g. pvs, vgs, lvs, lvm fullreport), then the log is reported in
+ # addition to any existing reports. Otherwise, there's only log report
+ # on output. For all applicable LVM commands, you can request that
+ # the output has only log report by using --logonly command line
+ # option. Use log/command_log_cols and log/command_log_sort settings
+ # to define fields to display and sort fields for the log report.
+ # You can also use log/command_log_selection to define selection
+ # criteria used each time the log is reported.
+ # This configuration option has an automatic default value.
+ # report_command_log = 0
+
+ # Configuration option log/command_log_sort.
+ # List of columns to sort by when reporting command log.
+ # See <lvm command> --logonly --configreport log -o help
+ # for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # command_log_sort = "log_seq_num"
+
+ # Configuration option log/command_log_cols.
+ # List of columns to report when reporting command log.
+ # See <lvm command> --logonly --configreport log -o help
+ # for the list of possible fields.
+ # This configuration option has an automatic default value.
+ # command_log_cols = "log_seq_num,log_type,log_context,log_object_type,log_object_name,log_object_id,log_object_group,log_object_group_id,log_message,log_errno,log_ret_code"
+
+ # Configuration option log/command_log_selection.
+ # Selection criteria used when reporting command log.
+ # You can define selection criteria that are applied each
+ # time log is reported. This way, it is possible to control the
+ # amount of log that is displayed on output and you can select
+ # only parts of the log that are important for you. To define
+ # selection criteria, use fields from log report. See also
+ # <lvm command> --logonly --configreport log -S help for the
+ # list of possible fields and selection operators. You can also
+ # define selection criteria for log report on command line directly
+ # using <lvm command> --configreport log -S <selection criteria>
+ # which has precedence over log/command_log_selection setting.
+ # For more information about selection criteria in general, see
+ # lvm(8) man page.
+ # This configuration option has an automatic default value.
+ # command_log_selection = "!(log_type=status && message=success)"
+
+ # Configuration option log/verbose.
+ # Controls the messages sent to stdout or stderr.
+ verbose = 0
+
+ # Configuration option log/silent.
+ # Suppress all non-essential messages from stdout.
+ # This has the same effect as -qq. When enabled, the following commands
+ # still produce output: dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck,
+ # pvdisplay, pvs, version, vgcfgrestore -l, vgdisplay, vgs.
+ # Non-essential messages are shifted from log level 4 to log level 5
+ # for syslog and lvm2_log_fn purposes.
+ # Any 'yes' or 'no' questions not overridden by other arguments are
+ # suppressed and default to 'no'.
+ silent = 0
+
+ # Configuration option log/syslog.
+ # Send log messages through syslog.
+ syslog = 1
+
+ # Configuration option log/file.
+ # Write error and debug log messages to a file specified here.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option log/overwrite.
+ # Overwrite the log file each time the program is run.
+ overwrite = 0
+
+ # Configuration option log/level.
+ # The level of log messages that are sent to the log file or syslog.
+ # There are 6 syslog-like log levels currently in use: 2 to 7 inclusive.
+ # 7 is the most verbose (LOG_DEBUG).
+ level = 0
+
+ # Configuration option log/indent.
+ # Indent messages according to their severity.
+ indent = 1
+
+ # Configuration option log/command_names.
+ # Display the command name on each line of output.
+ command_names = 0
+
+ # Configuration option log/prefix.
+ # A prefix to use before the log message text.
+ # (After the command name, if selected).
+ # Two spaces allows you to see/grep the severity of each message.
+ # To make the messages look similar to the original LVM tools use:
+ # indent = 0, command_names = 1, prefix = " -- "
+ prefix = " "
+
+ # Configuration option log/activation.
+ # Log messages during activation.
+ # Don't use this in low memory situations (can deadlock).
+ activation = 0
+
+ # Configuration option log/debug_classes.
+ # Select log messages by class.
+ # Some debugging messages are assigned to a class and only appear in
+ # debug output if the class is listed here. Classes currently
+ # available: memory, devices, activation, allocation, lvmetad,
+ # metadata, cache, locking, lvmpolld. Use "all" to see everything.
+ debug_classes = [ "memory", "devices", "activation", "allocation", "lvmetad", "metadata", "cache", "locking", "lvmpolld", "dbus" ]
+}
+
+# Configuration section backup.
+# How LVM metadata is backed up and archived.
+# In LVM, a 'backup' is a copy of the metadata for the current system,
+# and an 'archive' contains old metadata configurations. They are
+# stored in a human readable text format.
+backup {
+
+ # Configuration option backup/backup.
+ # Maintain a backup of the current metadata configuration.
+ # Think very hard before turning this off!
+ backup = 1
+
+ # Configuration option backup/backup_dir.
+ # Location of the metadata backup files.
+ # Remember to back up this directory regularly!
+ backup_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_BACKUP_SUBDIR@"
+
+ # Configuration option backup/archive.
+ # Maintain an archive of old metadata configurations.
+ # Think very hard before turning this off.
+ archive = 1
+
+ # Configuration option backup/archive_dir.
+ # Location of the metdata archive files.
+ # Remember to back up this directory regularly!
+ archive_dir = "@DEFAULT_SYS_DIR@/@DEFAULT_ARCHIVE_SUBDIR@"
+
+ # Configuration option backup/retain_min.
+ # Minimum number of archives to keep.
+ retain_min = 10
+
+ # Configuration option backup/retain_days.
+ # Minimum number of days to keep archive files.
+ retain_days = 30
+}
+
+# Configuration section shell.
+# Settings for running LVM in shell (readline) mode.
+shell {
+
+ # Configuration option shell/history_size.
+ # Number of lines of history to store in ~/.lvm_history.
+ history_size = 100
+}
+
+# Configuration section global.
+# Miscellaneous global LVM settings.
+global {
+
+ # Configuration option global/umask.
+ # The file creation mask for any files and directories created.
+ # Interpreted as octal if the first digit is zero.
+ umask = 077
+
+ # Configuration option global/test.
+ # No on-disk metadata changes will be made in test mode.
+ # Equivalent to having the -t option on every command.
+ test = 0
+
+ # Configuration option global/units.
+ # Default value for --units argument.
+ units = "h"
+
+ # Configuration option global/si_unit_consistency.
+ # Distinguish between powers of 1024 and 1000 bytes.
+ # The LVM commands distinguish between powers of 1024 bytes,
+ # e.g. KiB, MiB, GiB, and powers of 1000 bytes, e.g. KB, MB, GB.
+ # If scripts depend on the old behaviour, disable this setting
+ # temporarily until they are updated.
+ si_unit_consistency = 1
+
+ # Configuration option global/suffix.
+ # Display unit suffix for sizes.
+ # This setting has no effect if the units are in human-readable form
+ # (global/units = "h") in which case the suffix is always displayed.
+ suffix = 1
+
+ # Configuration option global/activation.
+ # Enable/disable communication with the kernel device-mapper.
+ # Disable to use the tools to manipulate LVM metadata without
+ # activating any logical volumes. If the device-mapper driver
+ # is not present in the kernel, disabling this should suppress
+ # the error messages.
+ activation = 1
+
+ # Configuration option global/fallback_to_lvm1.
+ # Try running LVM1 tools if LVM cannot communicate with DM.
+ # This option only applies to 2.4 kernels and is provided to help
+ # switch between device-mapper kernels and LVM1 kernels. The LVM1
+ # tools need to be installed with .lvm1 suffices, e.g. vgscan.lvm1.
+ # They will stop working once the lvm2 on-disk metadata format is used.
+ # This configuration option has an automatic default value.
+ # fallback_to_lvm1 = @DEFAULT_FALLBACK_TO_LVM1@
+
+ # Configuration option global/format.
+ # The default metadata format that commands should use.
+ # The -M 1|2 option overrides this setting.
+ #
+ # Accepted values:
+ # lvm1
+ # lvm2
+ #
+ # This configuration option has an automatic default value.
+ # format = "lvm2"
+
+ # Configuration option global/format_libraries.
+ # Shared libraries that process different metadata formats.
+ # If support for LVM1 metadata was compiled as a shared library use
+ # format_libraries = "liblvm2format1.so"
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/segment_libraries.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/proc.
+ # Location of proc filesystem.
+ # This configuration option is advanced.
+ proc = "/proc"
+
+ # Configuration option global/etc.
+ # Location of /etc system configuration directory.
+ etc = "@CONFDIR@"
+
+ # Configuration option global/locking_type.
+ # Type of locking to use.
+ #
+ # Accepted values:
+ # 0
+ # Turns off locking. Warning: this risks metadata corruption if
+ # commands run concurrently.
+ # 1
+ # LVM uses local file-based locking, the standard mode.
+ # 2
+ # LVM uses the external shared library locking_library.
+ # 3
+ # LVM uses built-in clustered locking with clvmd.
+ # This is incompatible with lvmetad. If use_lvmetad is enabled,
+ # LVM prints a warning and disables lvmetad use.
+ # 4
+ # LVM uses read-only locking which forbids any operations that
+ # might change metadata.
+ # 5
+ # Offers dummy locking for tools that do not need any locks.
+ # You should not need to set this directly; the tools will select
+ # when to use it instead of the configured locking_type.
+ # Do not use lvmetad or the kernel device-mapper driver with this
+ # locking type. It is used by the --readonly option that offers
+ # read-only access to Volume Group metadata that cannot be locked
+ # safely because it belongs to an inaccessible domain and might be
+ # in use, for example a virtual machine image or a disk that is
+ # shared by a clustered machine.
+ #
+ locking_type = 1
+
+ # Configuration option global/wait_for_locks.
+ # When disabled, fail if a lock request would block.
+ wait_for_locks = 1
+
+ # Configuration option global/fallback_to_clustered_locking.
+ # Attempt to use built-in cluster locking if locking_type 2 fails.
+ # If using external locking (type 2) and initialisation fails, with
+ # this enabled, an attempt will be made to use the built-in clustered
+ # locking. Disable this if using a customised locking_library.
+ fallback_to_clustered_locking = 1
+
+ # Configuration option global/fallback_to_local_locking.
+ # Use locking_type 1 (local) if locking_type 2 or 3 fail.
+ # If an attempt to initialise type 2 or type 3 locking failed, perhaps
+ # because cluster components such as clvmd are not running, with this
+ # enabled, an attempt will be made to use local file-based locking
+ # (type 1). If this succeeds, only commands against local VGs will
+ # proceed. VGs marked as clustered will be ignored.
+ fallback_to_local_locking = 1
+
+ # Configuration option global/locking_dir.
+ # Directory to use for LVM command file locks.
+ # Local non-LV directory that holds file-based locks while commands are
+ # in progress. A directory like /tmp that may get wiped on reboot is OK.
+ locking_dir = "@DEFAULT_LOCK_DIR@"
+
+ # Configuration option global/prioritise_write_locks.
+ # Allow quicker VG write access during high volume read access.
+ # When there are competing read-only and read-write access requests for
+ # a volume group's metadata, instead of always granting the read-only
+ # requests immediately, delay them to allow the read-write requests to
+ # be serviced. Without this setting, write access may be stalled by a
+ # high volume of read-only requests. This option only affects
+ # locking_type 1 viz. local file-based locking.
+ prioritise_write_locks = 1
+
+ # Configuration option global/library_dir.
+ # Search this directory first for shared libraries.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/locking_library.
+ # The external locking library to use for locking_type 2.
+ # This configuration option has an automatic default value.
+ # locking_library = "liblvm2clusterlock.so"
+
+ # Configuration option global/abort_on_internal_errors.
+ # Abort a command that encounters an internal error.
+ # Treat any internal errors as fatal errors, aborting the process that
+ # encountered the internal error. Please only enable for debugging.
+ abort_on_internal_errors = 0
+
+ # Configuration option global/detect_internal_vg_cache_corruption.
+ # Internal verification of VG structures.
+ # Check if CRC matches when a parsed VG is used multiple times. This
+ # is useful to catch unexpected changes to cached VG structures.
+ # Please only enable for debugging.
+ detect_internal_vg_cache_corruption = 0
+
+ # Configuration option global/metadata_read_only.
+ # No operations that change on-disk metadata are permitted.
+ # Additionally, read-only commands that encounter metadata in need of
+ # repair will still be allowed to proceed exactly as if the repair had
+ # been performed (except for the unchanged vg_seqno). Inappropriate
+ # use could mess up your system, so seek advice first!
+ metadata_read_only = 0
+
+ # Configuration option global/mirror_segtype_default.
+ # The segment type used by the short mirroring option -m.
+ # The --type mirror|raid1 option overrides this setting.
+ #
+ # Accepted values:
+ # mirror
+ # The original RAID1 implementation from LVM/DM. It is
+ # characterized by a flexible log solution (core, disk, mirrored),
+ # and by the necessity to block I/O while handling a failure.
+ # There is an inherent race in the dmeventd failure handling logic
+ # with snapshots of devices using this type of RAID1 that in the
+ # worst case could cause a deadlock. (Also see
+ # devices/ignore_lvm_mirrors.)
+ # raid1
+ # This is a newer RAID1 implementation using the MD RAID1
+ # personality through device-mapper. It is characterized by a
+ # lack of log options. (A log is always allocated for every
+ # device and they are placed on the same device as the image,
+ # so no separate devices are required.) This mirror
+ # implementation does not require I/O to be blocked while
+ # handling a failure. This mirror implementation is not
+ # cluster-aware and cannot be used in a shared (active/active)
+ # fashion in a cluster.
+ #
+ mirror_segtype_default = "@DEFAULT_MIRROR_SEGTYPE@"
+
+ # Configuration option global/raid10_segtype_default.
+ # The segment type used by the -i -m combination.
+ # The --type raid10|mirror option overrides this setting.
+ # The --stripes/-i and --mirrors/-m options can both be specified
+ # during the creation of a logical volume to use both striping and
+ # mirroring for the LV. There are two different implementations.
+ #
+ # Accepted values:
+ # raid10
+ # LVM uses MD's RAID10 personality through DM. This is the
+ # preferred option.
+ # mirror
+ # LVM layers the 'mirror' and 'stripe' segment types. The layering
+ # is done by creating a mirror LV on top of striped sub-LVs,
+ # effectively creating a RAID 0+1 array. The layering is suboptimal
+ # in terms of providing redundancy and performance.
+ #
+ raid10_segtype_default = "@DEFAULT_RAID10_SEGTYPE@"
+
+ # Configuration option global/sparse_segtype_default.
+ # The segment type used by the -V -L combination.
+ # The --type snapshot|thin option overrides this setting.
+ # The combination of -V and -L options creates a sparse LV. There are
+ # two different implementations.
+ #
+ # Accepted values:
+ # snapshot
+ # The original snapshot implementation from LVM/DM. It uses an old
+ # snapshot that mixes data and metadata within a single COW
+ # storage volume and performs poorly when the size of stored data
+ # passes hundreds of MB.
+ # thin
+ # A newer implementation that uses thin provisioning. It has a
+ # bigger minimal chunk size (64KiB) and uses a separate volume for
+ # metadata. It has better performance, especially when more data
+ # is used. It also supports full snapshots.
+ #
+ sparse_segtype_default = "@DEFAULT_SPARSE_SEGTYPE@"
+
+ # Configuration option global/lvdisplay_shows_full_device_path.
+ # Enable this to reinstate the previous lvdisplay name format.
+ # The default format for displaying LV names in lvdisplay was changed
+ # in version 2.02.89 to show the LV name and path separately.
+ # Previously this was always shown as /dev/vgname/lvname even when that
+ # was never a valid path in the /dev filesystem.
+ # This configuration option has an automatic default value.
+ # lvdisplay_shows_full_device_path = 0
+
+ # Configuration option global/use_lvmetad.
+ # Use lvmetad to cache metadata and reduce disk scanning.
+ # When enabled (and running), lvmetad provides LVM commands with VG
+ # metadata and PV state. LVM commands then avoid reading this
+ # information from disks which can be slow. When disabled (or not
+ # running), LVM commands fall back to scanning disks to obtain VG
+ # metadata. lvmetad is kept updated via udev rules which must be set
+ # up for LVM to work correctly. (The udev rules should be installed
+ # by default.) Without a proper udev setup, changes in the system's
+ # block device configuration will be unknown to LVM, and ignored
+ # until a manual 'pvscan --cache' is run. If lvmetad was running
+ # while use_lvmetad was disabled, it must be stopped, use_lvmetad
+ # enabled, and then started. When using lvmetad, LV activation is
+ # switched to an automatic, event-based mode. In this mode, LVs are
+ # activated based on incoming udev events that inform lvmetad when
+ # PVs appear on the system. When a VG is complete (all PVs present),
+ # it is auto-activated. The auto_activation_volume_list setting
+ # controls which LVs are auto-activated (all by default.)
+ # When lvmetad is updated (automatically by udev events, or directly
+ # by pvscan --cache), devices/filter is ignored and all devices are
+ # scanned by default. lvmetad always keeps unfiltered information
+ # which is provided to LVM commands. Each LVM command then filters
+ # based on devices/filter. This does not apply to other, non-regexp,
+ # filtering settings: component filters such as multipath and MD
+ # are checked during pvscan --cache. To filter a device and prevent
+ # scanning from the LVM system entirely, including lvmetad, use
+ # devices/global_filter.
+ use_lvmetad = @DEFAULT_USE_LVMETAD@
+
+ # Configuration option global/lvmetad_update_wait_time.
+ # The number of seconds a command will wait for lvmetad update to finish.
+ # After waiting for this period, a command will not use lvmetad, and
+ # will revert to disk scanning.
+ # This configuration option has an automatic default value.
+ # lvmetad_update_wait_time = 10
+
+ # Configuration option global/use_lvmlockd.
+ # Use lvmlockd for locking among hosts using LVM on shared storage.
+ # Applicable only if LVM is compiled with lockd support in which
+ # case there is also lvmlockd(8) man page available for more
+ # information.
+ use_lvmlockd = 0
+
+ # Configuration option global/lvmlockd_lock_retries.
+ # Retry lvmlockd lock requests this many times.
+ # Applicable only if LVM is compiled with lockd support
+ # This configuration option has an automatic default value.
+ # lvmlockd_lock_retries = 3
+
+ # Configuration option global/sanlock_lv_extend.
+ # Size in MiB to extend the internal LV holding sanlock locks.
+ # The internal LV holds locks for each LV in the VG, and after enough
+ # LVs have been created, the internal LV needs to be extended. lvcreate
+ # will automatically extend the internal LV when needed by the amount
+ # specified here. Setting this to 0 disables the automatic extension
+ # and can cause lvcreate to fail. Applicable only if LVM is compiled
+ # with lockd support
+ # This configuration option has an automatic default value.
+ # sanlock_lv_extend = 256
+
+ # Configuration option global/thin_check_executable.
+ # The full path to the thin_check command.
+ # LVM uses this command to check that a thin metadata device is in a
+ # usable state. When a thin pool is activated and after it is
+ # deactivated, this command is run. Activation will only proceed if
+ # the command has an exit status of 0. Set to "" to skip this check.
+ # (Not recommended.) Also see thin_check_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_check_executable = "@THIN_CHECK_CMD@"
+
+ # Configuration option global/thin_dump_executable.
+ # The full path to the thin_dump command.
+ # LVM uses this command to dump thin pool metadata.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_dump_executable = "@THIN_DUMP_CMD@"
+
+ # Configuration option global/thin_repair_executable.
+ # The full path to the thin_repair command.
+ # LVM uses this command to repair a thin metadata device if it is in
+ # an unusable state. Also see thin_repair_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # thin_repair_executable = "@THIN_REPAIR_CMD@"
+
+ # Configuration option global/thin_check_options.
+ # List of options passed to the thin_check command.
+ # With thin_check version 2.1 or newer you can add the option
+ # --ignore-non-fatal-errors to let it pass through ignorable errors
+ # and fix them later. With thin_check version 3.2 or newer you should
+ # include the option --clear-needs-check-flag.
+ # This configuration option has an automatic default value.
+ # thin_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+ # Configuration option global/thin_repair_options.
+ # List of options passed to the thin_repair command.
+ # This configuration option has an automatic default value.
+ # thin_repair_options = [ "" ]
+
+ # Configuration option global/thin_disabled_features.
+ # Features to not use in the thin driver.
+ # This can be helpful for testing, or to avoid using a feature that is
+ # causing problems. Features include: block_size, discards,
+ # discards_non_power_2, external_origin, metadata_resize,
+ # external_origin_extend, error_if_no_space.
+ #
+ # Example
+ # thin_disabled_features = [ "discards", "block_size" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/cache_disabled_features.
+ # Features to not use in the cache driver.
+ # This can be helpful for testing, or to avoid using a feature that is
+ # causing problems. Features include: policy_mq, policy_smq.
+ #
+ # Example
+ # cache_disabled_features = [ "policy_smq" ]
+ #
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/cache_check_executable.
+ # The full path to the cache_check command.
+ # LVM uses this command to check that a cache metadata device is in a
+ # usable state. When a cached LV is activated and after it is
+ # deactivated, this command is run. Activation will only proceed if the
+ # command has an exit status of 0. Set to "" to skip this check.
+ # (Not recommended.) Also see cache_check_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_check_executable = "@CACHE_CHECK_CMD@"
+
+ # Configuration option global/cache_dump_executable.
+ # The full path to the cache_dump command.
+ # LVM uses this command to dump cache pool metadata.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_dump_executable = "@CACHE_DUMP_CMD@"
+
+ # Configuration option global/cache_repair_executable.
+ # The full path to the cache_repair command.
+ # LVM uses this command to repair a cache metadata device if it is in
+ # an unusable state. Also see cache_repair_options.
+ # (See package device-mapper-persistent-data or thin-provisioning-tools)
+ # This configuration option has an automatic default value.
+ # cache_repair_executable = "@CACHE_REPAIR_CMD@"
+
+ # Configuration option global/cache_check_options.
+ # List of options passed to the cache_check command.
+ # With cache_check version 5.0 or newer you should include the option
+ # --clear-needs-check-flag.
+ # This configuration option has an automatic default value.
+ # cache_check_options = [ "-q", "--clear-needs-check-flag" ]
+
+ # Configuration option global/cache_repair_options.
+ # List of options passed to the cache_repair command.
+ # This configuration option has an automatic default value.
+ # cache_repair_options = [ "" ]
+
+ # Configuration option global/system_id_source.
+ # The method LVM uses to set the local system ID.
+ # Volume Groups can also be given a system ID (by vgcreate, vgchange,
+ # or vgimport.) A VG on shared storage devices is accessible only to
+ # the host with a matching system ID. See 'man lvmsystemid' for
+ # information on limitations and correct usage.
+ #
+ # Accepted values:
+ # none
+ # The host has no system ID.
+ # lvmlocal
+ # Obtain the system ID from the system_id setting in the 'local'
+ # section of an lvm configuration file, e.g. lvmlocal.conf.
+ # uname
+ # Set the system ID from the hostname (uname) of the system.
+ # System IDs beginning localhost are not permitted.
+ # machineid
+ # Use the contents of the machine-id file to set the system ID.
+ # Some systems create this file at installation time.
+ # See 'man machine-id' and global/etc.
+ # file
+ # Use the contents of another file (system_id_file) to set the
+ # system ID.
+ #
+ system_id_source = "none"
+
+ # Configuration option global/system_id_file.
+ # The full path to the file containing a system ID.
+ # This is used when system_id_source is set to 'file'.
+ # Comments starting with the character # are ignored.
+ # This configuration option does not have a default value defined.
+
+ # Configuration option global/use_lvmpolld.
+ # Use lvmpolld to supervise long running LVM commands.
+ # When enabled, control of long running LVM commands is transferred
+ # from the original LVM command to the lvmpolld daemon. This allows
+ # the operation to continue independent of the original LVM command.
+ # After lvmpolld takes over, the LVM command displays the progress
+ # of the ongoing operation. lvmpolld itself runs LVM commands to
+ # manage the progress of ongoing operations. lvmpolld can be used as
+ # a native systemd service, which allows it to be started on demand,
+ # and to use its own control group. When this option is disabled, LVM
+ # commands will supervise long running operations by forking themselves.
+ # Applicable only if LVM is compiled with lvmpolld support.
+ use_lvmpolld = @DEFAULT_USE_LVMPOLLD@
+
+ # Configuration option global/notify_dbus.
+ # Enable D-Bus notification from LVM commands.
+ # When enabled, an LVM command that changes PVs, changes VG metadata,
+ # or changes the activation state of an LV will send a notification.
+ notify_dbus = 1
+}
+
+# Configuration section activation.
+activation {
+
+ # Configuration option activation/checks.
+ # Perform internal checks of libdevmapper operations.
+ # Useful for debugging problems with activation. Some of the checks may
+ # be expensive, so it's best to use this only when there seems to be a
+ # problem.
+ checks = 0
+
+ # Configuration option activation/udev_sync.
+ # Use udev notifications to synchronize udev and LVM.
+ # The --nodevsync option overrides this setting.
+ # When disabled, LVM commands will not wait for notifications from
+ # udev, but continue irrespective of any possible udev processing in
+ # the background. Only use this if udev is not running or has rules
+ # that ignore the devices LVM creates. If enabled when udev is not
+ # running, and LVM processes are waiting for udev, run the command
+ # 'dmsetup udevcomplete_all' to wake them up.
+ udev_sync = 1
+
+ # Configuration option activation/udev_rules.
+ # Use udev rules to manage LV device nodes and symlinks.
+ # When disabled, LVM will manage the device nodes and symlinks for
+ # active LVs itself. Manual intervention may be required if this
+ # setting is changed while LVs are active.
+ udev_rules = 1
+
+ # Configuration option activation/verify_udev_operations.
+ # Use extra checks in LVM to verify udev operations.
+ # This enables additional checks (and if necessary, repairs) on entries
+ # in the device directory after udev has completed processing its
+ # events. Useful for diagn