typedef enum {
VIR_STORAGE_PARTED_ERROR = -1,
- VIR_STORAGE_PARTED_FOUND, /* Valid label found */
+ VIR_STORAGE_PARTED_MATCH, /* Valid label found and matches format */
+ VIR_STORAGE_PARTED_DIFFERENT, /* Valid label found but not match format */
VIR_STORAGE_PARTED_UNKNOWN, /* No or unrecognized label */
VIR_STORAGE_PARTED_NOPTTYPE, /* Did not find the Partition Table type */
VIR_STORAGE_PARTED_PTTYPE_UNK, /* Partition Table type unknown*/
* returns virStorageBackendPARTEDResult
*/
static virStorageBackendPARTEDResult
-virStorageBackendPARTEDFindLabel(const char *device)
+virStorageBackendPARTEDFindLabel(const char *device,
+ const char *format)
{
const char *const args[] = {
device, "print", "--script", NULL,
goto cleanup;
}
- ret = VIR_STORAGE_PARTED_FOUND;
+ /* Does the on disk match what the pool desired? */
+ if (STREQ(start, format))
+ ret = VIR_STORAGE_PARTED_MATCH;
+
+ ret = VIR_STORAGE_PARTED_DIFFERENT;
cleanup:
virCommandFree(cmd);
*/
static int
virStorageBackendPARTEDValidLabel(const char *device,
+ const char *format,
bool writelabel)
{
int ret = -1;
virStorageBackendPARTEDResult check;
- check = virStorageBackendPARTEDFindLabel(device);
+ check = virStorageBackendPARTEDFindLabel(device, format);
switch (check) {
case VIR_STORAGE_PARTED_ERROR:
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
"disk partition information"));
break;
- case VIR_STORAGE_PARTED_FOUND:
+ case VIR_STORAGE_PARTED_MATCH:
if (writelabel)
- virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("Valid disk label already present, "
- "requires --overwrite"));
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("Disk label already formatted using '%s'"),
+ format);
else
ret = 0;
break;
+ case VIR_STORAGE_PARTED_DIFFERENT:
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Known, but different label format present, "
+ "requires build --overwrite"));
+ break;
+
case VIR_STORAGE_PARTED_UNKNOWN:
if (writelabel)
ret = 0;
if ((ret = virStorageBackendBLKIDFindEmpty(devpath, format,
writelabel)) == -2)
- ret = virStorageBackendPARTEDValidLabel(devpath, writelabel);
+ ret = virStorageBackendPARTEDValidLabel(devpath, format, writelabel);
return ret == 0;
}