From patchwork Fri Feb 8 13:06:14 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 219149 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2F6FB2C0089 for ; Sat, 9 Feb 2013 00:07:37 +1100 (EST) Received: from localhost ([::1]:52824 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3nfz-0003ey-7X for incoming@patchwork.ozlabs.org; Fri, 08 Feb 2013 08:07:35 -0500 Received: from eggs.gnu.org ([208.118.235.92]:44151) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3nfF-000290-3r for qemu-devel@nongnu.org; Fri, 08 Feb 2013 08:06:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U3nf6-0001PA-RC for qemu-devel@nongnu.org; Fri, 08 Feb 2013 08:06:48 -0500 Received: from mail-ve0-f170.google.com ([209.85.128.170]:34729) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3nf6-0001P5-My for qemu-devel@nongnu.org; Fri, 08 Feb 2013 08:06:40 -0500 Received: by mail-ve0-f170.google.com with SMTP id 14so3272219vea.15 for ; Fri, 08 Feb 2013 05:06:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=9eZbfBrSDEWzP56ncAXELMA3aLYP0ZmRjS9cA6gaKI8=; b=f164LqSwGl4uraqnnZscuL6hisAFVEE98lfXkJXvEG1wvaXnV/psLSAmgRZvTW7wQi AJ3Wn9mlxsko9k1MHqLdpS+Nr1dCLp2d5wncWGkUWJ9c+89ADfLwwT0KRu9yOPL0scS5 6NH0KQVH2CWiObOIT24oUFOFBlxmNelilNqkhD5CdyUpIgeihp5kHbn4/Jdi51zH4LQW MSMUnyFFg0KpjXDObbGvHywb7YAC6mngFigYJ6ADp+kiLjkNWtMwtgNSjB2iV0DPqTue TAk+dRmFvU0gk5OowkO2egbmMCD3+RizmD4TzSVEoBT4yDtmedYqvXpxg7WQ/anYHtGY v8OQ== X-Received: by 10.52.28.101 with SMTP id a5mr5614072vdh.92.1360328800316; Fri, 08 Feb 2013 05:06:40 -0800 (PST) Received: from yakj.usersys.redhat.com (93-34-179-137.ip50.fastwebnet.it. [93.34.179.137]) by mx.google.com with ESMTPS id ly6sm43292804veb.3.2013.02.08.05.06.38 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 08 Feb 2013 05:06:39 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 8 Feb 2013 14:06:14 +0100 Message-Id: <1360328775-13144-5-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1360328775-13144-1-git-send-email-pbonzini@redhat.com> References: <1360328775-13144-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.128.170 Cc: kwolf@redhat.com, stefanha@redhat.com Subject: [Qemu-devel] [PATCH 4/5] blockdev: enable discard by default X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Because discard is now a host parameter, we can always fake it as enabled in the guest. This is an extension of the current choice to ignore "not supported" errors from the host when discard_granularity is set to nonzero. The default granularity is set to the logical block size or 4k, whichever is largest, because cluster sizes below 4k are rarely used and 4K is a typical block size for files. Signed-off-by: Paolo Bonzini --- hw/block-common.h | 2 +- hw/ide/qdev.c | 5 ++++- hw/scsi-disk.c | 13 ++++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/hw/block-common.h b/hw/block-common.h index bb808f7..dd11532 100644 --- a/hw/block-common.h +++ b/hw/block-common.h @@ -50,7 +50,7 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf) DEFINE_PROP_UINT32("opt_io_size", _state, _conf.opt_io_size, 0), \ DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1), \ DEFINE_PROP_UINT32("discard_granularity", _state, \ - _conf.discard_granularity, 0) + _conf.discard_granularity, -1) #define DEFINE_BLOCK_CHS_PROPERTIES(_state, _conf) \ DEFINE_PROP_UINT32("cyls", _state, _conf.cyls, 0), \ diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c index c436b38..fd06da7 100644 --- a/hw/ide/qdev.c +++ b/hw/ide/qdev.c @@ -143,7 +143,10 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind) IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus); IDEState *s = bus->ifs + dev->unit; - if (dev->conf.discard_granularity && dev->conf.discard_granularity != 512) { + if (dev->conf.discard_granularity == -1) { + dev->conf.discard_granularity = 512; + } else if (dev->conf.discard_granularity && + dev->conf.discard_granularity != 512) { error_report("discard_granularity must be 512 for ide"); return -1; } diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 28e75bb..e11a5bb 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -41,9 +41,11 @@ do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while (0) #include #endif -#define SCSI_DMA_BUF_SIZE 131072 -#define SCSI_MAX_INQUIRY_LEN 256 -#define SCSI_MAX_MODE_LEN 256 +#define SCSI_DMA_BUF_SIZE 131072 +#define SCSI_MAX_INQUIRY_LEN 256 +#define SCSI_MAX_MODE_LEN 256 + +#define DEFAULT_DISCARD_GRANULARITY 4096 typedef struct SCSIDiskState SCSIDiskState; @@ -2059,6 +2061,11 @@ static int scsi_initfn(SCSIDevice *dev) return -1; } + if (s->qdev.conf.discard_granularity == -1) { + s->qdev.conf.discard_granularity = + MAX(s->qdev.conf.logical_block_size, DEFAULT_DISCARD_GRANULARITY); + } + if (!s->version) { s->version = g_strdup(qemu_get_version()); }