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

Mark Tinguely
2012-10-05T13:27:19Z

On 10/04/12 20:06, Dave Chinner wrote:
> From: Dave Chinner<dchinner@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@redhat.com>

Looks good.

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