From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Ricardo Leitner Subject: Re: [patch iproute2 v4 2/3] tc: Add -bs option to batch mode Date: Tue, 2 Jan 2018 18:04:25 -0200 Message-ID: <20180102200425.GA725@localhost.localdomain> References: <20180102142804.27145-1-chrism@mellanox.com> <20180102142804.27145-3-chrism@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org, gerlitz.or@gmail.com, stephen@networkplumber.org, dsahern@gmail.com To: Chris Mi Return-path: Received: from mx1.redhat.com ([209.132.183.28]:45170 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750745AbeABUE3 (ORCPT ); Tue, 2 Jan 2018 15:04:29 -0500 Content-Disposition: inline In-Reply-To: <20180102142804.27145-3-chrism@mellanox.com> Sender: netdev-owner@vger.kernel.org List-ID: On Tue, Jan 02, 2018 at 11:28:03PM +0900, Chris Mi wrote: > @@ -240,23 +244,49 @@ static int batch(const char *name) > } > > cmdlineno = 0; > - while (getcmdline(&line, &len, stdin) != -1) { > + if (getcmdline(&line, &len, stdin) == -1) > + goto Exit; > + do { > char *largv[100]; > int largc; > > + if (getcmdline(&line2, &len, stdin) == -1) > + lastline = true; > + > largc = makeargs(line, largv, 100); > if (largc == 0) > continue; /* blank line */ If it reads a new line, it won't process anything else after it because line won't get updated. Marcelo > > - if (do_cmd(largc, largv)) { > - fprintf(stderr, "Command failed %s:%d\n", name, cmdlineno); > + line = line2; > + line2 = NULL; > + len = 0; > + > + /* > + * In batch mode, if we haven't accumulated enough commands > + * and this is not the last command, don't send the message > + * immediately. > + */ > + if (batch_size > 1 && msg_iov_index + 1 != batch_size > + && !lastline) > + send = false; > + else > + send = true; > + > + ret = do_cmd(largc, largv, batch_size, msg_iov_index++, send); > + if (ret < 0) { > + fprintf(stderr, "Command failed %s:%d\n", name, > + cmdlineno); > ret = 1; > if (!force) > break; > } > - } > - if (line) > - free(line); > + msg_iov_index %= batch_size; > + } while (!lastline); > + > + free_filter_reqs(); > + free_action_reqs(); > +Exit: > + free(line); > > rtnl_close(&rth); > return ret;