[libvirt] [PATCH 2/9] storage: Always assume we are tracking alloc progress in FS backend
Daniel P. Berrange
berrange at redhat.com
Tue Jul 14 10:59:35 UTC 2009
On Fri, Jul 10, 2009 at 04:46:59PM -0400, Cole Robinson wrote:
> We do support allocation progress now, so have the code accomodate.
> ---
> src/storage_backend_fs.c | 49 +++++++++++++++-------------------------------
> 1 files changed, 16 insertions(+), 33 deletions(-)
Do later patches have a dependancy on this ?
The allocation progress tracking you mention is actually WRT to
a 2nd thread calling virStorageVolGetInfo while the first thread
is doing the work. AFAIK, that would not be impacted by either
of these 2 code paths. The 'track_allocation_progress' variable
was a placeholder for the case where we do proper async non-blocking
vol creation from a single thread.
By switching this code to use the iterative allocation, it will
increase the number of ext4 extents required for large files
which is not so desirable. So I think its better to just leave
this code in as is, or remove the other code path.
Daniel
>
> diff --git a/src/storage_backend_fs.c b/src/storage_backend_fs.c
> index 64a7130..c7c1c9c 100644
> --- a/src/storage_backend_fs.c
> +++ b/src/storage_backend_fs.c
> @@ -72,8 +72,6 @@ typedef int (*createFile)(virConnectPtr conn,
> virStorageVolDefPtr vol,
> virStorageVolDefPtr inputvol);
>
> -static int track_allocation_progress = 0;
> -
> /* Either 'magic' or 'extension' *must* be provided */
> struct FileTypeInfo {
> int type; /* One of the constants above */
> @@ -1108,38 +1106,23 @@ static int createRaw(virConnectPtr conn,
>
> /* Pre-allocate any data if requested */
> /* XXX slooooooooooooooooow on non-extents-based file systems */
> - if (remain) {
> - if (track_allocation_progress) {
> -
> - while (remain) {
> - /* Allocate in chunks of 512MiB: big-enough chunk
> - * size and takes approx. 9s on ext3. A progress
> - * update every 9s is a fair-enough trade-off
> - */
> - unsigned long long bytes = 512 * 1024 * 1024;
> - int r;
> -
> - if (bytes > remain)
> - bytes = remain;
> - if ((r = safezero(fd, 0, vol->allocation - remain,
> - bytes)) != 0) {
> - virReportSystemError(conn, r,
> - _("cannot fill file '%s'"),
> - vol->target.path);
> - goto cleanup;
> - }
> - remain -= bytes;
> - }
> - } else { /* No progress bars to be shown */
> - int r;
> -
> - if ((r = safezero(fd, 0, 0, remain)) != 0) {
> - virReportSystemError(conn, r,
> - _("cannot fill file '%s'"),
> - vol->target.path);
> - goto cleanup;
> - }
> + while (remain) {
> + /* Allocate in chunks of 512MiB: big-enough chunk
> + * size and takes approx. 9s on ext3. A progress
> + * update every 9s is a fair-enough trade-off
> + */
> + unsigned long long bytes = 512 * 1024 * 1024;
> + int r;
> +
> + if (bytes > remain)
> + bytes = remain;
> + if ((r = safezero(fd, 0, vol->allocation - remain, bytes)) != 0) {
> + virReportSystemError(conn, r,
> + _("cannot fill file '%s'"),
> + vol->target.path);
> + goto cleanup;
> }
> + remain -= bytes;
> }
>
> if (close(fd) < 0) {
> --
> 1.6.0.6
>
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
--
|: 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 :|
More information about the libvir-list
mailing list