mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
block/file-posix: do not fail on unlock bytes
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 <vsementsov@virtuozzo.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
38e694fcc9
commit
696aaaed57
@ -815,6 +815,18 @@ static int raw_handle_perm_lock(BlockDriverState *bs,
|
|||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case RAW_PL_PREPARE:
|
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,
|
ret = raw_apply_lock_bytes(s, s->fd, s->perm | new_perm,
|
||||||
~s->shared_perm | ~new_shared,
|
~s->shared_perm | ~new_shared,
|
||||||
false, errp);
|
false, errp);
|
||||||
|
Loading…
Reference in New Issue
Block a user