From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51898) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAufB-0005tw-3y for qemu-devel@nongnu.org; Fri, 03 Jul 2015 02:41:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZAuf7-0003Oi-UY for qemu-devel@nongnu.org; Fri, 03 Jul 2015 02:41:29 -0400 Received: from [59.151.112.132] (port=62234 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAuf7-0003Nm-7z for qemu-devel@nongnu.org; Fri, 03 Jul 2015 02:41:25 -0400 Message-ID: <55962F72.3060003@cn.fujitsu.com> Date: Fri, 3 Jul 2015 14:45:06 +0800 From: Wen Congyang MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] 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-devl , Alberto Garcia Cc: Stefan Hajnoczi 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 --- block/quorum.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/block/quorum.c b/block/quorum.c index a7df17c..b0eead0 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -894,6 +894,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"); @@ -902,12 +908,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) { -- 2.4.3