On Mon, May 31, 2010 at 12:07:33PM -0400, Christoph Hellwig wrote:
> Currently we track log item descriptor belonging to a transaction using a
> complex opencoded chunk allocator. This code has been there since day one
> and seems to work around the lack of an efficient slab allocator.
>
> This patch replaces it with dynamically allocated log item descriptors
> from a dedicated slab pool, linked to the transaction by a linked list.
>
> This allows to greatly simplify the log item descriptor tracking to the
> point where it's just a couple hundred lines in xfs_trans.c instead of
> a separate file. The external API has also been simplified while we're
> at it - the xfs_trans_add_item and xfs_trans_del_item functions to add/
> delete items from a transaction have been simplified to the bare minium,
> and the xfs_trans_find_item function is replaced with a direct dereference
> of the li_desc field. All debug code walking the list of log items in
> a transaction is down to a simple list_for_each_entry.
>
> Note that we could easily use a singly linked list here instead of the
> double linked list from list.h as the fastpath only does deletion from
> sequential traversal. But given that we don't have one available as
> a library function yet I use the list.h functions for simplicity.
>
> [the patch applies ontop of Dave's delayed-logging branch]
>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Looks OK - nothing jumps out at me as being incorrect. I'm still
running QA on it, but it looks good so far.
Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
--
Dave Chinner
david@xxxxxxxxxxxxx
|