[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[libvirt] [PATCH] Fix sparse volume allocation reporting
- From: Cole Robinson <crobinso redhat com>
- To: Libvirt <libvir-list redhat com>
- Subject: [libvirt] [PATCH] Fix sparse volume allocation reporting
- Date: Tue, 24 Mar 2009 15:29:21 -0400
I have a sparse volume with a capacity of 1000M, and an allocation of a
little over 750M. 'du' prints the correct sizes, but 'virsh vol-dumpxml'
shows:
<capacity>1048576000</capacity>
<allocation>6406307840</allocation>
This is because we were calculating the allocation size using the
requested fs block size, instead of what stat actually uses as a block
size (DEV_BSIZE in sys/params.h). sys/params.h looks to be present in
mingw32-runtime, so I didn't add a configure check for it.
The attached patch fixes allocation listing for me.
Thanks,
Cole
diff --git a/src/storage_backend.c b/src/storage_backend.c
index 787630c..54e9289 100644
--- a/src/storage_backend.c
+++ b/src/storage_backend.c
@@ -36,6 +36,7 @@
#include <fcntl.h>
#include <stdint.h>
#include <sys/stat.h>
+#include <sys/param.h>
#include <dirent.h>
#if HAVE_SELINUX
@@ -204,8 +205,15 @@ virStorageBackendUpdateVolTargetInfoFD(virConnectPtr conn,
if (allocation) {
if (S_ISREG(sb.st_mode)) {
#ifndef __MINGW32__
- *allocation = (unsigned long long)sb.st_blocks *
- (unsigned long long)sb.st_blksize;
+
+ unsigned long long blksize;
+#ifdef DEV_BSIZE
+ blksize = (unsigned long long) DEV_BSIZE;
+#else
+ blksize = (unsigned long long)sb.st_blksize;
+#endif
+ *allocation = (unsigned long long)sb.st_blocks * blksize;
+
#else
*allocation = sb.st_size;
#endif
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]