Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp2063628ybg; Thu, 24 Oct 2019 04:19:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqxKkCmFZ8U3/EyppXgBFESUQtlH5jVaxpbryNiMST0C+AK5Qc6OYn2vn1vXORuqKjl/W9go X-Received: by 2002:a05:6402:b17:: with SMTP id bm23mr42242354edb.6.1571915976649; Thu, 24 Oct 2019 04:19:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571915976; cv=none; d=google.com; s=arc-20160816; b=t07gNjvKCRQkc+FVqWF/mnFEwHjsFajUwI/wQcXOj8ySXgDkTsBOhheyn4RKe8qJgS rH/s7twcpEhg8ARJzKZDC8yB9gQMUwu40aRD9JQMgO6wHAVYjZMGAm+ESXq5M505t9OP WO4/ORYBkHAxulSELHsCH7yEbS02ZOuXlln/gZD25/bHkj3zGN+L4w8gubPJA9HhVDvc 2jIAU4quGzHJqEYC0FyREyU25gMSGSH0PrsR0O+c+gIxXqiXzGb92/WSXHWpIGQW5bod VJ7876xEW+gSv93f5Ar995jyoEMJKunn8TFpiuwQwHtVLyrV5glKIIbjXWAXlm9ognMM Vu1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=olm4CQgbydEa+kdleXZx9iLI87TOZqkiIArQy17NOzE=; b=Kc8a9Oq14zQBEPYn08wj66N+A/570damTL4SMoo60RIp7zMPW2ZUibXLkmjJf+NkQs kOaINORFFXGAWuuS/rWQ9fljp3v2JxzdnRuC++h2YaljSzv9/sGgn8HlOhnwHl5blJWD jiSkDwa6mrGgXvA1oQ9hbBTUCs9ZKMKS95tC5EUKkHPlvHSdUh6bIzVSyWXvRa17vq2J LVjjgJ4BjWRHYs8NQfRGQ2ybwiLpnP36/NKt88HX+KoQtXHm2daE4M1XdXbn+mLes/7i 91D//aVx+pX/7xmlpY82wLoPKjg3N94ADQhLL5wmd+QU356O0KfykXYkQmCRFUVVFZXi lvyQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n9si5706474ejc.244.2019.10.24.04.19.11; Thu, 24 Oct 2019 04:19:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2407226AbfJWQXT (ORCPT + 99 others); Wed, 23 Oct 2019 12:23:19 -0400 Received: from mx2.suse.de ([195.135.220.15]:44266 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2407111AbfJWQXS (ORCPT ); Wed, 23 Oct 2019 12:23:18 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A4BC9B4AA; Wed, 23 Oct 2019 16:23:15 +0000 (UTC) Date: Wed, 23 Oct 2019 18:23:13 +0200 From: Michal =?iso-8859-1?Q?Such=E1nek?= To: Hannes Reinecke Cc: linux-scsi@vger.kernel.org, Jonathan Corbet , Jens Axboe , "James E.J. Bottomley" , "Martin K. Petersen" , Alexander Viro , Mauro Carvalho Chehab , Eric Biggers , "J. Bruce Fields" , Benjamin Coddington , Hannes Reinecke , Omar Sandoval , Ming Lei , Damien Le Moal , Bart Van Assche , Tejun Heo , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v2 7/8] scsi: sr: workaround VMware ESXi cdrom emulation bug Message-ID: <20191023162313.GE938@kitsune.suse.cz> References: <08f1e291-0196-2402-1947-c0cdaaf534da@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <08f1e291-0196-2402-1947-c0cdaaf534da@suse.de> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 23, 2019 at 04:13:15PM +0200, Hannes Reinecke wrote: > On 10/23/19 2:52 PM, Michal Suchanek wrote: > > The WMware ESXi cdrom identifies itself as: > > sr 0:0:0:0: [sr0] scsi3-mmc drive: vendor: "NECVMWarVMware SATA CD001.00" > > model: "VMware SATA CD001.00" > > with the following get_capabilities print in sr.c: > > sr_printk(KERN_INFO, cd, > > "scsi3-mmc drive: vendor: \"%s\" model: \"%s\"\n", > > cd->device->vendor, cd->device->model); > > > > So the model looks like reliable identification while vendor does not. > > > > The drive claims to have a tray and claims to be able to close it. > > However, the UI has no notion of a tray - when medium is ejected it is > > dropped in the floor and the user must select a medium again before the > > drive can be re-loaded. On the kernel side the tray_move call to close > > the tray succeeds but the drive state does not change as a result of the > > call. > > > > The drive does not in fact emulate the tray state. There are two ways to > > get the medium state. One is the SCSI status: > > > > Physical drive: > > > > Fixed format, current; Sense key: Not Ready > > Additional sense: Medium not present - tray open > > Raw sense data (in hex): > > 70 00 02 00 00 00 00 0a 00 00 00 00 3a 02 00 00 > > 00 00 > > > > Fixed format, current; Sense key: Not Ready > > Additional sense: Medium not present - tray closed > > Raw sense data (in hex): > > 70 00 02 00 00 00 00 0a 00 00 00 00 3a 01 00 00 > > 00 00 > > > > VMware ESXi: > > > > Fixed format, current; Sense key: Not Ready > > Additional sense: Medium not present > > Info fld=0x0 [0] > > Raw sense data (in hex): > > f0 00 02 00 00 00 00 0a 00 00 00 00 3a 00 00 00 > > 00 00 > > > > So the tray state is not reported here. Other is medium status which the > > kernel prefers if available. Adding a print here gives: > > > > cdrom: get_media_event success: code = 0, door_open = 1, medium_present = 0 > > > > door_open is interpreted as open tray. This is fine so long as tray_move > > would close the tray when requested or report an error which never > > happens on VMware ESXi servers (5.5 and 6.5 tested). > > > > This is a popular virtualization platform so a workaround is worthwhile. > > > > Signed-off-by: Michal Suchanek > > --- > > drivers/scsi/sr.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c > > index 4664fdf75c0f..8090c5bdec09 100644 > > --- a/drivers/scsi/sr.c > > +++ b/drivers/scsi/sr.c > > @@ -867,6 +867,7 @@ static void get_capabilities(struct scsi_cd *cd) > > unsigned int ms_len = 128; > > int rc, n; > > > > + static const char *model_vmware = "VMware"; > > static const char *loadmech[] = > > { > > "caddy", > > @@ -922,6 +923,11 @@ static void get_capabilities(struct scsi_cd *cd) > > buffer[n + 4] & 0x20 ? "xa/form2 " : "", /* can read xa/from2 */ > > buffer[n + 5] & 0x01 ? "cdda " : "", /* can read audio data */ > > loadmech[buffer[n + 6] >> 5]); > > + if (!strncmp(cd->device->model, model_vmware, strlen(model_vmware))) { > > + buffer[n + 6] &= ~(0xff << 5); > > + sr_printk(KERN_INFO, cd, > > + "VMware ESXi bug workaround: tray -> caddy\n"); > > + } > > if ((buffer[n + 6] >> 5) == 0) > > /* caddy drives can't close tray... */ > > cd->cdi.mask |= CDC_CLOSE_TRAY; > > > This looks something which should be handled via a blacklist flag, not > some inline hack which everyone forgets about it... AFAIK we used to have a blacklist but don't have anymore. So either it has to be resurrected for this one flag or an inline hack should be good enough. Thanks Michal