[PATCH 0/2] xfs: fix AGF/alloc workqueue deadlock.

Dave Chinner
2012-10-05T01:05:39Z

Hi folks,

This is a followup from the last conversation with Mark about this
deadlock. I haven't heard anything in the last coupl eof days, so I
figured I'd just write the patches that did what I thought is
needed.

Basically, the stack switch is only needed for userdata in the
delayed allocation path, and nowhere else at this point in time. To
make it so we switch stacks only at this point in time, I introduced
a flag to pass to xfs_bmapi_write(). This means we don't switch
stacks during direct IO, unwritten extent conversion or
preallocation via fallocate/XFS_IOC_RESVSP.

I then moved the stack switch to xfs_bmapi_allocate(), which is
where allocation happens. All the allocation calls within a single
userdata extent allocation occur in this function (both data extent
and bmap btree blocks), so switching stacks here will ensure that
only mapping calls that require allocation will have the stack
switched.

Comments welcome...

Cheers,

Dave.