From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiri Pirko Subject: Re: [patch net-next 3/5] net: sched: introduce block mechanism to handle netif_keep_dst calls Date: Sat, 4 Nov 2017 10:55:31 +0100 Message-ID: <20171104095531.GG2024@nanopsycho> References: <20171103171912.26681-1-jiri@resnulli.us> <20171103171912.26681-4-jiri@resnulli.us> <59FCCE7A.4090003@iogearbox.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org, davem@davemloft.net, nogahf@mellanox.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, mlxsw@mellanox.com, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, f.fainelli@gmail.com, michael.chan@broadcom.com, ganeshgr@chelsio.com, saeedm@mellanox.com, matanb@mellanox.com, leonro@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, simon.horman@netronome.com, pieter.jansenvanvuuren@netronome.com, john.hurley@netronome.com, alexander.h.duyck@intel.com, ogerlitz@mellanox.com, john.fastabend@gmail.com To: Daniel Borkmann Return-path: Received: from mail-wr0-f196.google.com ([209.85.128.196]:51729 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756518AbdKDJzd (ORCPT ); Sat, 4 Nov 2017 05:55:33 -0400 Received: by mail-wr0-f196.google.com with SMTP id j15so4448947wre.8 for ; Sat, 04 Nov 2017 02:55:33 -0700 (PDT) Content-Disposition: inline In-Reply-To: <59FCCE7A.4090003@iogearbox.net> Sender: netdev-owner@vger.kernel.org List-ID: Fri, Nov 03, 2017 at 09:15:54PM CET, daniel@iogearbox.net wrote: >On 11/03/2017 06:19 PM, Jiri Pirko wrote: >> From: Jiri Pirko >> >> Couple of classifiers call netif_keep_dst directly on q->dev. That is >> not possible to do directly for shared blocke where multiple qdiscs are >> owning the block. So introduce a infrastructure to keep track of the >> block owners in list and use this list to implement block variant of >> netif_keep_dst. >> >> Signed-off-by: Jiri Pirko >[...] >> +struct tcf_block_owner_item { >> + struct list_head list; >> + struct Qdisc *q; >> + enum tcf_block_binder_type binder_type; >> +}; >> + >> +static void >> +tcf_block_owner_netif_keep_dst(struct tcf_block *block, >> + struct Qdisc *q, >> + enum tcf_block_binder_type binder_type) >> +{ >> + if (block->keep_dst && >> + binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS) > >Why we need to keep dst on TCF_BLOCK_BINDER_TYPE_CLSACT_EGRESS ? >I presume this enum means sch_handle_egress() ? dst is dropped >later ... This is because of the bpf check: if (fp->dst_needed && !(tp->q->flags & TCQ_F_INGRESS)) netif_keep_dst(qdisc_dev(tp->q)); I just maintain the same logic here.