xfs: don't do memory allocation under the CIL context lock
authorDave Chinner <dchinner@redhat.com>
Tue, 24 Aug 2010 01:45:53 +0000 (11:45 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 24 Aug 2010 01:45:53 +0000 (11:45 +1000)
commit3b93c7aaefc05ee2a75e2726929b01a321402984
tree736a4017e86d65598ae7b30cb11412afd66f9629
parenta44f13edf0ebb4e41942d0f16ca80489dcf6659d
xfs: don't do memory allocation under the CIL context lock

Formatting items requires memory allocation when using delayed
logging. Currently that memory allocation is done while holding the
CIL context lock in read mode. This means that if memory allocation
takes some time (e.g. enters reclaim), we cannot push on the CIL
until the allocation(s) required by formatting complete. This can
stall CIL pushes for some time, and once a push is stalled so are
all new transaction commits.

Fix this splitting the item formatting into two steps. The first
step which does the allocation and memcpy() into the allocated
buffer is now done outside the CIL context lock, and only the CIL
insert is done inside the CIL context lock. This avoids the stall
issue.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_log_cil.c