Commit 8e123850 authored by Dave Chinner's avatar Dave Chinner Committed by Alex Elder

xfs: remove stale parameter from ->iop_unpin method

The staleness of a object being unpinned can be directly derived
from the object itself - there is no need to extract it from the
object then pass it as a parameter into IOP_UNPIN().

This means we can kill the XFS_LID_BUF_STALE flag - it is set,
checked and cleared in the same places XFS_BLI_STALE flag in the
xfs_buf_log_item so it is now redundant and hence safe to remove.
Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 4aaf15d1
...@@ -107,8 +107,7 @@ xfs_qm_dquot_logitem_pin( ...@@ -107,8 +107,7 @@ xfs_qm_dquot_logitem_pin(
/* ARGSUSED */ /* ARGSUSED */
STATIC void STATIC void
xfs_qm_dquot_logitem_unpin( xfs_qm_dquot_logitem_unpin(
xfs_dq_logitem_t *logitem, xfs_dq_logitem_t *logitem)
int stale)
{ {
xfs_dquot_t *dqp = logitem->qli_dquot; xfs_dquot_t *dqp = logitem->qli_dquot;
...@@ -123,7 +122,7 @@ xfs_qm_dquot_logitem_unpin_remove( ...@@ -123,7 +122,7 @@ xfs_qm_dquot_logitem_unpin_remove(
xfs_dq_logitem_t *logitem, xfs_dq_logitem_t *logitem,
xfs_trans_t *tp) xfs_trans_t *tp)
{ {
xfs_qm_dquot_logitem_unpin(logitem, 0); xfs_qm_dquot_logitem_unpin(logitem);
} }
/* /*
...@@ -329,8 +328,7 @@ static struct xfs_item_ops xfs_dquot_item_ops = { ...@@ -329,8 +328,7 @@ static struct xfs_item_ops xfs_dquot_item_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_qm_dquot_logitem_format, xfs_qm_dquot_logitem_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_dquot_logitem_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_dquot_logitem_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int)) .iop_unpin = (void(*)(xfs_log_item_t*))xfs_qm_dquot_logitem_unpin,
xfs_qm_dquot_logitem_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*)) .iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*))
xfs_qm_dquot_logitem_unpin_remove, xfs_qm_dquot_logitem_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*)) .iop_trylock = (uint(*)(xfs_log_item_t*))
...@@ -425,7 +423,7 @@ xfs_qm_qoff_logitem_pin(xfs_qoff_logitem_t *qf) ...@@ -425,7 +423,7 @@ xfs_qm_qoff_logitem_pin(xfs_qoff_logitem_t *qf)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
STATIC void STATIC void
xfs_qm_qoff_logitem_unpin(xfs_qoff_logitem_t *qf, int stale) xfs_qm_qoff_logitem_unpin(xfs_qoff_logitem_t *qf)
{ {
return; return;
} }
...@@ -536,8 +534,7 @@ static struct xfs_item_ops xfs_qm_qoffend_logitem_ops = { ...@@ -536,8 +534,7 @@ static struct xfs_item_ops xfs_qm_qoffend_logitem_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_qm_qoff_logitem_format, xfs_qm_qoff_logitem_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_pin,
.iop_unpin = (void(*)(xfs_log_item_t* ,int)) .iop_unpin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_unpin,
xfs_qm_qoff_logitem_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*,xfs_trans_t*)) .iop_unpin_remove = (void(*)(xfs_log_item_t*,xfs_trans_t*))
xfs_qm_qoff_logitem_unpin_remove, xfs_qm_qoff_logitem_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_trylock,
...@@ -558,8 +555,7 @@ static struct xfs_item_ops xfs_qm_qoff_logitem_ops = { ...@@ -558,8 +555,7 @@ static struct xfs_item_ops xfs_qm_qoff_logitem_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_qm_qoff_logitem_format, xfs_qm_qoff_logitem_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int)) .iop_unpin = (void(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_unpin,
xfs_qm_qoff_logitem_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*,xfs_trans_t*)) .iop_unpin_remove = (void(*)(xfs_log_item_t*,xfs_trans_t*))
xfs_qm_qoff_logitem_unpin_remove, xfs_qm_qoff_logitem_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_qm_qoff_logitem_trylock,
......
...@@ -372,12 +372,12 @@ xfs_buf_item_pin( ...@@ -372,12 +372,12 @@ xfs_buf_item_pin(
*/ */
STATIC void STATIC void
xfs_buf_item_unpin( xfs_buf_item_unpin(
xfs_buf_log_item_t *bip, xfs_buf_log_item_t *bip)
int stale)
{ {
struct xfs_ail *ailp; struct xfs_ail *ailp;
xfs_buf_t *bp; xfs_buf_t *bp;
int freed; int freed;
int stale = bip->bli_flags & XFS_BLI_STALE;
bp = bip->bli_buf; bp = bip->bli_buf;
ASSERT(bp != NULL); ASSERT(bp != NULL);
...@@ -428,40 +428,34 @@ xfs_buf_item_unpin_remove( ...@@ -428,40 +428,34 @@ xfs_buf_item_unpin_remove(
xfs_buf_log_item_t *bip, xfs_buf_log_item_t *bip,
xfs_trans_t *tp) xfs_trans_t *tp)
{ {
xfs_buf_t *bp; /* will xfs_buf_item_unpin() call xfs_buf_item_relse()? */
xfs_log_item_desc_t *lidp;
int stale = 0;
bp = bip->bli_buf;
/*
* will xfs_buf_item_unpin() call xfs_buf_item_relse()?
*/
if ((atomic_read(&bip->bli_refcount) == 1) && if ((atomic_read(&bip->bli_refcount) == 1) &&
(bip->bli_flags & XFS_BLI_STALE)) { (bip->bli_flags & XFS_BLI_STALE)) {
/*
* yes -- We can safely do some work here and then call
* buf_item_unpin to do the rest because we are
* are holding the buffer locked so no one else will be
* able to bump up the refcount. We have to remove the
* log item from the transaction as we are about to release
* our reference to the buffer. If we don't, the unlock that
* occurs later in the xfs_trans_uncommit() will try to
* reference the buffer which we no longer have a hold on.
*/
struct xfs_log_item_desc *lidp;
ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0); ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0);
trace_xfs_buf_item_unpin_stale(bip); trace_xfs_buf_item_unpin_stale(bip);
/* lidp = xfs_trans_find_item(tp, (xfs_log_item_t *)bip);
* yes -- clear the xaction descriptor in-use flag
* and free the chunk if required. We can safely
* do some work here and then call buf_item_unpin
* to do the rest because if the if is true, then
* we are holding the buffer locked so no one else
* will be able to bump up the refcount.
*/
lidp = xfs_trans_find_item(tp, (xfs_log_item_t *) bip);
stale = lidp->lid_flags & XFS_LID_BUF_STALE;
xfs_trans_free_item(tp, lidp); xfs_trans_free_item(tp, lidp);
/* /*
* Since the transaction no longer refers to the buffer, * Since the transaction no longer refers to the buffer, the
* the buffer should no longer refer to the transaction. * buffer should no longer refer to the transaction.
*/ */
XFS_BUF_SET_FSPRIVATE2(bp, NULL); XFS_BUF_SET_FSPRIVATE2(bip->bli_buf, NULL);
} }
xfs_buf_item_unpin(bip);
xfs_buf_item_unpin(bip, stale);
return;
} }
/* /*
...@@ -675,7 +669,7 @@ static struct xfs_item_ops xfs_buf_item_ops = { ...@@ -675,7 +669,7 @@ static struct xfs_item_ops xfs_buf_item_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_buf_item_format, xfs_buf_item_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_buf_item_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_buf_item_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int))xfs_buf_item_unpin, .iop_unpin = (void(*)(xfs_log_item_t*))xfs_buf_item_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t *)) .iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t *))
xfs_buf_item_unpin_remove, xfs_buf_item_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_buf_item_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_buf_item_trylock,
......
...@@ -106,7 +106,7 @@ xfs_efi_item_pin(xfs_efi_log_item_t *efip) ...@@ -106,7 +106,7 @@ xfs_efi_item_pin(xfs_efi_log_item_t *efip)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
STATIC void STATIC void
xfs_efi_item_unpin(xfs_efi_log_item_t *efip, int stale) xfs_efi_item_unpin(xfs_efi_log_item_t *efip)
{ {
struct xfs_ail *ailp = efip->efi_item.li_ailp; struct xfs_ail *ailp = efip->efi_item.li_ailp;
...@@ -224,7 +224,7 @@ static struct xfs_item_ops xfs_efi_item_ops = { ...@@ -224,7 +224,7 @@ static struct xfs_item_ops xfs_efi_item_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_efi_item_format, xfs_efi_item_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_efi_item_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_efi_item_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int))xfs_efi_item_unpin, .iop_unpin = (void(*)(xfs_log_item_t*))xfs_efi_item_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t *)) .iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t *))
xfs_efi_item_unpin_remove, xfs_efi_item_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_efi_item_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_efi_item_trylock,
...@@ -425,7 +425,7 @@ xfs_efd_item_pin(xfs_efd_log_item_t *efdp) ...@@ -425,7 +425,7 @@ xfs_efd_item_pin(xfs_efd_log_item_t *efdp)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
STATIC void STATIC void
xfs_efd_item_unpin(xfs_efd_log_item_t *efdp, int stale) xfs_efd_item_unpin(xfs_efd_log_item_t *efdp)
{ {
return; return;
} }
...@@ -515,7 +515,7 @@ static struct xfs_item_ops xfs_efd_item_ops = { ...@@ -515,7 +515,7 @@ static struct xfs_item_ops xfs_efd_item_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_efd_item_format, xfs_efd_item_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_efd_item_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_efd_item_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int))xfs_efd_item_unpin, .iop_unpin = (void(*)(xfs_log_item_t*))xfs_efd_item_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*)) .iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*))
xfs_efd_item_unpin_remove, xfs_efd_item_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_efd_item_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_efd_item_trylock,
......
...@@ -557,8 +557,7 @@ xfs_inode_item_pin( ...@@ -557,8 +557,7 @@ xfs_inode_item_pin(
/* ARGSUSED */ /* ARGSUSED */
STATIC void STATIC void
xfs_inode_item_unpin( xfs_inode_item_unpin(
xfs_inode_log_item_t *iip, xfs_inode_log_item_t *iip)
int stale)
{ {
struct xfs_inode *ip = iip->ili_inode; struct xfs_inode *ip = iip->ili_inode;
...@@ -574,7 +573,7 @@ xfs_inode_item_unpin_remove( ...@@ -574,7 +573,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_inode_item_unpin(iip, 0); xfs_inode_item_unpin(iip);
} }
/* /*
...@@ -840,7 +839,7 @@ static struct xfs_item_ops xfs_inode_item_ops = { ...@@ -840,7 +839,7 @@ static struct xfs_item_ops xfs_inode_item_ops = {
.iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*)) .iop_format = (void(*)(xfs_log_item_t*, xfs_log_iovec_t*))
xfs_inode_item_format, xfs_inode_item_format,
.iop_pin = (void(*)(xfs_log_item_t*))xfs_inode_item_pin, .iop_pin = (void(*)(xfs_log_item_t*))xfs_inode_item_pin,
.iop_unpin = (void(*)(xfs_log_item_t*, int))xfs_inode_item_unpin, .iop_unpin = (void(*)(xfs_log_item_t*))xfs_inode_item_unpin,
.iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*)) .iop_unpin_remove = (void(*)(xfs_log_item_t*, xfs_trans_t*))
xfs_inode_item_unpin_remove, xfs_inode_item_unpin_remove,
.iop_trylock = (uint(*)(xfs_log_item_t*))xfs_inode_item_trylock, .iop_trylock = (uint(*)(xfs_log_item_t*))xfs_inode_item_trylock,
......
...@@ -1451,6 +1451,6 @@ xfs_trans_chunk_committed( ...@@ -1451,6 +1451,6 @@ xfs_trans_chunk_committed(
* flags, if anyone else stales the buffer we do not * flags, if anyone else stales the buffer we do not
* want to pay any attention to it. * want to pay any attention to it.
*/ */
IOP_UNPIN(lip, lidp->lid_flags & XFS_LID_BUF_STALE); IOP_UNPIN(lip);
} }
} }
...@@ -159,7 +159,6 @@ typedef struct xfs_log_item_desc { ...@@ -159,7 +159,6 @@ typedef struct xfs_log_item_desc {
#define XFS_LID_DIRTY 0x1 #define XFS_LID_DIRTY 0x1
#define XFS_LID_PINNED 0x2 #define XFS_LID_PINNED 0x2
#define XFS_LID_BUF_STALE 0x8
/* /*
* This structure is used to maintain a chunk list of log_item_desc * This structure is used to maintain a chunk list of log_item_desc
...@@ -833,7 +832,7 @@ typedef struct xfs_item_ops { ...@@ -833,7 +832,7 @@ typedef struct xfs_item_ops {
uint (*iop_size)(xfs_log_item_t *); uint (*iop_size)(xfs_log_item_t *);
void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *); void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *);
void (*iop_pin)(xfs_log_item_t *); void (*iop_pin)(xfs_log_item_t *);
void (*iop_unpin)(xfs_log_item_t *, int); void (*iop_unpin)(xfs_log_item_t *);
void (*iop_unpin_remove)(xfs_log_item_t *, struct xfs_trans *); void (*iop_unpin_remove)(xfs_log_item_t *, struct xfs_trans *);
uint (*iop_trylock)(xfs_log_item_t *); uint (*iop_trylock)(xfs_log_item_t *);
void (*iop_unlock)(xfs_log_item_t *); void (*iop_unlock)(xfs_log_item_t *);
...@@ -846,7 +845,7 @@ typedef struct xfs_item_ops { ...@@ -846,7 +845,7 @@ typedef struct xfs_item_ops {
#define IOP_SIZE(ip) (*(ip)->li_ops->iop_size)(ip) #define IOP_SIZE(ip) (*(ip)->li_ops->iop_size)(ip)
#define IOP_FORMAT(ip,vp) (*(ip)->li_ops->iop_format)(ip, vp) #define IOP_FORMAT(ip,vp) (*(ip)->li_ops->iop_format)(ip, vp)
#define IOP_PIN(ip) (*(ip)->li_ops->iop_pin)(ip) #define IOP_PIN(ip) (*(ip)->li_ops->iop_pin)(ip)
#define IOP_UNPIN(ip, flags) (*(ip)->li_ops->iop_unpin)(ip, flags) #define IOP_UNPIN(ip) (*(ip)->li_ops->iop_unpin)(ip)
#define IOP_UNPIN_REMOVE(ip,tp) (*(ip)->li_ops->iop_unpin_remove)(ip, tp) #define IOP_UNPIN_REMOVE(ip,tp) (*(ip)->li_ops->iop_unpin_remove)(ip, tp)
#define IOP_TRYLOCK(ip) (*(ip)->li_ops->iop_trylock)(ip) #define IOP_TRYLOCK(ip) (*(ip)->li_ops->iop_trylock)(ip)
#define IOP_UNLOCK(ip) (*(ip)->li_ops->iop_unlock)(ip) #define IOP_UNLOCK(ip) (*(ip)->li_ops->iop_unlock)(ip)
......
...@@ -696,7 +696,6 @@ xfs_trans_log_buf(xfs_trans_t *tp, ...@@ -696,7 +696,6 @@ xfs_trans_log_buf(xfs_trans_t *tp,
tp->t_flags |= XFS_TRANS_DIRTY; tp->t_flags |= XFS_TRANS_DIRTY;
lidp->lid_flags |= XFS_LID_DIRTY; lidp->lid_flags |= XFS_LID_DIRTY;
lidp->lid_flags &= ~XFS_LID_BUF_STALE;
bip->bli_flags |= XFS_BLI_LOGGED; bip->bli_flags |= XFS_BLI_LOGGED;
xfs_buf_item_log(bip, first, last); xfs_buf_item_log(bip, first, last);
} }
...@@ -782,7 +781,7 @@ xfs_trans_binval( ...@@ -782,7 +781,7 @@ xfs_trans_binval(
bip->bli_format.blf_flags |= XFS_BLI_CANCEL; bip->bli_format.blf_flags |= XFS_BLI_CANCEL;
memset((char *)(bip->bli_format.blf_data_map), 0, memset((char *)(bip->bli_format.blf_data_map), 0,
(bip->bli_format.blf_map_size * sizeof(uint))); (bip->bli_format.blf_map_size * sizeof(uint)));
lidp->lid_flags |= XFS_LID_DIRTY|XFS_LID_BUF_STALE; lidp->lid_flags |= XFS_LID_DIRTY;
tp->t_flags |= XFS_TRANS_DIRTY; tp->t_flags |= XFS_TRANS_DIRTY;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment