From patchwork Tue Jul 24 11:04:10 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 172881 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 95EFC2C008A for ; Tue, 24 Jul 2012 22:47:44 +1000 (EST) Received: from localhost ([::1]:41973 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Stcws-0008SO-VG for incoming@patchwork.ozlabs.org; Tue, 24 Jul 2012 07:06:42 -0400 Received: from eggs.gnu.org ([208.118.235.92]:56935) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StcwY-000865-RV for qemu-devel@nongnu.org; Tue, 24 Jul 2012 07:06:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1StcwO-0005r8-TN for qemu-devel@nongnu.org; Tue, 24 Jul 2012 07:06:22 -0400 Received: from mail-gh0-f173.google.com ([209.85.160.173]:59147) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StcwO-0005Rh-Nc for qemu-devel@nongnu.org; Tue, 24 Jul 2012 07:06:12 -0400 Received: by mail-gh0-f173.google.com with SMTP id r14so6581704ghr.4 for ; Tue, 24 Jul 2012 04:06:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=0wmqBQLTQYMA3XusfK0NMcaRasOb9bmEw9DhBK7l/2I=; b=qS6jnmAii2/ecH1l+LfrgelkkzkzkXpIfzhtmHll10eekcCGI6v2sH7R8a1PGXqCXT cdpzm6wbOdPitcArZMcOQ+x3AznyBObZ8Y8kHAU4hFWR9avJg7kyDvOQGCWRuFS0MkHX +H+pW8pbMpnbiSqvZFIzSi9GpV+BQel02r82PRAGXYDxk9tPolLpYg5UIkFipXnYXyFk Zt29uwDfILd//4Pii2mnyOpS42Q1OElZXCymqdVHZrEYkNi3L8ObwpO5GdxFuV7hHaIZ /Wfjwv8cOQKLSED41eW9w7RGzRP9aYluDKrQB/aNOrJLfqq1CSjxIK4nTJLVlE+vA/OW +OzQ== Received: by 10.42.165.68 with SMTP id j4mr3414364icy.24.1343127972368; Tue, 24 Jul 2012 04:06:12 -0700 (PDT) Received: from yakj.usersys.redhat.com (93-34-189-113.ip51.fastwebnet.it. [93.34.189.113]) by mx.google.com with ESMTPS id if4sm1752561igc.10.2012.07.24.04.06.09 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jul 2012 04:06:11 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 24 Jul 2012 13:04:10 +0200 Message-Id: <1343127865-16608-33-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1343127865-16608-1-git-send-email-pbonzini@redhat.com> References: <1343127865-16608-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.160.173 Cc: kwolf@redhat.com, jcody@redhat.com, eblake@redhat.com, stefanha@linux.vnet.ibm.com Subject: [Qemu-devel] [PATCH 32/47] block: forward bdrv_iostatus_reset to block job 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 This will be needed for mirroring, where the source and target have different iostatuses. The source iostatus is reported normally in "query-block", while the target iostatus is accessible via "query-block-jobs". Signed-off-by: Paolo Bonzini --- block.c | 3 +++ blockjob.c | 7 +++++++ blockjob.h | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/block.c b/block.c index 81c2bc5..65d9bed 100644 --- a/block.c +++ b/block.c @@ -3931,6 +3931,9 @@ void bdrv_iostatus_reset(BlockDriverState *bs) { if (bdrv_iostatus_is_enabled(bs)) { bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK; + if (bs->job) { + block_job_iostatus_reset(bs->job); + } } } diff --git a/blockjob.c b/blockjob.c index 42485bf..1770a02 100644 --- a/blockjob.c +++ b/blockjob.c @@ -139,6 +139,13 @@ bool block_job_is_cancelled(BlockJob *job) return job->cancelled; } +void block_job_iostatus_reset(BlockJob *job) +{ + if (job->job_type->iostatus_reset) { + job->job_type->iostatus_reset(job); + } +} + struct BlockCancelData { BlockJob *job; BlockDriverCompletionFunc *cb; diff --git a/blockjob.h b/blockjob.h index 0d29fdf..a1fae9d 100644 --- a/blockjob.h +++ b/blockjob.h @@ -42,6 +42,9 @@ typedef struct BlockJobType { /** Optional callback for job types that support setting a speed limit */ void (*set_speed)(BlockJob *job, int64_t speed, Error **errp); + /** Optional callback for job types that need to forward I/O status reset */ + void (*iostatus_reset)(BlockJob *job); + /** * Optional callback for job types that can fill the target member * of BlockJobInfo. @@ -257,6 +260,15 @@ bool block_job_is_paused(BlockJob *job); int block_job_cancel_sync(BlockJob *job); /** + * block_job_iostatus_reset: + * @job: The job whose I/O status should be reset. + * + * Reset I/O status on BlockDriverState objects used by @job, other + * than job->bs. + */ +void block_job_iostatus_reset(BlockJob *job); + +/** * block_job_error_action: * @job: The job to signal an error for. * @bs: The block device on which to set an I/O error.