From f23814e0cdd25a9acfad4825d2c04343f4e8a1b2 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Fri, 10 Jul 2009 14:04:27 -0400 Subject: [PATCH] storage: Don't try sparse detection if writing to block device. We don't gain any space savings, so skip the detection to speed up the cloning operation. --- src/storage_backend.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/storage_backend.c b/src/storage_backend.c index bc47bf17a4..166480498b 100644 --- a/src/storage_backend.c +++ b/src/storage_backend.c @@ -108,7 +108,8 @@ virStorageBackendCopyToFD(virConnectPtr conn, virStorageVolDefPtr vol, virStorageVolDefPtr inputvol, int fd, - unsigned long long *total) + unsigned long long *total, + int is_dest_file) { int inputfd = -1; int amtread = -1; @@ -157,7 +158,7 @@ virStorageBackendCopyToFD(virConnectPtr conn, int interval = ((512 > amtleft) ? amtleft : 512); int offset = amtread - amtleft; - if (memcmp(buf+offset, zerobuf, interval) == 0) { + if (is_dest_file && memcmp(buf+offset, zerobuf, interval) == 0) { if (lseek(fd, interval, SEEK_CUR) < 0) { virReportSystemError(conn, errno, _("cannot extend file '%s'"), @@ -212,7 +213,8 @@ virStorageBackendCreateBlockFrom(virConnectPtr conn, remain = vol->allocation; if (inputvol) { - int res = virStorageBackendCopyToFD(conn, vol, inputvol, fd, &remain); + int res = virStorageBackendCopyToFD(conn, vol, inputvol, + fd, &remain, 0); if (res < 0) goto cleanup; } @@ -264,7 +266,8 @@ virStorageBackendCreateRaw(virConnectPtr conn, remain = vol->allocation; if (inputvol) { - int res = virStorageBackendCopyToFD(conn, vol, inputvol, fd, &remain); + int res = virStorageBackendCopyToFD(conn, vol, inputvol, + fd, &remain, 1); if (res < 0) goto cleanup; } -- GitLab