mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
xfs: move btree bulkload record initialization to ->get_record implementations
When we're performing a bulk load of a btree, move the code that actually stores the btree record in the new btree block out of the generic code and into the individual ->get_record implementations. This is preparation for being able to store multiple records with a single indirect call. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
a20ffa7d9f
commit
6dfeb0c2ec
@ -440,22 +440,19 @@ STATIC int
|
||||
xfs_btree_bload_leaf(
|
||||
struct xfs_btree_cur *cur,
|
||||
unsigned int recs_this_block,
|
||||
xfs_btree_bload_get_record_fn get_record,
|
||||
xfs_btree_bload_get_records_fn get_records,
|
||||
struct xfs_btree_block *block,
|
||||
void *priv)
|
||||
{
|
||||
unsigned int j;
|
||||
unsigned int j = 1;
|
||||
int ret;
|
||||
|
||||
/* Fill the leaf block with records. */
|
||||
for (j = 1; j <= recs_this_block; j++) {
|
||||
union xfs_btree_rec *block_rec;
|
||||
|
||||
ret = get_record(cur, priv);
|
||||
if (ret)
|
||||
while (j <= recs_this_block) {
|
||||
ret = get_records(cur, j, block, recs_this_block - j + 1, priv);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
block_rec = xfs_btree_rec_addr(cur, j, block);
|
||||
cur->bc_ops->init_rec_from_cur(cur, block_rec);
|
||||
j += ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -798,7 +795,7 @@ xfs_btree_bload(
|
||||
trace_xfs_btree_bload_block(cur, level, i, blocks, &ptr,
|
||||
nr_this_block);
|
||||
|
||||
ret = xfs_btree_bload_leaf(cur, nr_this_block, bbl->get_record,
|
||||
ret = xfs_btree_bload_leaf(cur, nr_this_block, bbl->get_records,
|
||||
block, priv);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
@ -47,7 +47,9 @@ void xfs_btree_commit_ifakeroot(struct xfs_btree_cur *cur, struct xfs_trans *tp,
|
||||
int whichfork, const struct xfs_btree_ops *ops);
|
||||
|
||||
/* Bulk loading of staged btrees. */
|
||||
typedef int (*xfs_btree_bload_get_record_fn)(struct xfs_btree_cur *cur, void *priv);
|
||||
typedef int (*xfs_btree_bload_get_records_fn)(struct xfs_btree_cur *cur,
|
||||
unsigned int idx, struct xfs_btree_block *block,
|
||||
unsigned int nr_wanted, void *priv);
|
||||
typedef int (*xfs_btree_bload_claim_block_fn)(struct xfs_btree_cur *cur,
|
||||
union xfs_btree_ptr *ptr, void *priv);
|
||||
typedef size_t (*xfs_btree_bload_iroot_size_fn)(struct xfs_btree_cur *cur,
|
||||
@ -55,11 +57,14 @@ typedef size_t (*xfs_btree_bload_iroot_size_fn)(struct xfs_btree_cur *cur,
|
||||
|
||||
struct xfs_btree_bload {
|
||||
/*
|
||||
* This function will be called nr_records times to load records into
|
||||
* the btree. The function does this by setting the cursor's bc_rec
|
||||
* field in in-core format. Records must be returned in sort order.
|
||||
* This function will be called to load @nr_wanted records into the
|
||||
* btree. The implementation does this by setting the cursor's bc_rec
|
||||
* field in in-core format and using init_rec_from_cur to set the
|
||||
* records in the btree block. Records must be returned in sort order.
|
||||
* The function must return the number of records loaded or the usual
|
||||
* negative errno.
|
||||
*/
|
||||
xfs_btree_bload_get_record_fn get_record;
|
||||
xfs_btree_bload_get_records_fn get_records;
|
||||
|
||||
/*
|
||||
* This function will be called nr_blocks times to obtain a pointer
|
||||
|
Loading…
x
Reference in New Issue
Block a user