[PATCH 2/2] xfs: move allocation stack switch up to xfs_bmapi_allocate

Mark Tinguely tinguely at sgi.com
Fri Oct 5 08:28:36 CDT 2012


On 10/04/12 20:06, Dave Chinner wrote:
> From: Dave Chinner<dchinner at redhat.com>
>
> Switching stacks are xfs_alloc_vextent can cause deadlocks when we
> run out of worker threads on the allocation workqueue. This can
> occur because xfs_bmap_btalloc can make multiple calls to
> xfs_alloc_vextent() and even if xfs_alloc_vextent() fails it can
> return with the AGF locked in the current allocation transaction.
>
> If we then need to make another allocation, and all the allocation
> worker contexts are exhausted because the are blocked waiting for
> the AGF lock, holder of the AGF cannot get it's xfs-alloc_vextent
> work completed to release the AGF.  Hence allocation effectively
> deadlocks.
>
> To avoid this, move the stack switch one layer up to
> xfs_bmapi_allocate() so that all of the allocation attempts in a
> single switched stack transaction occur in a single worker context.
> This avoids the problem of an allocation being blocked waiting for
> a worker thread whilst holding the AGF.
>
> Signed-off-by: Dave Chinner<dchinner at redhat.com>

Looks good.

Reviewed-by: Mark Tinguely <tinguely at sgi.com>



More information about the xfs mailing list