[libvirt] [PATCH] storage: Refresh pool after creating volume

Daniel P. Berrange berrange at redhat.com
Thu Jun 6 10:13:02 UTC 2013


On Thu, Jun 06, 2013 at 11:19:18AM +0200, Guido Günther wrote:
> On Mon, Jun 03, 2013 at 11:47:10PM +0800, Osier Yang wrote:
> > On 01/06/13 16:05, Martin Kletzander wrote:
> > >commit 416247880399f88ec382a16c7cebc5460d6b67ad
> > >Author: Martin Kletzander <mkletzan at redhat.com>
> > >Date:   Fri May 31 14:25:48 2013 +0200
> > >
> > >     test
> > >
> > >diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> > >index 1a85afc..a119fc4 100644
> > >--- a/src/storage/storage_backend_fs.c
> > >+++ b/src/storage/storage_backend_fs.c
> > >@@ -1,7 +1,7 @@
> > >  /*
> > >   * storage_backend_fs.c: storage backend for FS and directory handling
> > >   *
> > >- * Copyright (C) 2007-2012 Red Hat, Inc.
> > >+ * Copyright (C) 2007-2013 Red Hat, Inc.
> > >   * Copyright (C) 2007-2008 Daniel P. Berrange
> > >   *
> > >   * This library is free software; you can redistribute it and/or
> > >@@ -797,6 +797,27 @@ error:
> > >  }
> > >
> > >
> > >+static int
> > >+virStorageBackendStatVFS(virStoragePoolDefPtr def)
> > >+{
> > >+    struct statvfs sb;
> > >+
> > >+    if (statvfs(def->target.path, &sb) < 0) {
> > >+        virReportSystemError(errno,
> > >+                             _("cannot statvfs path '%s'"),
> > >+                             def->target.path);
> > >+        return -1;
> > >+    }
> > >+    def->capacity = ((unsigned long long)sb.f_frsize *
> > >+                           (unsigned long long)sb.f_blocks);
> > >+    def->available = ((unsigned long long)sb.f_bfree *
> > >+                            (unsigned long long)sb.f_frsize);
> > >+    def->allocation = def->capacity - def->available;
> > >+
> > >+    return 0;
> > >+}
> > >+
> > 
> > Though this is only for fs backend,  I could see your thought (only
> > refresh the
> > pool's capacity, available, and allocation, without collecting the
> > volumes), right?
> > This makes sense for fs backend indeed, but not for some of the other
> > backends, for instance, scsi backend pool, it populates the pool's capacity,
> > available, allocation while scanning the LUNs...
> 
> This would also mean that we do heaps of pool refreshes when creating
> lots of volumes which can be an expensive operation. Shouldn't we rather
> only update the information from the information we have from the newly
> created volume?

Yeah, when creating a volume, we certainly shouldn't do a full pool
refresh. We want to update the pool from the metadata that we already
have about the volume we're creating.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list