From c41d7755c350b2d707de35aeeb1f68c9417d76f8 Mon Sep 17 00:00:00 2001 From: Max Carrara Date: Thu, 19 Dec 2024 11:43:12 +0100 Subject: [PATCH] common: introduce common module This module's purpose is to provide shared functions, constants, etc. for storage plugins and storage-related operations. It starts out with a align_size_up() function, that will (initially) be used for volume import. [FE: start out with a different function for my use case fixup Makefile] Originally-by: Max Carrara Signed-off-by: Fiona Ebner --- src/PVE/Storage/Common.pm | 54 +++++++++++++++++++++++++++++++++ src/PVE/Storage/Common/Makefile | 6 ++++ src/PVE/Storage/Makefile | 2 ++ 3 files changed, 62 insertions(+) create mode 100644 src/PVE/Storage/Common.pm create mode 100644 src/PVE/Storage/Common/Makefile diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm new file mode 100644 index 0000000..3ae20dd --- /dev/null +++ b/src/PVE/Storage/Common.pm @@ -0,0 +1,54 @@ +package PVE::Storage::Common; + +use strict; +use warnings; + +=pod + +=head1 NAME + +PVE::Storage::Common - Shared functions and utilities for storage plugins and storage operations + +=head1 DESCRIPTION + +This module contains common subroutines that are mainly to be used by storage +plugins. This module's submodules contain subroutines that are tailored towards +a more specific or related purpose. + +Functions concerned with storage-related C things, helpers +for the C API can be found in this module. Functions that can't +be grouped in a submodule can also be found here. + +=head1 SUBMODULES + +=over + +=back + +=head1 FUNCTIONS + +=cut + +=pod + +=head3 align_size_up + + $aligned_size = align_size_up($size, $granularity) + +Returns the next size bigger than or equal to C<$size> that is aligned with a +granularity of C<$granularity>. Prints a message if the aligned size is not +equal to the aligned size. + +=cut + +sub align_size_up : prototype($$) { + my ($size, $granularity) = @_; + + my $padding = ($granularity - $size % $granularity) % $granularity; + my $aligned_size = $size + $padding; + print "size $size is not aligned to granularity $granularity, rounding up to $aligned_size\n" + if $aligned_size != $size; + return $aligned_size; +} + +1; diff --git a/src/PVE/Storage/Common/Makefile b/src/PVE/Storage/Common/Makefile new file mode 100644 index 0000000..0c4bba5 --- /dev/null +++ b/src/PVE/Storage/Common/Makefile @@ -0,0 +1,6 @@ +SOURCES = \ + + +.PHONY: install +install: + for i in ${SOURCES}; do install -D -m 0644 $$i ${DESTDIR}${PERLDIR}/PVE/Storage/Common/$$i; done diff --git a/src/PVE/Storage/Makefile b/src/PVE/Storage/Makefile index d5cc942..ce3fd68 100644 --- a/src/PVE/Storage/Makefile +++ b/src/PVE/Storage/Makefile @@ -1,4 +1,5 @@ SOURCES= \ + Common.pm \ Plugin.pm \ DirPlugin.pm \ LVMPlugin.pm \ @@ -18,5 +19,6 @@ SOURCES= \ .PHONY: install install: + make -C Common install for i in ${SOURCES}; do install -D -m 0644 $$i ${DESTDIR}${PERLDIR}/PVE/Storage/$$i; done make -C LunCmd install