[netfilter-nf:testing 7/9] net/sched/act_connmark.c:98:12: error: invalid storage class for function 'tcf_connmark_init'

kernel test robot
2026-03-20T19:08:37Z

tree: https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git testing
head: b1bad43d8b00ab31c8f93145a4c8db1567f0d2fe
commit: 20d564bba6b3806c26498061299a88330561efa5 [7/9] netfilter: ctnetlink: ensure safe access to master conntrack
config: x86_64-rhel-9.4-kselftests (https://download.01.org/0day-ci/archive/20260320/202603201919.Sx7L8wtQ-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260320/202603201919.Sx7L8wtQ-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603201919.Sx7L8wtQ-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

In file included from net/sched/act_connmark.c:26:
include/net/netfilter/nf_conntrack_core.h: In function 'lockdep_nfct_expect_lock_not_held':
include/net/netfilter/nf_conntrack_core.h:111: error: unterminated argument list invoking macro "WARN_ON_ONCE"
111 | #endif /* _NF_CONNTRACK_CORE_H */
include/net/netfilter/nf_conntrack_core.h:90:17: error: 'WARN_ON_ONCE' undeclared (first use in this function)
90 | WARN_ON_ONCE(lockdep_is_held(&nf_conntrack_expect_lock);
| ^~~~~~~~~~~~
include/net/netfilter/nf_conntrack_core.h:90:17: note: each undeclared identifier is reported only once for each function it appears in
include/net/netfilter/nf_conntrack_core.h:90:29: error: expected ';' before 'static'
90 | WARN_ON_ONCE(lockdep_is_held(&nf_conntrack_expect_lock);
| ^
| ;
>> net/sched/act_connmark.c:98:12: error: invalid storage class for function 'tcf_connmark_init'
98 | static int tcf_connmark_init(struct net *net, struct nlattr *nla,
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c: In function 'tcf_connmark_init':
>> net/sched/act_connmark.c:103:53: error: 'act_connmark_ops' undeclared (first use in this function); did you mean 'tcf_connmark_act'?
103 | struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
| ^~~~~~~~~~~~~~~~
| tcf_connmark_act
net/sched/act_connmark.c: In function 'lockdep_nfct_expect_lock_not_held':
>> net/sched/act_connmark.c:192:19: error: invalid storage class for function 'tcf_connmark_dump'
192 | static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
| ^~~~~~~~~~~~~~~~~
>> net/sched/act_connmark.c:229:13: error: invalid storage class for function 'tcf_connmark_cleanup'
229 | static void tcf_connmark_cleanup(struct tc_action *a)
| ^~~~~~~~~~~~~~~~~~~~
>> net/sched/act_connmark.c:243:33: error: initializer element is not constant
243 | .act = tcf_connmark_act,
| ^~~~~~~~~~~~~~~~
net/sched/act_connmark.c:243:33: note: (near initialization for 'act_connmark_ops.act')
net/sched/act_connmark.c:244:33: error: initializer element is not constant
244 | .dump = tcf_connmark_dump,
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:244:33: note: (near initialization for 'act_connmark_ops.dump')
net/sched/act_connmark.c:245:33: error: initializer element is not constant
245 | .init = tcf_connmark_init,
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:245:33: note: (near initialization for 'act_connmark_ops.init')
net/sched/act_connmark.c:246:33: error: initializer element is not constant
246 | .cleanup = tcf_connmark_cleanup,
| ^~~~~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:246:33: note: (near initialization for 'act_connmark_ops.cleanup')
>> net/sched/act_connmark.c:251:23: error: invalid storage class for function 'connmark_init_net'
251 | static __net_init int connmark_init_net(struct net *net)
| ^~~~~~~~~~~~~~~~~
>> net/sched/act_connmark.c:258:24: error: invalid storage class for function 'connmark_exit_net'
258 | static void __net_exit connmark_exit_net(struct list_head *net_list)
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:264:17: error: initializer element is not constant
264 | .init = connmark_init_net,
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:264:17: note: (near initialization for 'connmark_net_ops.init')
net/sched/act_connmark.c:265:23: error: initializer element is not constant
265 | .exit_batch = connmark_exit_net,
| ^~~~~~~~~~~~~~~~~
net/sched/act_connmark.c:265:23: note: (near initialization for 'connmark_net_ops.exit_batch')
>> net/sched/act_connmark.c:270:19: error: invalid storage class for function 'connmark_init_module'
270 | static int __init connmark_init_module(void)
| ^~~~~~~~~~~~~~~~~~~~
>> net/sched/act_connmark.c:275:20: error: invalid storage class for function 'connmark_cleanup_module'
275 | static void __exit connmark_cleanup_module(void)
| ^~~~~~~~~~~~~~~~~~~~~~~
In file included from net/sched/act_connmark.c:9:
include/linux/module.h:132:49: error: invalid storage class for function '__inittest'
132 | static inline initcall_t __maybe_unused __inittest(void) \
| ^~~~~~~~~~
net/sched/act_connmark.c:280:1: note: in expansion of macro 'module_init'
280 | module_init(connmark_init_module);
| ^~~~~~~~~~~
>> net/sched/act_connmark.c:280:1: warning: 'alias' attribute ignored [-Wattributes]
include/linux/module.h:140:49: error: invalid storage class for function '__exittest'
140 | static inline exitcall_t __maybe_unused __exittest(void) \
| ^~~~~~~~~~
net/sched/act_connmark.c:281:1: note: in expansion of macro 'module_exit'
281 | module_exit(connmark_cleanup_module);
| ^~~~~~~~~~~
net/sched/act_connmark.c:281:1: warning: 'alias' attribute ignored [-Wattributes]
>> net/sched/act_connmark.c:284:1: error: expected declaration or statement at end of input
284 | MODULE_LICENSE("GPL");
| ^~~~~~~~~~~~~~

vim +/tcf_connmark_init +98 net/sched/act_connmark.c

22a5dc0e5e3e8f Felix Fietkau 2015-01-18 97
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @98 static int tcf_connmark_init(struct net *net, struct nlattr *nla,
a85a970af265f1 WANG Cong 2016-07-25 99 struct nlattr *est, struct tc_action **a,
abbb0d33632ce9 Vlad Buslov 2019-10-30 100 struct tcf_proto *tp, u32 flags,
589dad6d71a72d Alexander Aring 2018-02-15 101 struct netlink_ext_ack *extack)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 102 {
acd0a7ab6334f3 Zhengchao Shao 2022-09-08 @103 struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
288864effe3388 Pedro Tammela 2023-02-14 104 struct tcf_connmark_parms *nparms, *oparms;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 105 struct nlattr *tb[TCA_CONNMARK_MAX + 1];
695176bfe5dec2 Cong Wang 2021-07-29 106 bool bind = flags & TCA_ACT_FLAGS_BIND;
c53075ea5d3c44 Davide Caratti 2019-03-20 107 struct tcf_chain *goto_ch = NULL;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 108 struct tcf_connmark_info *ci;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 109 struct tc_connmark *parm;
c53075ea5d3c44 Davide Caratti 2019-03-20 110 int ret = 0, err;
7be8ef2cdbfe41 Dmytro Linkin 2019-08-01 111 u32 index;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 112
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 113 if (!nla)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 114 return -EINVAL;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 115
8cb081746c031f Johannes Berg 2019-04-26 116 ret = nla_parse_nested_deprecated(tb, TCA_CONNMARK_MAX, nla,
8cb081746c031f Johannes Berg 2019-04-26 117 connmark_policy, NULL);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 118 if (ret < 0)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 119 return ret;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 120
52491c7607c552 Etienne Noss 2017-03-10 121 if (!tb[TCA_CONNMARK_PARMS])
52491c7607c552 Etienne Noss 2017-03-10 122 return -EINVAL;
52491c7607c552 Etienne Noss 2017-03-10 123
bf4afc53b77aea Linus Torvalds 2026-02-21 124 nparms = kzalloc_obj(*nparms);
288864effe3388 Pedro Tammela 2023-02-14 125 if (!nparms)
288864effe3388 Pedro Tammela 2023-02-14 126 return -ENOMEM;
288864effe3388 Pedro Tammela 2023-02-14 127
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 128 parm = nla_data(tb[TCA_CONNMARK_PARMS]);
7be8ef2cdbfe41 Dmytro Linkin 2019-08-01 129 index = parm->index;
7be8ef2cdbfe41 Dmytro Linkin 2019-08-01 130 ret = tcf_idr_check_alloc(tn, &index, a, bind);
0190c1d452a91c Vlad Buslov 2018-07-05 131 if (!ret) {
288864effe3388 Pedro Tammela 2023-02-14 132 ret = tcf_idr_create_from_flags(tn, index, est, a,
288864effe3388 Pedro Tammela 2023-02-14 133 &act_connmark_ops, bind, flags);
0190c1d452a91c Vlad Buslov 2018-07-05 134 if (ret) {
7be8ef2cdbfe41 Dmytro Linkin 2019-08-01 135 tcf_idr_cleanup(tn, index);
288864effe3388 Pedro Tammela 2023-02-14 136 err = ret;
288864effe3388 Pedro Tammela 2023-02-14 137 goto out_free;
0190c1d452a91c Vlad Buslov 2018-07-05 138 }
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 139
a85a970af265f1 WANG Cong 2016-07-25 140 ci = to_connmark(*a);
288864effe3388 Pedro Tammela 2023-02-14 141
288864effe3388 Pedro Tammela 2023-02-14 142 nparms->net = net;
288864effe3388 Pedro Tammela 2023-02-14 143 nparms->zone = parm->zone;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 144
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 145 ret = ACT_P_CREATED;
0190c1d452a91c Vlad Buslov 2018-07-05 146 } else if (ret > 0) {
a85a970af265f1 WANG Cong 2016-07-25 147 ci = to_connmark(*a);
288864effe3388 Pedro Tammela 2023-02-14 148 if (bind) {
c2a67de9bb5433 Pedro Tammela 2023-12-29 149 err = ACT_P_BOUND;
288864effe3388 Pedro Tammela 2023-02-14 150 goto out_free;
288864effe3388 Pedro Tammela 2023-02-14 151 }
695176bfe5dec2 Cong Wang 2021-07-29 152 if (!(flags & TCA_ACT_FLAGS_REPLACE)) {
288864effe3388 Pedro Tammela 2023-02-14 153 err = -EEXIST;
288864effe3388 Pedro Tammela 2023-02-14 154 goto release_idr;
288864effe3388 Pedro Tammela 2023-02-14 155 }
288864effe3388 Pedro Tammela 2023-02-14 156
288864effe3388 Pedro Tammela 2023-02-14 157 nparms->net = rtnl_dereference(ci->parms)->net;
288864effe3388 Pedro Tammela 2023-02-14 158 nparms->zone = parm->zone;
288864effe3388 Pedro Tammela 2023-02-14 159
288864effe3388 Pedro Tammela 2023-02-14 160 ret = 0;
fb07390463c95e Pedro Tammela 2023-02-27 161 } else {
fb07390463c95e Pedro Tammela 2023-02-27 162 err = ret;
fb07390463c95e Pedro Tammela 2023-02-27 163 goto out_free;
4e8ddd7f1758ca Vlad Buslov 2018-07-05 164 }
288864effe3388 Pedro Tammela 2023-02-14 165
288864effe3388 Pedro Tammela 2023-02-14 166 err = tcf_action_check_ctrlact(parm->action, tp, &goto_ch, extack);
c53075ea5d3c44 Davide Caratti 2019-03-20 167 if (err < 0)
c53075ea5d3c44 Davide Caratti 2019-03-20 168 goto release_idr;
288864effe3388 Pedro Tammela 2023-02-14 169
0d752877705c02 Eric Dumazet 2025-07-09 170 nparms->action = parm->action;
0d752877705c02 Eric Dumazet 2025-07-09 171
506a03aa04deed Cong Wang 2018-08-29 172 spin_lock_bh(&ci->tcf_lock);
c53075ea5d3c44 Davide Caratti 2019-03-20 173 goto_ch = tcf_action_set_ctrlact(*a, parm->action, goto_ch);
288864effe3388 Pedro Tammela 2023-02-14 174 oparms = rcu_replace_pointer(ci->parms, nparms, lockdep_is_held(&ci->tcf_lock));
506a03aa04deed Cong Wang 2018-08-29 175 spin_unlock_bh(&ci->tcf_lock);
288864effe3388 Pedro Tammela 2023-02-14 176
c53075ea5d3c44 Davide Caratti 2019-03-20 177 if (goto_ch)
c53075ea5d3c44 Davide Caratti 2019-03-20 178 tcf_chain_put_by_act(goto_ch);
288864effe3388 Pedro Tammela 2023-02-14 179
288864effe3388 Pedro Tammela 2023-02-14 180 if (oparms)
288864effe3388 Pedro Tammela 2023-02-14 181 kfree_rcu(oparms, rcu);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 182
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 183 return ret;
288864effe3388 Pedro Tammela 2023-02-14 184
c53075ea5d3c44 Davide Caratti 2019-03-20 185 release_idr:
c53075ea5d3c44 Davide Caratti 2019-03-20 186 tcf_idr_release(*a, bind);
288864effe3388 Pedro Tammela 2023-02-14 187 out_free:
288864effe3388 Pedro Tammela 2023-02-14 188 kfree(nparms);
c53075ea5d3c44 Davide Caratti 2019-03-20 189 return err;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 190 }
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 191
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @192 static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 193 int bind, int ref)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 194 {
0d752877705c02 Eric Dumazet 2025-07-09 195 const struct tcf_connmark_info *ci = to_connmark(a);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 196 unsigned char *b = skb_tail_pointer(skb);
0d752877705c02 Eric Dumazet 2025-07-09 197 const struct tcf_connmark_parms *parms;
62b656e43eaeae Ranganath V N 2025-11-09 198 struct tc_connmark opt;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 199 struct tcf_t t;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 200
62b656e43eaeae Ranganath V N 2025-11-09 201 memset(&opt, 0, sizeof(opt));
62b656e43eaeae Ranganath V N 2025-11-09 202
62b656e43eaeae Ranganath V N 2025-11-09 203 opt.index = ci->tcf_index;
62b656e43eaeae Ranganath V N 2025-11-09 204 opt.refcnt = refcount_read(&ci->tcf_refcnt) - ref;
62b656e43eaeae Ranganath V N 2025-11-09 205 opt.bindcnt = atomic_read(&ci->tcf_bindcnt) - bind;
62b656e43eaeae Ranganath V N 2025-11-09 206
0d752877705c02 Eric Dumazet 2025-07-09 207 rcu_read_lock();
0d752877705c02 Eric Dumazet 2025-07-09 208 parms = rcu_dereference(ci->parms);
288864effe3388 Pedro Tammela 2023-02-14 209
0d752877705c02 Eric Dumazet 2025-07-09 210 opt.action = parms->action;
288864effe3388 Pedro Tammela 2023-02-14 211 opt.zone = parms->zone;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 212 if (nla_put(skb, TCA_CONNMARK_PARMS, sizeof(opt), &opt))
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 213 goto nla_put_failure;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 214
48d8ee1694dd1a Jamal Hadi Salim 2016-06-06 215 tcf_tm_dump(&t, &ci->tcf_tm);
9854518ea04db3 Nicolas Dichtel 2016-04-26 216 if (nla_put_64bit(skb, TCA_CONNMARK_TM, sizeof(t), &t,
9854518ea04db3 Nicolas Dichtel 2016-04-26 217 TCA_CONNMARK_PAD))
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 218 goto nla_put_failure;
0d752877705c02 Eric Dumazet 2025-07-09 219 rcu_read_unlock();
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 220
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 221 return skb->len;
506a03aa04deed Cong Wang 2018-08-29 222
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 223 nla_put_failure:
0d752877705c02 Eric Dumazet 2025-07-09 224 rcu_read_unlock();
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 225 nlmsg_trim(skb, b);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 226 return -1;
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 227 }
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 228
288864effe3388 Pedro Tammela 2023-02-14 @229 static void tcf_connmark_cleanup(struct tc_action *a)
288864effe3388 Pedro Tammela 2023-02-14 230 {
288864effe3388 Pedro Tammela 2023-02-14 231 struct tcf_connmark_info *ci = to_connmark(a);
288864effe3388 Pedro Tammela 2023-02-14 232 struct tcf_connmark_parms *parms;
288864effe3388 Pedro Tammela 2023-02-14 233
288864effe3388 Pedro Tammela 2023-02-14 234 parms = rcu_dereference_protected(ci->parms, 1);
288864effe3388 Pedro Tammela 2023-02-14 235 if (parms)
288864effe3388 Pedro Tammela 2023-02-14 236 kfree_rcu(parms, rcu);
288864effe3388 Pedro Tammela 2023-02-14 237 }
288864effe3388 Pedro Tammela 2023-02-14 238
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 239 static struct tc_action_ops act_connmark_ops = {
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 240 .kind = "connmark",
eddd2cf195d6fb Eli Cohen 2019-02-10 241 .id = TCA_ID_CONNMARK,
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 242 .owner = THIS_MODULE,
962ad1f937d864 Jamal Hadi Salim 2018-08-12 @243 .act = tcf_connmark_act,
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 244 .dump = tcf_connmark_dump,
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 245 .init = tcf_connmark_init,
288864effe3388 Pedro Tammela 2023-02-14 246 .cleanup = tcf_connmark_cleanup,
a85a970af265f1 WANG Cong 2016-07-25 247 .size = sizeof(struct tcf_connmark_info),
ddf97ccdd7cb7e WANG Cong 2016-02-22 248 };
241a94abcf465b Michal Koutný 2024-02-01 249 MODULE_ALIAS_NET_ACT("connmark");
ddf97ccdd7cb7e WANG Cong 2016-02-22 250
ddf97ccdd7cb7e WANG Cong 2016-02-22 @251 static __net_init int connmark_init_net(struct net *net)
ddf97ccdd7cb7e WANG Cong 2016-02-22 252 {
acd0a7ab6334f3 Zhengchao Shao 2022-09-08 253 struct tc_action_net *tn = net_generic(net, act_connmark_ops.net_id);
ddf97ccdd7cb7e WANG Cong 2016-02-22 254
981471bd3abf4d Cong Wang 2019-08-25 255 return tc_action_net_init(net, tn, &act_connmark_ops);
ddf97ccdd7cb7e WANG Cong 2016-02-22 256 }
ddf97ccdd7cb7e WANG Cong 2016-02-22 257
039af9c66b9315 Cong Wang 2017-12-11 @258 static void __net_exit connmark_exit_net(struct list_head *net_list)
ddf97ccdd7cb7e WANG Cong 2016-02-22 259 {
acd0a7ab6334f3 Zhengchao Shao 2022-09-08 260 tc_action_net_exit(net_list, act_connmark_ops.net_id);
ddf97ccdd7cb7e WANG Cong 2016-02-22 261 }
ddf97ccdd7cb7e WANG Cong 2016-02-22 262
ddf97ccdd7cb7e WANG Cong 2016-02-22 263 static struct pernet_operations connmark_net_ops = {
ddf97ccdd7cb7e WANG Cong 2016-02-22 264 .init = connmark_init_net,
039af9c66b9315 Cong Wang 2017-12-11 265 .exit_batch = connmark_exit_net,
acd0a7ab6334f3 Zhengchao Shao 2022-09-08 266 .id = &act_connmark_ops.net_id,
ddf97ccdd7cb7e WANG Cong 2016-02-22 267 .size = sizeof(struct tc_action_net),
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 268 };
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 269
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @270 static int __init connmark_init_module(void)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 271 {
ddf97ccdd7cb7e WANG Cong 2016-02-22 272 return tcf_register_action(&act_connmark_ops, &connmark_net_ops);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 273 }
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 274
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @275 static void __exit connmark_cleanup_module(void)
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 276 {
ddf97ccdd7cb7e WANG Cong 2016-02-22 277 tcf_unregister_action(&act_connmark_ops, &connmark_net_ops);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 278 }
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 279
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @280 module_init(connmark_init_module);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 281 module_exit(connmark_cleanup_module);
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 282 MODULE_AUTHOR("Felix Fietkau <nbd@openwrt.org>");
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 283 MODULE_DESCRIPTION("Connection tracking mark restoring");
22a5dc0e5e3e8f Felix Fietkau 2015-01-18 @284 MODULE_LICENSE("GPL");

:::::: The code at line 98 was first introduced by commit
:::::: 22a5dc0e5e3e8fef804230cd73ed7b0afd4c7bae net: sched: Introduce connmark action

:::::: TO: Felix Fietkau <nbd@openwrt.org>
:::::: CC: David S. Miller <davem@davemloft.net>

--
0-DAY CI Kernel Test Service