mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 00:34:10 +08:00
xfs: simplify buffer pinning
Get rid of the xfs_buf_pin/xfs_buf_unpin/xfs_buf_ispin helpers and opencode them in their only callers, just like we did for the inode pinning a while ago. Also remove duplicate trace points - the bufitem tracepoints cover all the information that is present in a buffer tracepoint. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
ca30b2a7b7
commit
4d16e9246f
@ -896,36 +896,6 @@ xfs_buf_unlock(
|
||||
trace_xfs_buf_unlock(bp, _RET_IP_);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pinning Buffer Storage in Memory
|
||||
* Ensure that no attempt to force a buffer to disk will succeed.
|
||||
*/
|
||||
void
|
||||
xfs_buf_pin(
|
||||
xfs_buf_t *bp)
|
||||
{
|
||||
trace_xfs_buf_pin(bp, _RET_IP_);
|
||||
atomic_inc(&bp->b_pin_count);
|
||||
}
|
||||
|
||||
void
|
||||
xfs_buf_unpin(
|
||||
xfs_buf_t *bp)
|
||||
{
|
||||
trace_xfs_buf_unpin(bp, _RET_IP_);
|
||||
|
||||
if (atomic_dec_and_test(&bp->b_pin_count))
|
||||
wake_up_all(&bp->b_waiters);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_buf_ispin(
|
||||
xfs_buf_t *bp)
|
||||
{
|
||||
return atomic_read(&bp->b_pin_count);
|
||||
}
|
||||
|
||||
STATIC void
|
||||
xfs_buf_wait_unpin(
|
||||
xfs_buf_t *bp)
|
||||
@ -1803,7 +1773,7 @@ xfs_buf_delwri_split(
|
||||
trace_xfs_buf_delwri_split(bp, _RET_IP_);
|
||||
ASSERT(bp->b_flags & XBF_DELWRI);
|
||||
|
||||
if (!xfs_buf_ispin(bp) && !xfs_buf_cond_lock(bp)) {
|
||||
if (!XFS_BUF_ISPINNED(bp) && !xfs_buf_cond_lock(bp)) {
|
||||
if (!force &&
|
||||
time_before(jiffies, bp->b_queuetime + age)) {
|
||||
xfs_buf_unlock(bp);
|
||||
|
@ -258,11 +258,6 @@ static inline int xfs_buf_geterror(xfs_buf_t *bp)
|
||||
/* Buffer Utility Routines */
|
||||
extern xfs_caddr_t xfs_buf_offset(xfs_buf_t *, size_t);
|
||||
|
||||
/* Pinning Buffer Storage in Memory */
|
||||
extern void xfs_buf_pin(xfs_buf_t *);
|
||||
extern void xfs_buf_unpin(xfs_buf_t *);
|
||||
extern int xfs_buf_ispin(xfs_buf_t *);
|
||||
|
||||
/* Delayed Write Buffer Routines */
|
||||
extern void xfs_buf_delwri_dequeue(xfs_buf_t *);
|
||||
extern void xfs_buf_delwri_promote(xfs_buf_t *);
|
||||
@ -351,7 +346,7 @@ extern void xfs_buf_terminate(void);
|
||||
#define XFS_BUF_SET_VTYPE(bp, type) do { } while (0)
|
||||
#define XFS_BUF_SET_REF(bp, ref) do { } while (0)
|
||||
|
||||
#define XFS_BUF_ISPINNED(bp) xfs_buf_ispin(bp)
|
||||
#define XFS_BUF_ISPINNED(bp) atomic_read(&((bp)->b_pin_count))
|
||||
|
||||
#define XFS_BUF_VALUSEMA(bp) xfs_buf_lock_value(bp)
|
||||
#define XFS_BUF_CPSEMA(bp) (xfs_buf_cond_lock(bp) == 0)
|
||||
@ -370,8 +365,6 @@ static inline void xfs_buf_relse(xfs_buf_t *bp)
|
||||
xfs_buf_rele(bp);
|
||||
}
|
||||
|
||||
#define xfs_bpin(bp) xfs_buf_pin(bp)
|
||||
#define xfs_bunpin(bp) xfs_buf_unpin(bp)
|
||||
#define xfs_biodone(bp) xfs_buf_ioend(bp, 0)
|
||||
|
||||
#define xfs_biomove(bp, off, len, data, rw) \
|
||||
|
@ -317,8 +317,6 @@ DEFINE_BUF_EVENT(xfs_buf_init);
|
||||
DEFINE_BUF_EVENT(xfs_buf_free);
|
||||
DEFINE_BUF_EVENT(xfs_buf_hold);
|
||||
DEFINE_BUF_EVENT(xfs_buf_rele);
|
||||
DEFINE_BUF_EVENT(xfs_buf_pin);
|
||||
DEFINE_BUF_EVENT(xfs_buf_unpin);
|
||||
DEFINE_BUF_EVENT(xfs_buf_iodone);
|
||||
DEFINE_BUF_EVENT(xfs_buf_iorequest);
|
||||
DEFINE_BUF_EVENT(xfs_buf_bawrite);
|
||||
|
@ -359,14 +359,13 @@ xfs_buf_item_format(
|
||||
|
||||
/*
|
||||
* This is called to pin the buffer associated with the buf log item in memory
|
||||
* so it cannot be written out. Simply call bpin() on the buffer to do this.
|
||||
* so it cannot be written out.
|
||||
*
|
||||
* We also always take a reference to the buffer log item here so that the bli
|
||||
* is held while the item is pinned in memory. This means that we can
|
||||
* unconditionally drop the reference count a transaction holds when the
|
||||
* transaction is completed.
|
||||
*/
|
||||
|
||||
STATIC void
|
||||
xfs_buf_item_pin(
|
||||
struct xfs_log_item *lip)
|
||||
@ -378,15 +377,15 @@ xfs_buf_item_pin(
|
||||
ASSERT((bip->bli_flags & XFS_BLI_LOGGED) ||
|
||||
(bip->bli_flags & XFS_BLI_STALE));
|
||||
|
||||
atomic_inc(&bip->bli_refcount);
|
||||
trace_xfs_buf_item_pin(bip);
|
||||
xfs_bpin(bip->bli_buf);
|
||||
|
||||
atomic_inc(&bip->bli_refcount);
|
||||
atomic_inc(&bip->bli_buf->b_pin_count);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is called to unpin the buffer associated with the buf log
|
||||
* item which was previously pinned with a call to xfs_buf_item_pin().
|
||||
* Just call bunpin() on the buffer to do this.
|
||||
*
|
||||
* Also drop the reference to the buf item for the current transaction.
|
||||
* If the XFS_BLI_STALE flag is set and we are the last reference,
|
||||
@ -414,7 +413,9 @@ xfs_buf_item_unpin(
|
||||
trace_xfs_buf_item_unpin(bip);
|
||||
|
||||
freed = atomic_dec_and_test(&bip->bli_refcount);
|
||||
xfs_bunpin(bp);
|
||||
|
||||
if (atomic_dec_and_test(&bp->b_pin_count))
|
||||
wake_up_all(&bp->b_waiters);
|
||||
|
||||
if (freed && stale) {
|
||||
ASSERT(bip->bli_flags & XFS_BLI_STALE);
|
||||
|
Loading…
Reference in New Issue
Block a user