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

Commit e69bcee3 authored by Qu Wenruo's avatar Qu Wenruo Committed by Chris Mason
Browse files

btrfs: qgroup: Cleanup the old ref_node-oriented mechanism.



Goodbye, the old mechanisim.

Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent 442244c9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1736,7 +1736,7 @@ struct btrfs_fs_info {
	/* list of dirty qgroups to be written at next commit */
	struct list_head dirty_qgroups;

	/* used by btrfs_qgroup_record_ref for an efficient tree traversal */
	/* used by qgroup for an efficient tree traversal */
	u64 qgroup_seq;

	/* qgroup rescan items */
+0 −5
Original line number Diff line number Diff line
@@ -1981,7 +1981,6 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
	u64 refs;
	int ret;
	int no_quota = node->no_quota;
	enum btrfs_qgroup_operation_type type = BTRFS_QGROUP_OPER_ADD_EXCL;

	path = btrfs_alloc_path();
	if (!path)
@@ -2009,8 +2008,6 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
	item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
	refs = btrfs_extent_refs(leaf, item);
	if (refs)
		type = BTRFS_QGROUP_OPER_ADD_SHARED;
	btrfs_set_extent_refs(leaf, item, refs + refs_to_add);
	if (extent_op)
		__run_delayed_extent_op(extent_op, leaf, item);
@@ -6112,7 +6109,6 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
	u64 bytenr = node->bytenr;
	u64 num_bytes = node->num_bytes;
	int last_ref = 0;
	enum btrfs_qgroup_operation_type type = BTRFS_QGROUP_OPER_SUB_EXCL;
	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
						 SKINNY_METADATA);

