From nobody Sun May 5 18:37:06 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1553691420239543.3376689047876; Wed, 27 Mar 2019 05:57:00 -0700 (PDT) Received: from localhost ([127.0.0.1]:47369 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h986q-0003Xf-24 for importer@patchew.org; Wed, 27 Mar 2019 08:56:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h97ze-0005MV-OX for qemu-devel@nongnu.org; Wed, 27 Mar 2019 08:49:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h97zd-0006f6-Ng for qemu-devel@nongnu.org; Wed, 27 Mar 2019 08:49:22 -0400 Received: from relay.sw.ru ([185.231.240.75]:34386) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h97zd-0006eT-Et; Wed, 27 Mar 2019 08:49:21 -0400 Received: from [10.28.8.145] (helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.91) (envelope-from ) id 1h97zY-0000KU-Ik; Wed, 27 Mar 2019 15:49:16 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Wed, 27 Mar 2019 15:49:15 +0300 Message-Id: <20190327124915.22265-1-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.18.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH] block/file-posix: ignore fail on unlock bytes X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, den@openvz.org, vsementsov@virtuozzo.com, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 ignore such errors, as we do already on permission update commit and abort. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Fam Zheng Reviewed-by: John Snow --- block/file-posix.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/block/file-posix.c b/block/file-posix.c index db4cccbe51..403e67fe90 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -815,6 +815,20 @@ static int raw_handle_perm_lock(BlockDriverState *bs, =20 switch (op) { case RAW_PL_PREPARE: + if ((s->perm | new_perm) =3D=3D s->perm && + (~s->shared_perm | ~new_perm) =3D=3D ~s->shared_perm) + { + /* + * We are going to unlock bytes, it should not fail. If fail, + * just report it and ignore, like we do for ABORT and COMMIT + * anyway. + */ + ret =3D raw_check_lock_bytes(s->fd, new_perm, new_shared, &loc= al_err); + if (local_err) { + error_report_err(local_err); + } + return 0; + } ret =3D raw_apply_lock_bytes(s, s->fd, s->perm | new_perm, ~s->shared_perm | ~new_shared, false, errp); --=20 2.18.0