]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
storage: gluster: Optimize header reader functions
authorPeter Krempa <pkrempa@redhat.com>
Mon, 7 Jul 2014 09:52:58 +0000 (11:52 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 8 Jul 2014 09:36:18 +0000 (11:36 +0200)
The gluster code had two functions for reading volume headers, remove
one and reuse the second one.

src/storage/storage_backend_gluster.c

index 5ecc098c7aaded805fa5f7fe8e794fea33b4817d..76d2461cf1ca1dfb56f80df904399dbaa1c6b972 100644 (file)
@@ -651,9 +651,6 @@ virStorageFileBackendGlusterReadHeader(virStorageSourcePtr src,
 {
     virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
     glfs_fd_t *fd = NULL;
-    size_t alloc = 0;
-    size_t size = 0;
-    int save_errno;
     ssize_t ret = -1;
 
     *buf = NULL;
@@ -661,47 +658,11 @@ virStorageFileBackendGlusterReadHeader(virStorageSourcePtr src,
     if (!(fd = glfs_open(priv->vol, src->path, O_RDONLY))) {
         virReportSystemError(errno, _("Failed to open file '%s'"),
                              src->path);
-        goto cleanup;
-    }
-
-    /* code below is shamelessly stolen from saferead_lim */
-    for (;;) {
-        int count;
-        int requested;
-
-        if (size + BUFSIZ + 1 > alloc) {
-            alloc += alloc / 2;
-            if (alloc < size + BUFSIZ + 1)
-                alloc = size + BUFSIZ + 1;
-
-            if (VIR_REALLOC_N(*buf, alloc) < 0) {
-                save_errno = errno;
-                break;
-            }
-        }
-
-        /* Ensure that (size + requested <= max_len); */
-        requested = MIN(size < max_len ? max_len - size : 0,
-                        alloc - size - 1);
-        count = glfs_read(fd, *buf + size, requested, 0);
-        size += count;
-
-        if (count != requested || requested == 0) {
-            save_errno = errno;
-            if (count < 0) {
-                virReportSystemError(errno,
-                                     _("cannot read header '%s'"), src->path);
-                break;
-            }
-            ret = size;
-            goto cleanup;
-        }
+        return -1;
     }
 
-    VIR_FREE(*buf);
-    errno = save_errno;
+    ret = virStorageBackendGlusterReadHeader(fd, src->path, max_len, buf);
 
- cleanup:
     if (fd)
         glfs_close(fd);