• S
    [GFS2] Rewrite of examine_bucket() · 24264434
    Steven Whitehouse 提交于
    The existing implementation of this function in glock.c was not
    very efficient as it relied upon keeping a cursor element upon the
    hash chain in question and moving it along. This new version improves
    upon this by using the current element as a cursor. This is possible
    since we only look at the "next" element in the list after we've
    taken the read_lock() subsequent to calling the examiner function.
    Obviously we have to eventually drop the ref count that we are then
    left with and we cannot do that while holding the read_lock, so we
    do that next time we drop the lock. That means either just before
    we examine another glock, or when the loop has terminated.
    
    The new implementation has several advantages: it uses only a
    read_lock() rather than a write_lock(), so it can run simnultaneously
    with other code, it doesn't need a "plug" element, so that it removes
    a test not only from this list iterator, but from all the other glock
    list iterators too. So it makes things faster and smaller.
    Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
    24264434
incore.h 15.3 KB