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

Commit f395694c authored by Jan Schmidt's avatar Jan Schmidt
Browse files

Btrfs: fix tree mod log del_ptr



Logging for del_ptr when we're not deleting the last pointer was wrong. This
fixes both, duplicate log entries and log sequence.

Signed-off-by: default avatarJan Schmidt <list.btrfs@jan-o-sch.net>
parent e9b7fd4d
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -540,9 +540,8 @@ tree_mod_log_insert_move(struct btrfs_fs_info *fs_info,
	int ret;
	int i;

	ret = tree_mod_alloc(fs_info, flags, &tm);
	if (ret <= 0)
		return ret;
	if (tree_mod_dont_log(fs_info, eb))
		return 0;

	for (i = 0; i + dst_slot < src_slot && i < nr_items; i++) {
		ret = tree_mod_log_insert_key(fs_info, eb, i + dst_slot,
@@ -550,6 +549,10 @@ tree_mod_log_insert_move(struct btrfs_fs_info *fs_info,
		BUG_ON(ret < 0);
	}

	ret = tree_mod_alloc(fs_info, flags, &tm);
	if (ret <= 0)
		return ret;

	tm->index = eb->start >> PAGE_CACHE_SHIFT;
	tm->slot = src_slot;
	tm->move.dst_slot = dst_slot;
@@ -4548,9 +4551,7 @@ static void del_ptr(struct btrfs_trans_handle *trans, struct btrfs_root *root,
			      btrfs_node_key_ptr_offset(slot + 1),
			      sizeof(struct btrfs_key_ptr) *
			      (nritems - slot - 1));
	}

	if (tree_mod_log && level) {
	} else if (tree_mod_log && level) {
		ret = tree_mod_log_insert_key(root->fs_info, parent, slot,
					      MOD_LOG_KEY_REMOVE);
		BUG_ON(ret < 0);