mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
xfs: simplify xfs_trans_ijoin* again
There is no reason to keep a reference to the inode even if we unlock it during transaction commit because we never drop a reference between the ijoin and commit. Also use this fact to merge xfs_trans_ijoin_ref back into xfs_trans_ijoin - the third argument decides if an unlock is needed now. I'm actually starting to wonder if allowing inodes to be unlocked at transaction commit really is worth the effort. The only real benefit is that they can be unlocked earlier when commiting a synchronous transactions, but that could be solved by doing the log force manually after the unlock, too. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
parent
23bb0be1a2
commit
ddc3415aba
18 changed files with 65 additions and 83 deletions
|
@ -47,11 +47,13 @@ xfs_trans_inode_broot_debug(
|
|||
* Add a locked inode to the transaction.
|
||||
*
|
||||
* The inode must be locked, and it cannot be associated with any transaction.
|
||||
* If lock_flags is non-zero the inode will be unlocked on transaction commit.
|
||||
*/
|
||||
void
|
||||
xfs_trans_ijoin(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_inode *ip)
|
||||
struct xfs_inode *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
xfs_inode_log_item_t *iip;
|
||||
|
||||
|
@ -59,7 +61,9 @@ xfs_trans_ijoin(
|
|||
if (ip->i_itemp == NULL)
|
||||
xfs_inode_item_init(ip, ip->i_mount);
|
||||
iip = ip->i_itemp;
|
||||
|
||||
ASSERT(iip->ili_lock_flags == 0);
|
||||
iip->ili_lock_flags = lock_flags;
|
||||
|
||||
/*
|
||||
* Get a log_item_desc to point at the new item.
|
||||
|
@ -69,25 +73,6 @@ xfs_trans_ijoin(
|
|||
xfs_trans_inode_broot_debug(ip);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a locked inode to the transaction.
|
||||
*
|
||||
*
|
||||
* Grabs a reference to the inode which will be dropped when the transaction
|
||||
* is committed. The inode will also be unlocked at that point. The inode
|
||||
* must be locked, and it cannot be associated with any transaction.
|
||||
*/
|
||||
void
|
||||
xfs_trans_ijoin_ref(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_inode *ip,
|
||||
uint lock_flags)
|
||||
{
|
||||
xfs_trans_ijoin(tp, ip);
|
||||
IHOLD(ip);
|
||||
ip->i_itemp->ili_lock_flags = lock_flags;
|
||||
}
|
||||
|
||||
/*
|
||||
* Transactional inode timestamp update. Requires the inode to be locked and
|
||||
* joined to the transaction supplied. Relies on the transaction subsystem to
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue