Commit cead0b10 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong

xfs: simplify xfs_trans_getsb

Remove the mp argument as this function is only called in transaction
context, and open code xfs_getsb given that the function already accesses
the buffer pointer in the mount point directly.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 22c10589
...@@ -954,7 +954,7 @@ xfs_log_sb( ...@@ -954,7 +954,7 @@ xfs_log_sb(
struct xfs_trans *tp) struct xfs_trans *tp)
{ {
struct xfs_mount *mp = tp->t_mountp; struct xfs_mount *mp = tp->t_mountp;
struct xfs_buf *bp = xfs_trans_getsb(tp, mp); struct xfs_buf *bp = xfs_trans_getsb(tp);
mp->m_sb.sb_icount = percpu_counter_sum(&mp->m_icount); mp->m_sb.sb_icount = percpu_counter_sum(&mp->m_icount);
mp->m_sb.sb_ifree = percpu_counter_sum(&mp->m_ifree); mp->m_sb.sb_ifree = percpu_counter_sum(&mp->m_ifree);
...@@ -1084,7 +1084,7 @@ xfs_sync_sb_buf( ...@@ -1084,7 +1084,7 @@ xfs_sync_sb_buf(
if (error) if (error)
return error; return error;
bp = xfs_trans_getsb(tp, mp); bp = xfs_trans_getsb(tp);
xfs_log_sb(tp); xfs_log_sb(tp);
xfs_trans_bhold(tp, bp); xfs_trans_bhold(tp, bp);
xfs_trans_set_sync(tp); xfs_trans_set_sync(tp);
......
...@@ -468,7 +468,7 @@ xfs_trans_apply_sb_deltas( ...@@ -468,7 +468,7 @@ xfs_trans_apply_sb_deltas(
xfs_buf_t *bp; xfs_buf_t *bp;
int whole = 0; int whole = 0;
bp = xfs_trans_getsb(tp, tp->t_mountp); bp = xfs_trans_getsb(tp);
sbp = bp->b_addr; sbp = bp->b_addr;
/* /*
......
...@@ -209,7 +209,7 @@ xfs_trans_read_buf( ...@@ -209,7 +209,7 @@ xfs_trans_read_buf(
flags, bpp, ops); flags, bpp, ops);
} }
struct xfs_buf *xfs_trans_getsb(xfs_trans_t *, struct xfs_mount *); struct xfs_buf *xfs_trans_getsb(struct xfs_trans *);
void xfs_trans_brelse(xfs_trans_t *, struct xfs_buf *); void xfs_trans_brelse(xfs_trans_t *, struct xfs_buf *);
void xfs_trans_bjoin(xfs_trans_t *, struct xfs_buf *); void xfs_trans_bjoin(xfs_trans_t *, struct xfs_buf *);
......
...@@ -166,50 +166,34 @@ xfs_trans_get_buf_map( ...@@ -166,50 +166,34 @@ xfs_trans_get_buf_map(
} }
/* /*
* Get and lock the superblock buffer of this file system for the * Get and lock the superblock buffer for the given transaction.
* given transaction.
*
* We don't need to use incore_match() here, because the superblock
* buffer is a private buffer which we keep a pointer to in the
* mount structure.
*/ */
xfs_buf_t * struct xfs_buf *
xfs_trans_getsb( xfs_trans_getsb(
xfs_trans_t *tp, struct xfs_trans *tp)
struct xfs_mount *mp)
{ {
xfs_buf_t *bp; struct xfs_buf *bp = tp->t_mountp->m_sb_bp;
struct xfs_buf_log_item *bip;
/* /*
* Default to just trying to lock the superblock buffer * Just increment the lock recursion count if the buffer is already
* if tp is NULL. * attached to this transaction.
*/ */
if (tp == NULL)
return xfs_getsb(mp);
/*
* If the superblock buffer already has this transaction
* pointer in its b_fsprivate2 field, then we know we already
* have it locked. In this case we just increment the lock
* recursion count and return the buffer to the caller.
*/
bp = mp->m_sb_bp;
if (bp->b_transp == tp) { if (bp->b_transp == tp) {
bip = bp->b_log_item; struct xfs_buf_log_item *bip = bp->b_log_item;
ASSERT(bip != NULL); ASSERT(bip != NULL);
ASSERT(atomic_read(&bip->bli_refcount) > 0); ASSERT(atomic_read(&bip->bli_refcount) > 0);
bip->bli_recur++; bip->bli_recur++;
trace_xfs_trans_getsb_recur(bip); trace_xfs_trans_getsb_recur(bip);
return bp; } else {
} xfs_buf_lock(bp);
xfs_buf_hold(bp);
_xfs_trans_bjoin(tp, bp, 1);
bp = xfs_getsb(mp); trace_xfs_trans_getsb(bp->b_log_item);
if (bp == NULL) }
return NULL;
_xfs_trans_bjoin(tp, bp, 1);
trace_xfs_trans_getsb(bp->b_log_item);
return bp; return bp;
} }
......
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