@@ -213,7 +213,6 @@ struct xfs_buf *libxfs_getsb(struct xfs_mount *);
extern void libxfs_bcache_purge(void);
extern void libxfs_bcache_free(void);
extern void libxfs_bcache_flush(void);
-extern void libxfs_purgebuf(xfs_buf_t *);
extern int libxfs_bcache_overflowed(void);
/* Buffer (Raw) Interfaces */
@@ -869,18 +869,6 @@ libxfs_buf_relse(
libxfs_putbufr(bp);
}
-void
-libxfs_purgebuf(xfs_buf_t *bp)
-{
- struct xfs_bufkey key = {NULL};
-
- key.buftarg = bp->b_target;
- key.blkno = bp->b_bn;
- key.bblen = bp->b_length;
-
- cache_node_purge(libxfs_bcache, &key, (struct cache_node *)bp);
-}
-
static struct cache_node *
libxfs_balloc(cache_key_t key)
{
@@ -3396,6 +3396,21 @@ finish_superblock_setup(
}
+/* Prepare an uncached buffer, ready to write something out. */
+static inline struct xfs_buf *
+get_write_buf(
+ struct xfs_buftarg *btp,
+ xfs_daddr_t daddr,
+ int bblen)
+{
+ struct xfs_buf *bp;
+
+ bp = libxfs_buf_get_uncached(btp, bblen, 0);
+ bp->b_bn = daddr;
+ bp->b_maps[0].bm_bn = daddr;
+ return bp;
+}
+
/*
* Sanitise the data and log devices and prepare them so libxfs can mount the
* device successfully. Also check we can access the rt device if configured.
@@ -3444,11 +3459,10 @@ prepare_devices(
* the end of the device. (MD sb is ~64k from the end, take out a wider
* swath to be sure)
*/
- buf = libxfs_buf_get(mp->m_ddev_targp, (xi->dsize - whack_blks),
- whack_blks);
+ buf = get_write_buf(mp->m_ddev_targp, (xi->dsize - whack_blks),
+ whack_blks);
memset(buf->b_addr, 0, WHACK_SIZE);
libxfs_writebuf(buf, LIBXFS_WRITEBUF_FAIL_EXIT);
- libxfs_purgebuf(buf);
/*
* Now zero out the beginning of the device, to obliterate any old
@@ -3456,18 +3470,17 @@ prepare_devices(
* swap (somewhere around the page size), jfs (32k),
* ext[2,3] and reiserfs (64k) - and hopefully all else.
*/
- buf = libxfs_buf_get(mp->m_ddev_targp, 0, whack_blks);
+ buf = get_write_buf(mp->m_ddev_targp, 0, whack_blks);
memset(buf->b_addr, 0, WHACK_SIZE);
libxfs_writebuf(buf, LIBXFS_WRITEBUF_FAIL_EXIT);
- libxfs_purgebuf(buf);
/* OK, now write the superblock... */
- buf = libxfs_buf_get(mp->m_ddev_targp, XFS_SB_DADDR, XFS_FSS_TO_BB(mp, 1));
+ buf = get_write_buf(mp->m_ddev_targp, XFS_SB_DADDR,
+ XFS_FSS_TO_BB(mp, 1));
buf->b_ops = &xfs_sb_buf_ops;
memset(buf->b_addr, 0, cfg->sectorsize);
libxfs_sb_to_disk(buf->b_addr, sbp);
libxfs_writebuf(buf, LIBXFS_WRITEBUF_FAIL_EXIT);
- libxfs_purgebuf(buf);
/* ...and zero the log.... */
lsunit = sbp->sb_logsunit;
@@ -3482,12 +3495,11 @@ prepare_devices(
/* finally, check we can write the last block in the realtime area */
if (mp->m_rtdev_targp->dev && cfg->rtblocks > 0) {
- buf = libxfs_buf_get(mp->m_rtdev_targp,
- XFS_FSB_TO_BB(mp, cfg->rtblocks - 1LL),
- BTOBB(cfg->blocksize));
+ buf = get_write_buf(mp->m_rtdev_targp,
+ XFS_FSB_TO_BB(mp, cfg->rtblocks - 1LL),
+ BTOBB(cfg->blocksize));
memset(buf->b_addr, 0, cfg->blocksize);
libxfs_writebuf(buf, LIBXFS_WRITEBUF_FAIL_EXIT);
- libxfs_purgebuf(buf);
}
}