public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Fiona Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu] fix #4710: vma create: don't use O_DIRECT for tmpfs
Date: Tue, 12 Sep 2023 13:55:01 +0200	[thread overview]
Message-ID: <20230912115501.149923-1-f.ebner@proxmox.com> (raw)

The implementation of the helper is_path_tmpfs() is similar to the
existing (in upstream) qemu_fd_getfs() function in util/mmap-alloc.c,
which unfortunately only takes an existing fd.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 ...VE-Backup-add-vma-backup-format-code.patch | 37 ++++++++++++++++---
 1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
index 857d22d..d5fa0ba 100644
--- a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
+++ b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
@@ -16,10 +16,10 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  block/meson.build |   2 +
  meson.build       |   5 +
  vma-reader.c      | 867 ++++++++++++++++++++++++++++++++++++++++++++
- vma-writer.c      | 793 ++++++++++++++++++++++++++++++++++++++++
+ vma-writer.c      | 818 +++++++++++++++++++++++++++++++++++++++++
  vma.c             | 900 ++++++++++++++++++++++++++++++++++++++++++++++
  vma.h             | 150 ++++++++
- 6 files changed, 2717 insertions(+)
+ 6 files changed, 2742 insertions(+)
  create mode 100644 vma-reader.c
  create mode 100644 vma-writer.c
  create mode 100644 vma.c
@@ -936,10 +936,10 @@ index 0000000000..81a891c6b1
 +
 diff --git a/vma-writer.c b/vma-writer.c
 new file mode 100644
-index 0000000000..ac7da237d0
+index 0000000000..5caf80b9f5
 --- /dev/null
 +++ b/vma-writer.c
-@@ -0,0 +1,793 @@
+@@ -0,0 +1,818 @@
 +/*
 + * VMA: Virtual Machine Archive
 + *
@@ -955,6 +955,8 @@ index 0000000000..ac7da237d0
 +
 +#include "qemu/osdep.h"
 +#include <glib.h>
++#include <linux/magic.h>
++#include <sys/vfs.h>
 +#include <uuid/uuid.h>
 +
 +#include "vma.h"
@@ -963,6 +965,7 @@ index 0000000000..ac7da237d0
 +#include "qemu/main-loop.h"
 +#include "qemu/coroutine.h"
 +#include "qemu/cutils.h"
++#include "qemu/error-report.h"
 +#include "qemu/memalign.h"
 +
 +#define DEBUG_VMA 0
@@ -1198,6 +1201,23 @@ index 0000000000..ac7da237d0
 +    return (done == bytes) ? bytes : -1;
 +}
 +
++static bool is_path_tmpfs(const char *path) {
++    struct statfs fs;
++    int ret;
++
++    do {
++        ret = statfs(path, &fs);
++    } while (ret != 0 && errno == EINTR);
++
++    if (ret != 0) {
++        warn_report("statfs call for %s failed, assuming not tmpfs - %s\n",
++                    path, strerror(errno));
++        return false;
++    }
++
++    return fs.f_type == TMPFS_MAGIC;
++}
++
 +VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, Error **errp)
 +{
 +    const char *p;
@@ -1247,8 +1267,13 @@ index 0000000000..ac7da237d0
 +            }
 +            /* try to use O_NONBLOCK */
 +            fcntl(vmaw->fd, F_SETFL, fcntl(vmaw->fd, F_GETFL)|O_NONBLOCK);
-+        } else  {
-+            oflags = O_NONBLOCK|O_DIRECT|O_WRONLY|O_EXCL;
++        } else {
++            gchar *dirname = g_path_get_dirname(filename);
++            oflags = O_NONBLOCK|O_WRONLY|O_EXCL;
++            if (!is_path_tmpfs(dirname)) {
++                oflags |= O_DIRECT;
++            }
++            g_free(dirname);
 +            vmaw->fd = qemu_create(filename, oflags, 0644, errp);
 +        }
 +
-- 
2.39.2





             reply	other threads:[~2023-09-12 11:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-12 11:55 Fiona Ebner [this message]
2023-11-07 14:23 ` Fiona Ebner
2023-11-07 14:26   ` Fiona Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230912115501.149923-1-f.ebner@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal