Skip to content

Commit fb030a7

Browse files
committed
btrfs-progs: convert: simplify insert_temp_extent_item() and insert_temp_block_group()
These functions require parameters @slot and @itemoff to record where the next item should land. But this is overkilled, as after inserting an item, the temporary extent buffer will have its header nritems and the item pointer updated. We can use that header nritems and item pointer to get where the next item should land. This removes the external counter to record @slot and @itemoff. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 3a8d004 commit fb030a7

File tree

1 file changed

+35
-37
lines changed

1 file changed

+35
-37
lines changed

convert/common.c

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -567,15 +567,16 @@ static int setup_temp_csum_tree(int fd, struct btrfs_mkfs_config *cfg,
567567
*/
568568
static int insert_temp_extent_item(int fd, struct extent_buffer *buf,
569569
struct btrfs_mkfs_config *cfg,
570-
int *slot, u32 *itemoff, u64 bytenr,
571-
u64 ref_root)
570+
u64 bytenr, u64 ref_root)
572571
{
573572
struct extent_buffer *tmp;
574573
struct btrfs_extent_item *ei;
575574
struct btrfs_extent_inline_ref *iref;
576575
struct btrfs_disk_key disk_key;
577576
struct btrfs_disk_key tree_info_key;
578577
struct btrfs_tree_block_info *info;
578+
u32 slot = btrfs_header_nritems(buf);
579+
u32 itemoff = get_item_offset(buf, cfg);
579580
int itemsize;
580581
int skinny_metadata = cfg->features.incompat_flags &
581582
BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA;
@@ -587,8 +588,8 @@ static int insert_temp_extent_item(int fd, struct extent_buffer *buf,
587588
itemsize = sizeof(*ei) + sizeof(*iref) +
588589
sizeof(struct btrfs_tree_block_info);
589590

590-
btrfs_set_header_nritems(buf, *slot + 1);
591-
*(itemoff) -= itemsize;
591+
btrfs_set_header_nritems(buf, slot + 1);
592+
itemoff -= itemsize;
592593

593594
if (skinny_metadata) {
594595
btrfs_set_disk_key_type(&disk_key, BTRFS_METADATA_ITEM_KEY);
@@ -599,11 +600,11 @@ static int insert_temp_extent_item(int fd, struct extent_buffer *buf,
599600
}
600601
btrfs_set_disk_key_objectid(&disk_key, bytenr);
601602

602-
btrfs_set_item_key(buf, &disk_key, *slot);
603-
btrfs_set_item_offset(buf, *slot, *itemoff);
604-
btrfs_set_item_size(buf, *slot, itemsize);
603+
btrfs_set_item_key(buf, &disk_key, slot);
604+
btrfs_set_item_offset(buf, slot, itemoff);
605+
btrfs_set_item_size(buf, slot, itemsize);
605606

606-
ei = btrfs_item_ptr(buf, *slot, struct btrfs_extent_item);
607+
ei = btrfs_item_ptr(buf, slot, struct btrfs_extent_item);
607608
btrfs_set_extent_refs(buf, ei, 1);
608609
btrfs_set_extent_generation(buf, ei, 1);
609610
btrfs_set_extent_flags(buf, ei, BTRFS_EXTENT_FLAG_TREE_BLOCK);
@@ -618,7 +619,6 @@ static int insert_temp_extent_item(int fd, struct extent_buffer *buf,
618619
BTRFS_TREE_BLOCK_REF_KEY);
619620
btrfs_set_extent_inline_ref_offset(buf, iref, ref_root);
620621

621-
(*slot)++;
622622
if (skinny_metadata)
623623
return 0;
624624

@@ -654,28 +654,28 @@ static int insert_temp_extent_item(int fd, struct extent_buffer *buf,
654654

655655
static void insert_temp_block_group(struct extent_buffer *buf,
656656
struct btrfs_mkfs_config *cfg,
657-
int *slot, u32 *itemoff,
658657
u64 bytenr, u64 len, u64 used, u64 flag)
659658
{
660659
struct btrfs_block_group_item bgi;
661660
struct btrfs_disk_key disk_key;
661+
u32 slot = btrfs_header_nritems(buf);
662+
u32 itemoff = get_item_offset(buf, cfg);
662663

663-
btrfs_set_header_nritems(buf, *slot + 1);
664-
(*itemoff) -= sizeof(bgi);
664+
btrfs_set_header_nritems(buf, slot + 1);
665+
itemoff -= sizeof(bgi);
665666
btrfs_set_disk_key_type(&disk_key, BTRFS_BLOCK_GROUP_ITEM_KEY);
666667
btrfs_set_disk_key_objectid(&disk_key, bytenr);
667668
btrfs_set_disk_key_offset(&disk_key, len);
668-
btrfs_set_item_key(buf, &disk_key, *slot);
669-
btrfs_set_item_offset(buf, *slot, *itemoff);
670-
btrfs_set_item_size(buf, *slot, sizeof(bgi));
669+
btrfs_set_item_key(buf, &disk_key, slot);
670+
btrfs_set_item_offset(buf, slot, itemoff);
671+
btrfs_set_item_size(buf, slot, sizeof(bgi));
671672

672673
btrfs_set_stack_block_group_flags(&bgi, flag);
673674
btrfs_set_stack_block_group_used(&bgi, used);
674675
btrfs_set_stack_block_group_chunk_objectid(&bgi,
675676
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
676-
write_extent_buffer(buf, &bgi, btrfs_item_ptr_offset(buf, *slot),
677+
write_extent_buffer(buf, &bgi, btrfs_item_ptr_offset(buf, slot),
677678
sizeof(bgi));
678-
(*slot)++;
679679
}
680680

681681
static int setup_temp_extent_tree(int fd, struct btrfs_mkfs_config *cfg,
@@ -684,8 +684,6 @@ static int setup_temp_extent_tree(int fd, struct btrfs_mkfs_config *cfg,
684684
u64 fs_bytenr, u64 csum_bytenr)
685685
{
686686
struct extent_buffer *buf = NULL;
687-
u32 itemoff = cfg->leaf_data_size;
688-
int slot = 0;
689687
int ret;
690688

691689
/*
@@ -704,39 +702,39 @@ static int setup_temp_extent_tree(int fd, struct btrfs_mkfs_config *cfg,
704702
if (ret < 0)
705703
goto out;
706704

707-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
708-
chunk_bytenr, BTRFS_CHUNK_TREE_OBJECTID);
705+
ret = insert_temp_extent_item(fd, buf, cfg, chunk_bytenr,
706+
BTRFS_CHUNK_TREE_OBJECTID);
709707
if (ret < 0)
710708
goto out;
711709

712-
insert_temp_block_group(buf, cfg, &slot, &itemoff, chunk_bytenr,
713-
BTRFS_MKFS_SYSTEM_GROUP_SIZE, cfg->nodesize,
714-
BTRFS_BLOCK_GROUP_SYSTEM);
710+
insert_temp_block_group(buf, cfg, chunk_bytenr,
711+
BTRFS_MKFS_SYSTEM_GROUP_SIZE, cfg->nodesize,
712+
BTRFS_BLOCK_GROUP_SYSTEM);
715713

716-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
717-
root_bytenr, BTRFS_ROOT_TREE_OBJECTID);
714+
ret = insert_temp_extent_item(fd, buf, cfg, root_bytenr,
715+
BTRFS_ROOT_TREE_OBJECTID);
718716
if (ret < 0)
719717
goto out;
720718

721719
/* 5 tree block used, root, extent, dev, fs and csum*/
722-
insert_temp_block_group(buf, cfg, &slot, &itemoff, root_bytenr,
723-
BTRFS_CONVERT_META_GROUP_SIZE, cfg->nodesize * 5,
724-
BTRFS_BLOCK_GROUP_METADATA);
720+
insert_temp_block_group(buf, cfg, root_bytenr,
721+
BTRFS_CONVERT_META_GROUP_SIZE, cfg->nodesize * 5,
722+
BTRFS_BLOCK_GROUP_METADATA);
725723

726-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
727-
extent_bytenr, BTRFS_EXTENT_TREE_OBJECTID);
724+
ret = insert_temp_extent_item(fd, buf, cfg, extent_bytenr,
725+
BTRFS_EXTENT_TREE_OBJECTID);
728726
if (ret < 0)
729727
goto out;
730-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
731-
dev_bytenr, BTRFS_DEV_TREE_OBJECTID);
728+
ret = insert_temp_extent_item(fd, buf, cfg, dev_bytenr,
729+
BTRFS_DEV_TREE_OBJECTID);
732730
if (ret < 0)
733731
goto out;
734-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
735-
fs_bytenr, BTRFS_FS_TREE_OBJECTID);
732+
ret = insert_temp_extent_item(fd, buf, cfg, fs_bytenr,
733+
BTRFS_FS_TREE_OBJECTID);
736734
if (ret < 0)
737735
goto out;
738-
ret = insert_temp_extent_item(fd, buf, cfg, &slot, &itemoff,
739-
csum_bytenr, BTRFS_CSUM_TREE_OBJECTID);
736+
ret = insert_temp_extent_item(fd, buf, cfg, csum_bytenr,
737+
BTRFS_CSUM_TREE_OBJECTID);
740738
if (ret < 0)
741739
goto out;
742740

0 commit comments

Comments
 (0)