xfs: remove all boilerplate defer init/finish code
At this point, the transaction subsystem completely manages deferred items internally such that the common and boilerplate xfs_trans_alloc() -> xfs_defer_init() -> xfs_defer_finish() -> xfs_trans_commit() sequence can be replaced with a simple transaction allocation and commit. Remove all such boilerplate deferred ops code. In doing so, we change each case over to use the dfops in the transaction and specifically eliminate: - The on-stack dfops and associated xfs_defer_init() call, as the internal dfops is initialized on transaction allocation. - xfs_bmap_finish() calls that precede a final xfs_trans_commit() of a transaction. - xfs_defer_cancel() calls in error handlers that precede a transaction cancel. The only deferred ops calls that remain are those that are non-deterministic with respect to the final commit of the associated transaction or are open-coded due to special handling. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Bill O'Donnell <billodo@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:

gecommit door
Darrick J. Wong

bovenliggende
91ef75b657
commit
c8eac49ef7
@@ -157,7 +157,6 @@ xfs_iomap_write_direct(
|
||||
int quota_flag;
|
||||
int rt;
|
||||
xfs_trans_t *tp;
|
||||
struct xfs_defer_ops dfops;
|
||||
uint qblocks, resblks, resrtextents;
|
||||
int error;
|
||||
int lockmode;
|
||||
@@ -253,20 +252,15 @@ xfs_iomap_write_direct(
|
||||
* From this point onwards we overwrite the imap pointer that the
|
||||
* caller gave to us.
|
||||
*/
|
||||
xfs_defer_init(tp, &dfops);
|
||||
nimaps = 1;
|
||||
error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb,
|
||||
bmapi_flags, resblks, imap, &nimaps);
|
||||
if (error)
|
||||
goto out_bmap_cancel;
|
||||
goto out_res_cancel;
|
||||
|
||||
/*
|
||||
* Complete the transaction
|
||||
*/
|
||||
error = xfs_defer_finish(&tp, tp->t_dfops);
|
||||
if (error)
|
||||
goto out_bmap_cancel;
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
@@ -286,8 +280,7 @@ out_unlock:
|
||||
xfs_iunlock(ip, lockmode);
|
||||
return error;
|
||||
|
||||
out_bmap_cancel:
|
||||
xfs_defer_cancel(tp->t_dfops);
|
||||
out_res_cancel:
|
||||
xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag);
|
||||
out_trans_cancel:
|
||||
xfs_trans_cancel(tp);
|
||||
@@ -663,7 +656,6 @@ xfs_iomap_write_allocate(
|
||||
xfs_mount_t *mp = ip->i_mount;
|
||||
xfs_fileoff_t offset_fsb, last_block;
|
||||
xfs_fileoff_t end_fsb, map_start_fsb;
|
||||
struct xfs_defer_ops dfops;
|
||||
xfs_filblks_t count_fsb;
|
||||
xfs_trans_t *tp;
|
||||
int nimaps;
|
||||
@@ -713,8 +705,6 @@ xfs_iomap_write_allocate(
|
||||
xfs_ilock(ip, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ijoin(tp, ip, 0);
|
||||
|
||||
xfs_defer_init(tp, &dfops);
|
||||
|
||||
/*
|
||||
* it is possible that the extents have changed since
|
||||
* we did the read call as we dropped the ilock for a
|
||||
@@ -772,10 +762,6 @@ xfs_iomap_write_allocate(
|
||||
if (error)
|
||||
goto trans_cancel;
|
||||
|
||||
error = xfs_defer_finish(&tp, tp->t_dfops);
|
||||
if (error)
|
||||
goto trans_cancel;
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto error0;
|
||||
@@ -806,7 +792,6 @@ xfs_iomap_write_allocate(
|
||||
}
|
||||
|
||||
trans_cancel:
|
||||
xfs_defer_cancel(tp->t_dfops);
|
||||
xfs_trans_cancel(tp);
|
||||
error0:
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
@@ -827,7 +812,6 @@ xfs_iomap_write_unwritten(
|
||||
int nimaps;
|
||||
xfs_trans_t *tp;
|
||||
xfs_bmbt_irec_t imap;
|
||||
struct xfs_defer_ops dfops;
|
||||
struct inode *inode = VFS_I(ip);
|
||||
xfs_fsize_t i_size;
|
||||
uint resblks;
|
||||
@@ -872,7 +856,6 @@ xfs_iomap_write_unwritten(
|
||||
/*
|
||||
* Modify the unwritten extent state of the buffer.
|
||||
*/
|
||||
xfs_defer_init(tp, &dfops);
|
||||
nimaps = 1;
|
||||
error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb,
|
||||
XFS_BMAPI_CONVERT, resblks, &imap,
|
||||
@@ -896,10 +879,6 @@ xfs_iomap_write_unwritten(
|
||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
||||
}
|
||||
|
||||
error = xfs_defer_finish(&tp, tp->t_dfops);
|
||||
if (error)
|
||||
goto error_on_bmapi_transaction;
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
if (error)
|
||||
@@ -923,7 +902,6 @@ xfs_iomap_write_unwritten(
|
||||
return 0;
|
||||
|
||||
error_on_bmapi_transaction:
|
||||
xfs_defer_cancel(tp->t_dfops);
|
||||
xfs_trans_cancel(tp);
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
return error;
|
||||
|
Verwijs in nieuw issue
Block a user