X-Git-Url: https://git.proxmox.com/?p=pve-qemu.git;a=blobdiff_plain;f=debian%2Fpatches%2Fpve%2F0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch;fp=debian%2Fpatches%2Fpve%2F0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch;h=0000000000000000000000000000000000000000;hp=99299d38d7cf46c4d4fa242e31bd38aec0235173;hb=5b15e2ecaf054107200a49c7d2509053fb91c9fe;hpb=2775b2e3788bfed64345046ce6a669bcdf28eb43 diff --git a/debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch b/debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch deleted file mode 100644 index 99299d3..0000000 --- a/debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Wolfgang Bumiller -Date: Mon, 6 Apr 2020 12:16:50 +0200 -Subject: [PATCH] PVE: [Up+Config] file-posix: make locking optiono on create - -Otherwise creating images on nfs/cifs can be problematic. - -Signed-off-by: Wolfgang Bumiller -Signed-off-by: Thomas Lamprecht ---- - block/file-posix.c | 59 ++++++++++++++++++++++++++++++-------------- - qapi/block-core.json | 3 ++- - 2 files changed, 42 insertions(+), 20 deletions(-) - -diff --git a/block/file-posix.c b/block/file-posix.c -index e5bf5d59bf..b013668dce 100644 ---- a/block/file-posix.c -+++ b/block/file-posix.c -@@ -2461,6 +2461,7 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp) - int fd; - uint64_t perm, shared; - int result = 0; -+ bool locked = false; - - /* Validate options and set default values */ - assert(options->driver == BLOCKDEV_DRIVER_FILE); -@@ -2501,19 +2502,22 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp) - perm = BLK_PERM_WRITE | BLK_PERM_RESIZE; - shared = BLK_PERM_ALL & ~BLK_PERM_RESIZE; - -- /* Step one: Take locks */ -- result = raw_apply_lock_bytes(NULL, fd, perm, ~shared, false, errp); -- if (result < 0) { -- goto out_close; -- } -+ if (file_opts->locking != ON_OFF_AUTO_OFF) { -+ /* Step one: Take locks */ -+ result = raw_apply_lock_bytes(NULL, fd, perm, ~shared, false, errp); -+ if (result < 0) { -+ goto out_close; -+ } -+ locked = true; - -- /* Step two: Check that nobody else has taken conflicting locks */ -- result = raw_check_lock_bytes(fd, perm, shared, errp); -- if (result < 0) { -- error_append_hint(errp, -- "Is another process using the image [%s]?\n", -- file_opts->filename); -- goto out_unlock; -+ /* Step two: Check that nobody else has taken conflicting locks */ -+ result = raw_check_lock_bytes(fd, perm, shared, errp); -+ if (result < 0) { -+ error_append_hint(errp, -+ "Is another process using the image [%s]?\n", -+ file_opts->filename); -+ goto out_unlock; -+ } - } - - /* Clear the file by truncating it to 0 */ -@@ -2567,13 +2571,15 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp) - } - - out_unlock: -- raw_apply_lock_bytes(NULL, fd, 0, 0, true, &local_err); -- if (local_err) { -- /* The above call should not fail, and if it does, that does -- * not mean the whole creation operation has failed. So -- * report it the user for their convenience, but do not report -- * it to the caller. */ -- warn_report_err(local_err); -+ if (locked) { -+ raw_apply_lock_bytes(NULL, fd, 0, 0, true, &local_err); -+ if (local_err) { -+ /* The above call should not fail, and if it does, that does -+ * not mean the whole creation operation has failed. So -+ * report it the user for their convenience, but do not report -+ * it to the caller. */ -+ warn_report_err(local_err); -+ } - } - - out_close: -@@ -2598,6 +2604,7 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv, - PreallocMode prealloc; - char *buf = NULL; - Error *local_err = NULL; -+ OnOffAuto locking; - - /* Skip file: protocol prefix */ - strstart(filename, "file:", &filename); -@@ -2620,6 +2627,18 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv, - return -EINVAL; - } - -+ locking = qapi_enum_parse(&OnOffAuto_lookup, -+ qemu_opt_get(opts, "locking"), -+ ON_OFF_AUTO_AUTO, &local_err); -+ if (local_err) { -+ error_propagate(errp, local_err); -+ return -EINVAL; -+ } -+ -+ if (locking == ON_OFF_AUTO_AUTO) { -+ locking = ON_OFF_AUTO_OFF; -+ } -+ - options = (BlockdevCreateOptions) { - .driver = BLOCKDEV_DRIVER_FILE, - .u.file = { -@@ -2631,6 +2650,8 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv, - .nocow = nocow, - .has_extent_size_hint = has_extent_size_hint, - .extent_size_hint = extent_size_hint, -+ .has_locking = true, -+ .locking = locking, - }, - }; - return raw_co_create(&options, errp); -diff --git a/qapi/block-core.json b/qapi/block-core.json -index fb25c2b245..564b6b43f7 100644 ---- a/qapi/block-core.json -+++ b/qapi/block-core.json -@@ -4484,7 +4484,8 @@ - 'size': 'size', - '*preallocation': 'PreallocMode', - '*nocow': 'bool', -- '*extent-size-hint': 'size'} } -+ '*extent-size-hint': 'size', -+ '*locking': 'OnOffAuto' } } - - ## - # @BlockdevCreateOptionsGluster: