• Dave Chinner's avatar
    xfs: Combine CIL insert and prepare passes · 991aaf65
    Dave Chinner authored
    Now that all the log item preparation and formatting is done under
    the CIL lock, we can get rid of the intermediate log vector chain
    used to track items to be inserted into the CIL.
    
    We can already find all the items to be committed from the
    transaction handle, so as long as we attach the log vectors to the
    item before we insert the items into the CIL, we don't need to
    create a log vector chain to pass around.
    
    This means we can move all the item insertion code into and optimise
    it into a pair of simple passes across all the items in the
    transaction. The first pass does the formatting and accounting, the
    second inserts them all into the CIL.
    
    We keep this two pass split so that we can separate the CIL
    insertion - which must be done under the CIL spinlock - from the
    formatting. We could insert each item into the CIL with a single
    pass, but that massively increases the number of times we have to
    grab the CIL spinlock. It is much more efficient (and hence
    scalable) to do a batch operation and insert all objects in a single
    lock grab.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
    Signed-off-by: default avatarBen Myers <bpm@sgi.com>
    991aaf65
xfs_log_cil.c 26.4 KB