xfs: let xfs_bwrite callers handle the xfs_buf_relse
Remove the xfs_buf_relse from xfs_bwrite and let the caller handle it to mirror the delwri and read paths. Also remove the mount pointer passed to xfs_bwrite, which is superflous now that we have a mount pointer in the buftarg. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
parent
61551f1ee5
commit
c2b006c1da
8 changed files with 50 additions and 40 deletions
|
@ -2128,9 +2128,10 @@ xfs_attr_rmtval_set(xfs_da_args_t *args)
|
|||
xfs_buf_iomove(bp, 0, tmp, src, XBRW_WRITE);
|
||||
if (tmp < XFS_BUF_SIZE(bp))
|
||||
xfs_buf_zero(bp, tmp, XFS_BUF_SIZE(bp) - tmp);
|
||||
if ((error = xfs_bwrite(mp, bp))) {/* GROT: NOTE: synchronous write */
|
||||
return (error);
|
||||
}
|
||||
error = xfs_bwrite(bp); /* GROT: NOTE: synchronous write */
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
return error;
|
||||
src += tmp;
|
||||
valuelen -= tmp;
|
||||
|
||||
|
|
|
@ -1014,7 +1014,6 @@ xfs_buf_ioerror(
|
|||
|
||||
int
|
||||
xfs_bwrite(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_buf *bp)
|
||||
{
|
||||
int error;
|
||||
|
@ -1026,9 +1025,10 @@ xfs_bwrite(
|
|||
xfs_bdstrat_cb(bp);
|
||||
|
||||
error = xfs_buf_iowait(bp);
|
||||
if (error)
|
||||
xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
|
||||
xfs_buf_relse(bp);
|
||||
if (error) {
|
||||
xfs_force_shutdown(bp->b_target->bt_mount,
|
||||
SHUTDOWN_META_IO_ERROR);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ extern void xfs_buf_unlock(xfs_buf_t *);
|
|||
((bp)->b_sema.count <= 0)
|
||||
|
||||
/* Buffer Read and Write Routines */
|
||||
extern int xfs_bwrite(struct xfs_mount *mp, struct xfs_buf *bp);
|
||||
extern int xfs_bwrite(struct xfs_buf *bp);
|
||||
|
||||
extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
|
||||
extern int xfs_bdstrat_cb(struct xfs_buf *);
|
||||
|
|
|
@ -1242,11 +1242,11 @@ xfs_qm_dqflush(
|
|||
}
|
||||
|
||||
if (flags & SYNC_WAIT)
|
||||
error = xfs_bwrite(mp, bp);
|
||||
else {
|
||||
error = xfs_bwrite(bp);
|
||||
else
|
||||
xfs_buf_delwri_queue(bp);
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
||||
xfs_buf_relse(bp);
|
||||
|
||||
trace_xfs_dqflush_done(dqp);
|
||||
|
||||
|
|
|
@ -216,10 +216,11 @@ xfs_growfs_data_private(
|
|||
tmpsize = agsize - XFS_PREALLOC_BLOCKS(mp);
|
||||
agf->agf_freeblks = cpu_to_be32(tmpsize);
|
||||
agf->agf_longest = cpu_to_be32(tmpsize);
|
||||
error = xfs_bwrite(mp, bp);
|
||||
if (error) {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
|
||||
/*
|
||||
* AG inode header block
|
||||
*/
|
||||
|
@ -240,10 +241,11 @@ xfs_growfs_data_private(
|
|||
agi->agi_dirino = cpu_to_be32(NULLAGINO);
|
||||
for (bucket = 0; bucket < XFS_AGI_UNLINKED_BUCKETS; bucket++)
|
||||
agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
|
||||
error = xfs_bwrite(mp, bp);
|
||||
if (error) {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
|
||||
/*
|
||||
* BNO btree root block
|
||||
*/
|
||||
|
@ -262,10 +264,11 @@ xfs_growfs_data_private(
|
|||
arec->ar_startblock = cpu_to_be32(XFS_PREALLOC_BLOCKS(mp));
|
||||
arec->ar_blockcount = cpu_to_be32(
|
||||
agsize - be32_to_cpu(arec->ar_startblock));
|
||||
error = xfs_bwrite(mp, bp);
|
||||
if (error) {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
|
||||
/*
|
||||
* CNT btree root block
|
||||
*/
|
||||
|
@ -285,10 +288,11 @@ xfs_growfs_data_private(
|
|||
arec->ar_blockcount = cpu_to_be32(
|
||||
agsize - be32_to_cpu(arec->ar_startblock));
|
||||
nfree += be32_to_cpu(arec->ar_blockcount);
|
||||
error = xfs_bwrite(mp, bp);
|
||||
if (error) {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
|
||||
/*
|
||||
* INO btree root block
|
||||
*/
|
||||
|
@ -303,10 +307,10 @@ xfs_growfs_data_private(
|
|||
block->bb_numrecs = 0;
|
||||
block->bb_u.s.bb_leftsib = cpu_to_be32(NULLAGBLOCK);
|
||||
block->bb_u.s.bb_rightsib = cpu_to_be32(NULLAGBLOCK);
|
||||
error = xfs_bwrite(mp, bp);
|
||||
if (error) {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
xfs_trans_agblocks_delta(tp, nfree);
|
||||
/*
|
||||
|
@ -396,9 +400,9 @@ xfs_growfs_data_private(
|
|||
* just issue a warning and continue. The real work is
|
||||
* already done and committed.
|
||||
*/
|
||||
if (!(error = xfs_bwrite(mp, bp))) {
|
||||
continue;
|
||||
} else {
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
if (error) {
|
||||
xfs_warn(mp,
|
||||
"write error %d updating secondary superblock for ag %d",
|
||||
error, agno);
|
||||
|
|
|
@ -2597,11 +2597,11 @@ xfs_iflush(
|
|||
goto cluster_corrupt_out;
|
||||
|
||||
if (flags & SYNC_WAIT)
|
||||
error = xfs_bwrite(mp, bp);
|
||||
else {
|
||||
error = xfs_bwrite(bp);
|
||||
else
|
||||
xfs_buf_delwri_queue(bp);
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
||||
xfs_buf_relse(bp);
|
||||
return error;
|
||||
|
||||
corrupt_out:
|
||||
|
|
|
@ -268,9 +268,12 @@ xlog_bwrite(
|
|||
xfs_buf_lock(bp);
|
||||
XFS_BUF_SET_COUNT(bp, BBTOB(nbblks));
|
||||
|
||||
if ((error = xfs_bwrite(log->l_mp, bp)))
|
||||
error = xfs_bwrite(bp);
|
||||
if (error) {
|
||||
xfs_ioerror_alert("xlog_bwrite", log->l_mp,
|
||||
bp, XFS_BUF_ADDR(bp));
|
||||
}
|
||||
xfs_buf_relse(bp);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -2172,15 +2175,15 @@ xlog_recover_buffer_pass2(
|
|||
(XFS_BUF_COUNT(bp) != MAX(log->l_mp->m_sb.sb_blocksize,
|
||||
(__uint32_t)XFS_INODE_CLUSTER_SIZE(log->l_mp)))) {
|
||||
XFS_BUF_STALE(bp);
|
||||
error = xfs_bwrite(mp, bp);
|
||||
error = xfs_bwrite(bp);
|
||||
} else {
|
||||
ASSERT(bp->b_target->bt_mount == mp);
|
||||
bp->b_iodone = xlog_recover_iodone;
|
||||
xfs_buf_delwri_queue(bp);
|
||||
xfs_buf_relse(bp);
|
||||
}
|
||||
|
||||
return (error);
|
||||
xfs_buf_relse(bp);
|
||||
return error;
|
||||
}
|
||||
|
||||
STATIC int
|
||||
|
|
|
@ -322,6 +322,7 @@ xfs_sync_fsdata(
|
|||
struct xfs_mount *mp)
|
||||
{
|
||||
struct xfs_buf *bp;
|
||||
int error;
|
||||
|
||||
/*
|
||||
* If the buffer is pinned then push on the log so we won't get stuck
|
||||
|
@ -334,8 +335,9 @@ xfs_sync_fsdata(
|
|||
bp = xfs_getsb(mp, 0);
|
||||
if (xfs_buf_ispinned(bp))
|
||||
xfs_log_force(mp, 0);
|
||||
|
||||
return xfs_bwrite(mp, bp);
|
||||
error = xfs_bwrite(bp);
|
||||
xfs_buf_relse(bp);
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue