Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a30f36d authored by Chandra Seetharaman's avatar Chandra Seetharaman Committed by Alex Elder
Browse files

xfs: Check the return value of xfs_trans_get_buf()



Check the return value of xfs_trans_get_buf() and fail
appropriately.

Signed-off-by: default avatarChandra Seetharaman <sekharan@us.ibm.com>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent b522950f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2948,6 +2948,8 @@ xfs_attr_leaf_freextent(xfs_trans_t **trans, xfs_inode_t *dp,
			bp = xfs_trans_get_buf(*trans,
					dp->i_mount->m_ddev_targp,
					dblkno, dblkcnt, XBF_LOCK);
			if (!bp)
				return ENOMEM;
			xfs_trans_binval(*trans, bp);
			/*
			 * Roll to next transaction.
+2 −1
Original line number Diff line number Diff line
@@ -970,7 +970,8 @@ xfs_btree_get_buf_block(
	*bpp = xfs_trans_get_buf(cur->bc_tp, mp->m_ddev_targp, d,
				 mp->m_bsize, flags);

	ASSERT(!xfs_buf_geterror(*bpp));
	if (!*bpp)
		return ENOMEM;

	*block = XFS_BUF_TO_BLOCK(*bpp);
	return 0;
+4 −1
Original line number Diff line number Diff line
@@ -402,8 +402,11 @@ xfs_qm_dqalloc(
			       dqp->q_blkno,
			       mp->m_quotainfo->qi_dqchunklen,
			       0);
	if (!bp || (error = xfs_buf_geterror(bp)))

	error = xfs_buf_geterror(bp);
	if (error)
		goto error1;

	/*
	 * Make a chunk of dquots out of this buffer and log
	 * the entire thing.
+8 −5
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ xfs_check_agi_freecount(
/*
 * Initialise a new set of inodes.
 */
STATIC void
STATIC int
xfs_ialloc_inode_init(
	struct xfs_mount	*mp,
	struct xfs_trans	*tp,
@@ -202,8 +202,8 @@ xfs_ialloc_inode_init(
		fbuf = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
					 mp->m_bsize * blks_per_cluster,
					 XBF_LOCK);
		ASSERT(!xfs_buf_geterror(fbuf));

		if (!fbuf)
			return ENOMEM;
		/*
		 * Initialize all inodes in this buffer and then log them.
		 *
@@ -225,6 +225,7 @@ xfs_ialloc_inode_init(
		}
		xfs_trans_inode_alloc_buf(tp, fbuf);
	}
	return 0;
}

/*
@@ -369,9 +370,11 @@ xfs_ialloc_ag_alloc(
	 * rather than a linear progression to prevent the next generation
	 * number from being easily guessable.
	 */
	xfs_ialloc_inode_init(args.mp, tp, agno, args.agbno, args.len,
			      random32());
	error = xfs_ialloc_inode_init(args.mp, tp, agno, args.agbno,
			args.len, random32());

	if (error)
		return error;
	/*
	 * Convert the results.
	 */
+6 −3
Original line number Diff line number Diff line
@@ -1644,7 +1644,7 @@ xfs_iunlink_remove(
 * inodes that are in memory - they all must be marked stale and attached to
 * the cluster buffer.
 */
STATIC void
STATIC int
xfs_ifree_cluster(
	xfs_inode_t	*free_ip,
	xfs_trans_t	*tp,
@@ -1690,6 +1690,8 @@ xfs_ifree_cluster(
					mp->m_bsize * blks_per_cluster,
					XBF_LOCK);

		if (!bp)
			return ENOMEM;
		/*
		 * Walk the inodes already attached to the buffer and mark them
		 * stale. These will all have the flush locks held, so an
@@ -1799,6 +1801,7 @@ retry:
	}

	xfs_perag_put(pag);
	return 0;
}

/*
@@ -1878,10 +1881,10 @@ xfs_ifree(
	dip->di_mode = 0;

	if (delete) {
		xfs_ifree_cluster(ip, tp, first_ino);
		error = xfs_ifree_cluster(ip, tp, first_ino);
	}

	return 0;
	return error;
}

/*
Loading