From 87240c5fcfb3e3ba68c5c87d2175f2dd98921a7e Mon Sep 17 00:00:00 2001 From: Max Reitz Date: Wed, 3 Apr 2019 17:13:15 +0100 Subject: [PATCH 08/11] block/file-posix: do not fail on unlock bytes RH-Author: Max Reitz Message-id: <20190403171315.20841-9-mreitz@redhat.com> Patchwork-id: 85406 O-Subject: [RHEL-8.1 qemu-kvm PATCH 8/8] block/file-posix: do not fail on unlock bytes Bugzilla: 1694148 RH-Acked-by: John Snow RH-Acked-by: Stefan Hajnoczi RH-Acked-by: Stefano Garzarella From: Vladimir Sementsov-Ogievskiy bdrv_replace_child() calls bdrv_check_perm() with error_abort on loosening permissions. However file-locking operations may fail even in this case, for example on NFS. And this leads to Qemu crash. Let's avoid such errors. Note, that we ignore such things anyway on permission update commit and abort. Signed-off-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Kevin Wolf (cherry picked from commit 696aaaed579ac5bf5fa336216909b46d3d8f07a8) Signed-off-by: Max Reitz Signed-off-by: Danilo C. L. de Paula --- block/file-posix.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/block/file-posix.c b/block/file-posix.c index deecf58..5fb5a9a 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -800,6 +800,18 @@ static int raw_handle_perm_lock(BlockDriverState *bs, switch (op) { case RAW_PL_PREPARE: + if ((s->perm | new_perm) == s->perm && + (s->shared_perm & new_shared) == s->shared_perm) + { + /* + * We are going to unlock bytes, it should not fail. If it fail due + * to some fs-dependent permission-unrelated reasons (which occurs + * sometimes on NFS and leads to abort in bdrv_replace_child) we + * can't prevent such errors by any check here. And we ignore them + * anyway in ABORT and COMMIT. + */ + return 0; + } ret = raw_apply_lock_bytes(s, s->fd, s->perm | new_perm, ~s->shared_perm | ~new_shared, false, errp); -- 1.8.3.1