#define libxfs_buf_mark_dirty(buf) \
libxfs_trace_dirtybuf(__FUNCTION__, __FILE__, __LINE__, \
(buf))
-#define libxfs_buf_get(dev, daddr, len) \
+#define libxfs_buf_get(dev, daddr, len, bpp) \
libxfs_trace_getbuf(__FUNCTION__, __FILE__, __LINE__, \
- (dev), (daddr), (len))
+ (dev), (daddr), (len), (bpp))
#define libxfs_buf_get_map(dev, map, nmaps, flags, bpp) \
libxfs_trace_getbuf_map(__FUNCTION__, __FILE__, __LINE__, \
(dev), (map), (nmaps), (flags), (bpp))
const struct xfs_buf_ops *ops);
void libxfs_trace_dirtybuf(const char *func, const char *file, int line,
struct xfs_buf *bp);
-struct xfs_buf *libxfs_trace_getbuf(const char *func, const char *file,
- int line, struct xfs_buftarg *btp, xfs_daddr_t daddr,
- size_t len);
+int libxfs_trace_getbuf(const char *func, const char *file, int line,
+ struct xfs_buftarg *btp, xfs_daddr_t daddr,
+ size_t len, struct xfs_buf **bpp);
int libxfs_trace_getbuf_map(const char *func, const char *file, int line,
struct xfs_buftarg *btp, struct xfs_buf_map *map,
int nmaps, int flags, struct xfs_buf **bpp);
int nmaps, int flags, struct xfs_buf **bpp);
void libxfs_buf_relse(struct xfs_buf *bp);
-static inline struct xfs_buf*
+static inline int
libxfs_buf_get(
struct xfs_buftarg *target,
xfs_daddr_t blkno,
- size_t numblks)
+ size_t numblks,
+ struct xfs_buf **bpp)
{
- struct xfs_buf *bp;
- int error;
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
- error = libxfs_buf_get_map(target, &map, 1, 0, &bp);
- if (error)
- return NULL;
- return bp;
+ return libxfs_buf_get_map(target, &map, 1, 0, bpp);
}
static inline struct xfs_buf*
xfs_agblock_t agbno;
bt_stat_level_t *lptr;
const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
+ int error;
ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab free space btree buffer, err=%d"),
+ error);
lptr->agbno = agbno;
if (lptr->modulo)
bt_stat_level_t *lptr;
xfs_extlen_t freeblks;
const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
+ int error;
ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
lptr = &btree_curs->level[i];
agbno = get_next_blockaddr(agno, i, btree_curs);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab free space btree buffer, err=%d"),
+ error);
if (i == btree_curs->num_levels - 1)
btree_curs->root = agbno;
lptr->agbno = get_next_blockaddr(agno, 0, btree_curs);
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(lptr->agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AGB_TO_DADDR(mp, agno, lptr->agbno),
- XFS_FSB_TO_BB(mp, 1));
+ XFS_FSB_TO_BB(mp, 1),
+ &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab free space btree buffer, err=%d"),
+ error);
}
}
xfs_agblock_t agbno;
bt_stat_level_t *lptr;
const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
+ int error;
level++;
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab inode btree buffer, err=%d"),
+ error);
lptr->agbno = agbno;
if (lptr->modulo)
xfs_buf_t *agi_buf;
xfs_agi_t *agi;
int i;
+ int error;
- agi_buf = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)),
- mp->m_sb.sb_sectsize/BBSIZE);
+ mp->m_sb.sb_sectsize / BBSIZE, &agi_buf);
+ if (error)
+ do_error(_("Cannot grab AG %u AGI buffer, err=%d"),
+ agno, error);
agi_buf->b_ops = &xfs_agi_buf_ops;
agi = XFS_BUF_TO_AGI(agi_buf);
memset(agi, 0, mp->m_sb.sb_sectsize);
int spmask;
uint64_t sparse;
uint16_t holemask;
+ int error;
ASSERT(btnum == XFS_BTNUM_INO || btnum == XFS_BTNUM_FINO);
lptr = &btree_curs->level[i];
agbno = get_next_blockaddr(agno, i, btree_curs);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab inode btree buffer, err=%d"),
+ error);
if (i == btree_curs->num_levels - 1)
btree_curs->root = agbno;
lptr->agbno = get_next_blockaddr(agno, 0, btree_curs);
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(lptr->agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AGB_TO_DADDR(mp, agno, lptr->agbno),
- XFS_FSB_TO_BB(mp, 1));
+ XFS_FSB_TO_BB(mp, 1),
+ &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab inode btree buffer, err=%d"),
+ error);
}
}
xfs_agblock_t agbno;
struct bt_stat_level *lptr;
const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_RMAP);
+ int error;
level++;
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab rmapbt buffer, err=%d"),
+ error);
lptr->agbno = agbno;
if (lptr->modulo)
lptr = &btree_curs->level[i];
agbno = get_next_blockaddr(agno, i, btree_curs);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab rmapbt buffer, err=%d"),
+ error);
if (i == btree_curs->num_levels - 1)
btree_curs->root = agbno;
lptr->agbno = get_next_blockaddr(agno, 0, btree_curs);
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(lptr->agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AGB_TO_DADDR(mp, agno, lptr->agbno),
- XFS_FSB_TO_BB(mp, 1));
+ XFS_FSB_TO_BB(mp, 1),
+ &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab rmapbt buffer, err=%d"),
+ error);
}
}
free_slab_cursor(&rmap_cur);
xfs_agblock_t agbno;
struct bt_stat_level *lptr;
const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_REFC);
+ int error;
level++;
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab refcountbt buffer, err=%d"),
+ error);
lptr->agbno = agbno;
if (lptr->modulo)
lptr = &btree_curs->level[i];
agbno = get_next_blockaddr(agno, i, btree_curs);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
- XFS_AGB_TO_DADDR(mp, agno, agbno),
- XFS_FSB_TO_BB(mp, 1));
+ error = -libxfs_buf_get(mp->m_dev,
+ XFS_AGB_TO_DADDR(mp, agno, agbno),
+ XFS_FSB_TO_BB(mp, 1), &lptr->buf_p);
+ if (error)
+ do_error(_("Cannot grab refcountbt buffer, err=%d"),
+ error);
if (i == btree_curs->num_levels - 1)
btree_curs->root = agbno;
lptr->agbno = get_next_blockaddr(agno, 0, btree_curs);
bt_hdr->bb_u.s.bb_rightsib = cpu_to_be32(lptr->agbno);
- lptr->buf_p = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AGB_TO_DADDR(mp, agno, lptr->agbno),
- XFS_FSB_TO_BB(mp, 1));
+ XFS_FSB_TO_BB(mp, 1),
+ &lptr->buf_p);
+ if (error)
+ do_error(
+ _("Cannot grab refcountbt buffer, err=%d"),
+ error);
}
}
free_slab_cursor(&refc_cur);
__be32 *freelist;
int error;
- agf_buf = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)),
- mp->m_sb.sb_sectsize/BBSIZE);
+ mp->m_sb.sb_sectsize / BBSIZE, &agf_buf);
+ if (error)
+ do_error(_("Cannot grab AG %u AGF buffer, err=%d"),
+ agno, error);
agf_buf->b_ops = &xfs_agf_buf_ops;
agf = XFS_BUF_TO_AGF(agf_buf);
memset(agf, 0, mp->m_sb.sb_sectsize);
platform_uuid_copy(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid);
/* initialise the AGFL, then fill it if there are blocks left over. */
- agfl_buf = libxfs_buf_get(mp->m_dev,
+ error = -libxfs_buf_get(mp->m_dev,
XFS_AG_DADDR(mp, agno, XFS_AGFL_DADDR(mp)),
- mp->m_sb.sb_sectsize/BBSIZE);
+ mp->m_sb.sb_sectsize / BBSIZE, &agfl_buf);
+ if (error)
+ do_error(_("Cannot grab AG %u AGFL buffer, err=%d"),
+ agno, error);
agfl_buf->b_ops = &xfs_agfl_buf_ops;
agfl = XFS_BUF_TO_AGFL(agfl_buf);