Re: [Patch net-next v2 3/4] net_sched: remove tc class reference counting

From
Jiri Pirko <jiri@resnulli.us>
Date
2017-08-25 09:00:23
Reply to
Cong Wang, 2017-08-24
Fri, Aug 25, 2017 at 01:51:29AM CEST, xiyou.wangcong@gmail.com wrote:
For TC classes, their ->get() and ->put() are always paired, and the
reference counting is completely useless, because:

1) For class modification and dumping paths, we already hold RTNL lock,
  so all of these ->get(),->change(),->put() are atomic.
There is ongoing initiative by Florian to avoid taking RTNL for some
rtnetlink calls. I think that for dumping it could be done in tc as well.
Don't we need the refcnt then?

2) For filter bindiing/unbinding, we use other reference counter than
  this one, and they should have RTNL lock too.

3) For ->qlen_notify(), it is special because it is called on ->enqueue()
  path, but we already hold qdisc tree lock there, and we hold this
  tree lock when graft or delete the class too, so it should not be gone
  or changed until we release the tree lock.

Therefore, this patch removes ->get() and ->put(), but:

1) Adds a new ->find() to find the pointer to a class by classid, no
  refcnt.

2) Move the original class destroy upon the last refcnt into ->delete(),
  right after releasing tree lock. This is fine because the class is
  already removed from hash when holding the lock.

For those who also use ->put() as ->unbind(), just rename them to reflect
this change.
Thread (18 messages) 18 messages, 5 authors, last reply 2017-08-26
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help