From nobody Tue Nov 4 15:28:03 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15300278995411010.8522476197853; Tue, 26 Jun 2018 08:44:59 -0700 (PDT) Received: from localhost ([::1]:53495 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fXq9K-0002yd-O3 for importer@patchew.org; Tue, 26 Jun 2018 11:44:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34357) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fXq5A-0008Qe-7g for qemu-devel@nongnu.org; Tue, 26 Jun 2018 11:40:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fXq59-0005g1-3i for qemu-devel@nongnu.org; Tue, 26 Jun 2018 11:40:40 -0400 Received: from mail-wr0-x231.google.com ([2a00:1450:400c:c0c::231]:42318) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fXq58-0005fi-Sp for qemu-devel@nongnu.org; Tue, 26 Jun 2018 11:40:39 -0400 Received: by mail-wr0-x231.google.com with SMTP id p1-v6so2144900wrs.9 for ; Tue, 26 Jun 2018 08:40:38 -0700 (PDT) Received: from donizetti.lan ([82.84.124.111]) by smtp.gmail.com with ESMTPSA id y129-v6sm2308490wmy.4.2018.06.26.08.40.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Jun 2018 08:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Rdq2ZWzUUibrViMPIPeu4P/dV3V6oKeCkCyS1NxEGH4=; b=ClNvB26yvpKl5tRhHHSg+0Qv5ZFhBS7aTOQAtu6riCNUO/Sx3TGh6liXZxaFnzsm13 V+ZWDsrkBmZbtY7k8wcVUA/yA2SU5V80hEqocXHGMnhR1Tp3Q3wz0U8u7ed6tX6eFmBE V4Dsfh3htb9cKyrpCiyEsvnBs5VGZ2KnnylIlmxK6W/8ngmc26QJWqEEMOuN2U1NRIwE qs4wovjrGzM+GUW9LkaVbOujdXeKPT3gcATYZyTI6hfLLB8bh3QkWiDyTHM8a7eDnF2h RyWfS9fUrvljW/Kl8nTRar34n1eDMAr323iGZwuVcxEKY98bS9zl/xRXSnbnniMFNRHe dCTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Rdq2ZWzUUibrViMPIPeu4P/dV3V6oKeCkCyS1NxEGH4=; b=kQ3CxckV55vqh48ZB13xv2YItzSkYbWTXJ+8snb4tLbBy+uz5qujaHEqV3aeozdfCU ipauDVIIngK3Wez1e5BUPC+TQBznSJhy/g1Bcm+6mw++KwICkXpUq0f3iB04tk7oDGif ilVDfit7S+wtkSJSEJ6FU4Gxw+FiKrlb2/IgyoX47lPQzhuDX0oCJ0lGj6d1QTMIGv5E kHt/5mYU6fTVltOR+pOPj7aOXUr0gOXepMAvfubpAIz54F3H3C54DMYY8EdbfLIo50+F o0XizEYLaEGa36jLiLvVJZFBYY2WcaHJx97FkkWlLkqtMrLYL3CWoYP23IlbD/K3EhzC +gww== X-Gm-Message-State: APt69E0xG3T53peqQ70c/aqtCeeZLeM5BrsKxyBl4lrkhP2UNG5h+brN YCCo4w+DVW1Rr4b62yEKwqxIi4FT X-Google-Smtp-Source: AAOMgpfRQ1o1Kv/ga5/GJxf55TUWrXNcW+pzGcLcnxkCWIhI3BqUHPxZXYFrXACkbXe3rjQvpr29sA== X-Received: by 2002:adf:e94a:: with SMTP id m10-v6mr1980155wrn.126.1530027637530; Tue, 26 Jun 2018 08:40:37 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 26 Jun 2018 17:40:28 +0200 Message-Id: <20180626154028.11133-6-pbonzini@redhat.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180626154028.11133-1-pbonzini@redhat.com> References: <20180626154028.11133-1-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::231 Subject: [Qemu-devel] [PATCH 5/5] pr-manager-helper: report event on connection/disconnection 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: mprivozn@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Let management know if there were any problems communicating with qemu-pr-helper. The event is edge-triggered, and is sent every time the connection status of the pr-manager-helper object changes. Signed-off-by: Paolo Bonzini --- qapi/block.json | 24 ++++++++++++++++++++++++ scsi/pr-manager-helper.c | 25 +++++++++++++++++++------ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/qapi/block.json b/qapi/block.json index dc3323c954..1882a8d107 100644 --- a/qapi/block.json +++ b/qapi/block.json @@ -334,6 +334,30 @@ { 'event': 'DEVICE_TRAY_MOVED', 'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } } =20 +## +# @PR_MANAGER_STATUS_CHANGED: +# +# Emitted whenever the connected status of a persistent reservation +# manager changes. +# +# @id: The QOM path of the PR manager object +# +# @connected: true if the PR manager is connected to a backend +# +# Since: 2.12 +# +# Example: +# +# <- { "event": "PR_MANAGER_STATUS_CHANGED", +# "data": { "id": "/object/pr-helper0", +# "connected": true +# }, +# "timestamp": { "seconds": 1519840375, "microseconds": 450486 } } +# +## +{ 'event': 'PR_MANAGER_STATUS_CHANGED', + 'data': { 'id': 'str', 'connected': 'bool' } } + ## # @QuorumOpType: # diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c index b11481be9e..6643caf4cf 100644 --- a/scsi/pr-manager-helper.c +++ b/scsi/pr-manager-helper.c @@ -17,6 +17,7 @@ #include "io/channel.h" #include "io/channel-socket.h" #include "pr-helper.h" +#include "qapi/qapi-events-block.h" =20 #include =20 @@ -33,6 +34,7 @@ typedef struct PRManagerHelper { PRManager parent; =20 char *path; + char *qom_path; =20 QemuMutex lock; QIOChannel *ioc; @@ -127,6 +129,8 @@ static int pr_manager_helper_initialize(PRManagerHelper= *pr_mgr, goto out_close; } =20 + qapi_event_send_pr_manager_status_changed(pr_mgr->qom_path, true, + &error_abort); return 0; =20 out_close: @@ -142,9 +146,11 @@ static int pr_manager_helper_run(PRManager *p, =20 uint32_t len; PRHelperResponse resp; + int sense_len; int ret; int expected_dir; int attempts; + bool was_connected =3D pr_mgr->ioc !=3D NULL; uint8_t cdb[PR_HELPER_CDB_SIZE] =3D { 0 }; =20 if (!io_hdr->cmd_len || io_hdr->cmd_len > PR_HELPER_CDB_SIZE) { @@ -222,15 +228,19 @@ static int pr_manager_helper_run(PRManager *p, io_hdr->sb_len_wr =3D MIN(io_hdr->mx_sb_len, PR_HELPER_SENSE_SIZE); memcpy(io_hdr->sbp, resp.sense, io_hdr->sb_len_wr); } + qemu_mutex_unlock(&pr_mgr->lock); + return ret; =20 out: - if (ret < 0) { - int sense_len =3D scsi_build_sense(io_hdr->sbp, - SENSE_CODE(LUN_COMM_FAILURE)); - io_hdr->driver_status =3D SG_ERR_DRIVER_SENSE; - io_hdr->sb_len_wr =3D MIN(io_hdr->mx_sb_len, sense_len); - io_hdr->status =3D CHECK_CONDITION; + if (was_connected) { + qapi_event_send_pr_manager_status_changed(pr_mgr->qom_path, false, + &error_abort); } + + sense_len =3D scsi_build_sense(io_hdr->sbp, SENSE_CODE(LUN_COMM_FAILUR= E)); + io_hdr->driver_status =3D SG_ERR_DRIVER_SENSE; + io_hdr->sb_len_wr =3D MIN(io_hdr->mx_sb_len, sense_len); + io_hdr->status =3D CHECK_CONDITION; qemu_mutex_unlock(&pr_mgr->lock); return ret; } @@ -251,6 +261,8 @@ static void pr_manager_helper_complete(UserCreatable *u= c, Error **errp) { PRManagerHelper *pr_mgr =3D PR_MANAGER_HELPER(uc); =20 + pr_mgr->qom_path =3D object_get_canonical_path(OBJECT(pr_mgr)); + qemu_mutex_lock(&pr_mgr->lock); pr_manager_helper_initialize(pr_mgr, errp); qemu_mutex_unlock(&pr_mgr->lock); @@ -276,6 +288,7 @@ static void pr_manager_helper_instance_finalize(Object = *obj) PRManagerHelper *pr_mgr =3D PR_MANAGER_HELPER(obj); =20 object_unref(OBJECT(pr_mgr->ioc)); + g_free(pr_mgr->qom_path); qemu_mutex_destroy(&pr_mgr->lock); } =20 --=20 2.17.1