On Wed, Apr 18 2018, Herbert Xu wrote: > On Wed, Apr 18, 2018 at 04:47:02PM +1000, NeilBrown wrote: >> rhashtable_walk_prev() returns the object returned by >> the previous rhashtable_walk_next(), providing it is still in the >> table (or was during this grace period). >> This works even if rhashtable_walk_stop() and rhashtable_talk_start() >> have been called since the last rhashtable_walk_next(). >> >> If there have been no calls to rhashtable_walk_next(), or if the >> object is gone from the table, then NULL is returned. >> >> This can usefully be used in a seq_file ->start() function. >> If the pos is the same as was returned by the last ->next() call, >> then rhashtable_walk_prev() can be used to re-establish the >> current location in the table. If it returns NULL, then >> rhashtable_walk_next() should be used. >> >> Signed-off-by: NeilBrown <ne...@suse.com> > > Can you explain the need for this function and its difference > from the existing rhashtable_walk_peek?
The need is essentially the same as the need for rhashtable_walk_peek(). The difference is that the actual behaviour can be documented briefly (and so understood easily) without enumerating multiple special cases. rhashtable_walk_peek() is much the same as rhashtable_walk_prev() ?: rhashtable_walk_next() The need arises when you need to "stop" a walk and then restart at the same object, not the next one. i.e. the last object returned before the "stop" wasn't acted on. This happens with seq_file if the buffer space for ->show() is not sufficient to format an object. In the case, seq_file will stop() the iteration, make more space available (either by flushing or by reallocing) and will start again at the same location. If the seq_file client stored the rhashtable_iter in the seq_file private data, it can use rhasthable_walk_prev() to recover its position if that object is still in the hash table. If it isn't still present, rhashtable_walk_next() can be used to get the next one. In some cases it can be useful for the client to know whether it got the previous one or not. Thanks, NeilBrown
signature.asc
Description: PGP signature