Thread (51 messages) 51 messages, 7 authors, 2023-05-24

Re: [PATCH net 6/6] net/sched: qdisc_destroy() old ingress and clsact Qdiscs before grafting

From: Jakub Kicinski <kuba@kernel.org>
Date: 2023-05-16 19:22:48
Also in: lkml

On Mon, 15 May 2023 15:45:15 -0700 Peilin Ye wrote:
On Thu, May 11, 2023 at 05:11:23PM -0700, Peilin Ye wrote:
quoted
quoted
You're right, it's in qdisc_create(), argh...  
 
->destroy() is called for all error points between ->init() and  
dev_graft_qdisc().  I'll try handling it in ->destroy().  
Sorry for any confusion: there is no point at all undoing "setting dev
pointer to b1" in ->destroy() because datapath has already been affected.

To summarize, grafting B mustn't fail after setting dev pointer to b1, so
->init() is too early, because e.g. if user requested [1] to create a rate  
estimator, gen_new_estimator() could fail after ->init() in
qdisc_create().

On the other hand, ->attach() is too late because it's later than
dev_graft_qdisc(), so concurrent filter requests might see uninitialized
dev pointer in theory.

Please suggest; is adding another callback (or calling ->attach()) right
before dev_graft_qdisc() for ingress (clsact) Qdiscs too much for this
fix?

[1] e.g. $ tc qdisc add dev eth0 estimator 1s 8s clsact
Vlad, could you please clarify how you expect the unlocked filter
operations to work when the qdisc has global state?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help