argc = count_strings (physvols) + 3;
argv = malloc (sizeof (char *) * (argc + 1));
+ if (argv == NULL) {
+ reply_with_perror ("malloc");
+ return -1;
+ }
argv[0] = "/sbin/lvm";
argv[1] = "vgcreate";
argv[2] = volgroup;
return 0;
}
+int
+do_lvresize (const char *logvol, int mbytes)
+{
+ char *err;
+ int r;
+ char size[64];
+
+ IS_DEVICE (logvol, -1);
+
+ snprintf (size, sizeof size, "%d", mbytes);
+
+ r = command (NULL, &err,
+ "/sbin/lvm", "lvresize",
+ "-L", size, logvol, NULL);
+ if (r == -1) {
+ reply_with_error ("lvresize: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
/* Super-dangerous command used for testing. It removes all
* LVs, VGs and PVs permanently.
*/
free (err);
return 0;
}
+
+int
+do_pvresize (const char *device)
+{
+ char *err;
+ int r;
+
+ r = command (NULL, &err,
+ "/sbin/lvm", "pvresize", device, NULL);
+ if (r == -1) {
+ reply_with_error ("pvresize: %s: %s", device, err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_vg_activate (int activate, char * const* const volgroups)
+{
+ char *err;
+ int r, i, argc;
+ const char **argv;
+
+ argc = count_strings (volgroups) + 4;
+ argv = malloc (sizeof (char *) * (argc+1));
+ if (argv == NULL) {
+ reply_with_perror ("malloc");
+ return -1;
+ }
+
+ argv[0] = "/sbin/lvm";
+ argv[1] = "vgchange";
+ argv[2] = "-a";
+ argv[3] = activate ? "y" : "n";
+ for (i = 4; i <= argc; ++i)
+ argv[i] = volgroups[i-4];
+
+ r = commandv (NULL, &err, argv);
+ if (r == -1) {
+ reply_with_error ("vgchange: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_vg_activate_all (int activate)
+{
+ char *empty[] = { NULL };
+ return do_vg_activate (activate, empty);
+}