xfs: remove xfs_ipin/xfs_iunpin

Inodes are only pinned/unpinned via the inode item methods, and lots of
code relies on that fact.  So remove the separate xfs_ipin/xfs_iunpin
helpers and merge them into their only callers.  This also fixes up
various duplicate and/or incorrect comments.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
Christoph Hellwig 2010-02-18 12:43:22 +00:00 committed by Alex Elder
parent 60ec678371
commit a14a5ab58f
3 changed files with 11 additions and 37 deletions

View File

@ -2438,34 +2438,6 @@ xfs_idestroy_fork(
} }
} }
/*
* Increment the pin count of the given buffer.
* This value is protected by ipinlock spinlock in the mount structure.
*/
void
xfs_ipin(
xfs_inode_t *ip)
{
ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
atomic_inc(&ip->i_pincount);
}
/*
* Decrement the pin count of the given inode, and wake up
* anyone in xfs_iwait_unpin() if the count goes to 0. The
* inode must have been previously pinned with a call to xfs_ipin().
*/
void
xfs_iunpin(
xfs_inode_t *ip)
{
ASSERT(atomic_read(&ip->i_pincount) > 0);
if (atomic_dec_and_test(&ip->i_pincount))
wake_up(&ip->i_ipin_wait);
}
/* /*
* This is called to unpin an inode. The caller must have the inode locked * This is called to unpin an inode. The caller must have the inode locked
* in at least shared mode so that the buffer cannot be subsequently pinned * in at least shared mode so that the buffer cannot be subsequently pinned

View File

@ -471,8 +471,6 @@ int xfs_itruncate_finish(struct xfs_trans **, xfs_inode_t *,
int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); int xfs_iunlink(struct xfs_trans *, xfs_inode_t *);
void xfs_iext_realloc(xfs_inode_t *, int, int); void xfs_iext_realloc(xfs_inode_t *, int, int);
void xfs_ipin(xfs_inode_t *);
void xfs_iunpin(xfs_inode_t *);
void xfs_iunpin_wait(xfs_inode_t *); void xfs_iunpin_wait(xfs_inode_t *);
int xfs_iflush(xfs_inode_t *, uint); int xfs_iflush(xfs_inode_t *, uint);
void xfs_ichgtime(xfs_inode_t *, int); void xfs_ichgtime(xfs_inode_t *, int);

View File

@ -535,23 +535,23 @@ xfs_inode_item_format(
/* /*
* This is called to pin the inode associated with the inode log * This is called to pin the inode associated with the inode log
* item in memory so it cannot be written out. Do this by calling * item in memory so it cannot be written out.
* xfs_ipin() to bump the pin count in the inode while holding the
* inode pin lock.
*/ */
STATIC void STATIC void
xfs_inode_item_pin( xfs_inode_item_pin(
xfs_inode_log_item_t *iip) xfs_inode_log_item_t *iip)
{ {
ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL)); ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL));
xfs_ipin(iip->ili_inode);
atomic_inc(&iip->ili_inode->i_pincount);
} }
/* /*
* This is called to unpin the inode associated with the inode log * This is called to unpin the inode associated with the inode log
* item which was previously pinned with a call to xfs_inode_item_pin(). * item which was previously pinned with a call to xfs_inode_item_pin().
* Just call xfs_iunpin() on the inode to do this. *
* Also wake up anyone in xfs_iunpin_wait() if the count goes to 0.
*/ */
/* ARGSUSED */ /* ARGSUSED */
STATIC void STATIC void
@ -559,7 +559,11 @@ xfs_inode_item_unpin(
xfs_inode_log_item_t *iip, xfs_inode_log_item_t *iip,
int stale) int stale)
{ {
xfs_iunpin(iip->ili_inode); struct xfs_inode *ip = iip->ili_inode;
ASSERT(atomic_read(&ip->i_pincount) > 0);
if (atomic_dec_and_test(&ip->i_pincount))
wake_up(&ip->i_ipin_wait);
} }
/* ARGSUSED */ /* ARGSUSED */
@ -568,7 +572,7 @@ xfs_inode_item_unpin_remove(
xfs_inode_log_item_t *iip, xfs_inode_log_item_t *iip,
xfs_trans_t *tp) xfs_trans_t *tp)
{ {
xfs_iunpin(iip->ili_inode); xfs_inode_item_unpin(iip, 0);
} }
/* /*