
On Thu, Apr 02, 2009 at 02:39:58PM -0400, Cole Robinson wrote:
Daniel P. Berrange wrote:
On Thu, Mar 26, 2009 at 05:55:00PM +0100, Daniel Veillard wrote:
So I agree with Dan, we need to drop st_blksize in any volume size computation, and fallback to 512 if not defined, apparently only src/storage_backend.c referenced it :-)
I still find the "It may differ on a file system basis" to be a bit frightening considering the sandard doesn't seems to indicate how to extract that information from the filesystem :-( , oh well ...
I guess if we come across a filesystem where it is not 512, then someone will have created an ioctl() or equivalent to let us find out the true value. Failing that, relying on 512 seems like a good plan.
Daniel
Okay, updated patch attached.
ACK, looks good to me.
commit 3f289f7c1ea04cb5d14bf125959ba41b13b64443 Author: Cole Robinson <crobinso@redhat.com> Date: Wed Apr 1 16:00:58 2009 -0400
Fix sparse volume allocation reporting.
diff --git a/src/storage_backend.c b/src/storage_backend.c index 71b8020..79c070c 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 @@ -64,6 +65,9 @@ #include "storage_backend_fs.h" #endif
+#ifndef DEV_BSIZE +#define DEV_BSIZE 512 +#endif
#define VIR_FROM_THIS VIR_FROM_STORAGE
@@ -211,7 +215,7 @@ virStorageBackendUpdateVolTargetInfoFD(virConnectPtr conn, if (S_ISREG(sb.st_mode)) { #ifndef __MINGW32__ *allocation = (unsigned long long)sb.st_blocks * - (unsigned long long)sb.st_blksize; + (unsigned long long)DEV_BSIZE; #else *allocation = sb.st_size; #endif
Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|