@@ -6293,7 +6289,6 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
	refs -= refs_to_drop;

	if (refs > 0) {
		type = BTRFS_QGROUP_OPER_SUB_SHARED;
		if (extent_op)
			__run_delayed_extent_op(extent_op, leaf, ei);
		/*
+2 −862

File changed.

Preview size limit exceeded, changes collapsed.

+0 −49
Original line number Diff line number Diff line
@@ -22,45 +22,6 @@
#include "ulist.h"
#include "delayed-ref.h"

/*
 * A description of the operations, all of these operations only happen when we
 * are adding the 1st reference for that subvolume in the case of adding space
 * or on the last reference delete in the case of subtraction.  The only
 * exception is the last one, which is added for confusion.
 *
 * BTRFS_QGROUP_OPER_ADD_EXCL: adding bytes where this subvolume is the only
 * one pointing at the bytes we are adding.  This is called on the first
 * allocation.
 *
 * BTRFS_QGROUP_OPER_ADD_SHARED: adding bytes where this bytenr is going to be
 * shared between subvols.  This is called on the creation of a ref that already
 * has refs from a different subvolume, so basically reflink.
 *
 * BTRFS_QGROUP_OPER_SUB_EXCL: removing bytes where this subvolume is the only
 * one referencing the range.
 *
 * BTRFS_QGROUP_OPER_SUB_SHARED: removing bytes where this subvolume shares with
 * refs with other subvolumes.
 */
enum btrfs_qgroup_operation_type {
	BTRFS_QGROUP_OPER_ADD_EXCL,
	BTRFS_QGROUP_OPER_ADD_SHARED,
	BTRFS_QGROUP_OPER_SUB_EXCL,
	BTRFS_QGROUP_OPER_SUB_SHARED,
	BTRFS_QGROUP_OPER_SUB_SUBTREE,
};

struct btrfs_qgroup_operation {
	u64 ref_root;
	u64 bytenr;
	u64 num_bytes;
	u64 seq;
	enum btrfs_qgroup_operation_type type;
	struct seq_list elem;
	struct rb_node n;
	struct list_head list;
};

/*
 * Record a dirty extent, and info qgroup to update quota on it
 * TODO: Use kmem cache to alloc it.
@@ -93,11 +54,6 @@ int btrfs_limit_qgroup(struct btrfs_trans_handle *trans,
int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info);
void btrfs_free_qgroup_config(struct btrfs_fs_info *fs_info);
struct btrfs_delayed_extent_op;
int btrfs_qgroup_record_ref(struct btrfs_trans_handle *trans,
			    struct btrfs_fs_info *fs_info, u64 ref_root,
			    u64 bytenr, u64 num_bytes,
			    enum btrfs_qgroup_operation_type type,
			    int mod_seq);
int btrfs_qgroup_prepare_account_extents(struct btrfs_trans_handle *trans,
					 struct btrfs_fs_info *fs_info);
struct btrfs_qgroup_extent_record
@@ -110,11 +66,6 @@ btrfs_qgroup_account_extent(struct btrfs_trans_handle *trans,
			    struct ulist *old_roots, struct ulist *new_roots);
int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans,
				 struct btrfs_fs_info *fs_info);
int btrfs_delayed_qgroup_accounting(struct btrfs_trans_handle *trans,
				    struct btrfs_fs_info *fs_info);
void btrfs_remove_qgroup_operation(struct btrfs_trans_handle *trans,
				   struct btrfs_fs_info *fs_info,
				   struct btrfs_qgroup_operation *oper);
int btrfs_run_qgroups(struct btrfs_trans_handle *trans,
		      struct btrfs_fs_info *fs_info);
int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
+0 −55
Original line number Diff line number Diff line
@@ -1117,61 +1117,6 @@ DEFINE_EVENT(btrfs__workqueue_done, btrfs_workqueue_destroy,
	TP_ARGS(wq)
);

#define show_oper_type(type)						\
	__print_symbolic(type,						\
		{ BTRFS_QGROUP_OPER_ADD_EXCL, 	"OPER_ADD_EXCL" },	\
		{ BTRFS_QGROUP_OPER_ADD_SHARED, "OPER_ADD_SHARED" },	\
		{ BTRFS_QGROUP_OPER_SUB_EXCL, 	"OPER_SUB_EXCL" },	\
		{ BTRFS_QGROUP_OPER_SUB_SHARED,	"OPER_SUB_SHARED" })

DECLARE_EVENT_CLASS(btrfs_qgroup_oper,

	TP_PROTO(struct btrfs_qgroup_operation *oper),

	TP_ARGS(oper),

	TP_STRUCT__entry(
		__field(	u64,  ref_root		)
		__field(	u64,  bytenr		)
		__field(	u64,  num_bytes		)
		__field(	u64,  seq		)
		__field(	int,  type		)
		__field(	u64,  elem_seq		)
	),

	TP_fast_assign(
		__entry->ref_root	= oper->ref_root;
		__entry->bytenr		= oper->bytenr,
		__entry->num_bytes	= oper->num_bytes;
		__entry->seq 		= oper->seq;
		__entry->type		= oper->type;
		__entry->elem_seq	= oper->elem.seq;
	),

	TP_printk("ref_root = %llu, bytenr = %llu, num_bytes = %llu, "
		  "seq = %llu, elem.seq = %llu, type = %s",
		  (unsigned long long)__entry->ref_root,
		  (unsigned long long)__entry->bytenr,
		  (unsigned long long)__entry->num_bytes,
		  (unsigned long long)__entry->seq,
		  (unsigned long long)__entry->elem_seq,
		  show_oper_type(__entry->type))
);

DEFINE_EVENT(btrfs_qgroup_oper, btrfs_qgroup_account,

	TP_PROTO(struct btrfs_qgroup_operation *oper),

	TP_ARGS(oper)
);

DEFINE_EVENT(btrfs_qgroup_oper, btrfs_qgroup_record_ref,

	TP_PROTO(struct btrfs_qgroup_operation *oper),

	TP_ARGS(oper)
);

#endif /* _TRACE_BTRFS_H */

/* This part must be outside protection */