From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34463) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXxKX-0002B1-9N for qemu-devel@nongnu.org; Fri, 04 Sep 2015 16:11:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZXxKT-0005SA-CJ for qemu-devel@nongnu.org; Fri, 04 Sep 2015 16:11:25 -0400 From: Kevin Wolf Date: Fri, 4 Sep 2015 22:10:47 +0200 Message-Id: <1441397447-6516-17-git-send-email-kwolf@redhat.com> In-Reply-To: <1441397447-6516-1-git-send-email-kwolf@redhat.com> References: <1441397447-6516-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PULL 16/16] quorum: validate vote threshold against num_children even if read-pattern is fifo List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: kwolf@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com From: Wen Congyang We need to use threshold to check if too many write operation fails. If threshold is larger than num children, we always get write error event even if all write operations success. Signed-off-by: Wen Congyang Message-id: 55962F72.3060003@cn.fujitsu.com Reviewed-by: Alberto Garcia Reviewed-by: Max Reitz Signed-off-by: Max Reitz --- block/quorum.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/block/quorum.c b/block/quorum.c index 2f6c45f..8fe53b4 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -889,6 +889,12 @@ static int quorum_open(BlockDriverState *bs, QDict *options, int flags, } s->threshold = qemu_opt_get_number(opts, QUORUM_OPT_VOTE_THRESHOLD, 0); + /* and validate it against s->num_children */ + ret = quorum_valid_threshold(s->threshold, s->num_children, &local_err); + if (ret < 0) { + goto exit; + } + ret = parse_read_pattern(qemu_opt_get(opts, QUORUM_OPT_READ_PATTERN)); if (ret < 0) { error_setg(&local_err, "Please set read-pattern as fifo or quorum"); @@ -897,12 +903,6 @@ static int quorum_open(BlockDriverState *bs, QDict *options, int flags, s->read_pattern = ret; if (s->read_pattern == QUORUM_READ_PATTERN_QUORUM) { - /* and validate it against s->num_children */ - ret = quorum_valid_threshold(s->threshold, s->num_children, &local_err); - if (ret < 0) { - goto exit; - } - /* is the driver in blkverify mode */ if (qemu_opt_get_bool(opts, QUORUM_OPT_BLKVERIFY, false) && s->num_children == 2 && s->threshold == 2) { -- 1.8.3.1