We don't gain any space savings, so skip the detection to speed up the cloning operation. --- src/storage_backend.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/storage_backend.c b/src/storage_backend.c index 37c227f..b5e4ac7 100644 --- a/src/storage_backend.c +++ b/src/storage_backend.c @@ -106,7 +106,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; @@ -155,7 +156,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'"), @@ -210,7 +211,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; } @@ -262,7 +264,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; } -- 1.6.0.6 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list