mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	btrfs: qgroup: use qgroup_iterator in qgroup_convert_meta()
With the new qgroup_iterator_add() and qgroup_iterator_clean(), we can get rid of the ulist and its GFP_ATOMIC memory allocation. Reviewed-by: Boris Burkov <boris@bur.io> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									25152cb7a8
								
							
						
					
					
						commit
						0913445082
					
				
					 1 changed files with 10 additions and 22 deletions
				
			
		| 
						 | 
					@ -4086,9 +4086,7 @@ static void qgroup_convert_meta(struct btrfs_fs_info *fs_info, u64 ref_root,
 | 
				
			||||||
				int num_bytes)
 | 
									int num_bytes)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_qgroup *qgroup;
 | 
						struct btrfs_qgroup *qgroup;
 | 
				
			||||||
	struct ulist_node *unode;
 | 
						LIST_HEAD(qgroup_list);
 | 
				
			||||||
	struct ulist_iterator uiter;
 | 
					 | 
				
			||||||
	int ret = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (num_bytes == 0)
 | 
						if (num_bytes == 0)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -4099,31 +4097,21 @@ static void qgroup_convert_meta(struct btrfs_fs_info *fs_info, u64 ref_root,
 | 
				
			||||||
	qgroup = find_qgroup_rb(fs_info, ref_root);
 | 
						qgroup = find_qgroup_rb(fs_info, ref_root);
 | 
				
			||||||
	if (!qgroup)
 | 
						if (!qgroup)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	ulist_reinit(fs_info->qgroup_ulist);
 | 
					
 | 
				
			||||||
	ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid,
 | 
						qgroup_iterator_add(&qgroup_list, qgroup);
 | 
				
			||||||
		       qgroup_to_aux(qgroup), GFP_ATOMIC);
 | 
						list_for_each_entry(qgroup, &qgroup_list, iterator) {
 | 
				
			||||||
	if (ret < 0)
 | 
					 | 
				
			||||||
		goto out;
 | 
					 | 
				
			||||||
	ULIST_ITER_INIT(&uiter);
 | 
					 | 
				
			||||||
	while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) {
 | 
					 | 
				
			||||||
		struct btrfs_qgroup *qg;
 | 
					 | 
				
			||||||
		struct btrfs_qgroup_list *glist;
 | 
							struct btrfs_qgroup_list *glist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		qg = unode_aux_to_qgroup(unode);
 | 
							qgroup_rsv_release(fs_info, qgroup, num_bytes,
 | 
				
			||||||
 | 
					 | 
				
			||||||
		qgroup_rsv_release(fs_info, qg, num_bytes,
 | 
					 | 
				
			||||||
				BTRFS_QGROUP_RSV_META_PREALLOC);
 | 
									BTRFS_QGROUP_RSV_META_PREALLOC);
 | 
				
			||||||
		qgroup_rsv_add(fs_info, qg, num_bytes,
 | 
							qgroup_rsv_add(fs_info, qgroup, num_bytes,
 | 
				
			||||||
				BTRFS_QGROUP_RSV_META_PERTRANS);
 | 
									BTRFS_QGROUP_RSV_META_PERTRANS);
 | 
				
			||||||
		list_for_each_entry(glist, &qg->groups, next_group) {
 | 
					
 | 
				
			||||||
			ret = ulist_add(fs_info->qgroup_ulist,
 | 
							list_for_each_entry(glist, &qgroup->groups, next_group)
 | 
				
			||||||
					glist->group->qgroupid,
 | 
								qgroup_iterator_add(&qgroup_list, glist->group);
 | 
				
			||||||
					qgroup_to_aux(glist->group), GFP_ATOMIC);
 | 
					 | 
				
			||||||
			if (ret < 0)
 | 
					 | 
				
			||||||
				goto out;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
 | 
						qgroup_iterator_clean(&qgroup_list);
 | 
				
			||||||
	spin_unlock(&fs_info->qgroup_lock);
 | 
						spin_unlock(&fs_info->qgroup_lock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue