[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 5/9] block/file-posix: do not fail on unlock bytes
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 5/9] block/file-posix: do not fail on unlock bytes |
Date: |
Tue, 2 Apr 2019 14:49:03 +0200 |
From: Vladimir Sementsov-Ogievskiy <address@hidden>
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 <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/file-posix.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/block/file-posix.c b/block/file-posix.c
index db4cccbe51..1cf4ee49eb 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -815,6 +815,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);
--
2.20.1
- [Qemu-block] [PULL 0/9] Block layer patches, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 1/9] iotests: Fix test 200 on s390x without virtio-pci, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 2/9] qemu-img: Enable BDRV_REQ_MAY_UNMAP in convert, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 5/9] block/file-posix: do not fail on unlock bytes,
Kevin Wolf <=
- [Qemu-block] [PULL 3/9] block/gluster: limit the transfer size to 512 MiB, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 6/9] block: continue until base is found in bdrv_freeze_backing_chain() et al, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 8/9] block: test block-stream with a base node that is used by block-commit, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 7/9] block: freeze the backing chain earlier in stream_start(), Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 4/9] tests/qemu-iotests: Remove redundant COPYING file, Kevin Wolf, 2019/04/02
- [Qemu-block] [PULL 9/9] tests/qemu-iotests/235: Allow fallback to tcg, Kevin Wolf, 2019/04/02
- Re: [Qemu-block] [PULL 0/9] Block layer patches, Peter Maydell, 2019/04/02