mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	xfs: make xfs_trans_get_buf return an error code
Convert xfs_trans_get_buf() to return numeric error codes like most everywhere else in xfs. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
		
							parent
							
								
									9676b54e6e
								
							
						
					
					
						commit
						ce92464c18
					
				
					 10 changed files with 67 additions and 62 deletions
				
			
		| 
						 | 
				
			
			@ -688,11 +688,16 @@ xfs_btree_get_bufl(
 | 
			
		|||
	xfs_trans_t	*tp,		/* transaction pointer */
 | 
			
		||||
	xfs_fsblock_t	fsbno)		/* file system block number */
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_buf		*bp;
 | 
			
		||||
	xfs_daddr_t		d;		/* real disk block address */
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	ASSERT(fsbno != NULLFSBLOCK);
 | 
			
		||||
	d = XFS_FSB_TO_DADDR(mp, fsbno);
 | 
			
		||||
	return xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0);
 | 
			
		||||
	error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return bp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -706,12 +711,17 @@ xfs_btree_get_bufs(
 | 
			
		|||
	xfs_agnumber_t	agno,		/* allocation group number */
 | 
			
		||||
	xfs_agblock_t	agbno)		/* allocation group block number */
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_buf		*bp;
 | 
			
		||||
	xfs_daddr_t		d;		/* real disk block address */
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	ASSERT(agno != NULLAGNUMBER);
 | 
			
		||||
	ASSERT(agbno != NULLAGBLOCK);
 | 
			
		||||
	d = XFS_AGB_TO_DADDR(mp, agno, agbno);
 | 
			
		||||
	return xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0);
 | 
			
		||||
	error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d, mp->m_bsize, 0, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return bp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1270,11 +1280,10 @@ xfs_btree_get_buf_block(
 | 
			
		|||
	error = xfs_btree_ptr_to_daddr(cur, ptr, &d);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
	*bpp = xfs_trans_get_buf(cur->bc_tp, mp->m_ddev_targp, d,
 | 
			
		||||
				 mp->m_bsize, 0);
 | 
			
		||||
 | 
			
		||||
	if (!*bpp)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	error = xfs_trans_get_buf(cur->bc_tp, mp->m_ddev_targp, d, mp->m_bsize,
 | 
			
		||||
			0, bpp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
 | 
			
		||||
	(*bpp)->b_ops = cur->bc_ops->buf_ops;
 | 
			
		||||
	*block = XFS_BUF_TO_BLOCK(*bpp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -276,6 +276,7 @@ xfs_ialloc_inode_init(
 | 
			
		|||
	int			i, j;
 | 
			
		||||
	xfs_daddr_t		d;
 | 
			
		||||
	xfs_ino_t		ino = 0;
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Loop over the new block(s), filling in the inodes.  For small block
 | 
			
		||||
| 
						 | 
				
			
			@ -327,12 +328,11 @@ xfs_ialloc_inode_init(
 | 
			
		|||
		 */
 | 
			
		||||
		d = XFS_AGB_TO_DADDR(mp, agno, agbno +
 | 
			
		||||
				(j * M_IGEO(mp)->blocks_per_cluster));
 | 
			
		||||
		fbuf = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
					 mp->m_bsize *
 | 
			
		||||
					 M_IGEO(mp)->blocks_per_cluster,
 | 
			
		||||
					 XBF_UNMAPPED);
 | 
			
		||||
		if (!fbuf)
 | 
			
		||||
			return -ENOMEM;
 | 
			
		||||
		error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
				mp->m_bsize * M_IGEO(mp)->blocks_per_cluster,
 | 
			
		||||
				XBF_UNMAPPED, &fbuf);
 | 
			
		||||
		if (error)
 | 
			
		||||
			return error;
 | 
			
		||||
 | 
			
		||||
		/* Initialize the inode buffers and log them appropriately. */
 | 
			
		||||
		fbuf->b_ops = &xfs_inode_buf_ops;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1185,13 +1185,14 @@ xfs_sb_get_secondary(
 | 
			
		|||
	struct xfs_buf		**bpp)
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_buf		*bp;
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	ASSERT(agno != 0 && agno != NULLAGNUMBER);
 | 
			
		||||
	bp = xfs_trans_get_buf(tp, mp->m_ddev_targp,
 | 
			
		||||
	error = xfs_trans_get_buf(tp, mp->m_ddev_targp,
 | 
			
		||||
			XFS_AG_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
 | 
			
		||||
			XFS_FSS_TO_BB(mp, 1), 0);
 | 
			
		||||
	if (!bp)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
			XFS_FSS_TO_BB(mp, 1), 0, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
	bp->b_ops = &xfs_sb_buf_ops;
 | 
			
		||||
	xfs_buf_oneshot(bp);
 | 
			
		||||
	*bpp = bp;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -341,13 +341,17 @@ xrep_init_btblock(
 | 
			
		|||
	struct xfs_trans		*tp = sc->tp;
 | 
			
		||||
	struct xfs_mount		*mp = sc->mp;
 | 
			
		||||
	struct xfs_buf			*bp;
 | 
			
		||||
	int				error;
 | 
			
		||||
 | 
			
		||||
	trace_xrep_init_btblock(mp, XFS_FSB_TO_AGNO(mp, fsb),
 | 
			
		||||
			XFS_FSB_TO_AGBNO(mp, fsb), btnum);
 | 
			
		||||
 | 
			
		||||
	ASSERT(XFS_FSB_TO_AGNO(mp, fsb) == sc->sa.agno);
 | 
			
		||||
	bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, XFS_FSB_TO_DADDR(mp, fsb),
 | 
			
		||||
			XFS_FSB_TO_BB(mp, 1), 0);
 | 
			
		||||
	error = xfs_trans_get_buf(tp, mp->m_ddev_targp,
 | 
			
		||||
			XFS_FSB_TO_DADDR(mp, fsb), XFS_FSB_TO_BB(mp, 1), 0,
 | 
			
		||||
			&bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
	xfs_buf_zero(bp, 0, BBTOB(bp->b_length));
 | 
			
		||||
	xfs_btree_init_block(mp, bp, btnum, 0, 0, sc->sa.agno);
 | 
			
		||||
	xfs_trans_buf_set_type(tp, bp, XFS_BLFT_BTREE_BUF);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,11 +205,12 @@ xfs_attr3_node_inactive(
 | 
			
		|||
		/*
 | 
			
		||||
		 * Remove the subsidiary block from the cache and from the log.
 | 
			
		||||
		 */
 | 
			
		||||
		child_bp = xfs_trans_get_buf(*trans, mp->m_ddev_targp,
 | 
			
		||||
		error = xfs_trans_get_buf(*trans, mp->m_ddev_targp,
 | 
			
		||||
				child_blkno,
 | 
			
		||||
				XFS_FSB_TO_BB(mp, mp->m_attr_geo->fsbcount), 0);
 | 
			
		||||
		if (!child_bp)
 | 
			
		||||
			return -EIO;
 | 
			
		||||
				XFS_FSB_TO_BB(mp, mp->m_attr_geo->fsbcount), 0,
 | 
			
		||||
				&child_bp);
 | 
			
		||||
		if (error)
 | 
			
		||||
			return error;
 | 
			
		||||
		error = bp->b_error;
 | 
			
		||||
		if (error) {
 | 
			
		||||
			xfs_trans_brelse(*trans, child_bp);
 | 
			
		||||
| 
						 | 
				
			
			@ -298,10 +299,10 @@ xfs_attr3_root_inactive(
 | 
			
		|||
	/*
 | 
			
		||||
	 * Invalidate the incore copy of the root block.
 | 
			
		||||
	 */
 | 
			
		||||
	bp = xfs_trans_get_buf(*trans, mp->m_ddev_targp, blkno,
 | 
			
		||||
			XFS_FSB_TO_BB(mp, mp->m_attr_geo->fsbcount), 0);
 | 
			
		||||
	if (!bp)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	error = xfs_trans_get_buf(*trans, mp->m_ddev_targp, blkno,
 | 
			
		||||
			XFS_FSB_TO_BB(mp, mp->m_attr_geo->fsbcount), 0, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
	error = bp->b_error;
 | 
			
		||||
	if (error) {
 | 
			
		||||
		xfs_trans_brelse(*trans, bp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -320,10 +320,10 @@ xfs_dquot_disk_alloc(
 | 
			
		|||
	dqp->q_blkno = XFS_FSB_TO_DADDR(mp, map.br_startblock);
 | 
			
		||||
 | 
			
		||||
	/* now we can just get the buffer (there's nothing to read yet) */
 | 
			
		||||
	bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, dqp->q_blkno,
 | 
			
		||||
			mp->m_quotainfo->qi_dqchunklen, 0);
 | 
			
		||||
	if (!bp)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	error = xfs_trans_get_buf(tp, mp->m_ddev_targp, dqp->q_blkno,
 | 
			
		||||
			mp->m_quotainfo->qi_dqchunklen, 0, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
	bp->b_ops = &xfs_dquot_buf_ops;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2546,6 +2546,7 @@ xfs_ifree_cluster(
 | 
			
		|||
	struct xfs_perag	*pag;
 | 
			
		||||
	struct xfs_ino_geometry	*igeo = M_IGEO(mp);
 | 
			
		||||
	xfs_ino_t		inum;
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	inum = xic->first_ino;
 | 
			
		||||
	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, inum));
 | 
			
		||||
| 
						 | 
				
			
			@ -2574,12 +2575,11 @@ xfs_ifree_cluster(
 | 
			
		|||
		 * complete before we get a lock on it, and hence we may fail
 | 
			
		||||
		 * to mark all the active inodes on the buffer stale.
 | 
			
		||||
		 */
 | 
			
		||||
		bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, blkno,
 | 
			
		||||
					mp->m_bsize * igeo->blocks_per_cluster,
 | 
			
		||||
					XBF_UNMAPPED);
 | 
			
		||||
 | 
			
		||||
		if (!bp)
 | 
			
		||||
			return -ENOMEM;
 | 
			
		||||
		error = xfs_trans_get_buf(tp, mp->m_ddev_targp, blkno,
 | 
			
		||||
				mp->m_bsize * igeo->blocks_per_cluster,
 | 
			
		||||
				XBF_UNMAPPED, &bp);
 | 
			
		||||
		if (error)
 | 
			
		||||
			return error;
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * This buffer may not have been correctly initialised as we
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -826,12 +826,10 @@ xfs_growfs_rt_alloc(
 | 
			
		|||
			 * Get a buffer for the block.
 | 
			
		||||
			 */
 | 
			
		||||
			d = XFS_FSB_TO_DADDR(mp, fsbno);
 | 
			
		||||
			bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
				mp->m_bsize, 0);
 | 
			
		||||
			if (bp == NULL) {
 | 
			
		||||
				error = -EIO;
 | 
			
		||||
			error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
					mp->m_bsize, 0, &bp);
 | 
			
		||||
			if (error)
 | 
			
		||||
				goto out_trans_cancel;
 | 
			
		||||
			}
 | 
			
		||||
			memset(bp->b_addr, 0, mp->m_sb.sb_blocksize);
 | 
			
		||||
			xfs_trans_log_buf(tp, bp, 0, mp->m_sb.sb_blocksize - 1);
 | 
			
		||||
			/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -280,12 +280,10 @@ xfs_symlink(
 | 
			
		|||
 | 
			
		||||
			d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock);
 | 
			
		||||
			byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount);
 | 
			
		||||
			bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
					       BTOBB(byte_cnt), 0);
 | 
			
		||||
			if (!bp) {
 | 
			
		||||
				error = -ENOMEM;
 | 
			
		||||
			error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
 | 
			
		||||
					       BTOBB(byte_cnt), 0, &bp);
 | 
			
		||||
			if (error)
 | 
			
		||||
				goto out_trans_cancel;
 | 
			
		||||
			}
 | 
			
		||||
			bp->b_ops = &xfs_symlink_buf_ops;
 | 
			
		||||
 | 
			
		||||
			byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt);
 | 
			
		||||
| 
						 | 
				
			
			@ -423,13 +421,12 @@ xfs_inactive_symlink_rmt(
 | 
			
		|||
	 * Invalidate the block(s). No validation is done.
 | 
			
		||||
	 */
 | 
			
		||||
	for (i = 0; i < nmaps; i++) {
 | 
			
		||||
		bp = xfs_trans_get_buf(tp, mp->m_ddev_targp,
 | 
			
		||||
			XFS_FSB_TO_DADDR(mp, mval[i].br_startblock),
 | 
			
		||||
			XFS_FSB_TO_BB(mp, mval[i].br_blockcount), 0);
 | 
			
		||||
		if (!bp) {
 | 
			
		||||
			error = -ENOMEM;
 | 
			
		||||
		error = xfs_trans_get_buf(tp, mp->m_ddev_targp,
 | 
			
		||||
				XFS_FSB_TO_DADDR(mp, mval[i].br_startblock),
 | 
			
		||||
				XFS_FSB_TO_BB(mp, mval[i].br_blockcount), 0,
 | 
			
		||||
				&bp);
 | 
			
		||||
		if (error)
 | 
			
		||||
			goto error_trans_cancel;
 | 
			
		||||
		}
 | 
			
		||||
		xfs_trans_binval(tp, bp);
 | 
			
		||||
	}
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -173,22 +173,17 @@ int xfs_trans_get_buf_map(struct xfs_trans *tp, struct xfs_buftarg *target,
 | 
			
		|||
		struct xfs_buf_map *map, int nmaps, xfs_buf_flags_t flags,
 | 
			
		||||
		struct xfs_buf **bpp);
 | 
			
		||||
 | 
			
		||||
static inline struct xfs_buf *
 | 
			
		||||
static inline int
 | 
			
		||||
xfs_trans_get_buf(
 | 
			
		||||
	struct xfs_trans	*tp,
 | 
			
		||||
	struct xfs_buftarg	*target,
 | 
			
		||||
	xfs_daddr_t		blkno,
 | 
			
		||||
	int			numblks,
 | 
			
		||||
	uint			flags)
 | 
			
		||||
	uint			flags,
 | 
			
		||||
	struct xfs_buf		**bpp)
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_buf		*bp;
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
 | 
			
		||||
	error = xfs_trans_get_buf_map(tp, target, &map, 1, flags, &bp);
 | 
			
		||||
	if (error)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return bp;
 | 
			
		||||
	return xfs_trans_get_buf_map(tp, target, &map, 1, flags, bpp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int		xfs_trans_read_buf_map(struct xfs_mount *mp,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue