lkml.org 
[lkml]   [2015]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH 1/2] rcu: introduce list_last_or_null_rcu
On Thu, May 28, 2015 at 5:05 PM, Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 28 May 2015 16:35:27 -0400
> Dan Streetman <ddstreet@ieee.org> wrote:
>
>> Add list_last_or_null_rcu(), to simplify getting the last entry from a
>> rcu-protected list. The standard list_last_entry() can't be used as it
>> is not rcu-protected; the list may be modified concurrently. And the
>> ->prev pointer can't be used, as only the ->next pointers are protected
>> by rcu.
>>
>> This simply iterates forward through the entire list, to get to the last
>> entry. If the list is empty, it returns NULL.
>
> May I asked what this would be used for? It seems awfully inefficient
> in its implementation. What use cases would this be for? I hate to add
> something like this as a generic function which would encourage people
> to use it. Iterating over an entire list to find the last element is
> just nasty.

i have a patch series that will update zswap to be able to change its
parameters at runtime, instead of only at boot time. To do that, it
creates new "pools" dynamically, and keeps them all in a list, with
only the 1st pool being actively used; any following pools still have
everything that was stored in them, but they aren't added to. When
zswap has to "shrink" - by telling one of the pools to get rid of 1 or
more items - it picks the last on the list. Once a pool is empty,
it's removed/freed.

So zswap *could* just manually iterate the list to the last element,
instead of using this new function. But if rcu lists are ever
improved later on, e.g. if ->prev is somehow rcu-protected as well as
->next, then this function should be faster than manually iterating.

if there's a better rcu-way to get to the last list entry, then we
should definitely use it, although based on my understanding of the
rcu list implementation, you can only iterate forwards, safely
(without locking).

>
> -- Steve
>


\
 
 \ /
  Last update: 2015-05-28 23:21    [W:0.089 / U:0.468 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site