From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60729) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uv4kd-0007sI-GU for qemu-devel@nongnu.org; Fri, 05 Jul 2013 08:04:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uv4kY-0008Fq-8z for qemu-devel@nongnu.org; Fri, 05 Jul 2013 08:04:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49938) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uv4kX-0008Fj-VT for qemu-devel@nongnu.org; Fri, 05 Jul 2013 08:04:30 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r65C4TtI008789 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 5 Jul 2013 08:04:29 -0400 From: Kevin Wolf Date: Fri, 5 Jul 2013 14:03:51 +0200 Message-Id: <1373025833-22859-2-git-send-email-kwolf@redhat.com> In-Reply-To: <1373025833-22859-1-git-send-email-kwolf@redhat.com> References: <1373025833-22859-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 1/3] block: Add return value for bdrv_flush_all() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, stefanha@redhat.com, quintela@redhat.com bdrv_flush() can fail, and bdrv_flush_all() should return an error as well if this happens for a block device. It returns the first error return now, but still at least tries to flush the remaining devices even in error cases. Signed-off-by: Kevin Wolf --- block.c | 10 ++++++++-- include/block/block.h | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/block.c b/block.c index 6c493ad..6abdd99 100644 --- a/block.c +++ b/block.c @@ -2902,13 +2902,19 @@ int bdrv_get_flags(BlockDriverState *bs) return bs->open_flags; } -void bdrv_flush_all(void) +int bdrv_flush_all(void) { BlockDriverState *bs; + int result = 0; QTAILQ_FOREACH(bs, &bdrv_states, list) { - bdrv_flush(bs); + int ret = bdrv_flush(bs); + if (ret < 0 && !result) { + result = ret; + } } + + return result; } int bdrv_has_zero_init_1(BlockDriverState *bs) diff --git a/include/block/block.h b/include/block/block.h index dd8eca1..31c1bbc 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -266,7 +266,7 @@ void bdrv_clear_incoming_migration_all(void); /* Ensure contents are flushed to disk. */ int bdrv_flush(BlockDriverState *bs); int coroutine_fn bdrv_co_flush(BlockDriverState *bs); -void bdrv_flush_all(void); +int bdrv_flush_all(void); void bdrv_close_all(void); void bdrv_drain_all(void); -- 1.8.1.4