From nobody Mon Feb 9 17:36:19 2026 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) 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=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1513790279329617.1576037194213; Wed, 20 Dec 2017 09:17:59 -0800 (PST) Received: from localhost ([::1]:60334 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eRi08-0005gd-Nt for importer@patchew.org; Wed, 20 Dec 2017 12:17:52 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56047) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eRhxy-0004FU-P8 for qemu-devel@nongnu.org; Wed, 20 Dec 2017 12:15:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eRhxx-0006yQ-OF for qemu-devel@nongnu.org; Wed, 20 Dec 2017 12:15:38 -0500 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:40523) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eRhxx-0006xh-Dj; Wed, 20 Dec 2017 12:15:37 -0500 Received: by mail-wr0-x244.google.com with SMTP id q9so22924736wre.7; Wed, 20 Dec 2017 09:15:37 -0800 (PST) Received: from 640k.lan (dynamic-adsl-78-12-251-125.clienti.tiscali.it. [78.12.251.125]) by smtp.gmail.com with ESMTPSA id f125sm2751101wme.45.2017.12.20.09.15.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Dec 2017 09:15:35 -0800 (PST) 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=ua6laq8wqloPHGxZ79mgaXiK6imCsz6ecREUuSmQghk=; b=RRZ2Mqz7/DUIGLHYyS+I0fuOaE1Pjpe90m8HZnHw7M/mvRBT72A6rgOCmFTWK+xIzE 5p7HMyLxWRsd7CoHIXltMXXtIqBO97dlZKPfAEo3vMzC5/0iZ8riBQQdAcVRxnFqzSR+ xrma/CyWI4a2EytiakSBw6K/Lm+S9j1Xzd9KnLqJtf73QsVpBF5kxSxm6uL4bGxsODnh I00WBLHYf3krL32wM6el9H6S0XmyfpriYMCCvf7hnEcl7bBcQzxbVCNl1SA8Rtxv8LsF 6ut0b/8eemH+giB/LuClhPf9eOZPmxdcuZbdEf5GTj4ioLZkoAV39bA1XfqWF13Am+eT u30g== 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=ua6laq8wqloPHGxZ79mgaXiK6imCsz6ecREUuSmQghk=; b=OSv09+l8nNpSHeGWSspf6doxzQ/xWU01lUFGHSvshLZnEjbaj+PYF2UBPfxM88gfjm Ybd6jkAzWNEfsA+noVaD8eJFg4XGpYrd1jdnOGpCKkzvW5ZqgTg3bDRlcSIa9AdhUbym BGqzaiwdPBSltie9qjiiN8AX5gzMl4XoekQe50Jx8fDr45nWzca3vjX2BqEUIchg9ffR Rx/kjncZm6RtQmAdIMUFzqc7AF8gZ5wYyJhMtHnl0XqWdZjT0737zOneAf+qxvMMTOOf 4aTHZFe7aijS+4431tqoTaDCXUTRzNfzGu5SSafNk0g2oMuyW0ty2dZIV8jXNLvTbAEo RqDg== X-Gm-Message-State: AKGB3mJSdXX/X9WXapLE0/Zb6N+t2lI215PE4Pqp1rFDw/Ji+X4u7ChL C4YrEPBrVc4JhOrNG61LVkDA6DgX X-Google-Smtp-Source: ACJfBosG3SzXmOOR28+cirMSPvAey/37oril9VVeT51JsWvV4ZWOQITOzELy90VuAiULrk+MxVu+2Q== X-Received: by 10.223.152.178 with SMTP id w47mr9753598wrb.254.1513790135973; Wed, 20 Dec 2017 09:15:35 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Wed, 20 Dec 2017 18:14:15 +0100 Message-Id: <1513790098-9815-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1513790098-9815-1-git-send-email-pbonzini@redhat.com> References: <1513790098-9815-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::244 Subject: [Qemu-devel] [PULL 03/46] qemu-pr-helper: miscellaneous fixes 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: qemu-stable@nongnu.org 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_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 1) Return a generic sense if TEST UNIT READY does not provide one; 2) Fix two mistakes in copying from the spec. Cc: qemu-stable@nongnu.org Reported-by: Dr. David Alan Gilbert Signed-off-by: Paolo Bonzini --- include/scsi/utils.h | 6 +++++- scsi/qemu-pr-helper.c | 30 ++++++++++++++++++++++++++---- scsi/utils.c | 10 ++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/include/scsi/utils.h b/include/scsi/utils.h index 00a4bdb..eb07e47 100644 --- a/include/scsi/utils.h +++ b/include/scsi/utils.h @@ -76,7 +76,11 @@ extern const struct SCSISense sense_code_LUN_FAILURE; extern const struct SCSISense sense_code_LUN_COMM_FAILURE; /* Command aborted, Overlapped Commands Attempted */ extern const struct SCSISense sense_code_OVERLAPPED_COMMANDS; -/* LUN not ready, Capacity data has changed */ +/* Medium error, Unrecovered read error */ +extern const struct SCSISense sense_code_READ_ERROR; +/* LUN not ready, Cause not reportable */ +extern const struct SCSISense sense_code_NOT_READY; +/* Unit attention, Capacity data has changed */ extern const struct SCSISense sense_code_CAPACITY_CHANGED; /* Unit attention, SCSI bus reset */ extern const struct SCSISense sense_code_SCSI_BUS_RESET; diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c index dd97851..9fe615c 100644 --- a/scsi/qemu-pr-helper.c +++ b/scsi/qemu-pr-helper.c @@ -314,6 +314,22 @@ static int is_mpath(int fd) return !strncmp(tgt->target_type, "multipath", DM_MAX_TYPE_NAME); } =20 +static SCSISense mpath_generic_sense(int r) +{ + switch (r) { + case MPATH_PR_SENSE_NOT_READY: + return SENSE_CODE(NOT_READY); + case MPATH_PR_SENSE_MEDIUM_ERROR: + return SENSE_CODE(READ_ERROR); + case MPATH_PR_SENSE_HARDWARE_ERROR: + return SENSE_CODE(TARGET_FAILURE); + case MPATH_PR_SENSE_ABORTED_COMMAND: + return SENSE_CODE(IO_ERROR); + default: + abort(); + } +} + static int mpath_reconstruct_sense(int fd, int r, uint8_t *sense) { switch (r) { @@ -329,7 +345,13 @@ static int mpath_reconstruct_sense(int fd, int r, uint= 8_t *sense) */ uint8_t cdb[6] =3D { TEST_UNIT_READY }; int sz =3D 0; - return do_sgio(fd, cdb, sense, NULL, &sz, SG_DXFER_NONE); + int r =3D do_sgio(fd, cdb, sense, NULL, &sz, SG_DXFER_NONE); + + if (r !=3D GOOD) { + return r; + } + scsi_build_sense(sense, mpath_generic_sense(r)); + return CHECK_CONDITION; } =20 case MPATH_PR_SENSE_UNIT_ATTENTION: @@ -449,7 +471,7 @@ static int multipath_pr_out(int fd, const uint8_t *cdb,= uint8_t *sense, memset(¶mp, 0, sizeof(paramp)); memcpy(¶mp.key, ¶m[0], 8); memcpy(¶mp.sa_key, ¶m[8], 8); - paramp.sa_flags =3D param[10]; + paramp.sa_flags =3D param[20]; if (sz > PR_OUT_FIXED_PARAM_SIZE) { size_t transportid_len; int i, j; @@ -478,8 +500,8 @@ static int multipath_pr_out(int fd, const uint8_t *cdb,= uint8_t *sense, j +=3D offsetof(struct transportid, n_port_name[8]); i +=3D 24; break; - case 3: - case 0x43: + case 5: + case 0x45: /* iSCSI transport. */ len =3D lduw_be_p(¶m[i + 2]); if (len > 252 || (len & 3) || i + len + 4 > transportid_le= n) { diff --git a/scsi/utils.c b/scsi/utils.c index 5684951..e4182a9 100644 --- a/scsi/utils.c +++ b/scsi/utils.c @@ -211,6 +211,16 @@ const struct SCSISense sense_code_LUN_COMM_FAILURE =3D= { .key =3D ABORTED_COMMAND, .asc =3D 0x08, .ascq =3D 0x00 }; =20 +/* Medium Error, Unrecovered read error */ +const struct SCSISense sense_code_READ_ERROR =3D { + .key =3D MEDIUM_ERROR, .asc =3D 0x11, .ascq =3D 0x00 +}; + +/* Not ready, Cause not reportable */ +const struct SCSISense sense_code_NOT_READY =3D { + .key =3D NOT_READY, .asc =3D 0x04, .ascq =3D 0x00 +}; + /* Unit attention, Capacity data has changed */ const struct SCSISense sense_code_CAPACITY_CHANGED =3D { .key =3D UNIT_ATTENTION, .asc =3D 0x2a, .ascq =3D 0x09 --=20 1.8.3.1