From 79c4ecc0f398d4317a3713e0691df873a7d4b663 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 15 Mar 2012 10:25:26 +0000 Subject: [PATCH] New API: lvcreate-free: Create logical volume as % of free space. --- daemon/lvm.c | 30 ++++++++++++++++++++++++++++++ generator/generator_actions.ml | 18 ++++++++++++++++++ src/MAX_PROC_NR | 2 +- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/daemon/lvm.c b/daemon/lvm.c index 75197564d..b0148e48c 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -262,6 +262,36 @@ do_lvcreate (const char *logvol, const char *volgroup, int mbytes) return 0; } +int +do_lvcreate_free (const char *logvol, const char *volgroup, int percent) +{ + char *err; + int r; + + if (percent < 0 || percent > 100) { + reply_with_error ("percentage must be [0..100] (was %d)", percent); + return -1; + } + + char size[64]; + snprintf (size, sizeof size, "%d%%FREE", percent); + + r = command (NULL, &err, + "lvm", "lvcreate", + "-L", size, "-n", logvol, volgroup, NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (err); + return -1; + } + + free (err); + + udev_settle (); + + return 0; +} + int do_lvresize (const char *logvol, int mbytes) { diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index 4b4e5ffee..454f5758b 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -6762,6 +6762,24 @@ in the filesystem is freed. In future (but not currently) these zeroed blocks will be \"sparsified\" - that is, given back to the host."); + ("lvcreate_free", (RErr, [String "logvol"; String "volgroup"; Int "percent"], []), 312, [Optional "lvm2"], + [InitEmpty, Always, TestOutputList ( + [["part_disk"; "/dev/sda"; "mbr"]; + ["pvcreate"; "/dev/sda1"]; + ["vgcreate"; "VG"; "/dev/sda1"]; + ["lvcreate_free"; "LV1"; "VG"; "50"]; + ["lvcreate_free"; "LV2"; "VG"; "50"]; + ["lvcreate_free"; "LV3"; "VG"; "50"]; + ["lvcreate_free"; "LV4"; "VG"; "100"]; + ["lvs"]], + ["/dev/VG/LV1"; "/dev/VG/LV2"; "/dev/VG/LV3"; "/dev/VG/LV4"])], + "create an LVM logical volume in % remaining free space", + "\ +Create an LVM logical volume called C, +using approximately C % of the free space remaining +in the volume group. Most usefully, when C is C<100> +this will create the largest possible LV."); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index b661fff6c..a1e0432c9 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -311 +312