Increase buffer size for create_regular_tmpfile_linkable_with_content
authorSeppo Yli-Olli <seppo.yliolli@gmail.com>
Tue, 14 Mar 2023 19:25:08 +0000 (21:25 +0200)
committerSeppo Yli-Olli <seppo.yliolli@gmail.com>
Wed, 15 Mar 2023 10:04:02 +0000 (12:04 +0200)
The small buffer size results in really bad performance under any
FUSE-based filesystems with round-trips.

src/libostree/ostree-repo-commit.c

index 7f668b7da0603253464591d30060ffe0cc784348..4acc1e7f1b4cc4e6274abc28848741dfa6ff0bf0 100644 (file)
@@ -678,12 +678,13 @@ create_regular_tmpfile_linkable_with_content (OstreeRepo *self,
        *    e.g. 10 bytes but is actually gigabytes.
        *  - Due to GLib bugs that pointlessly calls `poll()` on the output fd for every write
        */
-      char buf[8192];
+      gsize buf_size = MIN(length, 1048576);
+      g_autofree gchar * buf = g_malloc(buf_size);
       guint64 remaining = length;
       while (remaining > 0)
         {
           const gssize bytes_read =
-            g_input_stream_read (input, buf, MIN (remaining, sizeof (buf)), cancellable, error);
+            g_input_stream_read (input, buf, MIN (remaining, buf_size), cancellable, error);
           if (bytes_read < 0)
             return FALSE;
           else if (bytes_read == 0)