xfs: defer should allow ->finish_item to request a new transaction
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 19 Sep 2016 00:26:25 +0000 (10:26 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 19 Sep 2016 00:26:25 +0000 (10:26 +1000)
commit385d655861d221bb43ae69a9cfa9adbefe31ad00
treedfca3c3c000bed9dcabddc6fea374aa8611f27f2
parentc611cc0360cd924448c23ccd70ce8be703fcb4a6
xfs: defer should allow ->finish_item to request a new transaction

When xfs_defer_finish calls ->finish_item, it's possible that
(refcount) won't be able to finish all the work in a single
transaction.  When this happens, the ->finish_item handler should
shorten the log done item's list count, update the work item to
reflect where work should continue, and return -EAGAIN so that
defer_finish knows to retain the pending item on the pending list,
roll the transaction, and restart processing where we left off.

Plumb in the code and document how this mechanism is supposed to work.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/libxfs/xfs_defer.c