From 2f00308a6f9e9388788d7f169ec94e214f07b64f Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Jun 10 2015 10:58:22 +0000 Subject: New upstream release. --- diff --git a/device-mapper-persistent-data-0.2.1-man-page-enhancements-and-typos.patch b/device-mapper-persistent-data-0.2.1-man-page-enhancements-and-typos.patch deleted file mode 100644 index 4e2bdf0..0000000 --- a/device-mapper-persistent-data-0.2.1-man-page-enhancements-and-typos.patch +++ /dev/null @@ -1,160 +0,0 @@ -diff --git a/man8/thin_dump.8 b/man8/thin_dump.8 -index b26cc2c..4827e1a 100644 ---- a/man8/thin_dump.8 -+++ b/man8/thin_dump.8 -@@ -5,30 +5,37 @@ thin_dump \- dump thin provisioning metadata from device or file to standard out - .SH SYNOPSIS - .B thin_dump - .RB [options] --.I {metadata device|file} -+.I {device|file} - - .SH DESCRIPTION - .B thin_dump - dumps binary thin provisioning metadata (optionally from alternate block; - see option \-\-metadata-snap) created by the device-mapper --thin provisioning target on a device or file to standard output for -+thin provisioning target on a -+.I device -+or -+.I file -+to standard output for - analysis or postprocessing in either XML or human readable format. - XML formated metadata can be fed into thin_restore (see - .BR thin_restore(8) ) --in order to put it back onto a metadata device (to process by --the device-mapper target) or file. -+in order to put it back onto a metadata -+.I device -+(to process by the device-mapper target) or -+.I file. - - .IP "\fB\-f, \-\-format\fP \fI{xml|human_readable}\fP". - Print output in XML or human readable format. - - .IP "\fB\-r, \-\-repair\fP". -+Repair the metadata whilst dumping it. - - .IP "\fB\-m, \-\-metadata_snap\fP [block#]". - Dump metadata snapshot created by device-mapper thin provisioning target. - If block is not provided, access the default metadata snapshot created by - the thin provisioning device-mapper target, else try the one at block#. - See the thin provisioning target documentation on how to create or release --a metadata snapshot. -+a metadata snapshot and retrieve the block number from the kernel. - - .IP "\fB\-h, \-\-help\fP". - Print help and exit. -diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8 -index 6b00e73..80e572f 100644 ---- a/man8/thin_metadata_size.8 -+++ b/man8/thin_metadata_size.8 -@@ -27,7 +27,7 @@ Default is in sectors without a pool size unit specifier. - .IP "\fB\-m, \-\-max-thins\fP \fI#[bskKmMgGtTpPeEzZyY]\fP" - Maximum sum of all thin provisioned devices and snapshots. - Unit identifier supported to allow for convenient entry of large quantities, eg. 1000000 = 1M. --Default is absolut quantity without a number unit specifier. -+Default is absolute quantity without a number unit specifier. - - .IP "\fB\-u, \-\-unit\fP \fI{bskKmMgGtTpPeEzZyY}\fP" - Output unit specifier in units of bytes,sectors,kilobytes,kibibytes,... respectively. -@@ -43,7 +43,7 @@ Print help and exit. - Output version information and exit. - - .SH EXAMPLES --Calculates the thin privisioning metadata device size for block size 64 kilobytes, -+Calculates the thin provisioning metadata device size for block size 64 kilobytes, - pool size 1 terabytes and maximum number of thin provisioned devices and snapshots of 1000 - in units of sectors with long output: - .sp -diff --git a/man8/thin_repair.8 b/man8/thin_repair.8 -index 69cddea..1048de5 100644 ---- a/man8/thin_repair.8 -+++ b/man8/thin_repair.8 -@@ -12,9 +12,18 @@ thin_repair \- repair thin provisioning binary metadata from device/file to devi - - .SH DESCRIPTION - .B thin_repair --repairs binary thin provisioning metadata created by the --respective device-mapper target processing to another device or file. --If repaired to a metadata device, the metadata can be processed -+reads binary thin provisioning metadata created by the -+respective device-mapper target from one -+.I device -+or -+.I file -+, repairs it and writes it to another -+.I device -+or -+.I file. -+If written to a metadata -+.I device -+, the metadata can be processed - by the device-mapper target. - - .IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" -@@ -30,10 +39,10 @@ Print help and exit. - Output version information and exit. - - .SH EXAMPLE --Repairs the binary thin provisioning metadata on file -+Reads the binary thin provisioning metadata from file - .B metadata --to logical volume /dev/vg/metadata for further processing by the --respective device-mapper target: -+, repairs it and writes it to logical volume /dev/vg/metadata -+for further processing by the respective device-mapper target: - .sp - .B thin_repair -i metadata -o /dev/vg/metadata - -diff --git a/man8/thin_restore.8 b/man8/thin_restore.8 -index 8ab2976..dc7eb90 100644 ---- a/man8/thin_restore.8 -+++ b/man8/thin_restore.8 -@@ -15,9 +15,14 @@ thin_restore \- restore thin provisioning metadata file to device or file - restores thin provisioning metadata created by the - respective device-mapper target dumped into an XML formatted (see - .BR thin_dump(8) ) --file, which optionally can be preprocessed to another device or file. --If restored to a metadata device, the metadata can be processed --by the device-mapper target. -+.I file -+, which optionally can be preprocessed before the restore to another -+.I device -+or -+.I file. -+If restored to a metadata -+.I device -+, the metadata can be processed by the device-mapper target. - - .IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" - Input file or device with metadata. -diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8 -index d68defb..4d74520 100644 ---- a/man8/thin_rmap.8 -+++ b/man8/thin_rmap.8 -@@ -1,16 +1,20 @@ - .TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- - .SH NAME --thin_rmap \- output reverse map of a thin provisioned region of blocks -+thin_rmap \- output reverse map of a thin provisioned region of blocks from metadata device or file - - .SH SYNOPSIS - .B thin_rmap - .RB [options] --.I {metadata device|file} -+.I {device|file} - - .SH DESCRIPTION - .B thin_rmap --outputs the reverse mapping for a region of thin provisioned pool blocks --to the respective thin provisioned devices. -+outputs the reverse mapping stored in the metadata on a -+.I device -+or -+.I file -+between a region of thin provisioned pool blocks -+and the associated thin provisioned devices. - - .IP "\fB\\-\-region\fP \fI\fP". - output reverse map diff --git a/device-mapper-persistent-data-0.2.1-man-pages-new-thin_metadata_size-and-fixes.patch b/device-mapper-persistent-data-0.2.1-man-pages-new-thin_metadata_size-and-fixes.patch deleted file mode 100644 index 85af857..0000000 --- a/device-mapper-persistent-data-0.2.1-man-pages-new-thin_metadata_size-and-fixes.patch +++ /dev/null @@ -1,281 +0,0 @@ -diff --git a/Makefile.in b/Makefile.in -index 1e7bd54..b44cbd7 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -264,7 +264,10 @@ install: $(PROGRAMS) - $(INSTALL_DIR) $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/thin_repair.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_restore.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/thin_rmap.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/thin_metadata_size.8 $(MANPATH)/man8 - - .PHONY: install - -diff --git a/man8/thin_check.8 b/man8/thin_check.8 -index f9606e0..1489078 100644 ---- a/man8/thin_check.8 -+++ b/man8/thin_check.8 -@@ -55,7 +55,10 @@ returns an exit code of 0 for success or 1 for error. - - .SH SEE ALSO - .B thin_dump(8) -+.B thin_repair(8) - .B thin_restore(8) -+.B thin_rmap(8) -+.B thin_metadata_size(8) - - .SH AUTHOR - Joe Thornber -diff --git a/man8/thin_dump.8 b/man8/thin_dump.8 -index 697df83..e60a6e5 100644 ---- a/man8/thin_dump.8 -+++ b/man8/thin_dump.8 -@@ -9,7 +9,8 @@ thin_dump \- dump thin provisioning metadata from device or file to standard out - - .SH DESCRIPTION - .B thin_dump --dumps thin provisioning metadata created by the device-mapper -+dumps binary thin provisioning metadata (optionally from alternate block; -+see option \-\-metadata-snap) created by the device-mapper - thin provisioning target on a device or file to standard output for - analysis or postprocessing in either XML or human readable format. - XML formated metadata can be fed into thin_restore (see -@@ -22,6 +23,10 @@ Print output in XML or human readable format. - - .IP "\fB\-r, \-\-repair\fP". - -+.IP "\fB\-m, \-\-metadata_snap\fP block#". -+Dump metadata snapshot created by device-mapper thin provisioning target at block# -+ -+ - .IP "\fB\-h, \-\-help\fP". - Print help and exit. - -@@ -45,8 +50,10 @@ returns an exit code of 0 for success or 1 for error. - - .SH SEE ALSO - .B thin_check(8) -+.B thin_repair(8) - .B thin_restore(8) -- -+.B thin_rmap(8) -+.B thin_metadata_size(8) - .SH AUTHOR - Joe Thornber - .br -diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8 -new file mode 100644 -index 0000000..33b36b3 ---- /dev/null -+++ b/man8/thin_metadata_size.8 -@@ -0,0 +1,77 @@ -+.TH THIN_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+thin_metadata_size \- thin provisioning metadata file/device size calculator. -+ -+.SH SYNOPSIS -+.B thin_metadata_size -+.RB [ options ] -+ -+.SH DESCRIPTION -+.B thin_metadata_size -+calculates the size of the thin provisioning metadata based on the block size -+of the thin provisioned devices, the size of the thin provisioning pool and -+the maximum number of all thin prisioned devices and snapshots. Size/number -+option arguments can be followed by unit specifiers in short one character -+and long form (eg. -b1m or -b1megabytes). -+ -+.IP "\fB\-b, \-\-block-size\fP \fIBLOCKSIZE[bskKmMgGtTpPeEzZyY]\fP" -+Block size of thin provisioned devices in units of bytes,sectors,kilobytes,kibibytes,... respectively. -+Default is in sectors without a block size unit specifier. -+ -+.IP "\fB\-s, \-\-pool-size\fP \fIPOOLSIZE[bskKmMgGtTpPeEzZyY]\fP" -+Thin provisioning pool size in units of bytes,sectors,kilobytes,kibibytes,... respectively. -+Default is in sectors without a pool size unit specifier. -+ -+.IP "\fB\-m, \-\-max-thins\fP \fI#[bskKmMgGtTpPeEzZyY]\fP" -+Maximum sum of all thin provisioned devices and snapshots. -+Unit identifier supported to allow for convenient entry of large quantities, eg. 1000000 = 1M. -+Default is absolut quantity without a number unit specifier. -+ -+.IP "\fB\-u, \-\-unit\fP \fI{bskKmMgGtTpPeEzZyY}\fP" -+Output unit specifier in units of bytes,sectors,kilobytes,kibibytes,... respectively. -+Default is in sectors without an output unit specifier. -+ -+.IP "\fB\-n, \-\-numeric-only [short|long]\fP" -+Limit output to just the size number with the optional unit specifier character/string. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLES -+Calculates the thin privisioning metadata device size for block size 64 kilobytes, -+pool size 1 terabytes and maximum number of thin provisioned devices and snapshots of 1000 -+in units of sectors with long output: -+.sp -+.B thin_metadata_size -b64k -s1t -m1000 -+ -+Or (using the long options instead) for block size 1 gigabyte, pool size 1 petabytes and maximum number of thin provisioned devices -+and snapshots of 1 million with numeric only output in units of gigabytes: -+.sp -+.B thin_metadata_size --block-size=1g --pool-size=1p --max-thins=1M --unit=g --numeric-only -+ -+Same as before (1g,1p,1M,numeric-only) but with unit specifier character appended: -+.sp -+.B thin_metadata_size --block-size=1giga --pool-size=1petabytes --max-thins=1mebi --unit=g --numeric-only=short -+ -+Or with unit specifier string appended: -+.sp -+.B thin_metadata_size --block-size=1giga --pool-size=1petabytes --max-thins=1mebi --unit=g -nlong -+ -+.SH DIAGNOSTICS -+.B thin_metadata_size -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B thin_dump(8) -+.B thin_check(8) -+.B thin_repair(8) -+.B thin_restore(8) -+.B thin_rmap(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen -diff --git a/man8/thin_repair.8 b/man8/thin_repair.8 -new file mode 100644 -index 0000000..69cddea ---- /dev/null -+++ b/man8/thin_repair.8 -@@ -0,0 +1,54 @@ -+.TH THIN_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+thin_repair \- repair thin provisioning binary metadata from device/file to device/file -+ -+.SH SYNOPSIS -+.B thin_repair -+.RB [ options ] -+.RB -i -+.I {device|file} -+.RB -o -+.I {device|file} -+ -+.SH DESCRIPTION -+.B thin_repair -+repairs binary thin provisioning metadata created by the -+respective device-mapper target processing to another device or file. -+If repaired to a metadata device, the metadata can be processed -+by the device-mapper target. -+ -+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" -+Input file or device with binary metadata. -+ -+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP" -+Output file or device for repaired binary metadata. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLE -+Repairs the binary thin provisioning metadata on file -+.B metadata -+to logical volume /dev/vg/metadata for further processing by the -+respective device-mapper target: -+.sp -+.B thin_repair -i metadata -o /dev/vg/metadata -+ -+.SH DIAGNOSTICS -+.B thin_repair -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B thin_dump(8) -+.B thin_check(8) -+.B thin_restore(8) -+.B thin_rmap(8) -+.B thin_metadata_size(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen -diff --git a/man8/thin_restore.8 b/man8/thin_restore.8 -index b4a07aa..8ab2976 100644 ---- a/man8/thin_restore.8 -+++ b/man8/thin_restore.8 -@@ -40,12 +40,15 @@ respective device-mapper target: - .B thin_restore -i metadata -o /dev/vg/metadata - - .SH DIAGNOSTICS --.B thin_dump -+.B thin_restore - returns an exit code of 0 for success or 1 for error. - - .SH SEE ALSO - .B thin_dump(8) - .B thin_check(8) -+.B thin_repair(8) -+.B thin_rmap(8) -+.B thin_metadata_size(8) - - .SH AUTHOR - Joe Thornber -diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8 -new file mode 100644 -index 0000000..d68defb ---- /dev/null -+++ b/man8/thin_rmap.8 -@@ -0,0 +1,44 @@ -+.TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+thin_rmap \- output reverse map of a thin provisioned region of blocks -+ -+.SH SYNOPSIS -+.B thin_rmap -+.RB [options] -+.I {metadata device|file} -+ -+.SH DESCRIPTION -+.B thin_rmap -+outputs the reverse mapping for a region of thin provisioned pool blocks -+to the respective thin provisioned devices. -+ -+.IP "\fB\\-\-region\fP \fI\fP". -+output reverse map -+ -+.IP "\fB\-h, \-\-help\fP". -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP". -+Output version information and exit. -+ -+.SH EXAMPLES -+output reverse map for pool blocks 5..45 (denotes blocks 5 to 44 inclusive, but not block 45) -+ -+.sp -+.B thin_rmap -r 5..45 /dev/vg/pool -+ -+.SH DIAGNOSTICS -+.B thin_rmap -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B thin_check(8) -+.B thin_dump(8) -+.B thin_repair(8) -+.B thin_restore(8) -+.B thin_metadata_size(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen diff --git a/device-mapper-persistent-data-0.2.1-new-thin_metadata_size.c.patch b/device-mapper-persistent-data-0.2.1-new-thin_metadata_size.c.patch deleted file mode 100644 index a7fa994..0000000 --- a/device-mapper-persistent-data-0.2.1-new-thin_metadata_size.c.patch +++ /dev/null @@ -1,494 +0,0 @@ -diff --git a/Makefile.in b/Makefile.in -index a82ff67..1e7bd54 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -24,7 +24,8 @@ PROGRAMS=\ - thin_dump \ - thin_restore \ - thin_repair \ -- thin_rmap -+ thin_rmap \ -+ thin_metadata_size - - all: $(PROGRAMS) - -@@ -64,7 +65,7 @@ SOURCE=\ - - PDATA_OBJECTS=$(subst .cc,.o,$(SOURCE)) - --PROGRAM_SOURCE=\ -+CXX_PROGRAM_SOURCE=\ - cache/check.cc \ - \ - thin-provisioning/thin_check.cc \ -@@ -73,10 +74,15 @@ PROGRAM_SOURCE=\ - thin-provisioning/thin_repair.cc \ - thin-provisioning/thin_rmap.cc - -+C_PROGRAM_SOURCE=\ -+ thin-provisioning/thin_metadata_size.c -+ -+CC:=@CC@ - CXX:=@CXX@ - OBJECTS:=$(subst .cc,.o,$(SOURCE)) - TOP_DIR:=@top_srcdir@ - TOP_BUILDDIR:=@top_builddir@ -+CFLAGS+=-g -Wall -O3 - CXXFLAGS+=-std=c++11 -g -Wall -fno-strict-aliasing - CXXFLAGS+=@CXXOPTIMISE_FLAG@ - CXXFLAGS+=@CXXDEBUG_FLAG@ -@@ -104,6 +110,14 @@ endif - - .SUFFIXES: .d - -+%.o: %.c -+ @echo " [CC] $<" -+ $(V) $(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $< -+ @echo " [DEP] $<" -+ $(V) $(CC) -MM -MT $(subst .c,.o,$<) $(INCLUDES) $(CFLAGS) $< > $*.$$$$; \ -+ sed 's,\([^ :]*\)\.o[ :]*,\1.o \1.gmo $* : Makefile ,g' < $*.$$$$ > $*.d; \ -+ $(RM) $*.$$$$ -+ - %.o: %.cc - @echo " [CXX] $<" - $(V) $(CXX) -c $(INCLUDES) $(CXXFLAGS) -o $@ $< -@@ -195,6 +209,10 @@ thin_rmap: $(THIN_RMAP_OBJECTS) thin-provisioning/thin_rmap.o - @echo " [LD] $@" - $(V) $(CXX) $(CXXFLAGS) -o $@ $+ $(LIBS) - -+thin_metadata_size: thin-provisioning/thin_metadata_size.o -+ @echo " [LD] $@" -+ $(V) $(CC) $(CFLAGS) -o $@ $+ -lm -+ - #---------------------------------------------------------------- - # Cache tools - -@@ -221,29 +239,33 @@ cache_check: $(CACHE_CHECK_OBJECTS) cache/check.o - DEPEND_FILES=\ - $(subst .cc,.d,$(SOURCE)) \ - $(subst .cc,.d,$(TEST_SOURCE)) \ -- $(subst .cc,.d,$(PROGRAM_SOURCE)) -+ $(subst .cc,.d,$(CXX_PROGRAM_SOURCE)) \ -+ $(subst .c,.d,$(C_PROGRAM_SOURCE)) - - .PHONY: clean distclean - - clean: - find . -name \*.o -delete - find . -name \*.gmo -delete -- $(RM) $(DEPEND_FILES) $(TEST_PROGRAMS) $(PROGRAMS) $(GMOCK_OBJECTS) lib/*.a -+ find . -name \*.d -delete -+ $(RM) $(TEST_PROGRAMS) $(PROGRAMS) $(GMOCK_OBJECTS) lib/*.a - - distclean: clean - $(RM) config.cache config.log config.status configure.h version.h Makefile unit-tests/Makefile - - install: $(PROGRAMS) - $(INSTALL_DIR) $(BINDIR) -- $(INSTALL_PROGRAM) thin_check $(BINDIR) -- $(INSTALL_PROGRAM) thin_dump $(BINDIR) -- $(INSTALL_PROGRAM) thin_repair $(BINDIR) -- $(INSTALL_PROGRAM) thin_restore $(BINDIR) -- $(INSTALL_PROGRAM) thin_rmap $(BINDIR) -+ $(INSTALL_PROGRAM) thin_check $(BINDIR) -+ $(INSTALL_PROGRAM) thin_dump $(BINDIR) -+ $(INSTALL_PROGRAM) thin_repair $(BINDIR) -+ $(INSTALL_PROGRAM) thin_restore $(BINDIR) -+ $(INSTALL_PROGRAM) thin_rmap $(BINDIR) -+ $(INSTALL_PROGRAM) thin_metadata_size $(BINDIR) - $(INSTALL_DIR) $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_restore.8 $(MANPATH)/man8 -+ - .PHONY: install - - ifeq ("@TESTING@", "yes") -diff --git a/configure.in b/configure.in -index 78d88c1..8f25002 100644 ---- a/configure.in -+++ b/configure.in -@@ -30,6 +30,7 @@ dnl -- Setup the directory where autoconf has auxilary files - AC_CONFIG_AUX_DIR(autoconf) - AC_CANONICAL_TARGET([]) - AC_PROG_CXX([g++]) -+AC_PROG_CC([gcc]) - AC_LANG(C++) - - ################################################################ -diff --git a/thin-provisioning/thin_metadata_size.c b/thin-provisioning/thin_metadata_size.c -new file mode 100755 -index 0000000..1f52d51 ---- /dev/null -+++ b/thin-provisioning/thin_metadata_size.c -@@ -0,0 +1,370 @@ -+/* -+ * Copyright (C) 2013 Red Hat, GmbH -+ * -+ * Calculates device-mapper thin privisioning -+ * metadata device size based on pool, block size and -+ * maximum expected thin provisioned devices and snapshots. -+ * -+ * This file is part of the thin-provisioning-tools source. -+ * -+ * thin-provisioning-tools 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. -+ * -+ * thin-provisioning-tools 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 thin-provisioning-tools. If not, see -+ * . -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "version.h" -+ -+#include -+ -+/*----------------------------------------------------------------*/ -+ -+enum numeric_options { BLOCKSIZE, POOLSIZE, MAXTHINS, NUMERIC, OPT_END}; -+enum return_units { RETURN_BYTES, RETURN_SECTORS }; -+enum numeric_type { NO_NUMBER, NUMBER, NUMBER_SHORT, NUMBER_LONG }; -+typedef unsigned bool; -+enum bool_value { false = 0, true = 1}; -+struct global { -+ char *prg; /* program name */ -+ -+ /* Unit representations in characters, strings and numeric factors. */ -+ struct { -+ char *chars; -+ char **strings; -+ unsigned long long *factors; -+ } unit; -+ -+ /* Command line option properties. */ -+ struct options { -+ unsigned unit_idx; -+ char *s[OPT_END]; -+ unsigned long long n[OPT_END]; -+ } options; -+}; -+ -+static void exit_prg(struct global *g, int ret) -+{ -+ if (g) { -+ unsigned u = OPT_END; -+ -+ while (u--) { -+ if (g->options.s[u]) -+ free (g->options.s[u]); -+ } -+ -+ free(g); -+ } -+ -+ exit(ret); -+} -+ -+static void abort_prg(struct global *g, const char *msg) -+{ -+ fprintf(stderr, "%s - %s\n", g ? g->prg : "fatal", msg); -+ exit_prg(g, 1); -+} -+ -+static int unit_index(struct global *g, char *unit_string) -+{ -+ unsigned len; -+ -+ if (!unit_string) -+ return unit_index(g, "sectors"); -+ -+ len = strlen(unit_string); -+ if (len == 1) { -+ char *o = strchr(g->unit.chars, *unit_string); -+ -+ if (o) -+ return o - g->unit.chars; -+ -+ } else { -+ char **s; -+ -+ for (s = g->unit.strings; *s; s++) -+ if (!strncmp(*s, unit_string, len)) -+ return s - g->unit.strings; -+ } -+ -+ return -1; -+} -+ -+#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) -+static struct global *init_prg(char *prg_path) -+{ -+ unsigned u; -+ static char *unit_chars = "bskKmMgGtTpPeEzZyY"; -+ static char *unit_strings[] = { "bytes", "sectors", -+ "kilobytes", "kibibytes", "megabytes", "mebibytes", -+ "gigabytes", "gibibytes", "terabytes", "tebibytes", -+ "petabytes", "pebibytes", "exabytes", "ebibytes", -+ "zetabytes", "zebibytes", "yottabytes", "yobibytes", NULL }; -+ static unsigned long long unit_factors[ARRAY_SIZE(unit_strings) - 1] = { 1, 512, 1024, 1000 }; -+ struct global *r = malloc(sizeof(*r)); -+ -+ if (!r) -+ abort_prg(r, "failed to allocate global context!"); -+ -+ memset(r, 0, sizeof(*r)); -+ -+ for (u = 4; unit_strings[u]; u += 2) { -+ unit_factors[u] = unit_factors[u-2] * unit_factors[2]; -+ unit_factors[u+1] = unit_factors[u-1] * unit_factors[3]; -+ } -+ -+ r->prg = basename(prg_path); -+ r->unit.chars = unit_chars; -+ r->unit.strings = unit_strings; -+ r->unit.factors = unit_factors; -+ r->options.unit_idx = unit_index(r, NULL); -+ -+ return r; -+} -+ -+static unsigned long long bytes_per_sector(struct global *g) -+{ -+ return g->unit.factors[unit_index(g, "sectors")]; -+} -+ -+static void check_opts(struct global *g) -+{ -+ struct options *o = &g->options; -+ -+ if (!o->n[BLOCKSIZE]) -+ abort_prg(g, "block size required!"); -+ else if (!o->n[POOLSIZE]) -+ abort_prg(g, "pool size required!"); -+ else if (!o->n[MAXTHINS]) -+ abort_prg(g, "max thins required!"); -+ else if (o->n[BLOCKSIZE] & (o->n[BLOCKSIZE] - 1)) -+ abort_prg(g, "block size must be 2^^N"); -+ else if (o->n[POOLSIZE] <= o->n[BLOCKSIZE]) -+ abort_prg(g, "pool size must be larger than block size"); -+} -+ -+static unsigned long long to_bytes(struct global *g, char *sz, enum return_units unit, int *index) -+{ -+ int idx; -+ unsigned long long r; -+ char *us = sz; -+ -+ /* Get pointer to unit identifier. */ -+ us += strspn(sz, "0123456789"); -+ if (*us) { -+ idx = unit_index(g, us); -+ if (idx < 0) -+ abort_prg(g, "Invalid unit specifier!"); -+ -+ *us = 0; -+ *index = idx; -+ } else { -+ idx = unit_index(g, NULL); -+ us = NULL; -+ *index = -1; -+ } -+ -+ r = atoll(sz) * g->unit.factors[idx]; -+ return (!us || unit == RETURN_SECTORS) ? r / bytes_per_sector(g) : r; -+} -+ -+static void printf_aligned(struct global *g, char *a, char *b, char *c, bool units, bool mandatory) -+{ -+ char buf[80]; -+ -+ strcpy(buf, b); -+ if (units) -+ strcat(buf, mandatory ? "{" :"["), strcat(buf, g->unit.chars), strcat(buf, mandatory ? "}" : "]"); -+ -+ printf("\t%-4s%-44s%s\n", a, buf, c); -+} -+ -+static void help(struct global *g) -+{ -+ printf ("Thin Provisioning Metadata Device Size Calculator.\nUsage: %s [options]\n", g->prg); -+ printf_aligned(g, "-b", "--block-size BLOCKSIZE", "Block size of thin provisioned devices.", true, false); -+ printf_aligned(g, "-s", "--pool-size SIZE", "Size of pool device.", true, false); -+ printf_aligned(g, "-m", "--max-thins #MAXTHINS", "Maximum sum of all thin devices and snapshots.", true, false); -+ printf_aligned(g, "-u", "--unit ", "Output unit specifier.", true, true); -+ printf_aligned(g, "-n", "--numeric-only [short|long]", "Output numeric value only (optionally with short/long unit identifier).", false, false); -+ printf_aligned(g, "-h", "--help", "This help.", false, false); -+ printf_aligned(g, "-V", "--version", "Print thin provisioning tools version.", false, false); -+ exit_prg(g, 0); -+} -+ -+static void version(struct global *g) -+{ -+ printf("%s\n", THIN_PROVISIONING_TOOLS_VERSION); -+ exit_prg(g, 1); -+} -+ -+static void check_unit(struct global *g, char *arg) -+{ -+ int idx = unit_index(g, arg); -+ -+ if (idx < 0) -+ abort_prg(g, "output unit specifier invalid!"); -+ -+ g->options.unit_idx = idx; -+} -+ -+static void check_numeric_option(struct global *g, char *arg) -+{ -+ if (g->options.n[NUMERIC] != NO_NUMBER) -+ abort_prg(g, "-n already given!"); -+ -+ g->options.n[NUMERIC] = NUMBER; -+ -+ if (arg) { -+ bool unit_long = !strncmp("long", arg, strlen(arg)); -+ -+ if (!*arg || (strncmp("short", arg, strlen(arg)) && !unit_long)) -+ abort_prg(g, "-n invalid option argument"); -+ -+ g->options.n[NUMERIC] = unit_long ? NUMBER_LONG : NUMBER_SHORT; -+ } -+} -+ -+static void check_size(struct global *g, enum numeric_options o, char *arg) -+{ -+ int idx; -+ bool valid_index = true; -+ -+ if (g->options.n[o]) -+ abort_prg(g, "option already given!"); -+ -+ g->options.n[o] = to_bytes(g, arg, o == MAXTHINS ? RETURN_BYTES : RETURN_SECTORS, &idx); -+ if (idx < 0) { -+ valid_index = false; -+ idx = g->options.unit_idx; -+ } -+ -+ g->options.s[o] = malloc(strlen(arg) + strlen(g->unit.strings[idx]) + 1); -+ if (!g->options.s[o]) -+ abort_prg(g, "failed to allocate string!"); -+ -+ strcpy(g->options.s[o], arg); -+ if (o != MAXTHINS || valid_index) -+ strcat(g->options.s[o], g->unit.strings[idx]); -+ -+} -+ -+static void parse_command_line(struct global *g, int argc, char **argv) -+{ -+ int c; -+ static struct option long_options[] = { -+ {"block-size", required_argument, NULL, 'b' }, -+ {"pool-size", required_argument, NULL, 's' }, -+ {"max-thins", required_argument, NULL, 'm' }, -+ {"unit", required_argument, NULL, 'u' }, -+ {"numeric-only",optional_argument, NULL, 'n' }, -+ {"help", no_argument, NULL, 'h' }, -+ {"version", no_argument, NULL, 'V' }, -+ {NULL, 0, NULL, 0 } -+ }; -+ -+ while ((c = getopt_long(argc, argv, "b:s:m:u:n::hV", long_options, NULL)) != -1) { -+ switch (c) { -+ case 'b': -+ check_size(g, BLOCKSIZE, optarg); -+ break; -+ case 's': -+ check_size(g, POOLSIZE, optarg); -+ break; -+ case 'm': -+ check_size(g, MAXTHINS, optarg); -+ break; -+ case 'u': -+ check_unit(g, optarg); -+ break; -+ case 'n': -+ check_numeric_option(g, optarg); -+ break; -+ case 'h': -+ help(g); /* exits */ -+ case 'V': -+ version(g); /* exits */ -+ default: -+ exit_prg(g, 1); -+ } -+ } -+ -+ check_opts(g); -+} -+ -+static const unsigned mappings_per_block(void) -+{ -+ const struct { -+ const unsigned node; -+ const unsigned node_header; -+ const unsigned entry; -+ } btree_size = { 4096, 64, 16 }; -+ -+ return (btree_size.node - btree_size.node_header) / btree_size.entry; -+} -+ -+static void print_precision(struct global *g, double r, unsigned idx) -+{ -+ bool full = g->options.n[NUMERIC] == NO_NUMBER; -+ double rtrunc = truncl(r); -+ -+ if (full) -+ printf("%s - ", g->prg); -+ -+ if (r == rtrunc) -+ printf("%llu", (unsigned long long) r); -+ else -+ printf(r - rtrunc < 1E-2 ? "%0.2e" : "%0.2f", r); -+ -+ if (full) -+ printf(" %s", g->unit.strings[idx]); -+ else if (g->options.n[NUMERIC] > NUMBER) { -+ if (g->options.n[NUMERIC] == NUMBER_SHORT) -+ printf("%c", g->unit.chars[idx]); -+ else -+ printf("%s", g->unit.strings[idx]); -+ } -+ -+ if (full) -+ printf(" estimated metadata area size for \"--block-size=%s --pool-size=%s --max-thins=%s\"", -+ g->options.s[BLOCKSIZE], g->options.s[POOLSIZE], g->options.s[MAXTHINS]); -+ -+ putchar('\n'); -+} -+ -+static void print_estimated_result(struct global *g) -+{ -+ double r; -+ -+ /* double-fold # of nodes, because they aren't fully populated in average */ -+ r = (1.0 + (2 * g->options.n[POOLSIZE] / g->options.n[BLOCKSIZE] / mappings_per_block() + g->options.n[MAXTHINS])); /* in 4k blocks */ -+ r *= 8 * bytes_per_sector(g); /* in bytes! */ -+ r /= g->unit.factors[g->options.unit_idx]; /* in requested unit */ -+ -+ print_precision(g, r, g->options.unit_idx); -+} -+ -+int main(int argc, char **argv) -+{ -+ struct global *g = init_prg(*argv); -+ -+ parse_command_line(g, argc, argv); -+ print_estimated_result(g); -+ exit_prg(g, 0); -+ return 0; /* Doesn't get here... */ -+} diff --git a/device-mapper-persistent-data-0.2.1-nostrip.patch b/device-mapper-persistent-data-0.2.1-nostrip.patch deleted file mode 100644 index c75a4fa..0000000 --- a/device-mapper-persistent-data-0.2.1-nostrip.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -up thin-provisioning-tools-0.2.1/Makefile.in~ thin-provisioning-tools-0.2.1/Makefile.in ---- thin-provisioning-tools-0.2.1/Makefile.in~ 2013-07-10 18:43:45.000000000 +0300 -+++ thin-provisioning-tools-0.2.1/Makefile.in 2013-07-15 22:32:36.294852451 +0300 -@@ -235,11 +235,11 @@ distclean: clean - - install: $(PROGRAMS) - $(INSTALL_DIR) $(BINDIR) -- $(INSTALL_PROGRAM) -s thin_check $(BINDIR) -- $(INSTALL_PROGRAM) -s thin_dump $(BINDIR) -- $(INSTALL_PROGRAM) -s thin_repair $(BINDIR) -- $(INSTALL_PROGRAM) -s thin_restore $(BINDIR) -- $(INSTALL_PROGRAM) -s thin_rmap $(BINDIR) -+ $(INSTALL_PROGRAM) thin_check $(BINDIR) -+ $(INSTALL_PROGRAM) thin_dump $(BINDIR) -+ $(INSTALL_PROGRAM) thin_repair $(BINDIR) -+ $(INSTALL_PROGRAM) thin_restore $(BINDIR) -+ $(INSTALL_PROGRAM) thin_rmap $(BINDIR) - $(INSTALL_DIR) $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8 diff --git a/device-mapper-persistent-data-0.2.1-support-thin_dump-default-metadata-snapshot.patch b/device-mapper-persistent-data-0.2.1-support-thin_dump-default-metadata-snapshot.patch deleted file mode 100644 index 4f72807..0000000 --- a/device-mapper-persistent-data-0.2.1-support-thin_dump-default-metadata-snapshot.patch +++ /dev/null @@ -1,166 +0,0 @@ -diff --git a/man8/thin_dump.8 b/man8/thin_dump.8 -index e60a6e5..b26cc2c 100644 ---- a/man8/thin_dump.8 -+++ b/man8/thin_dump.8 -@@ -23,9 +23,12 @@ Print output in XML or human readable format. - - .IP "\fB\-r, \-\-repair\fP". - --.IP "\fB\-m, \-\-metadata_snap\fP block#". --Dump metadata snapshot created by device-mapper thin provisioning target at block# -- -+.IP "\fB\-m, \-\-metadata_snap\fP [block#]". -+Dump metadata snapshot created by device-mapper thin provisioning target. -+If block is not provided, access the default metadata snapshot created by -+the thin provisioning device-mapper target, else try the one at block#. -+See the thin provisioning target documentation on how to create or release -+a metadata snapshot. - - .IP "\fB\-h, \-\-help\fP". - Print help and exit. -@@ -44,6 +47,13 @@ to standard output in XML format: - .sp - .B thin_dump /dev/vg/metadata - -+Dumps the thin provisioning metadata snapshot on logical volume /dev/vg/metadata -+to standard output in human readable format (not processable by -+.B thin_restore(8) -+): -+.sp -+.B thin_dump --format human_readable --metadata-snap /dev/vg/metadata -+ - .SH DIAGNOSTICS - .B thin_dump - returns an exit code of 0 for success or 1 for error. -diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc -index 771325a..bef75ba 100644 ---- a/thin-provisioning/metadata.cc -+++ b/thin-provisioning/metadata.cc -@@ -78,6 +78,7 @@ namespace { - << "data block size " << sb.data_block_size_ << endl - << "metadata block size " << sb.metadata_block_size_ << endl - << "metadata nr blocks " << sb.metadata_nr_blocks_ << endl -+ << "metadata snapshot block " << sb.metadata_snap_ << endl - ; - } - } -diff --git a/thin-provisioning/thin_dump.cc b/thin-provisioning/thin_dump.cc -index 029a635..a844038 100644 ---- a/thin-provisioning/thin_dump.cc -+++ b/thin-provisioning/thin_dump.cc -@@ -31,23 +31,37 @@ using namespace persistent_data; - using namespace std; - using namespace thin_provisioning; - -+struct flags { -+ bool find_metadata_snap; -+ bool repair; -+}; -+ - namespace { -- int dump(string const &path, ostream &out, string const &format, bool repair, -+ int dump(string const &path, ostream *out, string const &format, struct flags &flags, - block_address metadata_snap = 0) { - try { -- metadata::ptr md(metadata_snap ? new metadata(path, metadata_snap) : new metadata(path, metadata::OPEN, 0, 0)); -+ metadata::ptr md(new metadata(path, metadata_snap)); - emitter::ptr e; -+ uint64_t metadata_snap_root = md->sb_.metadata_snap_; -+ -+ if (metadata_snap_root) { -+ md.reset(); -+ md = metadata::ptr(new metadata(path, metadata_snap_root)); -+ } else if (flags.find_metadata_snap) { -+ cerr << "no metadata snapshot found!" << endl; -+ exit(1); -+ } - - if (format == "xml") -- e = create_xml_emitter(out); -+ e = create_xml_emitter(*out); - else if (format == "human_readable") -- e = create_human_readable_emitter(out); -+ e = create_human_readable_emitter(*out); - else { - cerr << "unknown format '" << format << "'" << endl; - exit(1); - } - -- metadata_dump(md, e, repair); -+ metadata_dump(md, e, flags.repair); - - } catch (std::exception &e) { - cerr << e.what() << endl; -@@ -63,7 +77,7 @@ namespace { - << " {-h|--help}" << endl - << " {-f|--format} {xml|human_readable}" << endl - << " {-r|--repair}" << endl -- << " {-m|--metadata-snap} block#" << endl -+ << " {-m|--metadata-snap} [block#]" << endl - << " {-o }" << endl - << " {-V|--version}" << endl; - } -@@ -72,16 +86,16 @@ namespace { - int main(int argc, char **argv) - { - int c; -- bool repair = false; - char const *output = NULL; -- const char shortopts[] = "hm:o:f:rV"; -+ const char shortopts[] = "hm::o:f:rV"; -+ char *end_ptr; - string format = "xml"; - block_address metadata_snap = 0; -- char *end_ptr; -+ struct flags flags = { .find_metadata_snap = false, .repair = false }; - - const struct option longopts[] = { - { "help", no_argument, NULL, 'h'}, -- { "metadata-snap", required_argument, NULL, 'm' }, -+ { "metadata-snap", optional_argument, NULL, 'm' }, - { "output", required_argument, NULL, 'o'}, - { "format", required_argument, NULL, 'f' }, - { "repair", no_argument, NULL, 'r'}, -@@ -100,16 +114,24 @@ int main(int argc, char **argv) - break; - - case 'r': -- repair = true; -+ flags.repair = true; -+ break; -+ -+ case 's': -+ flags.find_metadata_snap = true; - break; - - case 'm': -- metadata_snap = strtoull(optarg, &end_ptr, 10); -- if (end_ptr == optarg) { -- cerr << "couldn't parse " << endl; -- usage(cerr, basename(argv[0])); -- return 1; -- } -+ if (optarg) { -+ metadata_snap = strtoull(optarg, &end_ptr, 10); -+ if (end_ptr == optarg) { -+ cerr << "couldn't parse " << endl; -+ usage(cerr, basename(argv[0])); -+ return 1; -+ } -+ } else -+ flags.find_metadata_snap = true; -+ - break; - - case 'o': -@@ -132,9 +154,5 @@ int main(int argc, char **argv) - return 1; - } - -- if (output) { -- ofstream out(output); -- return dump(argv[optind], out, format, repair, metadata_snap); -- } else -- return dump(argv[optind], cout, format, repair, metadata_snap); -+ return dump(argv[optind], output ? new ofstream(output) : &cout, format, flags, metadata_snap); - } diff --git a/device-mapper-persistent-data-0.2.1-thin_dump-support-metadata-snap-block.patch b/device-mapper-persistent-data-0.2.1-thin_dump-support-metadata-snap-block.patch deleted file mode 100644 index b2e9195..0000000 --- a/device-mapper-persistent-data-0.2.1-thin_dump-support-metadata-snap-block.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff --git a/thin-provisioning/metadata.cc b/thin-provisioning/metadata.cc -index c841614..771325a 100644 ---- a/thin-provisioning/metadata.cc -+++ b/thin-provisioning/metadata.cc -@@ -57,15 +57,6 @@ namespace { - return tm; - } - -- superblock -- read_superblock(block_manager<>::ptr bm, block_address location = SUPERBLOCK_LOCATION) { -- superblock sb; -- block_manager<>::read_ref r = bm->read_lock(location, superblock_validator()); -- superblock_disk const *sbd = reinterpret_cast(&r.data()); -- superblock_traits::unpack(*sbd, sb); -- return sb; -- } -- - void - copy_space_maps(space_map::ptr lhs, space_map::ptr rhs) { - for (block_address b = 0; b < rhs->get_nr_blocks(); b++) { -@@ -149,10 +140,10 @@ metadata::metadata(std::string const &dev_path, open_type ot, - } - } - --metadata::metadata(std::string const &dev_path) -+metadata::metadata(std::string const &dev_path, block_address metadata_snap) - { - tm_ = open_tm(open_bm(dev_path, false)); -- sb_ = read_superblock(tm_->get_bm()); -+ sb_ = read_superblock(tm_->get_bm(), metadata_snap); - - // We don't open the metadata sm for a held root - //metadata_sm_ = open_metadata_sm(tm_, &sb_.metadata_space_map_root_); -diff --git a/thin-provisioning/metadata.h b/thin-provisioning/metadata.h -index 250c216..9749acb 100644 ---- a/thin-provisioning/metadata.h -+++ b/thin-provisioning/metadata.h -@@ -62,10 +62,11 @@ namespace thin_provisioning { - // Deprecated: it would be better if we passed in an already - // constructed block_manager. - metadata(std::string const &dev_path, open_type ot, -- sector_t data_block_size = 128, -+ sector_t data_block_size = 128, // Only used if CREATE - block_address nr_data_blocks = 0); // Only used if CREATE - -- metadata(std::string const &dev_path); -+ metadata(std::string const &dev_path, -+ block_address metadata_snap = 0); - - // ... use these instead ... - metadata(block_manager<>::ptr bm, open_type ot, -diff --git a/thin-provisioning/superblock.cc b/thin-provisioning/superblock.cc -index c23fbc1..bf9544b 100644 ---- a/thin-provisioning/superblock.cc -+++ b/thin-provisioning/superblock.cc -@@ -126,17 +126,22 @@ namespace thin_provisioning { - } - } - -- superblock_detail::superblock read_superblock(block_manager<>::ptr bm) -+ superblock_detail::superblock read_superblock(block_manager<>::ptr bm, block_address location) - { - using namespace superblock_detail; - - superblock sb; -- auto r = bm->read_lock(SUPERBLOCK_LOCATION, superblock_validator()); -+ auto r = bm->read_lock(location, superblock_validator()); - superblock_disk const *sbd = reinterpret_cast(&r.data()); - superblock_traits::unpack(*sbd, sb); - return sb; - } - -+ superblock_detail::superblock read_superblock(block_manager<>::ptr bm) -+ { -+ return read_superblock(bm, SUPERBLOCK_LOCATION); -+ } -+ - void - check_superblock(block_manager<>::ptr bm, - superblock_detail::damage_visitor &visitor) { -diff --git a/thin-provisioning/superblock.h b/thin-provisioning/superblock.h -index e993497..a9377b0 100644 ---- a/thin-provisioning/superblock.h -+++ b/thin-provisioning/superblock.h -@@ -123,6 +123,7 @@ namespace thin_provisioning { - persistent_data::block_manager<>::validator::ptr superblock_validator(); - - superblock_detail::superblock read_superblock(persistent_data::block_manager<>::ptr bm); -+ superblock_detail::superblock read_superblock(persistent_data::block_manager<>::ptr bm, persistent_data::block_address location); - void check_superblock(persistent_data::block_manager<>::ptr bm, - superblock_detail::damage_visitor &visitor); - } -diff --git a/thin-provisioning/thin_dump.cc b/thin-provisioning/thin_dump.cc -index a4bcf66..029a635 100644 ---- a/thin-provisioning/thin_dump.cc -+++ b/thin-provisioning/thin_dump.cc -@@ -35,7 +35,7 @@ namespace { - int dump(string const &path, ostream &out, string const &format, bool repair, - block_address metadata_snap = 0) { - try { -- metadata::ptr md(new metadata(path, metadata::OPEN)); -+ metadata::ptr md(metadata_snap ? new metadata(path, metadata_snap) : new metadata(path, metadata::OPEN, 0, 0)); - emitter::ptr e; - - if (format == "xml") -@@ -63,7 +63,7 @@ namespace { - << " {-h|--help}" << endl - << " {-f|--format} {xml|human_readable}" << endl - << " {-r|--repair}" << endl -- << " {-m|--metadata-snap}" << endl -+ << " {-m|--metadata-snap} block#" << endl - << " {-o }" << endl - << " {-V|--version}" << endl; - } diff --git a/device-mapper-persistent-data-0.2.1-update-thin_metadata_size-man-page.patch b/device-mapper-persistent-data-0.2.1-update-thin_metadata_size-man-page.patch deleted file mode 100644 index 67eaf4d..0000000 --- a/device-mapper-persistent-data-0.2.1-update-thin_metadata_size-man-page.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/man8/thin_metadata_size.8 b/man8/thin_metadata_size.8 -index 33b36b3..6b00e73 100644 ---- a/man8/thin_metadata_size.8 -+++ b/man8/thin_metadata_size.8 -@@ -1,6 +1,6 @@ - .TH THIN_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- - .SH NAME --thin_metadata_size \- thin provisioning metadata file/device size calculator. -+thin_metadata_size \- thin provisioning metadata device/file size calculator. - - .SH SYNOPSIS - .B thin_metadata_size -@@ -10,13 +10,15 @@ thin_metadata_size \- thin provisioning metadata file/device size calculator. - .B thin_metadata_size - calculates the size of the thin provisioning metadata based on the block size - of the thin provisioned devices, the size of the thin provisioning pool and --the maximum number of all thin prisioned devices and snapshots. Size/number --option arguments can be followed by unit specifiers in short one character --and long form (eg. -b1m or -b1megabytes). -+the maximum number of all thin prisioned devices and snapshots. -+Because thin provisioning pools are holding widely variable contents, -+this tool is needed to provide sensible initial default size. - - .IP "\fB\-b, \-\-block-size\fP \fIBLOCKSIZE[bskKmMgGtTpPeEzZyY]\fP" - Block size of thin provisioned devices in units of bytes,sectors,kilobytes,kibibytes,... respectively. - Default is in sectors without a block size unit specifier. -+Size/number option arguments can be followed by unit specifiers in short one character -+and long form (eg. -b1m or -b1megabytes). - - .IP "\fB\-s, \-\-pool-size\fP \fIPOOLSIZE[bskKmMgGtTpPeEzZyY]\fP" - Thin provisioning pool size in units of bytes,sectors,kilobytes,kibibytes,... respectively. diff --git a/device-mapper-persistent-data-0.2.2-man-pages-header.patch b/device-mapper-persistent-data-0.2.2-man-pages-header.patch deleted file mode 100644 index 487c2e1..0000000 --- a/device-mapper-persistent-data-0.2.2-man-pages-header.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/man8/thin_check.8 b/man8/thin_check.8 -index 1489078..a8dc81b 100644 ---- a/man8/thin_check.8 -+++ b/man8/thin_check.8 -@@ -1,4 +1,4 @@ --.TH THIN_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.TH THIN_CHECK 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- - .SH NAME - thin_check \- repair thin provisioning metadata on device or file - -diff --git a/man8/thin_rmap.8 b/man8/thin_rmap.8 -index 4d74520..684c86c 100644 ---- a/man8/thin_rmap.8 -+++ b/man8/thin_rmap.8 -@@ -1,4 +1,4 @@ --.TH THIN_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.TH THIN_RMAP(g 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- - .SH NAME - thin_rmap \- output reverse map of a thin provisioned region of blocks from metadata device or file - diff --git a/device-mapper-persistent-data-0.2.8-1-missing-installs.patch b/device-mapper-persistent-data-0.2.8-1-missing-installs.patch deleted file mode 100644 index 59e9840..0000000 --- a/device-mapper-persistent-data-0.2.8-1-missing-installs.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- thin-provisioning-tools-0.2.8/Makefile.in.orig 2013-10-18 17:11:34.320772851 +0200 -+++ thin-provisioning-tools-0.2.8/Makefile.in 2013-10-18 17:11:09.938219484 +0200 -@@ -299,6 +299,10 @@ - - install: $(PROGRAMS) - $(INSTALL_DIR) $(BINDIR) -+ $(INSTALL_PROGRAM) cache_check $(BINDIR) -+ $(INSTALL_PROGRAM) cache_dump $(BINDIR) -+ $(INSTALL_PROGRAM) cache_repair $(BINDIR) -+ $(INSTALL_PROGRAM) cache_restore $(BINDIR) - $(INSTALL_PROGRAM) thin_check $(BINDIR) - $(INSTALL_PROGRAM) thin_dump $(BINDIR) - $(INSTALL_PROGRAM) thin_repair $(BINDIR) -@@ -306,6 +310,10 @@ - $(INSTALL_PROGRAM) thin_rmap $(BINDIR) - $(INSTALL_PROGRAM) thin_metadata_size $(BINDIR) - $(INSTALL_DIR) $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/cache_check.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/cache_dump.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/cache_repair.8 $(MANPATH)/man8 -+ $(INSTALL_DATA) man8/cache_restore.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8 - $(INSTALL_DATA) man8/thin_repair.8 $(MANPATH)/man8 diff --git a/device-mapper-persistent-data-0.2.8-1-missing-man-pages.patch b/device-mapper-persistent-data-0.2.8-1-missing-man-pages.patch deleted file mode 100644 index be0aaa1..0000000 --- a/device-mapper-persistent-data-0.2.8-1-missing-man-pages.patch +++ /dev/null @@ -1,270 +0,0 @@ -diff --git a/man8/cache_check.8 b/man8/cache_check.8 -new file mode 100644 -index 0000000..5cc7dff ---- /dev/null -+++ b/man8/cache_check.8 -@@ -0,0 +1,62 @@ -+.TH CACHE_CHECK 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+cache_check \- repair cache metadata on device or file -+ -+.SH SYNOPSIS -+.B cache_check -+.RB [ options ] -+.I {device|file} -+ -+.SH DESCRIPTION -+.B cache_check -+checks cache metadata created by -+the device-mapper cache target on a -+.I device -+or -+.I file. -+ -+.SH OPTIONS -+.IP "\fB\-q, \-\-quiet\fP" -+Suppress output messages, return only exit code. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.IP "\fB\-\-super\-block\-only\fP" -+Only check the superblock is present. -+ -+.IP "\fB\-\-skip-mappings\fP" -+Skip checking of the block mappings which make up the bulk of the -+metadata. -+ -+.IP "\fB\-\-skip-hints\fP" -+Skip checking of the policy hint values metadata. -+ -+.IP "\fB\-\-skip-discards\fP" -+Skip checking of the discard bits in the metadata. -+ -+.SH EXAMPLE -+Analyses and repairs cache metadata on logical volume -+/dev/vg/metadata: -+.sp -+.B cache_check /dev/vg/metadata -+ -+The device may not be actively used by the target -+when running. -+ -+.SH DIAGNOSTICS -+.B cache_check -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B cache_dump(8) -+.B cache_repair(8) -+.B cache_restore(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen -diff --git a/man8/cache_dump.8 b/man8/cache_dump.8 -new file mode 100644 -index 0000000..a0c2924 ---- /dev/null -+++ b/man8/cache_dump.8 -@@ -0,0 +1,59 @@ -+.TH CACHE_DUMP 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+cache_dump \- dump cache metadata from device or file to standard output -+ -+.SH SYNOPSIS -+.B cache_dump -+.RB [options] -+.I {device|file} -+ -+.SH DESCRIPTION -+.B cache_dump -+dumps binary cache metadata created by -+the device-mapper cache target on a -+.I device -+or -+.I file -+to standard output for -+analysis or postprocessing in XML format. -+XML formated metadata can be fed into cache_restore (see -+.BR cache_restore(8) ) -+in order to put it back onto a metadata -+.I device -+(to process by the device-mapper target) or -+.I file. -+ -+.IP "\fB\-r, \-\-repair\fP". -+Repair the metadata whilst dumping it. -+ -+.IP "\fB\-h, \-\-help\fP". -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP". -+Output version information and exit. -+ -+.SH EXAMPLES -+Dumps the cache metadata on logical volume /dev/vg/metadata -+to standard output in XML format: -+.sp -+.B cache_dump /dev/vg/metadata -+ -+.SH EXAMPLES -+Dumps the cache metadata on logical volume /dev/vg/metadata -+whilst repairing it to standard output in XML format: -+.sp -+.B cache_dump --repair /dev/vg/metadata -+ -+.SH DIAGNOSTICS -+.B cache_dump -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B cache_check(8) -+.B cache_repair(8) -+.B cache_restore(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen -diff --git a/man8/cache_repair.8 b/man8/cache_repair.8 -new file mode 100644 -index 0000000..ef04a7f ---- /dev/null -+++ b/man8/cache_repair.8 -@@ -0,0 +1,61 @@ -+.TH CACHE_REPAIR 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+cache_repair \- repair cache binary metadata from device/file to device/file -+ -+.SH SYNOPSIS -+.B cache_repair -+.RB [ options ] -+.RB -i -+.I {device|file} -+.RB -o -+.I {device|file} -+ -+.SH DESCRIPTION -+.B cache_repair -+reads binary cache metadata created by the -+respective device-mapper target from one -+.I device -+or -+.I file -+, repairs it and writes it to another -+.I device -+or -+.I file. -+If written to a metadata -+.I device -+, the metadata can be processed -+by the device-mapper target. -+ -+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" -+Input file or device with binary metadata. -+ -+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP" -+Output file or device for repaired binary metadata. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLE -+Reads the binary cache metadata from file -+.B metadata -+, repairs it and writes it to logical volume /dev/vg/metadata -+for further processing by the respective device-mapper target: -+.sp -+.B cache_repair -i metadata -o /dev/vg/metadata -+ -+.SH DIAGNOSTICS -+.B cache_repair -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B cache_dump(8) -+.B cache_check(8) -+.B cache_restore(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen -diff --git a/man8/cache_restore.8 b/man8/cache_restore.8 -new file mode 100644 -index 0000000..5f9fdca ---- /dev/null -+++ b/man8/cache_restore.8 -@@ -0,0 +1,64 @@ -+.TH CACHE_RESTORE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+cache_restore \- restore cache metadata file to device or file -+ -+.SH SYNOPSIS -+.B cache_restore -+.RB [ options ] -+.RB -i -+.I {device|file} -+.RB -o -+.I {device|file} -+ -+.SH DESCRIPTION -+.B cache_restore -+restores cache metadata created by the respective -+device-mapper target dumped into an XML formatted (see -+.BR cache_dump(8) ) -+.I file -+, which optionally can be preprocessed before the restore to another -+.I device -+or -+.I file. -+If restored to a metadata -+.I device -+, the metadata can be processed by the device-mapper target. -+ -+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" -+Input file or device with metadata. -+ -+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP" -+Output file or device. -+ -+.IP "\fB{\-\-debug-override-metadata-version}\fP \fI\fP" -+ONLY FOR DEBUGGING PURPOSES: -+.br -+override the version stored in the metadata. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLE -+Restores the XML formatted cache metadata on file -+.B metadata -+to logical volume /dev/vg/metadata for further processing by the -+respective device-mapper target: -+.sp -+.B cache_restore -i metadata -o /dev/vg/metadata -+ -+.SH DIAGNOSTICS -+.B cache_restore -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B cache_dump(8) -+.B cache_check(8) -+.B cache_repair(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen diff --git a/device-mapper-persistent-data-0.4.1-avoid-strip.patch b/device-mapper-persistent-data-0.4.1-avoid-strip.patch deleted file mode 100644 index f7babda..0000000 --- a/device-mapper-persistent-data-0.4.1-avoid-strip.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/Makefile.in 2014-11-12 18:46:30.282251378 +0100 -+++ b/Makefile.in 2014-11-12 18:46:56.108608255 +0100 -@@ -108,7 +108,7 @@ - vpath %.cc $(TOP_DIR) - - INSTALL_DIR = $(INSTALL) -m 755 -d --INSTALL_PROGRAM = $(INSTALL) -m 755 -s -+INSTALL_PROGRAM = $(INSTALL) -m 755 - INSTALL_DATA = $(INSTALL) -p -m 644 - - ifeq ("@TESTING@", "yes") diff --git a/device-mapper-persistent-data-0.4.1-bz1085620.patch b/device-mapper-persistent-data-0.4.1-bz1085620.patch deleted file mode 100644 index 6fa4163..0000000 --- a/device-mapper-persistent-data-0.4.1-bz1085620.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- thin-provisioning-tools-0.4.1/man8/thin_check.8.orig 2014-10-28 14:19:02.800420873 +0100 -+++ thin-provisioning-tools-0.4.1/man8/thin_check.8 2014-10-28 14:19:47.335924554 +0100 -@@ -25,6 +25,12 @@ - .IP "\fB\-V, \-\-version\fP" - Output version information and exit. - -+.IP "\fB\-\-clear\-needs\-check\-flag\fP" -+Clear the needs-check-flag in case the check of the thin pool metadata succeeded. -+If the metadata check failed, the flag is not cleared and a thin_repair run is -+needed to fix any issues. -+After thin_repair succeeded, you may run thin_check again. -+ - .IP "\fB\-\-super\-block\-only\fP" - Only check the superblock is present. - diff --git a/device-mapper-persistent-data-0.4.1-missing-man-pages.patch b/device-mapper-persistent-data-0.4.1-missing-man-pages.patch deleted file mode 100644 index ac2e687..0000000 --- a/device-mapper-persistent-data-0.4.1-missing-man-pages.patch +++ /dev/null @@ -1,116 +0,0 @@ ---- thin-provisioning-tools-0.4.1/man8/era_restore.8.orig 2014-10-28 14:24:43.356272471 +0100 -+++ thin-provisioning-tools-0.4.1/man8/era_restore.8 2014-10-28 14:28:56.358133852 +0100 -@@ -0,0 +1,63 @@ -+.TH ERA_RESTORE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+era_restore \- restore era metadata file to device or file -+ -+.SH SYNOPSIS -+.B era_restore -+.RB [ options ] -+.RB -i -+.I {device|file} -+.RB -o -+.I {device|file} -+ -+.SH DESCRIPTION -+.B era_restore -+restores binary era metadata created by the -+respective device-mapper target dumped into an XML formatted (see -+.BR era_dump(8) ) -+.I file -+, which optionally can be preprocessed before the restore to another -+.I device -+or -+.I file. -+If restored to a metadata -+.I device -+, the metadata can be processed by the device-mapper target. -+ -+.IP "\fB\-q, \-\-quiet\fP" -+Suppress output messages, return only exit code. -+ -+.IP "\fB\-i, \-\-input\fP \fI{device|file}\fP" -+Input file or device with metadata. -+ -+.IP "\fB\-o, \-\-output\fP \fI{device|file}\fP" -+Output file or device. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLE -+Restores the XML formatted era metadata on file -+.B metadata -+to logical volume /dev/vg/metadata for further processing by the -+respective device-mapper target: -+.sp -+.B era_restore -i metadata -o /dev/vg/metadata -+ -+.SH DIAGNOSTICS -+.B era_restore -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B era_check(8) -+.B era_dump(8) -+.B era_invaidate(8) -+.B era_restore(8) -+ -+.SH AUTHOR -+Joe Thornber -+.br -+Heinz Mauelshagen ---- thin-provisioning-tools-0.4.1/man8/cache_metadata_size.8.orig 2014-10-28 14:31:49.116087709 +0100 -+++ thin-provisioning-tools-0.4.1/man8/cache_metadata_size.8 2014-10-28 14:50:29.337238755 +0100 -@@ -0,0 +1,47 @@ -+.TH CACHE_METADATA_SIZE 8 "Thin Provisioning Tools" "Red Hat, Inc." \" -*- nroff -*- -+.SH NAME -+cache_metadata_size \- cache metadata device/file size calculator. -+ -+.SH SYNOPSIS -+.B cache_metadata_size -+.RB [ options ] -+ -+.SH DESCRIPTION -+.B cache_metadata_size -+calculates the size of the cache metadata based on the block size -+of the cache device and the cache block size. -+All relates to the size of the fast device (eg, SSD), rather -+than the whole cached (i.e. origin) device. -+ -+.IP "\fB\\-\-block\-size \fP -+Block size of cache in units of sectors. -+ -+.IP "\fB\\-\-device\-size \fP -+Device size of the cache device in units of sectors. -+ -+.IP "\fB\\-\-nr\-blocks \fP -+Capacity of the cache in number of blocks. -+ -+.IP "\fB\-h, \-\-help\fP" -+Print help and exit. -+ -+.IP "\fB\-V, \-\-version\fP" -+Output version information and exit. -+ -+.SH EXAMPLES -+Calculates the cache metadata device size for block size 256 sectors.and device size of 2GiB -+.sp -+.B cache_metadata_size --block-size 256 --device-size $((2*1024*1024)) -+ -+.SH DIAGNOSTICS -+.B cache_metadata_size -+returns an exit code of 0 for success or 1 for error. -+ -+.SH SEE ALSO -+.B cache_check(8) -+.B cache_dump(8) -+.B cache_repair(8) -+.B cache_restore(8) -+ -+.SH AUTHOR -+Heinz Mauelshagen diff --git a/device-mapper-persistent-data.spec b/device-mapper-persistent-data.spec index 32ec750..98e070e 100644 --- a/device-mapper-persistent-data.spec +++ b/device-mapper-persistent-data.spec @@ -1,20 +1,21 @@ # -# Copyright (C) 2011-2014 Red Hat, Inc +# Copyright (C) 2011-2015 Red Hat, Inc # Summary: Device-mapper Persistent Data Tools Name: device-mapper-persistent-data -Version: 0.4.1 -Release: 4%{?dist} +Version: 0.4.2 +Release: 1%{?dist} License: GPLv3+ Group: System Environment/Base URL: https://github.com/jthornber/thin-provisioning-tools -Source0: https://github.com/jthornber/thin-provisioning-tools/archive/thin-provisioning-tools-v%{version}.tar.bz2 +Source0: https://github.com/jthornber/thin-provisioning-tools/archive/thin-provisioning-tools-v%{version}.tar.gz # Source1: https://github.com/jthornber/thin-provisioning-tools/archive/v%{version}.tar.gz +Patch0: device-mapper-persistent-data-document-clear-needs-check-flag.patch +Patch1: device-mapper-persistent-data-add-era_restore-and-cache_metadata_size-man-pages.patch +Patch2: device-mapper-persistent-avoid-strip.patch + BuildRequires: autoconf, expat-devel, libaio-devel, libstdc++-devel, boost-devel Requires: expat -Patch0: device-mapper-persistent-data-0.4.1-bz1085620.patch -Patch1: device-mapper-persistent-data-0.4.1-missing-man-pages.patch -Patch2: device-mapper-persistent-data-0.4.1-avoid-strip.patch %description thin-provisioning-tools contains check,dump,restore,repair,rmap @@ -26,9 +27,9 @@ snapshot eras %prep %setup -q -n thin-provisioning-tools-%{version} -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 +%patch0 -p1 -b .clear_needs_check_flag +%patch1 -p1 -b .man_pages +%patch2 -p1 -b .avoid_strip echo %{version}-%{release} > VERSION %build @@ -51,11 +52,13 @@ make DESTDIR=%{buildroot} MANDIR=%{_mandir} install %{_mandir}/man8/era_dump.8.gz %{_mandir}/man8/era_invalidate.8.gz %{_mandir}/man8/thin_check.8.gz +%{_mandir}/man8/thin_delta.8.gz %{_mandir}/man8/thin_dump.8.gz %{_mandir}/man8/thin_metadata_size.8.gz %{_mandir}/man8/thin_restore.8.gz %{_mandir}/man8/thin_repair.8.gz %{_mandir}/man8/thin_rmap.8.gz +%{_mandir}/man8/thin_trim.8.gz %{_sbindir}/pdata_tools %{_sbindir}/cache_check %{_sbindir}/cache_dump @@ -67,23 +70,29 @@ make DESTDIR=%{buildroot} MANDIR=%{_mandir} install %{_sbindir}/era_restore %{_sbindir}/era_invalidate %{_sbindir}/thin_check +%{_sbindir}/thin_delta %{_sbindir}/thin_dump %{_sbindir}/thin_metadata_size %{_sbindir}/thin_restore %{_sbindir}/thin_repair %{_sbindir}/thin_rmap +%{_sbindir}/thin_trim %changelog +* Mon Jun 08 2015 Peter Rajnoha - 0.4.2-1 +- New thin_delta and thin_trim commands. +- Update to latest upstream release. + * Sat May 02 2015 Kalev Lember - 0.4.1-4 - Rebuilt for GCC 5 C++11 ABI change * Mon Jan 26 2015 Petr Machata - 0.4.1-3 - Rebuild for boost 1.57.0 -* Tue Oct 29 2014 Heinz Mauelshagen - 0.4.1-2 +* Wed Oct 29 2014 Heinz Mauelshagen - 0.4.1-2 - Resolves: bz#1159466 -* Tue Oct 29 2014 Heinz Mauelshagen - 0.4.1-1 +* Wed Oct 29 2014 Heinz Mauelshagen - 0.4.1-1 - New upstream version - Manual header additions/fixes @@ -124,7 +133,7 @@ make DESTDIR=%{buildroot} MANDIR=%{_mandir} install * Thu Jul 25 2013 Heinz Mauelshagen - 0.2.1-5 - enhance manual pages and fix typos -* Fri Jul 18 2013 Heinz Mauelshagen - 0.2.1-4 +* Thu Jul 18 2013 Heinz Mauelshagen - 0.2.1-4 - Update thin_metadata_size manual page - thin_dump: support dumping default metadata snapshot diff --git a/sources b/sources index e3c7ae7..5140f5a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a1d5ac4bd865360dff6ac20ec00573cc thin-provisioning-tools-v0.4.1.tar.bz2 +08f28c58471128b04745f8a080b12d03 thin-provisioning-tools-v0.4.2.tar.gz