xfs: rename xfs_wait_buftarg() to xfs_buftarg_drain()
xfs_wait_buftarg() is vaguely named and somewhat overloaded. Its primary purpose is to reclaim all buffers from the provided buffer target LRU. In preparation to refactor xfs_wait_buftarg() into serialization and LRU draining components, rename the function and associated helpers to something more descriptive. This patch has no functional changes with the minor exception of renaming a tracepoint. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
88a9e03bee
commit
10fb9ac125
@ -43,7 +43,7 @@ static kmem_zone_t *xfs_buf_zone;
|
|||||||
* pag_buf_lock
|
* pag_buf_lock
|
||||||
* lru_lock
|
* lru_lock
|
||||||
*
|
*
|
||||||
* xfs_buftarg_wait_rele
|
* xfs_buftarg_drain_rele
|
||||||
* lru_lock
|
* lru_lock
|
||||||
* b_lock (trylock due to inversion)
|
* b_lock (trylock due to inversion)
|
||||||
*
|
*
|
||||||
@ -88,7 +88,7 @@ xfs_buf_vmap_len(
|
|||||||
* because the corresponding decrement is deferred to buffer release. Buffers
|
* because the corresponding decrement is deferred to buffer release. Buffers
|
||||||
* can undergo I/O multiple times in a hold-release cycle and per buffer I/O
|
* can undergo I/O multiple times in a hold-release cycle and per buffer I/O
|
||||||
* tracking adds unnecessary overhead. This is used for sychronization purposes
|
* tracking adds unnecessary overhead. This is used for sychronization purposes
|
||||||
* with unmount (see xfs_wait_buftarg()), so all we really need is a count of
|
* with unmount (see xfs_buftarg_drain()), so all we really need is a count of
|
||||||
* in-flight buffers.
|
* in-flight buffers.
|
||||||
*
|
*
|
||||||
* Buffers that are never released (e.g., superblock, iclog buffers) must set
|
* Buffers that are never released (e.g., superblock, iclog buffers) must set
|
||||||
@ -1786,7 +1786,7 @@ __xfs_buf_mark_corrupt(
|
|||||||
* while freeing all the buffers only held by the LRU.
|
* while freeing all the buffers only held by the LRU.
|
||||||
*/
|
*/
|
||||||
static enum lru_status
|
static enum lru_status
|
||||||
xfs_buftarg_wait_rele(
|
xfs_buftarg_drain_rele(
|
||||||
struct list_head *item,
|
struct list_head *item,
|
||||||
struct list_lru_one *lru,
|
struct list_lru_one *lru,
|
||||||
spinlock_t *lru_lock,
|
spinlock_t *lru_lock,
|
||||||
@ -1798,7 +1798,7 @@ xfs_buftarg_wait_rele(
|
|||||||
|
|
||||||
if (atomic_read(&bp->b_hold) > 1) {
|
if (atomic_read(&bp->b_hold) > 1) {
|
||||||
/* need to wait, so skip it this pass */
|
/* need to wait, so skip it this pass */
|
||||||
trace_xfs_buf_wait_buftarg(bp, _RET_IP_);
|
trace_xfs_buf_drain_buftarg(bp, _RET_IP_);
|
||||||
return LRU_SKIP;
|
return LRU_SKIP;
|
||||||
}
|
}
|
||||||
if (!spin_trylock(&bp->b_lock))
|
if (!spin_trylock(&bp->b_lock))
|
||||||
@ -1816,7 +1816,7 @@ xfs_buftarg_wait_rele(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
xfs_wait_buftarg(
|
xfs_buftarg_drain(
|
||||||
struct xfs_buftarg *btp)
|
struct xfs_buftarg *btp)
|
||||||
{
|
{
|
||||||
LIST_HEAD(dispose);
|
LIST_HEAD(dispose);
|
||||||
@ -1841,7 +1841,7 @@ xfs_wait_buftarg(
|
|||||||
|
|
||||||
/* loop until there is nothing left on the lru list. */
|
/* loop until there is nothing left on the lru list. */
|
||||||
while (list_lru_count(&btp->bt_lru)) {
|
while (list_lru_count(&btp->bt_lru)) {
|
||||||
list_lru_walk(&btp->bt_lru, xfs_buftarg_wait_rele,
|
list_lru_walk(&btp->bt_lru, xfs_buftarg_drain_rele,
|
||||||
&dispose, LONG_MAX);
|
&dispose, LONG_MAX);
|
||||||
|
|
||||||
while (!list_empty(&dispose)) {
|
while (!list_empty(&dispose)) {
|
||||||
|
@ -152,7 +152,7 @@ struct xfs_buf {
|
|||||||
struct list_head b_list;
|
struct list_head b_list;
|
||||||
struct xfs_perag *b_pag; /* contains rbtree root */
|
struct xfs_perag *b_pag; /* contains rbtree root */
|
||||||
struct xfs_mount *b_mount;
|
struct xfs_mount *b_mount;
|
||||||
xfs_buftarg_t *b_target; /* buffer target (device) */
|
struct xfs_buftarg *b_target; /* buffer target (device) */
|
||||||
void *b_addr; /* virtual address of buffer */
|
void *b_addr; /* virtual address of buffer */
|
||||||
struct work_struct b_ioend_work;
|
struct work_struct b_ioend_work;
|
||||||
struct completion b_iowait; /* queue for I/O waiters */
|
struct completion b_iowait; /* queue for I/O waiters */
|
||||||
@ -344,11 +344,11 @@ xfs_buf_update_cksum(struct xfs_buf *bp, unsigned long cksum_offset)
|
|||||||
/*
|
/*
|
||||||
* Handling of buftargs.
|
* Handling of buftargs.
|
||||||
*/
|
*/
|
||||||
extern xfs_buftarg_t *xfs_alloc_buftarg(struct xfs_mount *,
|
extern struct xfs_buftarg *xfs_alloc_buftarg(struct xfs_mount *,
|
||||||
struct block_device *, struct dax_device *);
|
struct block_device *, struct dax_device *);
|
||||||
extern void xfs_free_buftarg(struct xfs_buftarg *);
|
extern void xfs_free_buftarg(struct xfs_buftarg *);
|
||||||
extern void xfs_wait_buftarg(xfs_buftarg_t *);
|
extern void xfs_buftarg_drain(struct xfs_buftarg *);
|
||||||
extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int);
|
extern int xfs_setsize_buftarg(struct xfs_buftarg *, unsigned int);
|
||||||
|
|
||||||
#define xfs_getsize_buftarg(buftarg) block_size((buftarg)->bt_bdev)
|
#define xfs_getsize_buftarg(buftarg) block_size((buftarg)->bt_bdev)
|
||||||
#define xfs_readonly_buftarg(buftarg) bdev_read_only((buftarg)->bt_bdev)
|
#define xfs_readonly_buftarg(buftarg) bdev_read_only((buftarg)->bt_bdev)
|
||||||
|
@ -741,7 +741,7 @@ xfs_log_mount_finish(
|
|||||||
xfs_log_force(mp, XFS_LOG_SYNC);
|
xfs_log_force(mp, XFS_LOG_SYNC);
|
||||||
xfs_ail_push_all_sync(mp->m_ail);
|
xfs_ail_push_all_sync(mp->m_ail);
|
||||||
}
|
}
|
||||||
xfs_wait_buftarg(mp->m_ddev_targp);
|
xfs_buftarg_drain(mp->m_ddev_targp);
|
||||||
|
|
||||||
if (readonly)
|
if (readonly)
|
||||||
mp->m_flags |= XFS_MOUNT_RDONLY;
|
mp->m_flags |= XFS_MOUNT_RDONLY;
|
||||||
@ -936,13 +936,13 @@ xfs_log_quiesce(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* The superblock buffer is uncached and while xfs_ail_push_all_sync()
|
* The superblock buffer is uncached and while xfs_ail_push_all_sync()
|
||||||
* will push it, xfs_wait_buftarg() will not wait for it. Further,
|
* will push it, xfs_buftarg_drain() will not wait for it. Further,
|
||||||
* xfs_buf_iowait() cannot be used because it was pushed with the
|
* xfs_buf_iowait() cannot be used because it was pushed with the
|
||||||
* XBF_ASYNC flag set, so we need to use a lock/unlock pair to wait for
|
* XBF_ASYNC flag set, so we need to use a lock/unlock pair to wait for
|
||||||
* the IO to complete.
|
* the IO to complete.
|
||||||
*/
|
*/
|
||||||
xfs_ail_push_all_sync(mp->m_ail);
|
xfs_ail_push_all_sync(mp->m_ail);
|
||||||
xfs_wait_buftarg(mp->m_ddev_targp);
|
xfs_buftarg_drain(mp->m_ddev_targp);
|
||||||
xfs_buf_lock(mp->m_sb_bp);
|
xfs_buf_lock(mp->m_sb_bp);
|
||||||
xfs_buf_unlock(mp->m_sb_bp);
|
xfs_buf_unlock(mp->m_sb_bp);
|
||||||
|
|
||||||
|
@ -1023,8 +1023,8 @@ xfs_mountfs(
|
|||||||
xfs_log_mount_cancel(mp);
|
xfs_log_mount_cancel(mp);
|
||||||
out_fail_wait:
|
out_fail_wait:
|
||||||
if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
|
if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
|
||||||
xfs_wait_buftarg(mp->m_logdev_targp);
|
xfs_buftarg_drain(mp->m_logdev_targp);
|
||||||
xfs_wait_buftarg(mp->m_ddev_targp);
|
xfs_buftarg_drain(mp->m_ddev_targp);
|
||||||
out_free_perag:
|
out_free_perag:
|
||||||
xfs_free_perag(mp);
|
xfs_free_perag(mp);
|
||||||
out_free_dir:
|
out_free_dir:
|
||||||
|
@ -358,7 +358,7 @@ DEFINE_BUF_EVENT(xfs_buf_get_uncached);
|
|||||||
DEFINE_BUF_EVENT(xfs_buf_item_relse);
|
DEFINE_BUF_EVENT(xfs_buf_item_relse);
|
||||||
DEFINE_BUF_EVENT(xfs_buf_iodone_async);
|
DEFINE_BUF_EVENT(xfs_buf_iodone_async);
|
||||||
DEFINE_BUF_EVENT(xfs_buf_error_relse);
|
DEFINE_BUF_EVENT(xfs_buf_error_relse);
|
||||||
DEFINE_BUF_EVENT(xfs_buf_wait_buftarg);
|
DEFINE_BUF_EVENT(xfs_buf_drain_buftarg);
|
||||||
DEFINE_BUF_EVENT(xfs_trans_read_buf_shut);
|
DEFINE_BUF_EVENT(xfs_trans_read_buf_shut);
|
||||||
|
|
||||||
/* not really buffer traces, but the buf provides useful information */
|
/* not really buffer traces, but the buf provides useful information */
|
||||||
|
Loading…
Reference in New Issue
Block a user