[libvirt] [PATCH 01/14] Avoid polluting logs when querying LVM/SCSI ID
Michal Privoznik
mprivozn at redhat.com
Wed Dec 12 18:14:24 UTC 2012
On 11.12.2012 21:41, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> When we invoke lvs or scsi_id to extract ID for block devices, we
> don't want virCommandWait logging errors messages. Thus we must
> explicitly check 'status != 0', rather than letting virCommandWait do
> it. Also move the check for converting from "" to NULL, after the
> cleanup label, since virCommandRun may set the key to "", even on
> failure --- src/util/storage_file.c | 22 ++++++++++++++++++---- 1
> file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/storage_file.c b/src/util/storage_file.c index
> 4417404..776d4f2 100644 --- a/src/util/storage_file.c +++
> b/src/util/storage_file.c @@ -1199,6 +1199,7 @@ const char
> *virStorageFileGetLVMKey(const char *path) *
> 06UgP5-2rhb-w3Bo-3mdR-WeoL-pytO-SAa2ky */ char *key = NULL; + int
> status; virCommandPtr cmd = virCommandNewArgList( LVS,
> "--noheadings", "--unbuffered", "--nosuffix", @@ -1208,7 +1209,13 @@
> const char *virStorageFileGetLVMKey(const char *path)
>
> /* Run the program and capture its output */
> virCommandSetOutputBuffer(cmd, &key); - if (virCommandRun(cmd,
> NULL) < 0) + if (virCommandRun(cmd, &status) < 0) + goto
> cleanup; + + /* Explicitly check, rather than passing NULL to
> virCommandRun + * because we don't want to pollute logs with an
> error message + */ + if (status != 0) goto cleanup;
>
> if (key) { @@ -1228,10 +1235,10 @@ const char
> *virStorageFileGetLVMKey(const char *path) *nl = '\0'; }
>
> +cleanup: if (key && STREQ(key, "")) VIR_FREE(key);
>
> -cleanup: virCommandFree(cmd);
>
> return key; @@ -1248,6 +1255,7 @@ const char
> *virStorageFileGetLVMKey(const char *path) const char
> *virStorageFileGetSCSIKey(const char *path) { char *key = NULL; +
> int status; virCommandPtr cmd = virCommandNewArgList(
> "/lib/udev/scsi_id", "--replace-whitespace", @@ -1258,9 +1266,16 @@
> const char *virStorageFileGetSCSIKey(const char *path)
>
> /* Run the program and capture its output */
> virCommandSetOutputBuffer(cmd, &key); - if (virCommandRun(cmd,
> NULL) < 0) + if (virCommandRun(cmd, &status) < 0) goto cleanup;
>
> + /* Explicitly check, rather than passing NULL to virCommandRun +
> * because we don't want to pollute logs with an error message +
> */ + if (status != 0) + goto cleanup; + +cleanup: if (key
> && STRNEQ(key, "")) { char *nl = strchr(key, '\n'); if (nl) @@
> -1269,7 +1284,6 @@ const char *virStorageFileGetSCSIKey(const char
> *path) VIR_FREE(key); }
>
> -cleanup: virCommandFree(cmd);
>
> return key;
>
I agree with Peter, I think you must return an error to be consistent
with !HAVE_UDEV version of these functions.
More information about the libvir-list
mailing list