Locks held by virtlockd are dropped on re-exec.

virtlockd       94306 POSIX 5.4G WRITE 0     0   0 /tmp/test.qcow2
virtlockd       94306 POSIX   5B WRITE 0     0   0 /run/virtlockd.pid
virtlockd       94306 POSIX   5B WRITE 0     0   0 /run/virtlockd.pid

Acquire locks in PostExecRestart code path.

Signed-off-by: Jim Fehlig <jfeh...@suse.com>
---

The CLOEXEC flag is set in virLockSpaceNewPostExecRestart(), so I assume
it is fine to call virFileLock() here as well.

 src/util/virlockspace.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c
index 41af0cdb6..420878b0a 100644
--- a/src/util/virlockspace.c
+++ b/src/util/virlockspace.c
@@ -337,6 +337,7 @@ virLockSpacePtr 
virLockSpaceNewPostExecRestart(virJSONValuePtr object)
         virJSONValuePtr owners;
         size_t j;
         ssize_t m;
+        bool shared = false;
 
         if (VIR_ALLOC(res) < 0)
             goto error;
@@ -389,6 +390,21 @@ virLockSpacePtr 
virLockSpaceNewPostExecRestart(virJSONValuePtr object)
             goto error;
         }
 
+        shared = !!(res->flags & VIR_LOCK_SPACE_ACQUIRE_SHARED);
+        if (virFileLock(res->fd, shared, 0, 1, false) < 0) {
+            if (errno == EACCES || errno == EAGAIN) {
+                virReportError(VIR_ERR_RESOURCE_BUSY,
+                               _("Lockspace resource '%s' is locked"),
+                               res->name);
+            } else {
+                virReportSystemError(errno,
+                                     _("Unable to acquire lock on '%s'"),
+                                     res->path);
+            }
+            virLockSpaceResourceFree(res);
+            goto error;
+        }
+
         if (!(owners = virJSONValueObjectGet(child, "owners"))) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Missing resource owners in JSON document"));
-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to