mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
xfs: simplify inode to transaction joining
Currently we need to either call IHOLD or xfs_trans_ihold on an inode when joining it to a transaction via xfs_trans_ijoin. This patches instead makes xfs_trans_ijoin usable on it's own by doing an implicity xfs_trans_ihold, which also allows us to drop the third argument. For the case where we want to hold a reference on the inode a xfs_trans_ijoin_ref wrapper is added which does the IHOLD and marks the inode for needing an xfs_iput. In addition to the cleaner interface to the caller this also simplifies the implementation. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
4d16e9246f
commit
898621d5a7
19 changed files with 103 additions and 247 deletions
|
@ -319,8 +319,7 @@ xfs_attr_set_int(
|
|||
return (error);
|
||||
}
|
||||
|
||||
xfs_trans_ijoin(args.trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args.trans, dp);
|
||||
xfs_trans_ijoin(args.trans, dp);
|
||||
|
||||
/*
|
||||
* If the attribute list is non-existent or a shortform list,
|
||||
|
@ -390,10 +389,8 @@ xfs_attr_set_int(
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args.trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args.trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args.trans, dp);
|
||||
|
||||
/*
|
||||
* Commit the leaf transformation. We'll need another (linked)
|
||||
|
@ -538,8 +535,7 @@ xfs_attr_remove_int(xfs_inode_t *dp, struct xfs_name *name, int flags)
|
|||
* No need to make quota reservations here. We expect to release some
|
||||
* blocks not allocate in the common case.
|
||||
*/
|
||||
xfs_trans_ijoin(args.trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args.trans, dp);
|
||||
xfs_trans_ijoin(args.trans, dp);
|
||||
|
||||
/*
|
||||
* Decide on what work routines to call based on the inode size.
|
||||
|
@ -815,8 +811,7 @@ xfs_attr_inactive(xfs_inode_t *dp)
|
|||
* No need to make quota reservations here. We expect to release some
|
||||
* blocks, not allocate, in the common case.
|
||||
*/
|
||||
xfs_trans_ijoin(trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(trans, dp);
|
||||
xfs_trans_ijoin(trans, dp);
|
||||
|
||||
/*
|
||||
* Decide on what work routines to call based on the inode size.
|
||||
|
@ -975,10 +970,8 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
|
||||
/*
|
||||
* Commit the current trans (including the inode) and start
|
||||
|
@ -1079,10 +1072,8 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
|
|||
* and started a new one. We need the inode to be
|
||||
* in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
} else
|
||||
xfs_da_buf_done(bp);
|
||||
|
||||
|
@ -1155,10 +1146,8 @@ xfs_attr_leaf_removename(xfs_da_args_t *args)
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
} else
|
||||
xfs_da_buf_done(bp);
|
||||
return(0);
|
||||
|
@ -1311,10 +1300,8 @@ restart:
|
|||
* and started a new one. We need the inode to be
|
||||
* in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
|
||||
/*
|
||||
* Commit the node conversion and start the next
|
||||
|
@ -1350,10 +1337,8 @@ restart:
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
} else {
|
||||
/*
|
||||
* Addition succeeded, update Btree hashvals.
|
||||
|
@ -1464,10 +1449,8 @@ restart:
|
|||
* and started a new one. We need the inode to be
|
||||
* in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1598,10 +1581,8 @@ xfs_attr_node_removename(xfs_da_args_t *args)
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
|
||||
/*
|
||||
* Commit the Btree join operation and start a new trans.
|
||||
|
@ -1652,10 +1633,8 @@ xfs_attr_node_removename(xfs_da_args_t *args)
|
|||
* and started a new one. We need the inode to be
|
||||
* in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
} else
|
||||
xfs_da_brelse(args->trans, bp);
|
||||
}
|
||||
|
@ -2093,10 +2072,8 @@ xfs_attr_rmtval_set(xfs_da_args_t *args)
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, dp);
|
||||
|
||||
ASSERT(nmap == 1);
|
||||
ASSERT((map.br_startblock != DELAYSTARTBLOCK) &&
|
||||
|
@ -2249,10 +2226,8 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args)
|
|||
* bmap_finish() may have committed the last trans and started
|
||||
* a new one. We need the inode to be in all transactions.
|
||||
*/
|
||||
if (committed) {
|
||||
xfs_trans_ijoin(args->trans, args->dp, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ihold(args->trans, args->dp);
|
||||
}
|
||||
if (committed)
|
||||
xfs_trans_ijoin(args->trans, args->dp);
|
||||
|
||||
/*
|
||||
* Close out trans and start the next one in the chain.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue