Re: [PATCH net 1/3] kref: add kref_sub_return
From: David Miller <davem@davemloft.net>
Date: 2014-02-13 04:10:07
Also in:
lkml, netdev
From: David Miller <davem@davemloft.net> Date: Wed, 12 Feb 2014 23:05:06 -0500 (EST)
From: Greg KH <gregkh@linuxfoundation.org> Date: Wed, 12 Feb 2014 17:39:02 -0800quoted
Yes, that's horrible as well, but as was already pointed out in this thread, you can't rely on that value to really be "1" after reading it due to the way krefs work, what happened if someone else just grabbed it? If all they want is a "count" for when to start polling, then use a separate atomic count, but don't abuse the kref interface for this, I don't think that will work properly at all.They want to know which thread of control decrements the count to "1" as buffers are released. That seems entirely reasonable to me. They could add another atomic counter for this, but that's rather silly since the kref already has an atomic they can use for this purpose.
If you still can't understand what they are trying to do, they want to do something precisely when the number of pending buffers is dropped to 1 or less. They are using krefs to track how many buffers are attached at a given moment. The counter can re-increment after the decrement to 1 or less occurs, they don't care. But they want precisely the entity that drops it down to 1 or less to perform that action. Just reading the atomic value directly, they cannot do this.